Address in use warning gevent for zato 3.0.0rc1

Hi,

I started experimenting with Zato 3.0.0rc1.
I installed it using the install.sh script and created a standard quickstart cluster with two servers.
I get a warning in the logs for server2 and I am wondering if I can avoid this warning in some way:

2017-02-23 15:11:49,931 - WARNING - 31094:MainThread - zato.server.connection.connector:140 - Traceback (most recent call last):
File “/opt/APPS/servicebus/tst/zato-3/code/zato-server/src/zato/server/connection/connector/init.py”, line 136, in start
spawn_greenlet(self._spawn_start)
File “/opt/APPS/servicebus/tst/.buildout/eggs/gevent-1.1.2-py2.7-linux-x86_64.egg/gevent/greenlet.py”, line 534, in run
result = self._run(*self.args, **self.kwargs)
File “/opt/APPS/servicebus/tst/zato-3/code/zato-server/src/zato/server/connection/connector/init.py”, line 126, in _spawn_start
spawn(self._start).get()
File “/opt/APPS/servicebus/tst/.buildout/eggs/gevent-1.1.2-py2.7-linux-x86_64.egg/gevent/greenlet.py”, line 480, in get
self._raise_exception()
File “/opt/APPS/servicebus/tst/.buildout/eggs/gevent-1.1.2-py2.7-linux-x86_64.egg/gevent/greenlet.py”, line 171, in _raise_exception
reraise(*self.exc_info)
File “/opt/APPS/servicebus/tst/.buildout/eggs/gevent-1.1.2-py2.7-linux-x86_64.egg/gevent/greenlet.py”, line 534, in run
result = self._run(*self.args, **self.kwargs)
File “/opt/APPS/servicebus/tst/zato-3/code/zato-server/src/zato/server/connection/web_socket/init.py”, line 507, in _start
self.server.serve_forever()
File “/opt/APPS/servicebus/tst/.buildout/eggs/gevent-1.1.2-py2.7-linux-x86_64.egg/gevent/baseserver.py”, line 347, in serve_forever
self.start()
File “/opt/APPS/servicebus/tst/.buildout/eggs/gevent-1.1.2-py2.7-linux-x86_64.egg/gevent/baseserver.py”, line 291, in start
self.init_socket()
File “/opt/APPS/servicebus/tst/.buildout/eggs/gevent-1.1.2-py2.7-linux-x86_64.egg/gevent/pywsgi.py”, line 1222, in init_socket
StreamServer.init_socket(self)
File “/opt/APPS/servicebus/tst/.buildout/eggs/gevent-1.1.2-py2.7-linux-x86_64.egg/gevent/server.py”, line 80, in init_socket
self.socket = self.get_listener(self.address, self.backlog, self.family)
File “/opt/APPS/servicebus/tst/.buildout/eggs/gevent-1.1.2-py2.7-linux-x86_64.egg/gevent/server.py”, line 91, in get_listener
return _tcp_listener(address, backlog=backlog, reuse_addr=self.reuse_addr, family=family)
File “/opt/APPS/servicebus/tst/.buildout/eggs/gevent-1.1.2-py2.7-linux-x86_64.egg/gevent/server.py”, line 177, in _tcp_listener
sock.bind(address)
File “”, line 1, in bind
error: [Errno 98] Address already in use: (u’0.0.0.0’, 48901)

Regards, Jan

PS. Some of the patches could not be applied during the buildout process:

Thanks @jjmurre,

this is caused because you are (rightfully) starting two servers and both of them attempt to bind to the same TCP port of 48901. This port belongs to an upcoming feature, namely, a live message browser. It will be fully available in late March or April.

Live message browser will display a new screen in web-admin that will let you subscribe to messages passing through services and let you browse their requests/responses as they are produced, i.e. live.

To achieve that end, web-admin will open direct WebSocket connections to servers and 48901 is the default port that will be used for it.

However, as it stands today this will only work with one server in a given OS. This means that a workaround for today is not to start 2 or more servers in the same system. Ultimately, this workaround won’t be needed.

However, if you’d still like to take advantage of multiple CPUs even with one server, you can simply start one server with server.conf’s main.gunicorn_servers set to 2, 4 or more, depending on how many CPUs you have and that one server will make use of them without a need to start another server.

Apologies - I meant to say that ‘the browser will open a direct WebSocket connection’ rather than web-admin.