Skip to content

Commit

Permalink
Make the number of TCP connections configurable (#819)
Browse files Browse the repository at this point in the history
  • Loading branch information
tomerf authored Sep 22, 2020
1 parent b9269c2 commit c3e0bbf
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 6 deletions.
13 changes: 7 additions & 6 deletions output_tcp.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,11 @@ type TCPOutputConfig struct {
Secure bool `json:"output-tcp-secure"`
Sticky bool `json:"output-tcp-sticky"`
SkipVerify bool `json:"output-tcp-skip-verify"`
Workers int `json:"output-tcp-workers"`
}

// NewTCPOutput constructor for TCPOutput
// Initialize 10 workers which hold keep-alive connection
// Initialize X workers which hold keep-alive connection
func NewTCPOutput(address string, config *TCPOutputConfig) io.Writer {
o := new(TCPOutput)

Expand All @@ -41,17 +42,17 @@ func NewTCPOutput(address string, config *TCPOutputConfig) io.Writer {
}

if o.config.Sticky {
// create 10 buffers and send the buffer index to the worker
o.buf = make([]chan []byte, 10)
for i := 0; i < 10; i++ {
// create X buffers and send the buffer index to the worker
o.buf = make([]chan []byte, o.config.Workers)
for i := 0; i < o.config.Workers; i++ {
o.buf[i] = make(chan []byte, 100)
go o.worker(i)
}
} else {
// create 1 buffer and send its index (0) to all workers
o.buf = make([]chan []byte, 1)
o.buf[0] = make(chan []byte, 1000)
for i := 0; i < 10; i++ {
for i := 0; i < o.config.Workers; i++ {
go o.worker(0)
}
}
Expand Down Expand Up @@ -101,7 +102,7 @@ func (o *TCPOutput) getBufferIndex(data []byte) int {

hasher := fnv.New32a()
hasher.Write(payloadMeta(data)[1])
return int(hasher.Sum32()) % 10
return int(hasher.Sum32()) % o.config.Workers
}

func (o *TCPOutput) Write(data []byte) (n int, err error) {
Expand Down
1 change: 1 addition & 0 deletions settings.go
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,7 @@ func init() {
flag.BoolVar(&Settings.OutputTCPConfig.Secure, "output-tcp-secure", false, "Use TLS secure connection. --input-file on another end should have TLS turned on as well.")
flag.BoolVar(&Settings.OutputTCPConfig.SkipVerify, "output-tcp-skip-verify", false, "Don't verify hostname on TLS secure connection.")
flag.BoolVar(&Settings.OutputTCPConfig.Sticky, "output-tcp-sticky", false, "Use Sticky connection. Request/Response with same ID will be sent to the same connection.")
flag.IntVar(&Settings.OutputTCPConfig.Workers, "output-tcp-workers", 10, "Number of parallel tcp connections, default is 10")
flag.BoolVar(&Settings.OutputTCPStats, "output-tcp-stats", false, "Report TCP output queue stats to console every 5 seconds.")

flag.Var(&Settings.InputFile, "input-file", "Read requests from file: \n\tgor --input-file ./requests.gor --output-http staging.com")
Expand Down

0 comments on commit c3e0bbf

Please sign in to comment.