)]}'
{"glance/common/utils.py":[{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"458760cd6cee72205d7670e961ae21268a3239dd","unresolved":false,"context_lines":[{"line_number":722,"context_line":"    \"\"\""},{"line_number":723,"context_line":"    conf \u003d cfg.ConfigOpts()"},{"line_number":724,"context_line":"    for opt_name in CONF._opts:"},{"line_number":725,"context_line":"        opt \u003d CONF._get_opt_info(opt_name)[\u0027opt\u0027]"},{"line_number":726,"context_line":"        if CONF._get_opt_info(opt_name)[\u0027cli\u0027] is True:"},{"line_number":727,"context_line":"            conf.register_cli_opt(opt)"},{"line_number":728,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6ced46_a9f3f071","line":725,"updated":"2015-03-23 16:59:29.000000000","message":"I\u0027d rather we not use private attributes and methods from oslo_config. Is there really no better way to handle this?","commit_id":"9845d9bbe20337bd1ffc3df3f38df3b195fe3158"},{"author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"change_message_id":"d9c93ee01ce61250bdeef96ba77aa363ddee6d87","unresolved":false,"context_lines":[{"line_number":722,"context_line":"    \"\"\""},{"line_number":723,"context_line":"    conf \u003d cfg.ConfigOpts()"},{"line_number":724,"context_line":"    for opt_name in CONF._opts:"},{"line_number":725,"context_line":"        opt \u003d CONF._get_opt_info(opt_name)[\u0027opt\u0027]"},{"line_number":726,"context_line":"        if CONF._get_opt_info(opt_name)[\u0027cli\u0027] is True:"},{"line_number":727,"context_line":"            conf.register_cli_opt(opt)"},{"line_number":728,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6ced46_e8ece291","line":725,"in_reply_to":"1a6ced46_2d270366","updated":"2015-03-24 11:24:17.000000000","message":"@Ian thanks for calling reinforcements :-)\n\n@Doug\n\n\u003e why not call reload_config_files()?\n\nI do. (In this patch\u0027s wsgi.py)\n\nThe big picture here is that we are taking advantage of the change in eventlet (https://github.com/eventlet/eventlet/commit/1c30e9b39f4330babcb3665df4c1a3ba694bc6c1) to allow a service to be reloaded (ie pick up new config) with no impact to in-flight requests [1]. (The main Glance patch, which merged, is https://review.openstack.org/#/c/122181). The approach is comparable to what nginx does for example. The current common Launcher config reload (eg which cinder uses) has several issues.\n\nThis patch handles one of the corner cases. Specifically, if the bind port has not changed there is no need to close the listening socket, so you can guarantee no interuption to service. Alternatively, in the unlikely case that it has changed we need to close the listening socket and create a new one.\n\nTo determine if the bind_port has changed or not we need to stash the original configuration.\nThere doesn\u0027t seem to be a clean way to do that currently.\n\nI guess I could explicitly stash each config variable we\u0027re interested in (I can take a look see if that\u0027s feasible), but to me it\u0027s more natural to compare two ConfigOpt classes.\n\n[1] not possible in a couple of corner cases, eg if the bind_port changes.","commit_id":"9845d9bbe20337bd1ffc3df3f38df3b195fe3158"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"88458cab1bb063d4c7b5d01deeeb5b95895babd9","unresolved":false,"context_lines":[{"line_number":722,"context_line":"    \"\"\""},{"line_number":723,"context_line":"    conf \u003d cfg.ConfigOpts()"},{"line_number":724,"context_line":"    for opt_name in CONF._opts:"},{"line_number":725,"context_line":"        opt \u003d CONF._get_opt_info(opt_name)[\u0027opt\u0027]"},{"line_number":726,"context_line":"        if CONF._get_opt_info(opt_name)[\u0027cli\u0027] is True:"},{"line_number":727,"context_line":"            conf.register_cli_opt(opt)"},{"line_number":728,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6ced46_bffcf93f","line":725,"in_reply_to":"1a6ced46_6493dffa","updated":"2015-03-23 19:36:49.000000000","message":"I\u0027m not so much worried about the aesthetic so much as the fact that since it\u0027s not a public API the slighest change in the behaviour can break us and it is really our own fault for relying on it. I\u0027ve added Doug to this review so that he can help us pull in the right people for oslo.config and help us out here.","commit_id":"9845d9bbe20337bd1ffc3df3f38df3b195fe3158"},{"author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"change_message_id":"fbc17c8cbc33b5bc5b763e585306c57ad8e11fb7","unresolved":false,"context_lines":[{"line_number":722,"context_line":"    \"\"\""},{"line_number":723,"context_line":"    conf \u003d cfg.ConfigOpts()"},{"line_number":724,"context_line":"    for opt_name in CONF._opts:"},{"line_number":725,"context_line":"        opt \u003d CONF._get_opt_info(opt_name)[\u0027opt\u0027]"},{"line_number":726,"context_line":"        if CONF._get_opt_info(opt_name)[\u0027cli\u0027] is True:"},{"line_number":727,"context_line":"            conf.register_cli_opt(opt)"},{"line_number":728,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6ced46_6493dffa","line":725,"in_reply_to":"1a6ced46_a9f3f071","updated":"2015-03-23 17:21:46.000000000","message":"I know where you\u0027re coming from, it\u0027s not the prettiest is it?\n\nTaking another quick look at oslo config now (a few months later) I see:\n\n\n    def import_opt(self, name, module_str, group\u003dNone):\n        \"\"\"Import an option definition from a module.\n       .\n       .\n       .\n        \"\"\"\n        __import__(module_str)\n        self._get_opt_info(name, group)\n\nSo it might be possible to replace CONF._get_opt_info(opt_name)[\u0027opt\u0027] with the equivalent import_opt call (haven\u0027t tested it).\n\nI don\u0027t see anything to escape using _groups.\n\nDown the line oslo config should probably allow cloning, eg:\n\n old_conf \u003d ConfigOpt(CONF)\n\nWe could probably poke the oslo config folks to provide that.\n\nNow that the bulk of the zero config stuff has merged I\u0027m wondering if this and the other 2 smaller patches have any chance of getting into kilo?\n\nI think having it all in would be nicer than just some bits making it in if it\u0027s possible. (Eg the ability to switch on DEBUG on the fly seems like a nice thing to be able to do.)","commit_id":"9845d9bbe20337bd1ffc3df3f38df3b195fe3158"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"ee3f2b329de5f0e5849e4e82c55eede37ce9afba","unresolved":false,"context_lines":[{"line_number":722,"context_line":"    \"\"\""},{"line_number":723,"context_line":"    conf \u003d cfg.ConfigOpts()"},{"line_number":724,"context_line":"    for opt_name in CONF._opts:"},{"line_number":725,"context_line":"        opt \u003d CONF._get_opt_info(opt_name)[\u0027opt\u0027]"},{"line_number":726,"context_line":"        if CONF._get_opt_info(opt_name)[\u0027cli\u0027] is True:"},{"line_number":727,"context_line":"            conf.register_cli_opt(opt)"},{"line_number":728,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6ced46_2d270366","line":725,"in_reply_to":"1a6ced46_bffcf93f","updated":"2015-03-23 20:21:05.000000000","message":"Ian is right about using the private symbols. We discourage that, and do not make any backwards compatibility claims for implementation details.\n\nIt\u0027s not clear exactly what you\u0027re trying to do here. If you just want to reload the configuration files, why not call reload_config_files()?\n\nhttp://docs.openstack.org/developer/oslo.config/configopts.html#oslo_config.cfg.ConfigOpts.reload_config_files","commit_id":"9845d9bbe20337bd1ffc3df3f38df3b195fe3158"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"096b70b95d4c2a052b0526ec3750b3658aaef6ea","unresolved":false,"context_lines":[{"line_number":715,"context_line":""},{"line_number":716,"context_line":""},{"line_number":717,"context_line":"def stash_conf_values():"},{"line_number":718,"context_line":"    \"\"\""},{"line_number":719,"context_line":"    Make a copy of some of the current global CONF\u0027s settings."},{"line_number":720,"context_line":"    Allows determining if any of these values have changed"},{"line_number":721,"context_line":"    when the config is reloaded."}],"source_content_type":"text/x-python","patch_set":10,"id":"1a6ced46_6f55f8f8","line":718,"updated":"2015-03-26 09:41:55.000000000","message":"NIT: should not start with empty line","commit_id":"ff59a907937a8a2f1a7134332102d5a526594228"},{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"ff7a27731b16c5434d295c7f9452934de5b73777","unresolved":false,"context_lines":[{"line_number":715,"context_line":""},{"line_number":716,"context_line":""},{"line_number":717,"context_line":"def stash_conf_values():"},{"line_number":718,"context_line":"    \"\"\""},{"line_number":719,"context_line":"    Make a copy of some of the current global CONF\u0027s settings."},{"line_number":720,"context_line":"    Allows determining if any of these values have changed"},{"line_number":721,"context_line":"    when the config is reloaded."}],"source_content_type":"text/x-python","patch_set":10,"id":"1a6ced46_65c8b9a8","line":718,"in_reply_to":"1a6ced46_6f55f8f8","updated":"2015-03-26 10:25:18.000000000","message":"it\u0027s weird our pep tests don\u0027t complain about this","commit_id":"ff59a907937a8a2f1a7134332102d5a526594228"}],"glance/common/wsgi.py":[{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"68a946e21628af80a756b065388a7c228fd3d503","unresolved":false,"context_lines":[{"line_number":143,"context_line":"    }"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    if CONF.ca_file:"},{"line_number":146,"context_line":"        ssl_kwargs[\u0027ca_certs\u0027] \u003d CONF.ca_file"},{"line_number":147,"context_line":"        ssl_kwargs[\u0027cert_reqs\u0027] \u003d ssl.CERT_REQUIRED"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    return ssl.wrap_socket(sock, **ssl_kwargs)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6ced46_6911bdab","line":146,"updated":"2015-03-24 20:10:52.000000000","message":"Doesn\u0027t something like this exist in oslo-incubator\u0027s sslutils?","commit_id":"46b12cacf02eadb8e2ffeb4bac633d0926a5b150"},{"author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"change_message_id":"7bb217b8489131e12cc3a9462dc8a14fb5538064","unresolved":false,"context_lines":[{"line_number":143,"context_line":"    }"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    if CONF.ca_file:"},{"line_number":146,"context_line":"        ssl_kwargs[\u0027ca_certs\u0027] \u003d CONF.ca_file"},{"line_number":147,"context_line":"        ssl_kwargs[\u0027cert_reqs\u0027] \u003d ssl.CERT_REQUIRED"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    return ssl.wrap_socket(sock, **ssl_kwargs)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6ced46_0fa4b2a4","line":146,"in_reply_to":"1a6ced46_6911bdab","updated":"2015-03-25 10:39:27.000000000","message":"Hadn\u0027t seen that.\n\nSimilar, but not identical.\n\nThe args are different, eg CONF.cert_file versus CONF.ssl.cert_file\n\nThis function is just a verbatim cut and paste of the previous inline wrap_ssl function.\nI\u0027m happy for us to look at using the oslo bits, but see that as a separate effort.","commit_id":"46b12cacf02eadb8e2ffeb4bac633d0926a5b150"},{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"1b701f49c92c63265ce1e1a38104546e09622c5a","unresolved":false,"context_lines":[{"line_number":375,"context_line":"        \"\"\""},{"line_number":376,"context_line":"        Reload and re-apply configuration settings"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"        Existing child processes are send a SIGHUP signal"},{"line_number":379,"context_line":"        and will exit after completing existing requests."},{"line_number":380,"context_line":"        New child processes, which will have the updated"},{"line_number":381,"context_line":"        configuration, are spawned. This allows preventing"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a6ced46_a82d4f00","line":378,"updated":"2015-03-25 14:24:16.000000000","message":"Nit: a typo \u0027are send\u0027 -\u003e \u0027are sent\u0027","commit_id":"26827aec7ce7325e4f9ee56b4d3f9b4e8b72e6bc"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"096b70b95d4c2a052b0526ec3750b3658aaef6ea","unresolved":false,"context_lines":[{"line_number":250,"context_line":"    This class requires initialize_glance_store set to True if"},{"line_number":251,"context_line":"    glance store needs to be initialized."},{"line_number":252,"context_line":"    \"\"\""},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"    def __init__(self, threads\u003d1000, initialize_glance_store\u003dFalse):"},{"line_number":255,"context_line":"        eventlet.wsgi.MAX_HEADER_LINE \u003d CONF.max_header_line"},{"line_number":256,"context_line":"        self.threads \u003d threads"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a6ced46_2f84e05c","side":"PARENT","line":253,"updated":"2015-03-26 09:41:55.000000000","message":"NIT: why removing the empty line?","commit_id":"001940f12922cbbea0debe3602e317882e82b234"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"096b70b95d4c2a052b0526ec3750b3658aaef6ea","unresolved":false,"context_lines":[{"line_number":126,"context_line":""},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"def ssl_wrap_socket(sock):"},{"line_number":129,"context_line":"    \"\"\""},{"line_number":130,"context_line":"    Wrap an existing socket in SSL"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    :param sock: non-SSL socket to wrap"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a6ced46_4f7bdc8b","line":129,"updated":"2015-03-26 09:41:55.000000000","message":"NIT: should not start with empty line","commit_id":"ff59a907937a8a2f1a7134332102d5a526594228"},{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"ff7a27731b16c5434d295c7f9452934de5b73777","unresolved":false,"context_lines":[{"line_number":173,"context_line":"        if addr[0] in (socket.AF_INET, socket.AF_INET6)"},{"line_number":174,"context_line":"    ][0]"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    use_ssl \u003d CONF.key_file or CONF.cert_file"},{"line_number":177,"context_line":"    if use_ssl and (not CONF.key_file or not CONF.cert_file):"},{"line_number":178,"context_line":"        raise RuntimeError(_(\"When running server in SSL mode, you must \""},{"line_number":179,"context_line":"                             \"specify both a cert_file and key_file \""}],"source_content_type":"text/x-python","patch_set":10,"id":"1a6ced46_a521d14e","line":176,"updated":"2015-03-26 10:25:18.000000000","message":"NIT: why not just `CONF.key_file and CONF.cert_file` ?","commit_id":"ff59a907937a8a2f1a7134332102d5a526594228"},{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"555984b4274d356113be410d7a97118ceb2a36b8","unresolved":false,"context_lines":[{"line_number":173,"context_line":"        if addr[0] in (socket.AF_INET, socket.AF_INET6)"},{"line_number":174,"context_line":"    ][0]"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    use_ssl \u003d CONF.key_file or CONF.cert_file"},{"line_number":177,"context_line":"    if use_ssl and (not CONF.key_file or not CONF.cert_file):"},{"line_number":178,"context_line":"        raise RuntimeError(_(\"When running server in SSL mode, you must \""},{"line_number":179,"context_line":"                             \"specify both a cert_file and key_file \""}],"source_content_type":"text/x-python","patch_set":10,"id":"1a6ced46_e5f9094f","line":176,"in_reply_to":"1a6ced46_a521d14e","updated":"2015-03-26 10:31:35.000000000","message":"actually, now I get this is just to have a way to report an error properly. It could be written better but we\u0027ll leave that for a future refactor","commit_id":"ff59a907937a8a2f1a7134332102d5a526594228"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"096b70b95d4c2a052b0526ec3750b3658aaef6ea","unresolved":false,"context_lines":[{"line_number":273,"context_line":"            self.pgid \u003d 0"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"    def hup(self, *args):"},{"line_number":276,"context_line":"        \"\"\""},{"line_number":277,"context_line":"        Reloads configuration files with zero down time"},{"line_number":278,"context_line":"        \"\"\""},{"line_number":279,"context_line":"        signal.signal(signal.SIGHUP, signal.SIG_IGN)"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a6ced46_6f56d8cf","line":276,"updated":"2015-03-26 09:41:55.000000000","message":"NIT: No empty line","commit_id":"ff59a907937a8a2f1a7134332102d5a526594228"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"096b70b95d4c2a052b0526ec3750b3658aaef6ea","unresolved":false,"context_lines":[{"line_number":287,"context_line":"        os.killpg(self.pgid, signal.SIGTERM)"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"    def start(self, application, default_port):"},{"line_number":290,"context_line":"        \"\"\""},{"line_number":291,"context_line":"        Run a WSGI server with the given application."},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"        :param application: The application to be run in the WSGI server"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a6ced46_cf70ac74","line":290,"updated":"2015-03-26 09:41:55.000000000","message":"Ditto","commit_id":"ff59a907937a8a2f1a7134332102d5a526594228"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"096b70b95d4c2a052b0526ec3750b3658aaef6ea","unresolved":false,"context_lines":[{"line_number":360,"context_line":"        LOG.debug(\u0027Exited\u0027)"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"    def configure(self, old_conf\u003dNone, has_changed\u003dNone):"},{"line_number":363,"context_line":"        \"\"\""},{"line_number":364,"context_line":"        Apply configuration settings"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"        :param old_conf: Cached old configuration settings (if any)"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a6ced46_4fc11c53","line":363,"updated":"2015-03-26 09:41:55.000000000","message":"NIT: ditto, newline","commit_id":"ff59a907937a8a2f1a7134332102d5a526594228"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"096b70b95d4c2a052b0526ec3750b3658aaef6ea","unresolved":false,"context_lines":[{"line_number":372,"context_line":"            initialize_glance_store()"},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"    def reload(self):"},{"line_number":375,"context_line":"        \"\"\""},{"line_number":376,"context_line":"        Reload and re-apply configuration settings"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"        Existing child processes are sent a SIGHUP signal"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a6ced46_cfcc2c8c","line":375,"updated":"2015-03-26 09:41:55.000000000","message":"NIT: ditto newline","commit_id":"ff59a907937a8a2f1a7134332102d5a526594228"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"096b70b95d4c2a052b0526ec3750b3658aaef6ea","unresolved":false,"context_lines":[{"line_number":466,"context_line":"                             keepalive\u003dCONF.http_keepalive)"},{"line_number":467,"context_line":""},{"line_number":468,"context_line":"    def configure_socket(self, old_conf\u003dNone, has_changed\u003dNone):"},{"line_number":469,"context_line":"        \"\"\""},{"line_number":470,"context_line":"        Ensure a socket exists and is appropriately configured."},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"        This function is called on start up, and can also be"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a6ced46_2f914047","line":469,"updated":"2015-03-26 09:41:55.000000000","message":"NIT: ditto newline","commit_id":"ff59a907937a8a2f1a7134332102d5a526594228"}],"glance/tests/functional/test_reload.py":[{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"1b701f49c92c63265ce1e1a38104546e09622c5a","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        :returns: \u0027True\u0027 or fails the test with \u0027message\u0027 on timeout"},{"line_number":62,"context_line":"        \"\"\""},{"line_number":63,"context_line":"        # We default to allowing 60 seconds timeout but"},{"line_number":64,"context_line":"        # typically only a few hundreths of a second"},{"line_number":65,"context_line":"        # are needed."},{"line_number":66,"context_line":"        num_ticks \u003d seconds * (1.0 / tick)"},{"line_number":67,"context_line":"        count \u003d 0"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a6ced46_fcdb884c","line":64,"updated":"2015-03-25 14:24:16.000000000","message":"Nit: a typo hundreths -\u003e hundredths","commit_id":"26827aec7ce7325e4f9ee56b4d3f9b4e8b72e6bc"},{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"1b701f49c92c63265ce1e1a38104546e09622c5a","unresolved":false,"context_lines":[{"line_number":140,"context_line":"                    break"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        # Test changing from http to https"},{"line_number":143,"context_line":"        # This recycles the existing socket"},{"line_number":144,"context_line":"        path \u003d self._url(\u0027http\u0027, \u0027/\u0027)"},{"line_number":145,"context_line":"        response \u003d requests.get(path)"},{"line_number":146,"context_line":"        self.assertEqual(300, response.status_code)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a6ced46_1c5ce4ec","line":143,"updated":"2015-03-25 14:24:16.000000000","message":"I\u0027d split one testcase into several to perform more granular checks.\n\ntest_reload_http_to_https,\ntest_reload_https_restart\ntest_reload_bind_host_change\n...","commit_id":"26827aec7ce7325e4f9ee56b4d3f9b4e8b72e6bc"},{"author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"change_message_id":"955c92cf853561daa30778e770138b9035e8c42e","unresolved":false,"context_lines":[{"line_number":140,"context_line":"                    break"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        # Test changing from http to https"},{"line_number":143,"context_line":"        # This recycles the existing socket"},{"line_number":144,"context_line":"        path \u003d self._url(\u0027http\u0027, \u0027/\u0027)"},{"line_number":145,"context_line":"        response \u003d requests.get(path)"},{"line_number":146,"context_line":"        self.assertEqual(300, response.status_code)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a6ced46_6640e334","line":143,"in_reply_to":"1a6ced46_1c5ce4ec","updated":"2015-03-25 16:38:37.000000000","message":"There\u0027s a trade off here between granularity and the total length of time to run the tests.\n\nI do like the idea of granularity, but I think the tests would take quite a lot longer to run.\n\neg if I put separate out two tests each one takes ~20 seconds, so the total time is doubled:\n\ntwo tests (granular):\n\n Test id                                                       Runtime (s)\n ------------------------------------------------------------  -----------\n glance.tests.functional.test_reload.TestReload.test_reload    23.207\n glance.tests.functional.test_reload.TestReload.test_reload2  18.816\n\n\nBut if they are kept together, the total run time doesn\u0027t really increase:\n\ntwo tests (non-granular):\n\n Test id                                                       Runtime (s)\n ------------------------------------------------------------  -----------\n glance.tests.functional.test_reload.TestReload.test_reload    23.207","commit_id":"26827aec7ce7325e4f9ee56b4d3f9b4e8b72e6bc"},{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"bebb7b6b7090610e5cec815a9861a82ddc3f1852","unresolved":false,"context_lines":[{"line_number":140,"context_line":"                    break"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        # Test changing from http to https"},{"line_number":143,"context_line":"        # This recycles the existing socket"},{"line_number":144,"context_line":"        path \u003d self._url(\u0027http\u0027, \u0027/\u0027)"},{"line_number":145,"context_line":"        response \u003d requests.get(path)"},{"line_number":146,"context_line":"        self.assertEqual(300, response.status_code)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a6ced46_e8849d5f","line":143,"in_reply_to":"1a6ced46_6640e334","updated":"2015-03-25 17:00:11.000000000","message":"I see. That seems quite a reason to leave the code the way it is now.","commit_id":"26827aec7ce7325e4f9ee56b4d3f9b4e8b72e6bc"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"096b70b95d4c2a052b0526ec3750b3658aaef6ea","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        super(TestReload, self).tearDown()"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def ticker(self, message, seconds\u003d60, tick\u003d0.01):"},{"line_number":54,"context_line":"        \"\"\""},{"line_number":55,"context_line":"        Allows repeatedly testing for an expected result"},{"line_number":56,"context_line":"        for a finite amount of time."},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"1a6ced46_4fe4bce0","line":54,"updated":"2015-03-26 09:41:55.000000000","message":"NIT: ditto newline","commit_id":"ff59a907937a8a2f1a7134332102d5a526594228"}]}
