)]}'
{"doc/source/configuring.rst":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"2f7b3a6f8ff51bcd24fd4eebdba7a1de64f884cb","unresolved":false,"context_lines":[{"line_number":120,"context_line":"value may increase performance (especially if using SSL"},{"line_number":121,"context_line":"with compression enabled). Typically it is recommended"},{"line_number":122,"context_line":"to have one worker process per CPU. The value `0` will"},{"line_number":123,"context_line":"use eventlet rather than multiprocessing."},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"Optional. Default: ``0``"},{"line_number":126,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"AAAAD3%2F%2F%2FUY%3D","line":123,"updated":"2012-01-10 21:08:35.000000000","message":"This is not technically true... Eventlet (greenthread pools) are utilized even when workers\u003e\u003d1. The difference is that with workers\u003e\u003d1, separate processes are spawned listening on the same socket, with each worker process having a separate greenthread pool handling connections. And with workers\u003d0, that just means there is no additional fork() into a separate worker process and that the main parent process will start a greenthread pool to handle connections on the incoming socket.","commit_id":"8ffaa63c97fcbce4c2148b43f35666cef2e85c49"},{"author":{"_account_id":1132,"name":"Brian Waldon","email":"brian@waldon.cc","username":"bcwaldon"},"change_message_id":"d61aae05173ee4b44edd8433daa2f718f0152671","unresolved":false,"context_lines":[{"line_number":120,"context_line":"value may increase performance (especially if using SSL"},{"line_number":121,"context_line":"with compression enabled). Typically it is recommended"},{"line_number":122,"context_line":"to have one worker process per CPU. The value `0` will"},{"line_number":123,"context_line":"use eventlet rather than multiprocessing."},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"Optional. Default: ``0``"},{"line_number":126,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"AAAAD3%2F%2F%2FTw%3D","line":123,"in_reply_to":"AAAAD3%2F%2F%2FUY%3D","updated":"2012-01-10 21:12:17.000000000","message":"I wrote this before I completely understood what was going on... :/ How does it look now?","commit_id":"8ffaa63c97fcbce4c2148b43f35666cef2e85c49"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"9c1d9b0ee570e7ab870fda3f7fd0c9c7a1446894","unresolved":false,"context_lines":[{"line_number":120,"context_line":"value may increase performance (especially if using SSL"},{"line_number":121,"context_line":"with compression enabled). Typically it is recommended"},{"line_number":122,"context_line":"to have one worker process per CPU. The value `0` will"},{"line_number":123,"context_line":"use prevent any new processes from being created."},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"Optional. Default: ``0``"},{"line_number":126,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"AAAAD3%2F%2F9nU%3D","line":123,"updated":"2012-01-16 23:06:39.000000000","message":"s/use //","commit_id":"6966a0d8d233b8ecc85a1d25fb8f908fb0bf1f30"}],"etc/glance-api.conf":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"9c1d9b0ee570e7ab870fda3f7fd0c9c7a1446894","unresolved":false,"context_lines":[{"line_number":26,"context_line":"# Number of Glance API worker processes to start."},{"line_number":27,"context_line":"# On machines with more than one CPU increasing this value"},{"line_number":28,"context_line":"# may improve performance (especially if using SSL with"},{"line_number":29,"context_line":"# compression turned on). Its typically recommended to set"},{"line_number":30,"context_line":"# this value to the number of CPUs present on your machine."},{"line_number":31,"context_line":"workers \u003d 0"},{"line_number":32,"context_line":""}],"source_content_type":"text/plain","patch_set":3,"id":"AAAAD3%2F%2F9nQ%3D","line":29,"updated":"2012-01-16 23:06:39.000000000","message":"\"It\u0027s\" or \"It is\"; \"its\" is the possessive form.","commit_id":"6966a0d8d233b8ecc85a1d25fb8f908fb0bf1f30"}],"glance/common/wsgi.py":[{"author":{"_account_id":1132,"name":"Brian Waldon","email":"brian@waldon.cc","username":"bcwaldon"},"change_message_id":"48bc2933cd2b12013cd0a8f51e7c6de612c2de56","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    cfg.StrOpt(\u0027key_file\u0027),"},{"line_number":56,"context_line":"    ]"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"workers_opt \u003d cfg.IntOpt(\u0027workers\u0027, default\u003d0)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"class WritableLogger(object):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAC3%2F%2F6lI%3D","line":58,"updated":"2011-12-26 16:47:58.000000000","message":"There\u0027s a discrepancy between the default defined here and what\u0027s indicated in the log files. Can you clear that up?","commit_id":"6e75d725c5aaac6776d6e052756b3bf37949b709"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6756faeb1077e71e0ccd8e801871c4100ef079f3","unresolved":false,"context_lines":[{"line_number":158,"context_line":"            \"\"\""},{"line_number":159,"context_line":"            Shuts down the server, but allows running requests to complete"},{"line_number":160,"context_line":"            \"\"\""},{"line_number":161,"context_line":"            logger.error(\u0027SIGHUP received\u0027)"},{"line_number":162,"context_line":"            signal.signal(signal.SIGHUP, signal.SIG_IGN)"},{"line_number":163,"context_line":"            running[0] \u003d False"},{"line_number":164,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAADH%2F%2F%2FHM%3D","line":161,"updated":"2012-01-02 13:35:38.000000000","message":"i18n needed here.","commit_id":"6e75d725c5aaac6776d6e052756b3bf37949b709"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6756faeb1077e71e0ccd8e801871c4100ef079f3","unresolved":false,"context_lines":[{"line_number":172,"context_line":"            return"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        logger \u003d logging.getLogger(\u0027eventlet.wsgi.server\u0027)"},{"line_number":175,"context_line":"        logger.info(\"Starting %d workers\" % conf.workers)"},{"line_number":176,"context_line":"        running \u003d [True]"},{"line_number":177,"context_line":"        signal.signal(signal.SIGTERM, kill_children)"},{"line_number":178,"context_line":"        signal.signal(signal.SIGHUP, hup)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAADH%2F%2F%2FHI%3D","line":175,"updated":"2012-01-02 13:35:38.000000000","message":"i18n needed here.","commit_id":"6e75d725c5aaac6776d6e052756b3bf37949b709"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6756faeb1077e71e0ccd8e801871c4100ef079f3","unresolved":false,"context_lines":[{"line_number":184,"context_line":"                    signal.signal(signal.SIGHUP, signal.SIG_DFL)"},{"line_number":185,"context_line":"                    signal.signal(signal.SIGTERM, signal.SIG_DFL)"},{"line_number":186,"context_line":"                    self.run_server(sock, application, logger)"},{"line_number":187,"context_line":"                    logger.info(\u0027Child %d exiting normally\u0027 % os.getpid())"},{"line_number":188,"context_line":"                    return"},{"line_number":189,"context_line":"                else:"},{"line_number":190,"context_line":"                    logger.info(\u0027Started child %s\u0027 % pid)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAADH%2F%2F%2FHE%3D","line":187,"updated":"2012-01-02 13:35:38.000000000","message":"i18n needed here. Also, I\u0027d recommend putting this in DEBUG, not INFO level...","commit_id":"6e75d725c5aaac6776d6e052756b3bf37949b709"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6756faeb1077e71e0ccd8e801871c4100ef079f3","unresolved":false,"context_lines":[{"line_number":187,"context_line":"                    logger.info(\u0027Child %d exiting normally\u0027 % os.getpid())"},{"line_number":188,"context_line":"                    return"},{"line_number":189,"context_line":"                else:"},{"line_number":190,"context_line":"                    logger.info(\u0027Started child %s\u0027 % pid)"},{"line_number":191,"context_line":"                    children.append(pid)"},{"line_number":192,"context_line":"            try:"},{"line_number":193,"context_line":"                pid, status \u003d os.wait()"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAADH%2F%2F%2FHA%3D","line":190,"updated":"2012-01-02 13:35:38.000000000","message":"i18n needed here. Also, I\u0027d recommend putting this in DEBUG, not INFO level...","commit_id":"6e75d725c5aaac6776d6e052756b3bf37949b709"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6756faeb1077e71e0ccd8e801871c4100ef079f3","unresolved":false,"context_lines":[{"line_number":192,"context_line":"            try:"},{"line_number":193,"context_line":"                pid, status \u003d os.wait()"},{"line_number":194,"context_line":"                if os.WIFEXITED(status) or os.WIFSIGNALED(status):"},{"line_number":195,"context_line":"                    logger.error(\u0027Removing dead child %s\u0027 % pid)"},{"line_number":196,"context_line":"                    children.remove(pid)"},{"line_number":197,"context_line":"            except OSError, err:"},{"line_number":198,"context_line":"                if err.errno not in (errno.EINTR, errno.ECHILD):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAADH%2F%2F%2FG8%3D","line":195,"updated":"2012-01-02 13:35:38.000000000","message":"i18n needed here.","commit_id":"6e75d725c5aaac6776d6e052756b3bf37949b709"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6756faeb1077e71e0ccd8e801871c4100ef079f3","unresolved":false,"context_lines":[{"line_number":198,"context_line":"                if err.errno not in (errno.EINTR, errno.ECHILD):"},{"line_number":199,"context_line":"                    raise"},{"line_number":200,"context_line":"            except KeyboardInterrupt:"},{"line_number":201,"context_line":"                logger.info(\u0027User quit\u0027)"},{"line_number":202,"context_line":"                break"},{"line_number":203,"context_line":"        greenio.shutdown_safe(sock)"},{"line_number":204,"context_line":"        sock.close()"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAADH%2F%2F%2FG4%3D","line":201,"updated":"2012-01-02 13:35:38.000000000","message":"i18n needed here. Also, I would change this to \"Caught keyboard interrupt. Exiting.\"","commit_id":"6e75d725c5aaac6776d6e052756b3bf37949b709"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6756faeb1077e71e0ccd8e801871c4100ef079f3","unresolved":false,"context_lines":[{"line_number":202,"context_line":"                break"},{"line_number":203,"context_line":"        greenio.shutdown_safe(sock)"},{"line_number":204,"context_line":"        sock.close()"},{"line_number":205,"context_line":"        logger.info(\u0027Exited\u0027)"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    def wait(self):"},{"line_number":208,"context_line":"        \"\"\"Wait until all servers have completed running.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAADH%2F%2F%2FG0%3D","line":205,"updated":"2012-01-02 13:35:38.000000000","message":"i18n needed here. Also, I\u0027d recommend putting this in DEBUG, not INFO level...","commit_id":"6e75d725c5aaac6776d6e052756b3bf37949b709"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6756faeb1077e71e0ccd8e801871c4100ef079f3","unresolved":false,"context_lines":[{"line_number":231,"context_line":"                raise"},{"line_number":232,"context_line":"        self.pool.waitall()"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"    def _run(self, application, sock):"},{"line_number":235,"context_line":"        \"\"\"Start a WSGI server in a new green thread.\"\"\""},{"line_number":236,"context_line":"        logger \u003d logging.getLogger(\u0027eventlet.wsgi.server\u0027)"},{"line_number":237,"context_line":"        logger.info(\"Starting single process server\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAADH%2F%2F%2FGo%3D","line":234,"updated":"2012-01-02 13:35:38.000000000","message":"Can we change this from _run() to single_run() to indicate how it is different from run_server()?","commit_id":"6e75d725c5aaac6776d6e052756b3bf37949b709"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6756faeb1077e71e0ccd8e801871c4100ef079f3","unresolved":false,"context_lines":[{"line_number":234,"context_line":"    def _run(self, application, sock):"},{"line_number":235,"context_line":"        \"\"\"Start a WSGI server in a new green thread.\"\"\""},{"line_number":236,"context_line":"        logger \u003d logging.getLogger(\u0027eventlet.wsgi.server\u0027)"},{"line_number":237,"context_line":"        logger.info(\"Starting single process server\")"},{"line_number":238,"context_line":"        eventlet.wsgi.server(sock, application, custom_pool\u003dself.pool,"},{"line_number":239,"context_line":"                             log\u003dWritableLogger(logger))"},{"line_number":240,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAADH%2F%2F%2FGw%3D","line":237,"updated":"2012-01-02 13:35:38.000000000","message":"i18n needed here.","commit_id":"6e75d725c5aaac6776d6e052756b3bf37949b709"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"2f7b3a6f8ff51bcd24fd4eebdba7a1de64f884cb","unresolved":false,"context_lines":[{"line_number":166,"context_line":"        sock \u003d get_socket(conf, default_port)"},{"line_number":167,"context_line":"        conf.register_opt(workers_opt)"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        print \u0027wa\u0027"},{"line_number":170,"context_line":"        if conf.workers \u003d\u003d 0:"},{"line_number":171,"context_line":"            # Useful for profiling, test, debug etc."},{"line_number":172,"context_line":"            self.pool \u003d eventlet.GreenPool(size\u003dself.threads)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAD3%2F%2F%2FUI%3D","line":169,"updated":"2012-01-10 21:08:35.000000000","message":"wa? :)","commit_id":"8ffaa63c97fcbce4c2148b43f35666cef2e85c49"},{"author":{"_account_id":1132,"name":"Brian Waldon","email":"brian@waldon.cc","username":"bcwaldon"},"change_message_id":"d61aae05173ee4b44edd8433daa2f718f0152671","unresolved":false,"context_lines":[{"line_number":166,"context_line":"        sock \u003d get_socket(conf, default_port)"},{"line_number":167,"context_line":"        conf.register_opt(workers_opt)"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        print \u0027wa\u0027"},{"line_number":170,"context_line":"        if conf.workers \u003d\u003d 0:"},{"line_number":171,"context_line":"            # Useful for profiling, test, debug etc."},{"line_number":172,"context_line":"            self.pool \u003d eventlet.GreenPool(size\u003dself.threads)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAD3%2F%2F%2FTs%3D","line":169,"in_reply_to":"AAAAD3%2F%2F%2FUI%3D","updated":"2012-01-10 21:12:17.000000000","message":"whoops","commit_id":"8ffaa63c97fcbce4c2148b43f35666cef2e85c49"}],"glance/tests/functional/test_multiprocessing.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"2f7b3a6f8ff51bcd24fd4eebdba7a1de64f884cb","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        super(TestMultiprocessing, self).setUp()"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def test_multiprocessing(self):"},{"line_number":31,"context_line":"        \"\"\"Spin up the api servers with multiprocessing on \"\"\""},{"line_number":32,"context_line":"        self.cleanup()"},{"line_number":33,"context_line":"        self.start_servers(**self.__dict__.copy())"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAD3%2F%2F%2FUo%3D","line":31,"updated":"2012-01-10 21:08:35.000000000","message":"femto-nit... extra whitespace at end of docstring.","commit_id":"8ffaa63c97fcbce4c2148b43f35666cef2e85c49"},{"author":{"_account_id":1132,"name":"Brian Waldon","email":"brian@waldon.cc","username":"bcwaldon"},"change_message_id":"d61aae05173ee4b44edd8433daa2f718f0152671","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        super(TestMultiprocessing, self).setUp()"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def test_multiprocessing(self):"},{"line_number":31,"context_line":"        \"\"\"Spin up the api servers with multiprocessing on \"\"\""},{"line_number":32,"context_line":"        self.cleanup()"},{"line_number":33,"context_line":"        self.start_servers(**self.__dict__.copy())"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAD3%2F%2F%2FTk%3D","line":31,"in_reply_to":"AAAAD3%2F%2F%2FUo%3D","updated":"2012-01-10 21:12:17.000000000","message":"Done","commit_id":"8ffaa63c97fcbce4c2148b43f35666cef2e85c49"}]}
