)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"8cdd6f449ad02640fda730f944f0b28dd9fe70f4","unresolved":false,"context_lines":[{"line_number":11,"context_line":"multiple RPC workers using similar patterns and remembering that some"},{"line_number":12,"context_line":"things were left in a rather awkward state."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"blueprint multiple-rpc-workers"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I549db67af4af6a2df80e12cf233109dda5213c47"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"1ae5cdf2_5c0a6b8a","line":14,"range":{"start_line":14,"start_character":10,"end_line":14,"end_character":30},"updated":"2014-06-06 06:40:21.000000000","message":"i couldn\u0027t find this bp.","commit_id":"c23c41b1401141361098240e7aee865f169a936b"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"c78dc5504e14bd450a1cc959e17a0b28658f54e3","unresolved":false,"context_lines":[{"line_number":11,"context_line":"multiple RPC workers using similar patterns and remembering that some"},{"line_number":12,"context_line":"things were left in a rather awkward state."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"blueprint multiple-rpc-workers"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I549db67af4af6a2df80e12cf233109dda5213c47"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"1ae5cdf2_4f9ffdb4","line":14,"in_reply_to":"1ae5cdf2_5c0a6b8a","updated":"2014-06-06 15:11:35.000000000","message":"You\u0027re right.  I never actually created it.  I meant to remove this line because this is a refactor.  Good catch.","commit_id":"c23c41b1401141361098240e7aee865f169a936b"}],"neutron/openstack/common/service.py":[{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"53e217d9b0996874622de0ae2718762a8f706f65","unresolved":false,"context_lines":[{"line_number":415,"context_line":"        # Todo (carl) this needs more work"},{"line_number":416,"context_line":"        self.running \u003d False"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":""},{"line_number":419,"context_line":"class Service(object):"},{"line_number":420,"context_line":"    \"\"\"Service object for binaries running on hosts.\"\"\""},{"line_number":421,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAWH%2F90Lg%3D","line":418,"updated":"2014-04-01 23:52:25.000000000","message":"This code shouldn\u0027t be editing neutron/openstack/common code.","commit_id":"8e3e304d2ba30e98cf9e28545d4fc80daf67c336"}],"neutron/service.py":[{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"de13d798fbc06f21cebe893730dd0f21ada12e71","unresolved":false,"context_lines":[{"line_number":39,"context_line":"               help\u003d_(\u0027Seconds between running periodic tasks\u0027)),"},{"line_number":40,"context_line":"    cfg.IntOpt(\u0027api_workers\u0027,"},{"line_number":41,"context_line":"               default\u003d0,"},{"line_number":42,"context_line":"               help\u003d_(\u0027Number of API worker processes for service\u0027)),"},{"line_number":43,"context_line":"    cfg.IntOpt(\u0027periodic_fuzzy_delay\u0027,"},{"line_number":44,"context_line":"               default\u003d5,"},{"line_number":45,"context_line":"               help\u003d_(\u0027Range of seconds to randomly delay when starting the \u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAWH%2F%2B8Sc%3D","line":42,"updated":"2014-03-21 14:23:29.000000000","message":"If those aren\u0027t separate workers now, having a 0 default sounds confusing, like no API service at all.\n\nmay be, \"separate API workers\"\n\nMay be we should consider that 0 \u003d no api workers, thinking of running rpc workers and API workers on separate instances , and setting the default to \u00271\u0027 here.\n\nSetting a -1 only to make sure I get an answer, I\u0027m not sure if I make sense ;)","commit_id":"15efc3916ab5675f5a12d5d9c68041742452b9b0"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"a6c845ae4cdedf8d5352aafcf3bcea84f6c580c2","unresolved":false,"context_lines":[{"line_number":39,"context_line":"               help\u003d_(\u0027Seconds between running periodic tasks\u0027)),"},{"line_number":40,"context_line":"    cfg.IntOpt(\u0027api_workers\u0027,"},{"line_number":41,"context_line":"               default\u003d0,"},{"line_number":42,"context_line":"               help\u003d_(\u0027Number of API worker processes for service\u0027)),"},{"line_number":43,"context_line":"    cfg.IntOpt(\u0027periodic_fuzzy_delay\u0027,"},{"line_number":44,"context_line":"               default\u003d5,"},{"line_number":45,"context_line":"               help\u003d_(\u0027Range of seconds to randomly delay when starting the \u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAWH%2F%2B5ak%3D","line":42,"in_reply_to":"AAAAWH%2F%2B8Sc%3D","updated":"2014-03-21 21:24:45.000000000","message":"I think it makes sense to keep the word separate.  Thanks for that feedback.\n\nI agree that 0 is a bit confusing.  I should have done it differently before.  However, this has been backported to Havana and I think it should not be changed at this point.","commit_id":"15efc3916ab5675f5a12d5d9c68041742452b9b0"}],"neutron/tests/unit/test_metadata_agent.py":[{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"14f4794362ab4dadf995c4bc884f7ce8be64bc32","unresolved":false,"context_lines":[{"line_number":421,"context_line":"        super(TestUnixDomainWSGIServer, self).setUp()"},{"line_number":422,"context_line":"        self.eventlet_p \u003d mock.patch.object(agent, \u0027eventlet\u0027)"},{"line_number":423,"context_line":"        self.eventlet \u003d self.eventlet_p.start()"},{"line_number":424,"context_line":"        self.server \u003d agent.UnixDomainWSGIServer(\u0027test\u0027)"},{"line_number":425,"context_line":""},{"line_number":426,"context_line":"    def test_start(self):"},{"line_number":427,"context_line":"        mock_app \u003d mock.Mock()"}],"source_content_type":"text/x-python","patch_set":14,"id":"1ae5cdf2_ed72a348","side":"PARENT","line":424,"updated":"2014-06-21 19:04:28.000000000","message":"+1 seems we should verify _launch() is called","commit_id":"f9aaa9fdfa42b097b0c4f37d0be98875cc6482c3"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"8bfd0b3c066c74a5cfeb443df10fb8303ee7a884","unresolved":false,"context_lines":[{"line_number":421,"context_line":"        super(TestUnixDomainWSGIServer, self).setUp()"},{"line_number":422,"context_line":"        self.eventlet_p \u003d mock.patch.object(agent, \u0027eventlet\u0027)"},{"line_number":423,"context_line":"        self.eventlet \u003d self.eventlet_p.start()"},{"line_number":424,"context_line":"        self.server \u003d agent.UnixDomainWSGIServer(\u0027test\u0027)"},{"line_number":425,"context_line":""},{"line_number":426,"context_line":"    def test_start(self):"},{"line_number":427,"context_line":"        mock_app \u003d mock.Mock()"}],"source_content_type":"text/x-python","patch_set":14,"id":"1ae5cdf2_0be22403","side":"PARENT","line":424,"updated":"2014-06-09 08:55:39.000000000","message":"No replacement unit tests needed for these?","commit_id":"f9aaa9fdfa42b097b0c4f37d0be98875cc6482c3"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"4ff59ac4b298cd96818dc35fb087da7e996ac0ed","unresolved":false,"context_lines":[{"line_number":421,"context_line":"        super(TestUnixDomainWSGIServer, self).setUp()"},{"line_number":422,"context_line":"        self.eventlet_p \u003d mock.patch.object(agent, \u0027eventlet\u0027)"},{"line_number":423,"context_line":"        self.eventlet \u003d self.eventlet_p.start()"},{"line_number":424,"context_line":"        self.server \u003d agent.UnixDomainWSGIServer(\u0027test\u0027)"},{"line_number":425,"context_line":""},{"line_number":426,"context_line":"    def test_start(self):"},{"line_number":427,"context_line":"        mock_app \u003d mock.Mock()"}],"source_content_type":"text/x-python","patch_set":14,"id":"1ae5cdf2_1637bbe5","side":"PARENT","line":424,"in_reply_to":"1ae5cdf2_ed72a348","updated":"2014-06-23 16:35:44.000000000","message":"Hi, just getting back from vacation.  I\u0027ll have a look soon.","commit_id":"f9aaa9fdfa42b097b0c4f37d0be98875cc6482c3"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"bb73d9ba3167f184e70eb64a17bbef2882ee10f2","unresolved":false,"context_lines":[{"line_number":421,"context_line":"        self.eventlet \u003d self.eventlet_p.start()"},{"line_number":422,"context_line":"        self.server \u003d agent.UnixDomainWSGIServer(\u0027test\u0027)"},{"line_number":423,"context_line":""},{"line_number":424,"context_line":"    def test_start(self):"},{"line_number":425,"context_line":"        mock_app \u003d mock.Mock()"},{"line_number":426,"context_line":"        with mock.patch.object(self.server, \u0027pool\u0027) as pool:"},{"line_number":427,"context_line":"            self.server.start(mock_app, \u0027/the/path\u0027, workers\u003d0, backlog\u003d128)"}],"source_content_type":"text/x-python","patch_set":15,"id":"1ae5cdf2_99b68f3d","side":"PARENT","line":424,"updated":"2014-06-23 23:17:34.000000000","message":"I still need to address these unit tests.  I have written some but I cannot test them due to some new unit test problems I\u0027m facing today.  I will mark this WIP until I add a unit test.","commit_id":"f7ef6ea7ec798e62814f2071126de6e4fcb15b02"}],"neutron/wsgi.py":[{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"120e2c4e1be0d32992b64a54b1f1bf0470934b15","unresolved":false,"context_lines":[{"line_number":234,"context_line":"        return self._socket.getsockname()[1] if self._socket else self._port"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"    def stop(self):"},{"line_number":237,"context_line":"        self._server.stop()"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    def wait(self):"},{"line_number":240,"context_line":"        \"\"\"Wait until all servers have completed running.\"\"\""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAXH%2F%2FYnM%3D","line":237,"updated":"2014-04-22 07:00:09.000000000","message":"There seems to be no ProcessLauncher.stop() funtcion.\nAm I missing something?","commit_id":"03fc4a1380822931eb1be71d5e7c37d7c98e8795"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"38a1bb7f8b90b6a330ab434ca88da44df6b35850","unresolved":false,"context_lines":[{"line_number":234,"context_line":"        return self._socket.getsockname()[1] if self._socket else self._port"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"    def stop(self):"},{"line_number":237,"context_line":"        self._server.stop()"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    def wait(self):"},{"line_number":240,"context_line":"        \"\"\"Wait until all servers have completed running.\"\"\""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAXH%2F%2FRrc%3D","line":237,"in_reply_to":"AAAAXH%2F%2FR7M%3D","updated":"2014-04-22 19:57:11.000000000","message":"So, I thought I\u0027d implement stop in ProcessLauncher here:  https://review.openstack.org/89686\n\nThat way, this code doesn\u0027t have to be cracked open to fix this and ProcessLauncher gets a stop method.","commit_id":"03fc4a1380822931eb1be71d5e7c37d7c98e8795"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"7cb262d1dd4ea2b1da59cc07ad327c37a40ce20c","unresolved":false,"context_lines":[{"line_number":234,"context_line":"        return self._socket.getsockname()[1] if self._socket else self._port"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"    def stop(self):"},{"line_number":237,"context_line":"        self._server.stop()"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    def wait(self):"},{"line_number":240,"context_line":"        \"\"\"Wait until all servers have completed running.\"\"\""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAXH%2F%2FR7M%3D","line":237,"in_reply_to":"AAAAXH%2F%2FSR4%3D","updated":"2014-04-22 19:27:22.000000000","message":"Good point, Mark.  Maybe some of the changes in this patch will be relevant?","commit_id":"03fc4a1380822931eb1be71d5e7c37d7c98e8795"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"093ceaadfddbcbba6c75c5fd576ba6b3c5f87e07","unresolved":false,"context_lines":[{"line_number":234,"context_line":"        return self._socket.getsockname()[1] if self._socket else self._port"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"    def stop(self):"},{"line_number":237,"context_line":"        self._server.stop()"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    def wait(self):"},{"line_number":240,"context_line":"        \"\"\"Wait until all servers have completed running.\"\"\""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAXH%2F%2FSR4%3D","line":237,"in_reply_to":"AAAAXH%2F%2FSeA%3D","updated":"2014-04-22 18:33:41.000000000","message":"This module is going aways during Juno.","commit_id":"03fc4a1380822931eb1be71d5e7c37d7c98e8795"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"fe4b8f285f719690e8a915e92ffacc9fddc741e0","unresolved":false,"context_lines":[{"line_number":234,"context_line":"        return self._socket.getsockname()[1] if self._socket else self._port"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"    def stop(self):"},{"line_number":237,"context_line":"        self._server.stop()"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    def wait(self):"},{"line_number":240,"context_line":"        \"\"\"Wait until all servers have completed running.\"\"\""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAXH%2F%2FSeA%3D","line":237,"in_reply_to":"AAAAXH%2F%2FSxo%3D","updated":"2014-04-22 18:15:55.000000000","message":"Looks like this stop is never called in any code path.  I might just throw unimplemented here instead of trying to implement something that would never be used in ProcessLauncher.","commit_id":"03fc4a1380822931eb1be71d5e7c37d7c98e8795"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"e2d227284be5517454b002a9b0d7b6bbdc9d4e0b","unresolved":false,"context_lines":[{"line_number":234,"context_line":"        return self._socket.getsockname()[1] if self._socket else self._port"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"    def stop(self):"},{"line_number":237,"context_line":"        self._server.stop()"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    def wait(self):"},{"line_number":240,"context_line":"        \"\"\"Wait until all servers have completed running.\"\"\""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAXH%2F%2FSxo%3D","line":237,"in_reply_to":"AAAAXH%2F%2FTQg%3D","updated":"2014-04-22 17:40:40.000000000","message":"Right, I think I lost something in one of my revisions.  Let me take a look.","commit_id":"03fc4a1380822931eb1be71d5e7c37d7c98e8795"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"9b73587f59f778104c43992a3e214b914386e2a0","unresolved":false,"context_lines":[{"line_number":234,"context_line":"        return self._socket.getsockname()[1] if self._socket else self._port"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"    def stop(self):"},{"line_number":237,"context_line":"        self._server.stop()"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    def wait(self):"},{"line_number":240,"context_line":"        \"\"\"Wait until all servers have completed running.\"\"\""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAXH%2F%2FTQg%3D","line":237,"in_reply_to":"AAAAXH%2F%2FYnM%3D","updated":"2014-04-22 16:35:14.000000000","message":"Agreed. This doesn\u0027t look right in the multi-process case.","commit_id":"03fc4a1380822931eb1be71d5e7c37d7c98e8795"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"be95625fa39b84a0693cb420e72ac70a9d401a85","unresolved":false,"context_lines":[{"line_number":97,"context_line":"                                                self._service._socket)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def wait(self):"},{"line_number":100,"context_line":"        if isinstance(self._server, eventlet.greenthread.GreenThread):"},{"line_number":101,"context_line":"            self._server.wait()"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def stop(self):"}],"source_content_type":"text/x-python","patch_set":18,"id":"1abeadc6_dbce2b83","line":100,"updated":"2014-08-19 06:58:02.000000000","message":"Probably too late at this point, but it\u0027s more \u0027pythonic\u0027 to avoid the introspection into the class type and just try to call the function. \u0027try and ask for forgiveness vs. look before you leap...\u0027\n\ntry:\n    self._server.wait()\nexcept AttributeError:\n    pass\n\nEither that or we should just have a container compatible with both so we don\u0027t have to have special casing for the single mode.","commit_id":"144ea99d1a5839de6048cb5fed18ffb2cc5bb3e4"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"a590976e2dcecac72341fc64a692e39ea154809c","unresolved":false,"context_lines":[{"line_number":97,"context_line":"                                                self._service._socket)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def wait(self):"},{"line_number":100,"context_line":"        if isinstance(self._server, eventlet.greenthread.GreenThread):"},{"line_number":101,"context_line":"            self._server.wait()"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def stop(self):"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa98f980_1173f180","line":100,"in_reply_to":"1abeadc6_dbce2b83","updated":"2014-09-02 20:03:01.000000000","message":"Kevin.  You\u0027re right.  I like your suggestion.  If I have a reason to crack this patch open I will address this.","commit_id":"144ea99d1a5839de6048cb5fed18ffb2cc5bb3e4"}]}
