credativ team mailing list archive
-
credativ team
-
Mailing list archive
-
Message #05892
[Merge] lp:~credativ/ocb-server/7.0-no-workers-no-listen into lp:ocb-server
mistotebe has proposed merging lp:~credativ/ocb-server/7.0-no-workers-no-listen into lp:ocb-server.
Requested reviews:
OpenERP Community Backports Team (ocb)
For more details, see:
https://code.launchpad.net/~credativ/ocb-server/7.0-no-workers-no-listen/+merge/217744
Do not bind sockets when starting with no workers
If wanting to run the OpenERP server split out to a cron worker and a main server, the cron worker daemon must not try to bind the server socket.
This commit lets an explicit --workers=0 mean that we still want to run multiprocess, but are not going to listen anywhere.
Rationale for raising directly against OCB:
The "openerp-server" script has been removed in favor of the "oe" script not long after 7 has been released, therefore I presume OpenERP would not be interested in integrating this into 7.0 maintenance.
--
https://code.launchpad.net/~credativ/ocb-server/7.0-no-workers-no-listen/+merge/217744
Your team credativ is subscribed to branch lp:~credativ/ocb-server/7.0-no-workers-no-listen.
=== modified file 'openerp/cli/server.py'
--- openerp/cli/server.py 2014-03-19 10:48:47 +0000
+++ openerp/cli/server.py 2014-04-30 11:22:26 +0000
@@ -252,7 +252,7 @@
setup_pid_file()
# Some module register themselves when they are loaded so we need the
# services to be running before loading any registry.
- if config['workers']:
+ if config['workers'] is not None:
openerp.service.start_services_workers()
else:
openerp.service.start_services()
=== modified file 'openerp/service/workers.py'
--- openerp/service/workers.py 2014-04-10 09:36:29 +0000
+++ openerp/service/workers.py 2014-04-30 11:22:26 +0000
@@ -35,7 +35,7 @@
def __init__(self, app):
# config
self.address = (config['xmlrpc_interface'] or '0.0.0.0', config['xmlrpc_port'])
- self.population = config['workers']
+ self.population = config['workers'] or 0
self.timeout = config['limit_time_real']
self.limit_request = config['limit_request']
# working vars
@@ -48,6 +48,7 @@
self.workers = {}
self.generation = 0
self.queue = []
+ self.socket = None
def pipe_new(self):
pipe = os.pipe()
@@ -172,12 +173,13 @@
signal.signal(signal.SIGINT, self.signal_handler)
signal.signal(signal.SIGTERM, self.signal_handler)
signal.signal(signal.SIGCHLD, self.signal_handler)
- # listen to socket
- self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
- self.socket.setblocking(0)
- self.socket.bind(self.address)
- self.socket.listen(8*self.population)
+ if self.population:
+ # listen to socket
+ self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
+ self.socket.setblocking(0)
+ self.socket.bind(self.address)
+ self.socket.listen(8*self.population)
def stop(self, graceful=True):
if graceful:
@@ -192,7 +194,8 @@
_logger.info("Stopping forcefully")
for pid in self.workers.keys():
self.worker_kill(pid, signal.SIGTERM)
- self.socket.close()
+ if self.socket:
+ self.socket.close()
openerp.cli.server.quit_signals_received = 1
def run(self):
@@ -285,11 +288,12 @@
_logger.info("Worker %s (%s) alive", self.__class__.__name__, self.pid)
# Reseed the random number generator
random.seed()
- # Prevent fd inherientence close_on_exec
- flags = fcntl.fcntl(self.multi.socket, fcntl.F_GETFD) | fcntl.FD_CLOEXEC
- fcntl.fcntl(self.multi.socket, fcntl.F_SETFD, flags)
- # reset blocking status
- self.multi.socket.setblocking(0)
+ if self.multi.socket:
+ # Prevent fd inherientence close_on_exec
+ flags = fcntl.fcntl(self.multi.socket, fcntl.F_GETFD) | fcntl.FD_CLOEXEC
+ fcntl.fcntl(self.multi.socket, fcntl.F_SETFD, flags)
+ # reset blocking status
+ self.multi.socket.setblocking(0)
signal.signal(signal.SIGINT, self.signal_handler)
signal.signal(signal.SIGTERM, signal.SIG_DFL)
signal.signal(signal.SIGCHLD, signal.SIG_DFL)
=== modified file 'openerp/tools/config.py'
--- openerp/tools/config.py 2013-11-25 10:38:42 +0000
+++ openerp/tools/config.py 2014-04-30 11:22:26 +0000
@@ -279,7 +279,7 @@
group = optparse.OptionGroup(parser, "Multiprocessing options")
# TODO sensible default for the three following limits.
- group.add_option("--workers", dest="workers", my_default=0,
+ group.add_option("--workers", dest="workers", my_default=None,
help="Specify the number of workers, 0 disable prefork mode.",
type="int")
group.add_option("--limit-memory-soft", dest="limit_memory_soft", my_default=640 * 1024 * 1024,
Follow ups