)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d8d8b61e2fcc10afe13f91bedbc92dac1d9df88b","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     abhishekkekane \u003cabhishek.kekane@nttdata.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-07-23 08:15:25 -0700"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Keystone service throws error on SIGHUP signal"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Added reset method in Server class."},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"baada198_2190304d","line":7,"updated":"2014-07-28 14:36:33.000000000","message":"nit: suggest grouping the sentences below into the description paragraph, but keep the commit message.","commit_id":"ad2f315091906d47df51e912d5c1b80f870a0cfa"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"9fc1625034e0b27cebd6fbd28080b320bd50533c","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     abhishekkekane \u003cabhishek.kekane@nttdata.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-07-23 08:15:25 -0700"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Keystone service throws error on SIGHUP signal"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Added reset method in Server class."},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"baada198_e96405e8","line":7,"in_reply_to":"baada198_2190304d","updated":"2014-07-30 12:59:26.000000000","message":"Done","commit_id":"ad2f315091906d47df51e912d5c1b80f870a0cfa"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"f5ac287e8e47408435e5e9fb3eb9143e9a052dcf","unresolved":false,"context_lines":[{"line_number":9,"context_line":"This patch resolves following erorrs:"},{"line_number":10,"context_line":"1. AttributeError: \u0027Server\u0027 object has no attribute \u0027reset\u0027."},{"line_number":11,"context_line":"2. error: [Errno 9] Bad file descriptor"},{"line_number":12,"context_line":"3. Can\u0027t dup an ssl object"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"When the SIGHUp signal is received by the service launcher in"},{"line_number":15,"context_line":"common service framework, it calls the server\u0027s reset method."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"baada198_e8caf817","line":12,"updated":"2014-08-08 14:15:03.000000000","message":"SSL","commit_id":"6210f2cdbc0c37818f422f07fb6baf04e26dfccc"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"0571493249cc5b7b01152bc85b50ca2381d1d40b","unresolved":false,"context_lines":[{"line_number":9,"context_line":"This patch resolves following erorrs:"},{"line_number":10,"context_line":"1. AttributeError: \u0027Server\u0027 object has no attribute \u0027reset\u0027."},{"line_number":11,"context_line":"2. error: [Errno 9] Bad file descriptor"},{"line_number":12,"context_line":"3. Can\u0027t dup an ssl object"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"When the SIGHUp signal is received by the service launcher in"},{"line_number":15,"context_line":"common service framework, it calls the server\u0027s reset method."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"baada198_d0804ef8","line":12,"in_reply_to":"baada198_e8caf817","updated":"2014-08-11 06:41:29.000000000","message":"Done","commit_id":"6210f2cdbc0c37818f422f07fb6baf04e26dfccc"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"f5ac287e8e47408435e5e9fb3eb9143e9a052dcf","unresolved":false,"context_lines":[{"line_number":11,"context_line":"2. error: [Errno 9] Bad file descriptor"},{"line_number":12,"context_line":"3. Can\u0027t dup an ssl object"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"When the SIGHUp signal is received by the service launcher in"},{"line_number":15,"context_line":"common service framework, it calls the server\u0027s reset method."},{"line_number":16,"context_line":"As reset method is not present in Sever class of"},{"line_number":17,"context_line":"keystone.common.environment.eventlet_server module, it raises"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"baada198_c8c9b426","line":14,"updated":"2014-08-08 14:15:03.000000000","message":"SIGHUP","commit_id":"6210f2cdbc0c37818f422f07fb6baf04e26dfccc"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"0571493249cc5b7b01152bc85b50ca2381d1d40b","unresolved":false,"context_lines":[{"line_number":11,"context_line":"2. error: [Errno 9] Bad file descriptor"},{"line_number":12,"context_line":"3. Can\u0027t dup an ssl object"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"When the SIGHUp signal is received by the service launcher in"},{"line_number":15,"context_line":"common service framework, it calls the server\u0027s reset method."},{"line_number":16,"context_line":"As reset method is not present in Sever class of"},{"line_number":17,"context_line":"keystone.common.environment.eventlet_server module, it raises"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"baada198_f078f22d","line":14,"in_reply_to":"baada198_c8c9b426","updated":"2014-08-11 06:41:29.000000000","message":"Done","commit_id":"6210f2cdbc0c37818f422f07fb6baf04e26dfccc"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"f5ac287e8e47408435e5e9fb3eb9143e9a052dcf","unresolved":false,"context_lines":[{"line_number":29,"context_line":"To resolve \u0027Bad file descriptor\u0027 error, creating duplicate"},{"line_number":30,"context_line":"socket object, every time service starts."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"As ssl object can not be duplicated, creating duplicate"},{"line_number":33,"context_line":"socket object before converting a regular socket into an"},{"line_number":34,"context_line":"SSL socket."},{"line_number":35,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"baada198_08d00cc7","line":32,"updated":"2014-08-08 14:15:03.000000000","message":"SSL","commit_id":"6210f2cdbc0c37818f422f07fb6baf04e26dfccc"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"0571493249cc5b7b01152bc85b50ca2381d1d40b","unresolved":false,"context_lines":[{"line_number":29,"context_line":"To resolve \u0027Bad file descriptor\u0027 error, creating duplicate"},{"line_number":30,"context_line":"socket object, every time service starts."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"As ssl object can not be duplicated, creating duplicate"},{"line_number":33,"context_line":"socket object before converting a regular socket into an"},{"line_number":34,"context_line":"SSL socket."},{"line_number":35,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"baada198_1076463f","line":32,"in_reply_to":"baada198_08d00cc7","updated":"2014-08-11 06:41:29.000000000","message":"Done","commit_id":"6210f2cdbc0c37818f422f07fb6baf04e26dfccc"}],"bin/keystone-all":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"5d38b026fd20b2a62ad114176885990fc19dd81a","unresolved":false,"context_lines":[{"line_number":71,"context_line":"            launcher.launch_service(self.server)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"def create_server(conf, name, host, port, workers):"},{"line_number":75,"context_line":"    app \u003d deploy.loadapp(\u0027config:%s\u0027 % conf, name\u003dname)"},{"line_number":76,"context_line":"    server \u003d environment.Server(app, host\u003dhost, port\u003dport,"},{"line_number":77,"context_line":"                                keepalive\u003dCONF.tcp_keepalive,"}],"source_content_type":"application/octet-stream","patch_set":6,"id":"baada198_9e53ebdd","line":74,"updated":"2014-08-05 17:52:47.000000000","message":"You could call server.listen() in here so that it is only called once.","commit_id":"bd20f72c457b36bd20b558699dbfdcd32d6b971d"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"c03566b48ca1853fb62e100ceba8edf8c823f236","unresolved":false,"context_lines":[{"line_number":71,"context_line":"            launcher.launch_service(self.server)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"def create_server(conf, name, host, port, workers):"},{"line_number":75,"context_line":"    app \u003d deploy.loadapp(\u0027config:%s\u0027 % conf, name\u003dname)"},{"line_number":76,"context_line":"    server \u003d environment.Server(app, host\u003dhost, port\u003dport,"},{"line_number":77,"context_line":"                                keepalive\u003dCONF.tcp_keepalive,"}],"source_content_type":"application/octet-stream","patch_set":6,"id":"baada198_feb69288","line":74,"in_reply_to":"baada198_9e53ebdd","updated":"2014-08-06 07:25:15.000000000","message":"Hi David,\n\nThis server.listen() is getting called only once i.e. in init() method of Server class in eventlet_server module. Even if I call server.listen() here it\u0027s giving Bad File Descriptor error.","commit_id":"bd20f72c457b36bd20b558699dbfdcd32d6b971d"}],"keystone/common/environment/eventlet_server.py":[{"author":{"_account_id":708,"name":"Yuriy Taraday","email":"yuriy@taraday.nl","username":"yorik-sar"},"change_message_id":"00f66d04178c51ba2ee7ad525a6b83f3ff7b329f","unresolved":false,"context_lines":[{"line_number":160,"context_line":"        :returns: None"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        \"\"\""},{"line_number":163,"context_line":"        self.pool.resize(self.pool_size)"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"    def _run(self, application, socket):"},{"line_number":166,"context_line":"        \"\"\"Start a WSGI server in a new green thread.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_5ce83816","line":163,"updated":"2014-07-17 12:29:08.000000000","message":"This resize doesn\u0027t quite make sense to me. Is pool size changed anywhere? Given that by this time service is already down, I guess, there\u0027s nothing to do here.\n\nOn the second thought, you should just set self.socket to None here so that call to (original) start will recreate it.","commit_id":"dd6777dac57dcabed8a8dab5838aaf808a7c649d"},{"author":{"_account_id":708,"name":"Yuriy Taraday","email":"yuriy@taraday.nl","username":"yorik-sar"},"change_message_id":"9510db874a73d775729f577a957001ea5a4df423","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                                      socket.SOCK_STREAM)[0]"},{"line_number":84,"context_line":"            family \u003d info[0]"},{"line_number":85,"context_line":"            bind_addr \u003d info[-1]"},{"line_number":86,"context_line":"        except Exception:"},{"line_number":87,"context_line":"            family \u003d socket.AF_INET"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_6ba6a210","line":86,"range":{"start_line":86,"start_character":8,"end_line":86,"end_character":25},"updated":"2014-07-21 14:47:40.000000000","message":"You should minimize try: block and catch more specific exception here.","commit_id":"cb1287ecf27d767601539def58cf9e85e6f50a0d"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"d03bfa7589bcb9e8186bf1530ac5b24c389d3ccd","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                                      socket.SOCK_STREAM)[0]"},{"line_number":84,"context_line":"            family \u003d info[0]"},{"line_number":85,"context_line":"            bind_addr \u003d info[-1]"},{"line_number":86,"context_line":"        except Exception:"},{"line_number":87,"context_line":"            family \u003d socket.AF_INET"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_92b1e2e2","line":86,"in_reply_to":"baada198_6ba6a210","updated":"2014-07-23 12:41:52.000000000","message":"Hi Yuriy,\n\nThe try: block can\u0027t be minimized because \u0027family\u0027 variable is reassigned in line #87 after getting socket.gaierror and passed as an argument in line #90 in eventlet.listen method.","commit_id":"cb1287ecf27d767601539def58cf9e85e6f50a0d"},{"author":{"_account_id":708,"name":"Yuriy Taraday","email":"yuriy@taraday.nl","username":"yorik-sar"},"change_message_id":"65b697a646289dd415dbaf60535895bd33a4e306","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                                      socket.SOCK_STREAM)[0]"},{"line_number":84,"context_line":"            family \u003d info[0]"},{"line_number":85,"context_line":"            bind_addr \u003d info[-1]"},{"line_number":86,"context_line":"        except Exception:"},{"line_number":87,"context_line":"            family \u003d socket.AF_INET"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_21ce02b8","line":86,"in_reply_to":"baada198_92b1e2e2","updated":"2014-07-23 14:40:11.000000000","message":"You can move everything but getaddrinfo call to else: branch.","commit_id":"cb1287ecf27d767601539def58cf9e85e6f50a0d"},{"author":{"_account_id":708,"name":"Yuriy Taraday","email":"yuriy@taraday.nl","username":"yorik-sar"},"change_message_id":"9510db874a73d775729f577a957001ea5a4df423","unresolved":false,"context_lines":[{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def stop(self):"},{"line_number":142,"context_line":"        if self.greenthread is not None:"},{"line_number":143,"context_line":"            # Resize pool to stop new requests from being processed"},{"line_number":144,"context_line":"            self.pool.resize(0)"},{"line_number":145,"context_line":"            self.greenthread.kill()"},{"line_number":146,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_0bd5261b","line":143,"range":{"start_line":143,"start_character":12,"end_line":143,"end_character":67},"updated":"2014-07-21 14:47:40.000000000","message":"Won\u0027t they stop being processed when _run thread is killed?","commit_id":"cb1287ecf27d767601539def58cf9e85e6f50a0d"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"d03bfa7589bcb9e8186bf1530ac5b24c389d3ccd","unresolved":false,"context_lines":[{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def stop(self):"},{"line_number":142,"context_line":"        if self.greenthread is not None:"},{"line_number":143,"context_line":"            # Resize pool to stop new requests from being processed"},{"line_number":144,"context_line":"            self.pool.resize(0)"},{"line_number":145,"context_line":"            self.greenthread.kill()"},{"line_number":146,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_92de423d","line":143,"in_reply_to":"baada198_0bd5261b","updated":"2014-07-23 12:41:52.000000000","message":"Hi Yuriy,\n\nThank you for pointing this out. Yes, the new requests will be stopped being processed when _run thread is killed.\n\nWe have done this to ensure that server doesn\u0027t accept incoming requests \nafter getting SIGHUP signal. The same was implemented in other Openstack projects like nova, cinder.\n\nPl refer: \nIn nova: https://github.com/openstack/nova/blob/master/nova/wsgi.py#L242\nIn cinder: https://github.com/openstack/cinder/blob/master/cinder/wsgi.py#L252","commit_id":"cb1287ecf27d767601539def58cf9e85e6f50a0d"},{"author":{"_account_id":708,"name":"Yuriy Taraday","email":"yuriy@taraday.nl","username":"yorik-sar"},"change_message_id":"65b697a646289dd415dbaf60535895bd33a4e306","unresolved":false,"context_lines":[{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def stop(self):"},{"line_number":142,"context_line":"        if self.greenthread is not None:"},{"line_number":143,"context_line":"            # Resize pool to stop new requests from being processed"},{"line_number":144,"context_line":"            self.pool.resize(0)"},{"line_number":145,"context_line":"            self.greenthread.kill()"},{"line_number":146,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_21860217","line":143,"in_reply_to":"baada198_92de423d","updated":"2014-07-23 14:40:11.000000000","message":"How would it accept incoming request when thread that does that is killed? I see it fixed in the last patchset but I just wonder why would it be done this way in other projects.","commit_id":"cb1287ecf27d767601539def58cf9e85e6f50a0d"},{"author":{"_account_id":708,"name":"Yuriy Taraday","email":"yuriy@taraday.nl","username":"yorik-sar"},"change_message_id":"7c788fceadc2eccfbf9699e659b6df5f3e985ded","unresolved":false,"context_lines":[{"line_number":82,"context_line":"                                      socket.SOCK_STREAM)[0]"},{"line_number":83,"context_line":"            family \u003d info[0]"},{"line_number":84,"context_line":"            bind_addr \u003d info[-1]"},{"line_number":85,"context_line":"        except socket.gaierror:"},{"line_number":86,"context_line":"            family \u003d socket.AF_INET"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_2110c2aa","line":85,"range":{"start_line":85,"start_character":22,"end_line":85,"end_character":30},"updated":"2014-07-23 14:41:09.000000000","message":"Wow, didn\u0027t know there\u0027s a special error class for getaddrinfo","commit_id":"3457a2607d7a17bf9867c1690ad57a7587ea4307"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d8d8b61e2fcc10afe13f91bedbc92dac1d9df88b","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        bind_addr \u003d (host, port)"},{"line_number":75,"context_line":"        # TODO(dims): eventlet\u0027s green dns/socket module does not actually"},{"line_number":76,"context_line":"        # support IPv6 in getaddrinfo(). We need to get around this in the"},{"line_number":77,"context_line":"        # future or monitor upstream for a fix"},{"line_number":78,"context_line":"        try:"},{"line_number":79,"context_line":"            info \u003d socket.getaddrinfo(bind_addr[0],"},{"line_number":80,"context_line":"                                      bind_addr[1],"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_616dc866","line":77,"updated":"2014-07-28 14:36:33.000000000","message":"has this been raised in eventlet upstream? If so, maybe we could post a link to here pointing to the resource.","commit_id":"ad2f315091906d47df51e912d5c1b80f870a0cfa"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"9fc1625034e0b27cebd6fbd28080b320bd50533c","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        bind_addr \u003d (host, port)"},{"line_number":75,"context_line":"        # TODO(dims): eventlet\u0027s green dns/socket module does not actually"},{"line_number":76,"context_line":"        # support IPv6 in getaddrinfo(). We need to get around this in the"},{"line_number":77,"context_line":"        # future or monitor upstream for a fix"},{"line_number":78,"context_line":"        try:"},{"line_number":79,"context_line":"            info \u003d socket.getaddrinfo(bind_addr[0],"},{"line_number":80,"context_line":"                                      bind_addr[1],"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_8974699c","line":77,"in_reply_to":"baada198_616dc866","updated":"2014-07-30 12:59:26.000000000","message":"Done","commit_id":"ad2f315091906d47df51e912d5c1b80f870a0cfa"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"5c00b592d80bd61134d383bb3d773a4dcb97789d","unresolved":false,"context_lines":[{"line_number":84,"context_line":"                                      bind_addr[1],"},{"line_number":85,"context_line":"                                      socket.AF_UNSPEC,"},{"line_number":86,"context_line":"                                      socket.SOCK_STREAM)[0]"},{"line_number":87,"context_line":"        except socket.gaierror:"},{"line_number":88,"context_line":"            family \u003d socket.AF_INET"},{"line_number":89,"context_line":"        else:"},{"line_number":90,"context_line":"            family \u003d info[0]"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_cbd0e054","line":87,"updated":"2014-07-31 17:05:45.000000000","message":"Is there any reason why this part isn\u0027t in a separate commit?","commit_id":"214162b20355d7976c548e9e9fe22b6abf20b2d5"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"fb9328822c71aa4a8edb30b1d58114e6f9265796","unresolved":false,"context_lines":[{"line_number":84,"context_line":"                                      bind_addr[1],"},{"line_number":85,"context_line":"                                      socket.AF_UNSPEC,"},{"line_number":86,"context_line":"                                      socket.SOCK_STREAM)[0]"},{"line_number":87,"context_line":"        except socket.gaierror:"},{"line_number":88,"context_line":"            family \u003d socket.AF_INET"},{"line_number":89,"context_line":"        else:"},{"line_number":90,"context_line":"            family \u003d info[0]"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_233c0a92","line":87,"in_reply_to":"baada198_cbd0e054","updated":"2014-08-01 08:56:50.000000000","message":"Hi David,\n\nThe same code was there in other Openstack projects like nova and cinder, where generic Exception was caught.\n\nWe have got comment for the same to catch specific exception, which will be raised from getaddrinfo method,\nso we are making changes in same patch.\n\nPl refer: https://review.openstack.org/#/c/107482/2/keystone/common/environment/eventlet_server.py","commit_id":"214162b20355d7976c548e9e9fe22b6abf20b2d5"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"5c00b592d80bd61134d383bb3d773a4dcb97789d","unresolved":false,"context_lines":[{"line_number":91,"context_line":"            bind_addr \u003d info[-1]"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        try:"},{"line_number":94,"context_line":"            self.socket \u003d eventlet.listen(bind_addr, family, backlog\u003dbacklog)"},{"line_number":95,"context_line":"        except EnvironmentError:"},{"line_number":96,"context_line":"            LOG.error(_(\"Could not bind to %(host)s:%(port)s\"),"},{"line_number":97,"context_line":"                      {\u0027host\u0027: host, \u0027port\u0027: port})"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_0b42d80e","line":94,"updated":"2014-07-31 17:05:45.000000000","message":"Is there any reason you wanted to start listening here? I\u0027m not a big fan of doing stuff like this in the __init__ method.","commit_id":"214162b20355d7976c548e9e9fe22b6abf20b2d5"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"fb9328822c71aa4a8edb30b1d58114e6f9265796","unresolved":false,"context_lines":[{"line_number":91,"context_line":"            bind_addr \u003d info[-1]"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        try:"},{"line_number":94,"context_line":"            self.socket \u003d eventlet.listen(bind_addr, family, backlog\u003dbacklog)"},{"line_number":95,"context_line":"        except EnvironmentError:"},{"line_number":96,"context_line":"            LOG.error(_(\"Could not bind to %(host)s:%(port)s\"),"},{"line_number":97,"context_line":"                      {\u0027host\u0027: host, \u0027port\u0027: port})"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_43581ef9","line":94,"in_reply_to":"baada198_0b42d80e","updated":"2014-08-01 08:56:50.000000000","message":"Hi David,\n\nThe server object will be created only once, but the start method will be called for each child process. So we don\u0027t want to listen for all child processes on same port again.","commit_id":"214162b20355d7976c548e9e9fe22b6abf20b2d5"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"5c00b592d80bd61134d383bb3d773a4dcb97789d","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                  \u0027host\u0027: self.host,"},{"line_number":103,"context_line":"                  \u0027port\u0027: self.port})"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def start(self, key\u003dNone, backlog\u003d128):"},{"line_number":106,"context_line":"        \"\"\"Run a WSGI server with the given application.\"\"\""},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        dup_socket \u003d self.socket.dup()"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_cb4d4073","line":105,"updated":"2014-07-31 17:05:45.000000000","message":"Since nothing in start uses backlog why keep it?","commit_id":"214162b20355d7976c548e9e9fe22b6abf20b2d5"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"fb9328822c71aa4a8edb30b1d58114e6f9265796","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                  \u0027host\u0027: self.host,"},{"line_number":103,"context_line":"                  \u0027port\u0027: self.port})"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def start(self, key\u003dNone, backlog\u003d128):"},{"line_number":106,"context_line":"        \"\"\"Run a WSGI server with the given application.\"\"\""},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        dup_socket \u003d self.socket.dup()"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_43265e68","line":105,"in_reply_to":"baada198_cb4d4073","updated":"2014-08-01 08:56:50.000000000","message":"Done","commit_id":"214162b20355d7976c548e9e9fe22b6abf20b2d5"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"5c00b592d80bd61134d383bb3d773a4dcb97789d","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        except greenlet.GreenletExit:"},{"line_number":156,"context_line":"            pass"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    def reset(self):"},{"line_number":159,"context_line":"        pass"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    def _run(self, application, socket):"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_0b59f8fc","line":158,"updated":"2014-07-31 17:05:45.000000000","message":"This feels odd to me. Is it support to stop and then start the server?","commit_id":"214162b20355d7976c548e9e9fe22b6abf20b2d5"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"fb9328822c71aa4a8edb30b1d58114e6f9265796","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        except greenlet.GreenletExit:"},{"line_number":156,"context_line":"            pass"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    def reset(self):"},{"line_number":159,"context_line":"        pass"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    def _run(self, application, socket):"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_430f3ee0","line":158,"in_reply_to":"baada198_0b59f8fc","updated":"2014-08-01 08:56:50.000000000","message":"Hi David,\n\nYes, you are right. It is added to restart the service gracefully on sending SIGHUP signal.\n\nWithout this code block, it will throws AttributeError: \u0027Server\u0027 object has no attribute \u0027reset\u0027\n\nPl refer: https://bugs.launchpad.net/keystone/+bug/1337850","commit_id":"214162b20355d7976c548e9e9fe22b6abf20b2d5"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"5d38b026fd20b2a62ad114176885990fc19dd81a","unresolved":false,"context_lines":[{"line_number":81,"context_line":"                                           self.application,"},{"line_number":82,"context_line":"                                           self.socket)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def listen(self, key\u003dNone, backlog\u003d128):"},{"line_number":85,"context_line":"        \"\"\"Create and start listening on socket."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        Call before forking worker processes."}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_de6c83a1","side":"PARENT","line":84,"updated":"2014-08-05 17:52:47.000000000","message":"I like keeping this logic in a separate method.","commit_id":"a617408a7ba441b46fc618a86501adbcaa403dd9"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"c03566b48ca1853fb62e100ceba8edf8c823f236","unresolved":false,"context_lines":[{"line_number":81,"context_line":"                                           self.application,"},{"line_number":82,"context_line":"                                           self.socket)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def listen(self, key\u003dNone, backlog\u003d128):"},{"line_number":85,"context_line":"        \"\"\"Create and start listening on socket."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        Call before forking worker processes."}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_9e459674","side":"PARENT","line":84,"in_reply_to":"baada198_de6c83a1","updated":"2014-08-06 07:25:15.000000000","message":"Hi David,\n\nFor uniformity with other openstack projects like nova and cinder we have moved this logic in the init() method.","commit_id":"a617408a7ba441b46fc618a86501adbcaa403dd9"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"5d38b026fd20b2a62ad114176885990fc19dd81a","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        except greenlet.GreenletExit:"},{"line_number":156,"context_line":"            pass"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    def reset(self):"},{"line_number":159,"context_line":"        pass"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    def _run(self, application, socket):"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_7e0537c0","line":158,"updated":"2014-08-05 17:52:47.000000000","message":"Can you explain why this is needed if it doesn\u0027t do anything? I\u0027m a little concern that the framework calls this and expects it to be doing something.","commit_id":"bd20f72c457b36bd20b558699dbfdcd32d6b971d"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"c03566b48ca1853fb62e100ceba8edf8c823f236","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        except greenlet.GreenletExit:"},{"line_number":156,"context_line":"            pass"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    def reset(self):"},{"line_number":159,"context_line":"        pass"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    def _run(self, application, socket):"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_b1744b9c","line":158,"in_reply_to":"baada198_7e0537c0","updated":"2014-08-06 07:25:15.000000000","message":"Currently in oslo-incubator service framework [1] there is no validation for checking whether reset attribute is available in Server class or not. So, if we did not add this reset method here [2] it will raise Attribute error. \n\n[1] https://github.com/openstack/oslo-incubator/blob/master/openstack/common/service.py#L488\n\n[2] https://bugs.launchpad.net/keystone/+bug/1337850","commit_id":"bd20f72c457b36bd20b558699dbfdcd32d6b971d"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"f5ac287e8e47408435e5e9fb3eb9143e9a052dcf","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    \"\"\"Server class to manage multiple WSGI sockets and applications.\"\"\""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def __init__(self, application, host\u003dNone, port\u003dNone, threads\u003d1000,"},{"line_number":61,"context_line":"                 keepalive\u003dFalse, keepidle\u003dNone, backlog\u003d128):"},{"line_number":62,"context_line":"        self.application \u003d application"},{"line_number":63,"context_line":"        self.host \u003d host or \u00270.0.0.0\u0027"},{"line_number":64,"context_line":"        self.port \u003d port or 0"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_68d428ea","line":61,"updated":"2014-08-08 14:15:03.000000000","message":"Backlog is not being used here so it should be removed.","commit_id":"6210f2cdbc0c37818f422f07fb6baf04e26dfccc"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"0571493249cc5b7b01152bc85b50ca2381d1d40b","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    \"\"\"Server class to manage multiple WSGI sockets and applications.\"\"\""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def __init__(self, application, host\u003dNone, port\u003dNone, threads\u003d1000,"},{"line_number":61,"context_line":"                 keepalive\u003dFalse, keepidle\u003dNone, backlog\u003d128):"},{"line_number":62,"context_line":"        self.application \u003d application"},{"line_number":63,"context_line":"        self.host \u003d host or \u00270.0.0.0\u0027"},{"line_number":64,"context_line":"        self.port \u003d port or 0"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_506c3e6b","line":61,"in_reply_to":"baada198_68d428ea","updated":"2014-08-11 06:41:29.000000000","message":"Done","commit_id":"6210f2cdbc0c37818f422f07fb6baf04e26dfccc"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"f5ac287e8e47408435e5e9fb3eb9143e9a052dcf","unresolved":false,"context_lines":[{"line_number":92,"context_line":"                                      bind_addr[1],"},{"line_number":93,"context_line":"                                      socket.AF_UNSPEC,"},{"line_number":94,"context_line":"                                      socket.SOCK_STREAM)[0]"},{"line_number":95,"context_line":"        except socket.gaierror:"},{"line_number":96,"context_line":"            family \u003d socket.AF_INET"},{"line_number":97,"context_line":"        else:"},{"line_number":98,"context_line":"            family \u003d info[0]"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_e82e78f8","line":95,"updated":"2014-08-08 14:15:03.000000000","message":"I think that maybe this change deserves its own commit.","commit_id":"6210f2cdbc0c37818f422f07fb6baf04e26dfccc"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"0571493249cc5b7b01152bc85b50ca2381d1d40b","unresolved":false,"context_lines":[{"line_number":92,"context_line":"                                      bind_addr[1],"},{"line_number":93,"context_line":"                                      socket.AF_UNSPEC,"},{"line_number":94,"context_line":"                                      socket.SOCK_STREAM)[0]"},{"line_number":95,"context_line":"        except socket.gaierror:"},{"line_number":96,"context_line":"            family \u003d socket.AF_INET"},{"line_number":97,"context_line":"        else:"},{"line_number":98,"context_line":"            family \u003d info[0]"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_708ce22e","line":95,"in_reply_to":"baada198_e82e78f8","updated":"2014-08-11 06:41:29.000000000","message":"Done","commit_id":"6210f2cdbc0c37818f422f07fb6baf04e26dfccc"}],"keystone/tests/test_wsgi.py":[{"author":{"_account_id":708,"name":"Yuriy Taraday","email":"yuriy@taraday.nl","username":"yorik-sar"},"change_message_id":"00f66d04178c51ba2ee7ad525a6b83f3ff7b329f","unresolved":false,"context_lines":[{"line_number":410,"context_line":"        mock_getaddrinfo.return_value \u003d [(1, 2, 3, 4, 5)]"},{"line_number":411,"context_line":"        mock_sock \u003d mock.Mock()"},{"line_number":412,"context_line":"        mock_sock_dup \u003d mock_sock.dup()"},{"line_number":413,"context_line":"        mock_sock_dup.setsockopt \u003d mock.Mock()"},{"line_number":414,"context_line":""},{"line_number":415,"context_line":"        mock_listen.return_value \u003d mock_sock"},{"line_number":416,"context_line":"        server \u003d environment.Server(mock.MagicMock(), host\u003dself.host,"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_bc46b479","line":413,"updated":"2014-07-17 12:29:08.000000000","message":"I don\u0027t see why all these mocks are explicitly created here. If you need mock_sock_dup, you can do just\n\n    mock_sock_dup \u003d mock_listen.return_value.dup.return_value\n\nThis would avoid all unnecessary calls to different Mocks.","commit_id":"dd6777dac57dcabed8a8dab5838aaf808a7c649d"},{"author":{"_account_id":708,"name":"Yuriy Taraday","email":"yuriy@taraday.nl","username":"yorik-sar"},"change_message_id":"9510db874a73d775729f577a957001ea5a4df423","unresolved":false,"context_lines":[{"line_number":378,"context_line":"    def test_keepalive_unset(self, mock_getaddrinfo, mock_listen):"},{"line_number":379,"context_line":"        mock_getaddrinfo.return_value \u003d [(1, 2, 3, 4, 5)]"},{"line_number":380,"context_line":"        mock_sock_dup \u003d mock_listen.return_value.dup.return_value"},{"line_number":381,"context_line":"        mock_sock_dup.setsockopt \u003d mock.Mock()"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"        server \u003d environment.Server(mock.MagicMock(), host\u003dself.host,"},{"line_number":384,"context_line":"                                    port\u003dself.port)"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_8b3bf6cf","line":381,"range":{"start_line":381,"start_character":8,"end_line":381,"end_character":46},"updated":"2014-07-21 14:47:40.000000000","message":"You don\u0027t need to set Mock\u0027s attributes to other mocks - they\u0027re created automatically.","commit_id":"cb1287ecf27d767601539def58cf9e85e6f50a0d"}]}
