)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"2ce3822981bd8b5a48612d68caed01e45b1f66ab","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This adds service records for the API services for the purpose of"},{"line_number":10,"context_line":"version-tracking. Unlike other services, these records are not periodically"},{"line_number":11,"context_line":"updated, so this adds no additional runtime database burdon. The API"},{"line_number":12,"context_line":"services update the version (if necessary) of their record at startup."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This also adds filtering in three places to prevent us from exposing"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"fa80f949_6556c95d","line":11,"range":{"start_line":11,"start_character":53,"end_line":11,"end_character":59},"updated":"2015-11-06 17:46:23.000000000","message":"s/burdon/burden/","commit_id":"64b466c911564d31637ed29508838dfeeefcffa3"}],"nova/api/openstack/compute/availability_zone.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"8492be5df16ba0a2058dc92d056a30705461a484","unresolved":false,"context_lines":[{"line_number":67,"context_line":"                                                       set_zones\u003dTrue)"},{"line_number":68,"context_line":"        zone_hosts \u003d {}"},{"line_number":69,"context_line":"        host_services \u003d {}"},{"line_number":70,"context_line":"        api_services \u003d (\u0027nova-osapi_compute\u0027, \u0027nova-ec2\u0027, \u0027nova-metadata\u0027)"},{"line_number":71,"context_line":"        for service in enabled_services:"},{"line_number":72,"context_line":"            if service.binary in api_services:"},{"line_number":73,"context_line":"                # Skip API services in the listing since they are not"}],"source_content_type":"text/x-python","patch_set":7,"id":"da85f559_f9a999e0","line":70,"updated":"2015-11-08 14:07:55.000000000","message":"would it not be better to have this as a global variable instead of copying it here, in nova/api/openstack/compute/hosts.py, nova/api/openstack/compute/legacy_v2/contrib/availability_zone.py and nova/api/openstack/compute/legacy_v2/contrib/hosts.py?","commit_id":"b37a888e3751b117693b83e1d1fd828b2b56d224"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"050a995bf85686014240f561535cb5f2ccd8f3d2","unresolved":false,"context_lines":[{"line_number":67,"context_line":"                                                       set_zones\u003dTrue)"},{"line_number":68,"context_line":"        zone_hosts \u003d {}"},{"line_number":69,"context_line":"        host_services \u003d {}"},{"line_number":70,"context_line":"        api_services \u003d (\u0027nova-osapi_compute\u0027, \u0027nova-ec2\u0027, \u0027nova-metadata\u0027)"},{"line_number":71,"context_line":"        for service in enabled_services:"},{"line_number":72,"context_line":"            if service.binary in api_services:"},{"line_number":73,"context_line":"                # Skip API services in the listing since they are not"}],"source_content_type":"text/x-python","patch_set":7,"id":"da85f559_37888522","line":70,"in_reply_to":"da85f559_f9a999e0","updated":"2015-11-09 03:05:37.000000000","message":"nice idea, the above services seems common. so nice to have the list in common place.","commit_id":"b37a888e3751b117693b83e1d1fd828b2b56d224"}],"nova/api/openstack/compute/hosts.py":[{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"7a3877473d8ab2768a117bc9d4240f332f525a94","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        hosts \u003d []"},{"line_number":91,"context_line":"        api_services \u003d (\u0027nova-osapi_compute\u0027, \u0027nova-ec2\u0027, \u0027nova-metadata\u0027)"},{"line_number":92,"context_line":"        for service in services:"},{"line_number":93,"context_line":"            if service.binary not in api_services:"},{"line_number":94,"context_line":"                hosts.append({\u0027host_name\u0027: service[\u0027host\u0027],"},{"line_number":95,"context_line":"                              \u0027service\u0027: service[\u0027topic\u0027],"},{"line_number":96,"context_line":"                              \u0027zone\u0027: service[\u0027availability_zone\u0027]})"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa80f949_19ce482e","line":93,"updated":"2015-11-06 19:53:45.000000000","message":"I would think that admins would like this data exposed.  It would need a spec/bp and shouldn\u0027t be done here, just saying.","commit_id":"9d13e0105e7f508da08f29e0ba7c446722a6c5d1"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"050a995bf85686014240f561535cb5f2ccd8f3d2","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        hosts \u003d []"},{"line_number":91,"context_line":"        api_services \u003d (\u0027nova-osapi_compute\u0027, \u0027nova-ec2\u0027, \u0027nova-metadata\u0027)"},{"line_number":92,"context_line":"        for service in services:"},{"line_number":93,"context_line":"            if service.binary not in api_services:"},{"line_number":94,"context_line":"                hosts.append({\u0027host_name\u0027: service[\u0027host\u0027],"},{"line_number":95,"context_line":"                              \u0027service\u0027: service[\u0027topic\u0027],"},{"line_number":96,"context_line":"                              \u0027zone\u0027: service[\u0027availability_zone\u0027]})"}],"source_content_type":"text/x-python","patch_set":7,"id":"da85f559_57f3c973","line":93,"updated":"2015-11-09 03:05:37.000000000","message":"This patch removes the above services from host API.\nThat is an API change, generally API changes require microversions.\n\nAs the microversions history, these changes have added some attributes and new resources, change status code.\nSo this case is first time.\nSince https://github.com/openstack/nova/blob/master/doc/source/api_microversion_dev.rst#when-do-i-need-a-new-microversion , this case is not covered. I\u0027d like to get opinions from api subteam for this case.","commit_id":"b37a888e3751b117693b83e1d1fd828b2b56d224"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"d03a67bfb884d233cde5630bc147853ef5aa06c5","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        hosts \u003d []"},{"line_number":91,"context_line":"        api_services \u003d (\u0027nova-osapi_compute\u0027, \u0027nova-ec2\u0027, \u0027nova-metadata\u0027)"},{"line_number":92,"context_line":"        for service in services:"},{"line_number":93,"context_line":"            if service.binary not in api_services:"},{"line_number":94,"context_line":"                hosts.append({\u0027host_name\u0027: service[\u0027host\u0027],"},{"line_number":95,"context_line":"                              \u0027service\u0027: service[\u0027topic\u0027],"},{"line_number":96,"context_line":"                              \u0027zone\u0027: service[\u0027availability_zone\u0027]})"}],"source_content_type":"text/x-python","patch_set":7,"id":"da85f559_d6c49193","line":93,"in_reply_to":"da85f559_57f3c973","updated":"2015-11-09 09:47:38.000000000","message":"I thought this is here to stop this being an API change?","commit_id":"b37a888e3751b117693b83e1d1fd828b2b56d224"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"a2a4284fbff4df99f6683fbe2c544c4b3b4e4245","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        hosts \u003d []"},{"line_number":91,"context_line":"        api_services \u003d (\u0027nova-osapi_compute\u0027, \u0027nova-ec2\u0027, \u0027nova-metadata\u0027)"},{"line_number":92,"context_line":"        for service in services:"},{"line_number":93,"context_line":"            if service.binary not in api_services:"},{"line_number":94,"context_line":"                hosts.append({\u0027host_name\u0027: service[\u0027host\u0027],"},{"line_number":95,"context_line":"                              \u0027service\u0027: service[\u0027topic\u0027],"},{"line_number":96,"context_line":"                              \u0027zone\u0027: service[\u0027availability_zone\u0027]})"}],"source_content_type":"text/x-python","patch_set":7,"id":"da85f559_f6f51583","line":93,"in_reply_to":"da85f559_d6c49193","updated":"2015-11-09 10:11:31.000000000","message":"So, the goal of that whole change is to have those services actually be persisted in the services table. Since they will be added, Dan now needs to filter them out in order to respect the API contract.","commit_id":"b37a888e3751b117693b83e1d1fd828b2b56d224"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"5191a50c6d8ea3869dd664b8b1ca6a28a4331c06","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        hosts \u003d []"},{"line_number":91,"context_line":"        api_services \u003d (\u0027nova-osapi_compute\u0027, \u0027nova-ec2\u0027, \u0027nova-metadata\u0027)"},{"line_number":92,"context_line":"        for service in services:"},{"line_number":93,"context_line":"            if service.binary not in api_services:"},{"line_number":94,"context_line":"                hosts.append({\u0027host_name\u0027: service[\u0027host\u0027],"},{"line_number":95,"context_line":"                              \u0027service\u0027: service[\u0027topic\u0027],"},{"line_number":96,"context_line":"                              \u0027zone\u0027: service[\u0027availability_zone\u0027]})"}],"source_content_type":"text/x-python","patch_set":7,"id":"da85f559_39462e24","line":93,"in_reply_to":"da85f559_d6c49193","updated":"2015-11-09 10:11:25.000000000","message":"Sorry, I misunderstood this purpose.\n\nline 423 at https://review.openstack.org/#/c/242206/7/nova/service.py,cm affects API layer and this part is blocking the effect on the API layer.\n\nThanks for explanations, John and Sylvain on IRC.","commit_id":"b37a888e3751b117693b83e1d1fd828b2b56d224"}],"nova/service.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"43edef9cf7417d3713a973a02ea394b301ae2a7a","unresolved":false,"context_lines":[{"line_number":417,"context_line":"        \"\"\""},{"line_number":418,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":419,"context_line":"        try:"},{"line_number":420,"context_line":"            _create_service_ref(self, ctxt)"},{"line_number":421,"context_line":"        except (exception.ServiceTopicExists,"},{"line_number":422,"context_line":"                exception.ServiceBinaryExists):"},{"line_number":423,"context_line":"            _update_service_ref(self, ctxt)"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa80f949_73d696f2","line":420,"updated":"2015-11-06 17:20:57.000000000","message":"Nit: I prefer the fetch and create if no found pattern, like done in line 196, to avoid the exception in the happy path, but maybe thats dumb?","commit_id":"20b2de915025e3411f1fb9ad526ff7d16e97dbfb"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"205925caab39465358cd34f27a4f5ba745cb587f","unresolved":false,"context_lines":[{"line_number":417,"context_line":"        \"\"\""},{"line_number":418,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":419,"context_line":"        try:"},{"line_number":420,"context_line":"            _create_service_ref(self, ctxt)"},{"line_number":421,"context_line":"        except (exception.ServiceTopicExists,"},{"line_number":422,"context_line":"                exception.ServiceBinaryExists):"},{"line_number":423,"context_line":"            _update_service_ref(self, ctxt)"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa80f949_99f7988a","line":420,"in_reply_to":"fa80f949_73d696f2","updated":"2015-11-06 19:47:41.000000000","message":"I guess that results in less load in the common case, where this is less load when you first start a worker. So, yeah, I\u0027ll do that.","commit_id":"20b2de915025e3411f1fb9ad526ff7d16e97dbfb"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"7a3877473d8ab2768a117bc9d4240f332f525a94","unresolved":false,"context_lines":[{"line_number":417,"context_line":"        \"\"\""},{"line_number":418,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":419,"context_line":"        try:"},{"line_number":420,"context_line":"            _create_service_ref(self, ctxt)"},{"line_number":421,"context_line":"        except (exception.ServiceTopicExists,"},{"line_number":422,"context_line":"                exception.ServiceBinaryExists):"},{"line_number":423,"context_line":"            _update_service_ref(self, ctxt)"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa80f949_b9385cef","line":420,"updated":"2015-11-06 19:53:45.000000000","message":"Were you going to change the order of this?","commit_id":"9d13e0105e7f508da08f29e0ba7c446722a6c5d1"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"8492be5df16ba0a2058dc92d056a30705461a484","unresolved":false,"context_lines":[{"line_number":142,"context_line":"                                                     this_service.host,"},{"line_number":143,"context_line":"                                                     this_service.binary)"},{"line_number":144,"context_line":"    if not service:"},{"line_number":145,"context_line":"        LOG.error(_(\u0027Unable to find a service record to update for \u0027"},{"line_number":146,"context_line":"                    \u0027%(binary)s on %(host)s\u0027) % {\u0027binary\u0027: this_service.binary,"},{"line_number":147,"context_line":"                                                 \u0027host\u0027: this_service.host})"},{"line_number":148,"context_line":"        return"}],"source_content_type":"text/x-python","patch_set":7,"id":"da85f559_795fe90e","line":145,"updated":"2015-11-08 14:07:55.000000000","message":"missing translation _LE","commit_id":"b37a888e3751b117693b83e1d1fd828b2b56d224"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"a2a4284fbff4df99f6683fbe2c544c4b3b4e4245","unresolved":false,"context_lines":[{"line_number":142,"context_line":"                                                     this_service.host,"},{"line_number":143,"context_line":"                                                     this_service.binary)"},{"line_number":144,"context_line":"    if not service:"},{"line_number":145,"context_line":"        LOG.error(_(\u0027Unable to find a service record to update for \u0027"},{"line_number":146,"context_line":"                    \u0027%(binary)s on %(host)s\u0027) % {\u0027binary\u0027: this_service.binary,"},{"line_number":147,"context_line":"                                                 \u0027host\u0027: this_service.host})"},{"line_number":148,"context_line":"        return"}],"source_content_type":"text/x-python","patch_set":7,"id":"da85f559_f66af519","line":145,"in_reply_to":"da85f559_795fe90e","updated":"2015-11-09 10:11:31.000000000","message":"we can fix that later","commit_id":"b37a888e3751b117693b83e1d1fd828b2b56d224"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"62601950c807520dcf9d5bb8cda15914e71c0eca","unresolved":false,"context_lines":[{"line_number":142,"context_line":"                                                     this_service.host,"},{"line_number":143,"context_line":"                                                     this_service.binary)"},{"line_number":144,"context_line":"    if not service:"},{"line_number":145,"context_line":"        LOG.error(_(\u0027Unable to find a service record to update for \u0027"},{"line_number":146,"context_line":"                    \u0027%(binary)s on %(host)s\u0027) % {\u0027binary\u0027: this_service.binary,"},{"line_number":147,"context_line":"                                                 \u0027host\u0027: this_service.host})"},{"line_number":148,"context_line":"        return"}],"source_content_type":"text/x-python","patch_set":7,"id":"da85f559_c1036075","line":145,"in_reply_to":"da85f559_f66af519","updated":"2015-11-13 16:30:53.000000000","message":"Given that https://review.openstack.org/#/c/245226/ is proposed, I\u0027m fine","commit_id":"b37a888e3751b117693b83e1d1fd828b2b56d224"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"a484f7e5fe87216ed27f26ebaa781ae42d198130","unresolved":false,"context_lines":[{"line_number":427,"context_line":"                # don\u0027t fail here."},{"line_number":428,"context_line":"                service_ref \u003d objects.Service.get_by_host_and_binary("},{"line_number":429,"context_line":"                    ctxt, self.host, self.binary)"},{"line_number":430,"context_line":"        _update_service_ref(service_ref, ctxt)"},{"line_number":431,"context_line":""},{"line_number":432,"context_line":"        if self.manager:"},{"line_number":433,"context_line":"            self.manager.init_host()"}],"source_content_type":"text/x-python","patch_set":7,"id":"da85f559_711dd80e","line":430,"updated":"2015-11-06 20:45:17.000000000","message":"This is duplicate work if the service ref was just created.  But with the way this is structured I don\u0027t see a great way to skip it in that case.","commit_id":"b37a888e3751b117693b83e1d1fd828b2b56d224"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"a2a4284fbff4df99f6683fbe2c544c4b3b4e4245","unresolved":false,"context_lines":[{"line_number":427,"context_line":"                # don\u0027t fail here."},{"line_number":428,"context_line":"                service_ref \u003d objects.Service.get_by_host_and_binary("},{"line_number":429,"context_line":"                    ctxt, self.host, self.binary)"},{"line_number":430,"context_line":"        _update_service_ref(service_ref, ctxt)"},{"line_number":431,"context_line":""},{"line_number":432,"context_line":"        if self.manager:"},{"line_number":433,"context_line":"            self.manager.init_host()"}],"source_content_type":"text/x-python","patch_set":7,"id":"da85f559_b9e45e3b","line":430,"in_reply_to":"da85f559_711dd80e","updated":"2015-11-09 10:11:31.000000000","message":"sure, we can handle that later","commit_id":"b37a888e3751b117693b83e1d1fd828b2b56d224"}]}
