From 7dc1d366096592d8c1eccb99400a27fef000915c Mon Sep 17 00:00:00 2001
From: androlo <andreas@erisindustries.com>
Date: Mon, 22 Jun 2015 23:01:19 +0200
Subject: [PATCH] read/write buffer size config option for websockets

---
 README.md                         | 12 ++++++++++--
 erisdb/erisdbss/server_manager.go |  7 ++++++-
 server/config.go                  |  6 +++++-
 server/server.go                  |  1 -
 server/websocket.go               |  5 ++---
 test/server/ws_burst_test.go      |  2 +-
 test/web_api/shared.go            |  2 +-
 7 files changed, 25 insertions(+), 10 deletions(-)

diff --git a/README.md b/README.md
index 8f815a36..b9ccd650 100644
--- a/README.md
+++ b/README.md
@@ -36,7 +36,9 @@ Tendermint officially supports only 64 bit Ubuntu.
 
 #### Docker
 
-`$ ./docker_build.sh` to build the image. After that, use ` $ ./docker_run.sh` to run with the default settings.
+Work in progress.
+
+`$ ./docker_build.sh` to build the image. After that, use ` $ ./docker_run.sh` to run with the default workdir (/home/.eris/.eris-db).
 
 ### Usage
 
@@ -73,6 +75,8 @@ The server configuration file looks like this:
 [web_socket]
   websocket_endpoint= <string>
   max_websocket_sessions= <number>
+  read_buffer_size = <number>
+  write_buffer_size = <number>
 [logging]
   console_log_level= <string>
   file_log_level= <string>
@@ -106,6 +110,8 @@ Details about the other fields and how this is implemented can be found [here](h
 
 - `websocket_endpoint` is the name of the endpoint that is used to establish a websocket connection.
 - `max_websocket_connections` is the maximum number of websocket connections that is allowed at the same time.
+- `read_buffer_size` is the size of the read buffer for each socket in bytes.
+- `read_buffer_size` is the size of the write buffer for each socket in bytes.
 
 ##### logging
 
@@ -140,8 +146,10 @@ json_rpc_endpoint="/rpc"
 [web_socket]
 websocket_endpoint="/socketrpc"
 max_websocket_sessions=50
+read_buffer_size = 2048
+write_buffer_size = 2048
 [logging]
-console_log_level="debug"
+console_log_level="info"
 file_log_level="warn"
 log_file=""
 ```
diff --git a/erisdb/erisdbss/server_manager.go b/erisdb/erisdbss/server_manager.go
index f6f95862..6ca1c372 100644
--- a/erisdb/erisdbss/server_manager.go
+++ b/erisdb/erisdbss/server_manager.go
@@ -76,7 +76,12 @@ func (this *CmdProcess) Start(doneChan chan<- error) {
 }
 
 func (this *CmdProcess) Kill() error {
-	return this.cmd.Process.Kill()
+	err := this.cmd.Process.Kill()
+	if err != nil {
+		return err
+	}
+	_ , err2 := this.cmd.Process.Wait()
+	return err2
 }
 
 // A serve task. This wraps a running process. It was designed to run 'erisdb' processes.
diff --git a/server/config.go b/server/config.go
index d50d7dd9..919d636c 100644
--- a/server/config.go
+++ b/server/config.go
@@ -45,6 +45,8 @@ type (
 	WebSocket struct {
 		WebSocketEndpoint    string `toml:"websocket_endpoint"`
 		MaxWebSocketSessions uint   `toml:"max_websocket_sessions"`
+		ReadBufferSize       uint   `toml:"read_buffer_size"`
+		WriteBufferSize      uint   `toml:"write_buffer_size"`
 	}
 
 	Logging struct {
@@ -59,7 +61,7 @@ func DefaultServerConfig() *ServerConfig {
 	kp := ""
 	return &ServerConfig{
 		Bind: Bind{
-			Address: "",
+			Address: "localhost",
 			Port:    1337,
 		},
 		TLS: TLS{TLS: false,
@@ -71,6 +73,8 @@ func DefaultServerConfig() *ServerConfig {
 		WebSocket: WebSocket{
 			WebSocketEndpoint:    "/socketrpc",
 			MaxWebSocketSessions: 50,
+			ReadBufferSize: 2048,
+			WriteBufferSize: 2048,
 		},
 		Logging: Logging{
 			ConsoleLogLevel: "info",
diff --git a/server/server.go b/server/server.go
index e3e334c6..2d90023f 100644
--- a/server/server.go
+++ b/server/server.go
@@ -69,7 +69,6 @@ func (this *ServeProcess) Start() error {
 	}
 
 	listenAddress := address + ":" + fmt.Sprintf("%d", port)
-
 	srv := &graceful.Server{
 		Server: &http.Server{
 			Handler: router,
diff --git a/server/websocket.go b/server/websocket.go
index 3925a549..08ac2ddf 100644
--- a/server/websocket.go
+++ b/server/websocket.go
@@ -66,12 +66,11 @@ func (this *WebSocketServer) Start(config *ServerConfig, router *gin.Engine) {
 	this.config = config
 
 	this.upgrader = websocket.Upgrader{
-		ReadBufferSize: 1024,
+		ReadBufferSize: int(config.WebSocket.ReadBufferSize),
 		// TODO Will this be enough for massive "get blockchain" requests?
-		WriteBufferSize: 1024,
+		WriteBufferSize: int(config.WebSocket.WriteBufferSize),
 	}
 	this.upgrader.CheckOrigin = func(r *http.Request) bool { return true }
-
 	router.GET(config.WebSocket.WebSocketEndpoint, this.handleFunc)
 	this.running = true
 }
diff --git a/test/server/ws_burst_test.go b/test/server/ws_burst_test.go
index 70917298..a5104c3b 100644
--- a/test/server/ws_burst_test.go
+++ b/test/server/ws_burst_test.go
@@ -104,6 +104,6 @@ func wsClient(doneChan chan bool, errChan chan error) {
 	}
 
 	client.Close()
-	time.Sleep(time.Millisecond * 500)
+	time.Sleep(time.Millisecond * 100)
 	doneChan <- true
 }
diff --git a/test/web_api/shared.go b/test/web_api/shared.go
index d2571aa3..4f08a3c4 100644
--- a/test/web_api/shared.go
+++ b/test/web_api/shared.go
@@ -12,7 +12,7 @@ const SERVER_DURATION = 10
 func init() {
 	runtime.GOMAXPROCS(runtime.NumCPU())
 	log15.Root().SetHandler(log15.LvlFilterHandler(
-		log15.LvlDebug,
+		log15.LvlInfo,
 		log15.StreamHandler(os.Stdout, log15.TerminalFormat()),
 	))
 	gin.SetMode(gin.ReleaseMode)
-- 
GitLab