From eb7274a76e2b953cf4c0617baa72122589ad39f1 Mon Sep 17 00:00:00 2001 From: Florent Vennetier Date: Wed, 16 Oct 2019 16:58:58 +0200 Subject: [PATCH] Allow to share values between worker processes --- bin/oioswift-proxy-server | 76 +++++++++++++++++++++++++++++++++++++++ runserver.py | 35 +----------------- setup.py | 3 ++ 3 files changed, 80 insertions(+), 34 deletions(-) create mode 100755 bin/oioswift-proxy-server mode change 100644 => 120000 runserver.py diff --git a/bin/oioswift-proxy-server b/bin/oioswift-proxy-server new file mode 100755 index 00000000..1644c696 --- /dev/null +++ b/bin/oioswift-proxy-server @@ -0,0 +1,76 @@ +#!/usr/bin/env python +# Copyright (c) 2010-2012 OpenStack Foundation +# Copyright (c) 2019 OpenIO SAS +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import sys +from optparse import OptionParser +from swift.common.utils import parse_options +from swift.common import wsgi +from oioswift.server import global_conf_callback + + +GLOBAL_CONF = None + + +def global_conf_callback_wrapper(preloaded_app_conf, global_conf): + global GLOBAL_CONF + global_conf_callback(preloaded_app_conf, global_conf) + GLOBAL_CONF = global_conf + + +orig_run_server = wsgi.run_server + + +def run_server_wrapper(conf, logger, sock, global_conf=None): + if global_conf is None and GLOBAL_CONF is not None: + global_conf = {k: v for k, v in GLOBAL_CONF.items() + if k.startswith('oio')} + return orig_run_server(conf, logger, sock, global_conf) + + +wsgi.run_server = run_server_wrapper + + +def run_objgraph(types): + import objgraph + import os + import random + objgraph.show_most_common_types(limit=50, shortnames=False) + for type_ in types: + count = objgraph.count(type_) + print '%s objects: %d' % (type_, count) + if count: + objgraph.show_backrefs( + random.choice(objgraph.by_type(type_)), max_depth=20, + filename='/tmp/backrefs_%s_%d.dot' % (type_, os.getpid())) + + +if __name__ == '__main__': + parser = OptionParser(usage="%prog CONFIG [options]") + parser.add_option('--objgraph', action='store_true', + help=('Run objgraph, show most common ' + 'types before exiting')) + parser.add_option('--show-backrefs', action='append', default=list(), + help=('Draw backreference graph for one randomly ' + 'chosen object of that type. Can be used ' + 'multiple times.')) + conf_file, options = parse_options(parser) + res = wsgi.run_wsgi(conf_file, 'proxy-server', + global_conf_callback=global_conf_callback_wrapper, + **options) + if options.get('objgraph'): + run_objgraph(options.get('show_backrefs', list())) + sys.exit(res) diff --git a/runserver.py b/runserver.py deleted file mode 100644 index 30780c5f..00000000 --- a/runserver.py +++ /dev/null @@ -1,34 +0,0 @@ -import sys -from optparse import OptionParser -from swift.common.utils import parse_options -from swift.common.wsgi import run_wsgi - - -def run_objgraph(types): - import objgraph - import os - import random - objgraph.show_most_common_types(limit=50, shortnames=False) - for type_ in types: - count = objgraph.count(type_) - print '%s objects: %d' % (type_, count) - if count: - objgraph.show_backrefs( - random.choice(objgraph.by_type(type_)), max_depth=20, - filename='/tmp/backrefs_%s_%d.dot' % (type_, os.getpid())) - - -if __name__ == '__main__': - parser = OptionParser(usage="%prog CONFIG [options]") - parser.add_option('--objgraph', action='store_true', - help=('Run objgraph, show most common ' - 'types before exiting')) - parser.add_option('--show-backrefs', action='append', default=list(), - help=('Draw backreference graph for one randomly ' - 'chosen object of that type. Can be used ' - 'multiple times.')) - conf_file, options = parse_options(parser) - res = run_wsgi(conf_file, 'proxy-server', **options) - if options.get('objgraph'): - run_objgraph(options.get('show_backrefs', list())) - sys.exit(res) diff --git a/runserver.py b/runserver.py new file mode 120000 index 00000000..ea39c393 --- /dev/null +++ b/runserver.py @@ -0,0 +1 @@ +bin/oioswift-proxy-server \ No newline at end of file diff --git a/setup.py b/setup.py index fe7648ee..a8417f9b 100644 --- a/setup.py +++ b/setup.py @@ -42,5 +42,8 @@ 'tempauth=oioswift.common.middleware.tempauth:filter_factory', ], }, + scripts=[ + 'bin/oioswift-proxy-server', + ], install_requires=['swift>=2.13.0', 'oio>=4.2.0'] )