From ec36a494fe108e4cd00bc8d6dbd140c210d8549d Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Thu, 6 Mar 2014 12:52:14 +0100 Subject: [PATCH] [FIX] do not expose posix only config options on windows bzr revid: chs@openerp.com-20140306115214-8wrfivy4runpzoar --- openerp/service/server.py | 7 ++++- openerp/tools/config.py | 62 +++++++++++++++++++++++---------------- 2 files changed, 43 insertions(+), 26 deletions(-) diff --git a/openerp/service/server.py b/openerp/service/server.py index 3d02215bbe6..974068c2b9c 100644 --- a/openerp/service/server.py +++ b/openerp/service/server.py @@ -9,7 +9,10 @@ import os.path import platform import psutil import random -import resource +if os.name == 'posix': + import resource +else: + resource = None import select import signal import socket @@ -638,6 +641,8 @@ class Worker(object): raise def process_limit(self): + if resource is None: + return # If our parent changed sucide if self.ppid != os.getppid(): _logger.info("Worker (%s) Parent changed", self.pid) diff --git a/openerp/tools/config.py b/openerp/tools/config.py index b6d239d75a8..255a065aa4f 100644 --- a/openerp/tools/config.py +++ b/openerp/tools/config.py @@ -252,7 +252,8 @@ class configmanager(object): # Advanced options group = optparse.OptionGroup(parser, "Advanced options") - group.add_option('--auto-reload', dest='auto_reload', action='store_true', my_default=False, help='enable auto reload') + if os.name == 'posix': + group.add_option('--auto-reload', dest='auto_reload', action='store_true', my_default=False, help='enable auto reload') group.add_option('--debug', dest='debug_mode', action='store_true', my_default=False, help='enable debug mode') group.add_option("--stop-after-init", action="store_true", dest="stop_after_init", my_default=False, help="stop the server after its initialization") @@ -274,27 +275,28 @@ class configmanager(object): help="Use the unaccent function provided by the database when available.") parser.add_option_group(group) - group = optparse.OptionGroup(parser, "Multiprocessing options") - # TODO sensible default for the three following limits. - group.add_option("--workers", dest="workers", my_default=0, - help="Specify the number of workers, 0 disable prefork mode.", - type="int") - group.add_option("--limit-memory-soft", dest="limit_memory_soft", my_default=2048 * 1024 * 1024, - help="Maximum allowed virtual memory per worker, when reached the worker be reset after the current request (default 671088640 aka 640MB).", - type="int") - group.add_option("--limit-memory-hard", dest="limit_memory_hard", my_default=2560 * 1024 * 1024, - help="Maximum allowed virtual memory per worker, when reached, any memory allocation will fail (default 805306368 aka 768MB).", - type="int") - group.add_option("--limit-time-cpu", dest="limit_time_cpu", my_default=60, - help="Maximum allowed CPU time per request (default 60).", - type="int") - group.add_option("--limit-time-real", dest="limit_time_real", my_default=120, - help="Maximum allowed Real time per request (default 120).", - type="int") - group.add_option("--limit-request", dest="limit_request", my_default=8192, - help="Maximum number of request to be processed per worker (default 8192).", - type="int") - parser.add_option_group(group) + if os.name == 'posix': + group = optparse.OptionGroup(parser, "Multiprocessing options") + # TODO sensible default for the three following limits. + group.add_option("--workers", dest="workers", my_default=0, + help="Specify the number of workers, 0 disable prefork mode.", + type="int") + group.add_option("--limit-memory-soft", dest="limit_memory_soft", my_default=2048 * 1024 * 1024, + help="Maximum allowed virtual memory per worker, when reached the worker be reset after the current request (default 671088640 aka 640MB).", + type="int") + group.add_option("--limit-memory-hard", dest="limit_memory_hard", my_default=2560 * 1024 * 1024, + help="Maximum allowed virtual memory per worker, when reached, any memory allocation will fail (default 805306368 aka 768MB).", + type="int") + group.add_option("--limit-time-cpu", dest="limit_time_cpu", my_default=60, + help="Maximum allowed CPU time per request (default 60).", + type="int") + group.add_option("--limit-time-real", dest="limit_time_real", my_default=120, + help="Maximum allowed Real time per request (default 120).", + type="int") + group.add_option("--limit-request", dest="limit_request", my_default=8192, + help="Maximum number of request to be processed per worker (default 8192).", + type="int") + parser.add_option_group(group) # Copy all optparse options (i.e. MyOption) into self.options. for group in parser.option_groups: @@ -405,12 +407,22 @@ class configmanager(object): 'list_db', 'xmlrpcs', 'proxy_mode', 'test_file', 'test_enable', 'test_commit', 'test_report_directory', 'osv_memory_count_limit', 'osv_memory_age_limit', 'max_cron_threads', 'unaccent', - 'workers', 'limit_memory_hard', 'limit_memory_soft', 'limit_time_cpu', 'limit_time_real', 'limit_request', - 'auto_reload', 'data_dir', + 'data_dir', ] + posix_keys = [ + 'auto_reload', 'workers', + 'limit_memory_hard', 'limit_memory_soft', + 'limit_time_cpu', 'limit_time_real', 'limit_request', + ] + + if os.name == 'posix': + keys += posix_keys + else: + self.options.update(dict.fromkeys(posix_keys, None)) + + # Copy the command-line arguments... for arg in keys: - # Copy the command-line argument... if getattr(opt, arg) is not None: self.options[arg] = getattr(opt, arg) # ... or keep, but cast, the config file value.