)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"283c3bd9031787f9afcc275f0d8afc1a1958dca6","unresolved":false,"context_lines":[{"line_number":11,"context_line":"Service objects and its check in timeout affected service groups drivers."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Blueprint mark-host-down"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I39f1a84c100726f87a4dc464dd9922d66efdb53f"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"ba3cc151_c7cb9e71","line":14,"updated":"2015-06-29 14:03:43.000000000","message":"Please add APIImpact flag","commit_id":"4aa878c21147fa9f08adf48402d9d940fbaaaf4b"}],"nova/api/openstack/compute/plugins/v3/services.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"ddd4fe1419fd58e7055fc716fab3122c856f6ffa","unresolved":false,"context_lines":[{"line_number":132,"context_line":"                                 \u0027binary\u0027: binary,"},{"line_number":133,"context_line":"                                 \u0027forced-down\u0027: forced_down}}"},{"line_number":134,"context_line":"        self._update(context, host, binary, {\"forced_down\": forced_down})"},{"line_number":135,"context_line":"        return ret_value"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def _update(self, context, host, binary, payload):"},{"line_number":138,"context_line":"        \"\"\"Do the actual PUT/update\"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"7a016987_b34cf49e","line":135,"updated":"2015-05-19 21:09:38.000000000","message":"You need to make this a microversion. Please see this guide:\n\nhttp://docs.openstack.org/developer/nova/devref/api_microversions.html\n\nAlso, the refactoring here is good, but it would be great if you could do the refactor first and then add the new feature in a separate patch.","commit_id":"57fe30719ab7b822750e74c1d4ed08487b6b3870"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"283c3bd9031787f9afcc275f0d8afc1a1958dca6","unresolved":false,"context_lines":[{"line_number":167,"context_line":""},{"line_number":168,"context_line":"class Services(extensions.V3APIExtensionBase):"},{"line_number":169,"context_line":"    \"\"\"Services support.\"\"\""},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    name \u003d \"Services\""},{"line_number":172,"context_line":"    alias \u003d ALIAS"},{"line_number":173,"context_line":"    version \u003d 1"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba3cc151_d9d142fd","side":"PARENT","line":170,"updated":"2015-06-29 14:03:43.000000000","message":"unrelated change","commit_id":"02474cd71ff8efb7a39103f4992d2ebb5d86f032"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"cb4bb6059814c3e741a0886d10fa95b1dcad978f","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        name"},{"line_number":170,"context_line":"        \"\"\""},{"line_number":171,"context_line":"        _services \u003d self._get_services_list(req, ((\u0027forced_down\u0027,"},{"line_number":172,"context_line":"                                                   \u0027forced_down\u0027),))"},{"line_number":173,"context_line":"        return {\u0027services\u0027: _services}"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    @wsgi.Controller.api_version(\u00272.1\u0027, \u00272.5\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba3cc151_c3d02456","line":172,"updated":"2015-07-07 14:02:04.000000000","message":"only a question: why return 2 forced_down here?","commit_id":"8460abc8c00d4db7fd3c39af2beffa1142b13ae2"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"cd8f4407175843bd1c78eb7546e5be1dc0899dd5","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        name"},{"line_number":170,"context_line":"        \"\"\""},{"line_number":171,"context_line":"        _services \u003d self._get_services_list(req, ((\u0027forced_down\u0027,"},{"line_number":172,"context_line":"                                                   \u0027forced_down\u0027),))"},{"line_number":173,"context_line":"        return {\u0027services\u0027: _services}"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    @wsgi.Controller.api_version(\u00272.1\u0027, \u00272.5\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba3cc151_232b1096","line":172,"in_reply_to":"ba3cc151_c3d02456","updated":"2015-07-07 14:14:57.000000000","message":"it\u0027s a key-value map. On the left hand side you have a key which go to service_detail, on the right you have a field form the request body. As you can see on line 64, the field from body may differ from key in the returned service_detail (zone vs availability_zone).","commit_id":"8460abc8c00d4db7fd3c39af2beffa1142b13ae2"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"cb4bb6059814c3e741a0886d10fa95b1dcad978f","unresolved":false,"context_lines":[{"line_number":192,"context_line":""},{"line_number":193,"context_line":"        return action(body, context)"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    @wsgi.Controller.api_version(\u00272.6\u0027)  # noqa"},{"line_number":196,"context_line":"    @extensions.expected_errors((400, 404))"},{"line_number":197,"context_line":"    @validation.schema(services.service_update_v26)"},{"line_number":198,"context_line":"    def update(self, req, id, body):"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba3cc151_23b55030","line":195,"updated":"2015-07-07 14:02:04.000000000","message":"you are using 2.7 now in functional test, should this be 2.7 ?","commit_id":"8460abc8c00d4db7fd3c39af2beffa1142b13ae2"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"cd8f4407175843bd1c78eb7546e5be1dc0899dd5","unresolved":false,"context_lines":[{"line_number":192,"context_line":""},{"line_number":193,"context_line":"        return action(body, context)"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    @wsgi.Controller.api_version(\u00272.6\u0027)  # noqa"},{"line_number":196,"context_line":"    @extensions.expected_errors((400, 404))"},{"line_number":197,"context_line":"    @validation.schema(services.service_update_v26)"},{"line_number":198,"context_line":"    def update(self, req, id, body):"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba3cc151_a315e049","line":195,"in_reply_to":"ba3cc151_23b55030","updated":"2015-07-07 14:14:57.000000000","message":"Right.","commit_id":"8460abc8c00d4db7fd3c39af2beffa1142b13ae2"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"574460173dfaffaf7d7412a0cd195c74c19156a2","unresolved":false,"context_lines":[{"line_number":161,"context_line":""},{"line_number":162,"context_line":"class Services(extensions.V3APIExtensionBase):"},{"line_number":163,"context_line":"    \"\"\"Services support.\"\"\""},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"    name \u003d \"Services\""},{"line_number":166,"context_line":"    alias \u003d ALIAS"},{"line_number":167,"context_line":"    version \u003d 1"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a41bdd9_f7ebfbae","side":"PARENT","line":164,"updated":"2015-07-11 22:41:12.000000000","message":"unrelated change","commit_id":"034dafafebf06896928eda5d4411aa7514fe0388"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"6a1cd84d95753edf1e74c8b38708e156be7f0592","unresolved":false,"context_lines":[{"line_number":161,"context_line":""},{"line_number":162,"context_line":"class Services(extensions.V3APIExtensionBase):"},{"line_number":163,"context_line":"    \"\"\"Services support.\"\"\""},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"    name \u003d \"Services\""},{"line_number":166,"context_line":"    alias \u003d ALIAS"},{"line_number":167,"context_line":"    version \u003d 1"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a41bdd9_e3821852","side":"PARENT","line":164,"in_reply_to":"9a41bdd9_f7ebfbae","updated":"2015-07-13 18:41:07.000000000","message":"Done","commit_id":"034dafafebf06896928eda5d4411aa7514fe0388"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"574460173dfaffaf7d7412a0cd195c74c19156a2","unresolved":false,"context_lines":[{"line_number":195,"context_line":"    @wsgi.Controller.api_version(\u00272.7\u0027)  # noqa"},{"line_number":196,"context_line":"    @extensions.expected_errors((400, 404))"},{"line_number":197,"context_line":"    @validation.schema(services.service_update_v27)"},{"line_number":198,"context_line":"    def update(self, req, id, body):"},{"line_number":199,"context_line":"        \"\"\"Perform service update\"\"\""},{"line_number":200,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":201,"context_line":"        authorize(context)"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a41bdd9_97d14ffe","line":198,"updated":"2015-07-11 22:41:12.000000000","message":"Can we share some code between 2.7 and \u00272.1 to 2.6\u0027","commit_id":"2a0d3545dea48d15b4608da03b16b0d2d79e45ca"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"6a1cd84d95753edf1e74c8b38708e156be7f0592","unresolved":false,"context_lines":[{"line_number":195,"context_line":"    @wsgi.Controller.api_version(\u00272.7\u0027)  # noqa"},{"line_number":196,"context_line":"    @extensions.expected_errors((400, 404))"},{"line_number":197,"context_line":"    @validation.schema(services.service_update_v27)"},{"line_number":198,"context_line":"    def update(self, req, id, body):"},{"line_number":199,"context_line":"        \"\"\"Perform service update\"\"\""},{"line_number":200,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":201,"context_line":"        authorize(context)"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a41bdd9_23bfa0fc","line":198,"in_reply_to":"9a41bdd9_97d14ffe","updated":"2015-07-13 18:41:07.000000000","message":"I think it\u0027s OK in current state, but sure, I can make the change :)","commit_id":"2a0d3545dea48d15b4608da03b16b0d2d79e45ca"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"2cf8506bbee4a2ae0a08bea7240503530709d535","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        actions \u003d {\"enable\": self._enable,"},{"line_number":150,"context_line":"                   \"disable\": self._disable,"},{"line_number":151,"context_line":"                   \"disable-log-reason\": self._disable_log_reason}"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        try:"},{"line_number":154,"context_line":"            action \u003d actions[id]"},{"line_number":155,"context_line":"        except KeyError:"}],"source_content_type":"text/x-python","patch_set":24,"id":"1a4dcd0f_28569dd2","side":"PARENT","line":152,"updated":"2015-08-04 18:05:32.000000000","message":"Instead of splitting up the function, the inline version is probably more readable, and doesn\u0027t require a bunch of refactoring:\n\n     req_ver \u003d req.api_version_request\n     if req_ver \u003e\u003d api_version_request.APIVersionRequest(\"2.10\"):\n         actions[\"force-down\"] \u003d self._forced_down","commit_id":"9d34e16cca8af5f8d7caf4fe578e40aa09345bcc"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"13162a92ee37f2c1a28a4e21e89d288e68b787c0","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        actions \u003d {\"enable\": self._enable,"},{"line_number":150,"context_line":"                   \"disable\": self._disable,"},{"line_number":151,"context_line":"                   \"disable-log-reason\": self._disable_log_reason}"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        try:"},{"line_number":154,"context_line":"            action \u003d actions[id]"},{"line_number":155,"context_line":"        except KeyError:"}],"source_content_type":"text/x-python","patch_set":24,"id":"1a4dcd0f_0e1e1b5f","side":"PARENT","line":152,"in_reply_to":"1a4dcd0f_28569dd2","updated":"2015-08-05 14:56:03.000000000","message":"Actually I cannot do this, since schema differ between microversions…","commit_id":"9d34e16cca8af5f8d7caf4fe578e40aa09345bcc"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"616da8883c2ac67ff71e37b40da5c9c63f888b2c","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        actions \u003d {\"enable\": self._enable,"},{"line_number":150,"context_line":"                   \"disable\": self._disable,"},{"line_number":151,"context_line":"                   \"disable-log-reason\": self._disable_log_reason}"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        try:"},{"line_number":154,"context_line":"            action \u003d actions[id]"},{"line_number":155,"context_line":"        except KeyError:"}],"source_content_type":"text/x-python","patch_set":24,"id":"1a4dcd0f_de68eb89","side":"PARENT","line":152,"in_reply_to":"1a4dcd0f_28569dd2","updated":"2015-08-05 12:52:48.000000000","message":"Done","commit_id":"9d34e16cca8af5f8d7caf4fe578e40aa09345bcc"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"2cf8506bbee4a2ae0a08bea7240503530709d535","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        return _services"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    def _get_service_detail(self, svc, additional_fields\u003dNone):"},{"line_number":58,"context_line":"        additional_fields \u003d additional_fields if additional_fields else []"},{"line_number":59,"context_line":"        alive \u003d self.servicegroup_api.service_is_up(svc)"},{"line_number":60,"context_line":"        state \u003d (alive and \"up\") or \"down\""},{"line_number":61,"context_line":"        active \u003d \u0027enabled\u0027"}],"source_content_type":"text/x-python","patch_set":24,"id":"1a4dcd0f_28777d3b","line":58,"updated":"2015-08-04 18:05:32.000000000","message":"just make the default for the param []","commit_id":"8d270eda9d66183d72e2337c071661e38d256bb8"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"616da8883c2ac67ff71e37b40da5c9c63f888b2c","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        return _services"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    def _get_service_detail(self, svc, additional_fields\u003dNone):"},{"line_number":58,"context_line":"        additional_fields \u003d additional_fields if additional_fields else []"},{"line_number":59,"context_line":"        alive \u003d self.servicegroup_api.service_is_up(svc)"},{"line_number":60,"context_line":"        state \u003d (alive and \"up\") or \"down\""},{"line_number":61,"context_line":"        active \u003d \u0027enabled\u0027"}],"source_content_type":"text/x-python","patch_set":24,"id":"1a4dcd0f_63390441","line":58,"in_reply_to":"1a4dcd0f_28777d3b","updated":"2015-08-05 12:52:48.000000000","message":"Sean, I\u0027d rather not make the default param a mutable. How about\n\n   def _get_service_detail(self, svc, additional_fields\u003dtuple()):\n\n? I know, that it is only used here as read only variable, nevertheless someone might be tempted to modify it in this method…","commit_id":"8d270eda9d66183d72e2337c071661e38d256bb8"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"df117eeb5f05b3d5532b3f544e189e698c38c38a","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        return _services"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    def _get_service_detail(self, svc, additional_fields\u003dNone):"},{"line_number":58,"context_line":"        additional_fields \u003d additional_fields if additional_fields else []"},{"line_number":59,"context_line":"        alive \u003d self.servicegroup_api.service_is_up(svc)"},{"line_number":60,"context_line":"        state \u003d (alive and \"up\") or \"down\""},{"line_number":61,"context_line":"        active \u003d \u0027enabled\u0027"}],"source_content_type":"text/x-python","patch_set":24,"id":"1a4dcd0f_9738f7f0","line":58,"in_reply_to":"1a4dcd0f_63390441","updated":"2015-08-05 15:48:24.000000000","message":"I have to agree with the original code—additional_fields\u003dNone, convert to the empty list early on in the method.  That *is* the idiom used everywhere else this situation comes up…","commit_id":"8d270eda9d66183d72e2337c071661e38d256bb8"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"0d78339a8e21ca188f43a24aaad87d90f5c8ee03","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        return _services"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    def _get_service_detail(self, svc, additional_fields\u003dNone):"},{"line_number":58,"context_line":"        additional_fields \u003d additional_fields if additional_fields else []"},{"line_number":59,"context_line":"        alive \u003d self.servicegroup_api.service_is_up(svc)"},{"line_number":60,"context_line":"        state \u003d (alive and \"up\") or \"down\""},{"line_number":61,"context_line":"        active \u003d \u0027enabled\u0027"}],"source_content_type":"text/x-python","patch_set":24,"id":"1a4dcd0f_b1ce562c","line":58,"in_reply_to":"1a4dcd0f_9738f7f0","updated":"2015-08-05 19:14:59.000000000","message":"Or use an immutable like tuple (which is what he did)","commit_id":"8d270eda9d66183d72e2337c071661e38d256bb8"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"2cf8506bbee4a2ae0a08bea7240503530709d535","unresolved":false,"context_lines":[{"line_number":71,"context_line":"                          \u0027disabled_reason\u0027: svc[\u0027disabled_reason\u0027]}"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        for key, field in additional_fields:"},{"line_number":74,"context_line":"            service_detail[key] \u003d svc[field]"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        return service_detail"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"1a4dcd0f_68cb4554","line":74,"updated":"2015-08-04 18:05:32.000000000","message":"we don\u0027t really need the ability to support key !\u003d field in this patch, so lets just iterate this like a list.","commit_id":"8d270eda9d66183d72e2337c071661e38d256bb8"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"616da8883c2ac67ff71e37b40da5c9c63f888b2c","unresolved":false,"context_lines":[{"line_number":71,"context_line":"                          \u0027disabled_reason\u0027: svc[\u0027disabled_reason\u0027]}"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        for key, field in additional_fields:"},{"line_number":74,"context_line":"            service_detail[key] \u003d svc[field]"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        return service_detail"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"1a4dcd0f_7e5f57e5","line":74,"in_reply_to":"1a4dcd0f_68cb4554","updated":"2015-08-05 12:52:48.000000000","message":"Done","commit_id":"8d270eda9d66183d72e2337c071661e38d256bb8"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"2cf8506bbee4a2ae0a08bea7240503530709d535","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        return service_detail"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def _get_services_list(self, req, additional_fields\u003dNone):"},{"line_number":79,"context_line":"        _services \u003d self._get_services(req)"},{"line_number":80,"context_line":"        return [self._get_service_detail(svc, additional_fields)"},{"line_number":81,"context_line":"                for svc in _services]"},{"line_number":82,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"1a4dcd0f_28dc5d11","line":79,"updated":"2015-08-04 18:05:32.000000000","message":"you have req here, so I\u0027d say just do the inline version checking, and make it so you don\u0027t have to pass more params.","commit_id":"8d270eda9d66183d72e2337c071661e38d256bb8"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"616da8883c2ac67ff71e37b40da5c9c63f888b2c","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        return service_detail"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def _get_services_list(self, req, additional_fields\u003dNone):"},{"line_number":79,"context_line":"        _services \u003d self._get_services(req)"},{"line_number":80,"context_line":"        return [self._get_service_detail(svc, additional_fields)"},{"line_number":81,"context_line":"                for svc in _services]"},{"line_number":82,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"1a4dcd0f_1e6f3393","line":79,"in_reply_to":"1a4dcd0f_28dc5d11","updated":"2015-08-05 12:52:48.000000000","message":"Done","commit_id":"8d270eda9d66183d72e2337c071661e38d256bb8"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"2cf8506bbee4a2ae0a08bea7240503530709d535","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        \"\"\"Return a list of all running services. Filter by host \u0026 service"},{"line_number":185,"context_line":"        name wih forced_down as additional field"},{"line_number":186,"context_line":"        \"\"\""},{"line_number":187,"context_line":"        _services \u003d self._get_services_list(req, ((\u0027forced_down\u0027,"},{"line_number":188,"context_line":"                                                   \u0027forced_down\u0027),))"},{"line_number":189,"context_line":"        return {\u0027services\u0027: _services}"},{"line_number":190,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"1a4dcd0f_48d769ed","line":187,"updated":"2015-08-04 18:05:32.000000000","message":"if we are adding extra parameters to this list, lets make them clearer. tupples of tupples is very error prone. extra","commit_id":"8d270eda9d66183d72e2337c071661e38d256bb8"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"616da8883c2ac67ff71e37b40da5c9c63f888b2c","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        \"\"\"Return a list of all running services. Filter by host \u0026 service"},{"line_number":185,"context_line":"        name wih forced_down as additional field"},{"line_number":186,"context_line":"        \"\"\""},{"line_number":187,"context_line":"        _services \u003d self._get_services_list(req, ((\u0027forced_down\u0027,"},{"line_number":188,"context_line":"                                                   \u0027forced_down\u0027),))"},{"line_number":189,"context_line":"        return {\u0027services\u0027: _services}"},{"line_number":190,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"1a4dcd0f_3e10ef00","line":187,"in_reply_to":"1a4dcd0f_48d769ed","updated":"2015-08-05 12:52:48.000000000","message":"Ok.","commit_id":"8d270eda9d66183d72e2337c071661e38d256bb8"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"98b839567f6eccbd6a69beb59d503cfc5afb20b7","unresolved":false,"context_lines":[{"line_number":192,"context_line":""},{"line_number":193,"context_line":"    @wsgi.Controller.api_version(\u00272.11\u0027)  # noqa"},{"line_number":194,"context_line":"    @extensions.expected_errors((400, 404))"},{"line_number":195,"context_line":"    @validation.schema(services.service_update_v211)"},{"line_number":196,"context_line":"    def update(self, req, id, body):"},{"line_number":197,"context_line":"        \"\"\"Perform service update\"\"\""},{"line_number":198,"context_line":"        actions \u003d self.actions.copy()"}],"source_content_type":"text/x-python","patch_set":26,"id":"1a4dcd0f_1705ba44","line":195,"updated":"2015-08-05 20:16:52.000000000","message":"so... we should probably figure out a way to let the schema change with versions with the decorator. But we can do that outside of this patch.","commit_id":"ff80032bd40b2d4f8f9f663a2c56617b5ba65ef5"}],"nova/db/sqlalchemy/migrate_repo/versions/294_add_forced_down_for_services.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"ddd4fe1419fd58e7055fc716fab3122c856f6ffa","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    services \u003d Table(\u0027services\u0027, meta, autoload\u003dTrue)"},{"line_number":32,"context_line":"    shadow_services \u003d Table(\u0027shadow_services\u0027, meta, autoload\u003dTrue)"},{"line_number":33,"context_line":"    services.drop_column(\u0027forced_down\u0027)"},{"line_number":34,"context_line":"    shadow_services.drop_column(\u0027forced_down\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a016987_53b94078","line":34,"updated":"2015-05-19 21:09:38.000000000","message":"We don\u0027t do downgrade anymore so please remove this.","commit_id":"57fe30719ab7b822750e74c1d4ed08487b6b3870"}],"nova/objects/service.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"ddd4fe1419fd58e7055fc716fab3122c856f6ffa","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        \u0027disabled_reason\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":56,"context_line":"        \u0027availability_zone\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":57,"context_line":"        \u0027compute_node\u0027: fields.ObjectField(\u0027ComputeNode\u0027),"},{"line_number":58,"context_line":"        \u0027forced_down\u0027: fields.BooleanField(),"},{"line_number":59,"context_line":"        }"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    obj_relationships \u003d {"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a016987_53470077","line":58,"updated":"2015-05-19 21:09:38.000000000","message":"I think you should put the db/object change in a separate patch from the API stuff.","commit_id":"57fe30719ab7b822750e74c1d4ed08487b6b3870"}],"nova/servicegroup/drivers/db.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"730cae2ce36e27c47f1358e2c97d374735a0ac83","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        \"\"\"Moved from nova.utils"},{"line_number":58,"context_line":"        Check whether a service is up based on last heartbeat."},{"line_number":59,"context_line":"        \"\"\""},{"line_number":60,"context_line":"        if service_ref.get(\u0027forced_down\u0027):"},{"line_number":61,"context_line":"            return False"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        # Keep checking \u0027updated_at\u0027 if \u0027last_seen_up\u0027 isn\u0027t set."}],"source_content_type":"text/x-python","patch_set":5,"id":"ba3cc151_f9ff6632","line":60,"updated":"2015-06-29 14:07:02.000000000","message":"This change belongs in a patch separate from all the API change.","commit_id":"4aa878c21147fa9f08adf48402d9d940fbaaaf4b"}],"nova/tests/functional/v3/test_services.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"574460173dfaffaf7d7412a0cd195c74c19156a2","unresolved":false,"context_lines":[{"line_number":114,"context_line":""},{"line_number":115,"context_line":"class ServicesV27JsonTest(ServicesJsonTest):"},{"line_number":116,"context_line":"    request_api_version \u003d \u00272.7\u0027"},{"line_number":117,"context_line":"    _api_version \u003d \u0027v2.1\u0027"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def test_services_list(self):"},{"line_number":120,"context_line":"        \"\"\"Return a list of all agent builds.\"\"\""}],"source_content_type":"text/x-python","patch_set":16,"id":"9a41bdd9_b7f57384","line":117,"updated":"2015-07-11 22:41:12.000000000","message":"you can learn something from here https://github.com/openstack/nova/blob/master/nova/tests/functional/v3/test_keypairs.py#L119","commit_id":"2a0d3545dea48d15b4608da03b16b0d2d79e45ca"}],"nova/tests/unit/api/openstack/compute/contrib/test_services.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"574460173dfaffaf7d7412a0cd195c74c19156a2","unresolved":false,"context_lines":[{"line_number":565,"context_line":""},{"line_number":566,"context_line":"    def test_services_delete_not_enabled(self):"},{"line_number":567,"context_line":"        self.assertRaises(webob.exc.HTTPMethodNotAllowed,"},{"line_number":568,"context_line":"                          self.controller.delete, self.req, \u0027300\u0027)"},{"line_number":569,"context_line":""},{"line_number":570,"context_line":"    def _process_output(self, services, has_disabled\u003dFalse, has_id\u003dFalse):"},{"line_number":571,"context_line":"        for service in services[\u0027services\u0027]:"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a41bdd9_b7ced358","side":"PARENT","line":568,"updated":"2015-07-11 22:41:12.000000000","message":"why you remove those tests?","commit_id":"034dafafebf06896928eda5d4411aa7514fe0388"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"fe4735990675e569623aa4d3dc28b0f5904bdae6","unresolved":false,"context_lines":[{"line_number":196,"context_line":"        return services"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    def test_services_list(self):"},{"line_number":199,"context_line":"        req \u003d FakeRequest(self.wsgi_api_version)"},{"line_number":200,"context_line":"        res_dict \u003d self.controller.index(req)"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"        response \u003d {\u0027services\u0027: ["}],"source_content_type":"text/x-python","patch_set":17,"id":"3a50d1a3_4f13a45b","line":199,"updated":"2015-07-22 11:11:15.000000000","message":"this change is useless? it\u0027s using default version by default","commit_id":"2a06029e043721a38c6acf693d424083fecfcc35"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"60b1bae1118adb336da1cab985f7fb60d8c18993","unresolved":false,"context_lines":[{"line_number":196,"context_line":"        return services"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    def test_services_list(self):"},{"line_number":199,"context_line":"        req \u003d FakeRequest(self.wsgi_api_version)"},{"line_number":200,"context_line":"        res_dict \u003d self.controller.index(req)"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"        response \u003d {\u0027services\u0027: ["}],"source_content_type":"text/x-python","patch_set":17,"id":"3a50d1a3_64c31e58","line":199,"in_reply_to":"3a50d1a3_4f13a45b","updated":"2015-07-22 13:17:07.000000000","message":"Yeah, that\u0027s right. I\u0027ll change it also on other places.","commit_id":"2a06029e043721a38c6acf693d424083fecfcc35"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"fe4735990675e569623aa4d3dc28b0f5904bdae6","unresolved":false,"context_lines":[{"line_number":562,"context_line":"class ServicesTestV27(ServicesTestV21):"},{"line_number":563,"context_line":"    wsgi_api_version \u003d \u00272.7\u0027"},{"line_number":564,"context_line":""},{"line_number":565,"context_line":"    def test_services_list(self):"},{"line_number":566,"context_line":"        req \u003d FakeRequest(self.wsgi_api_version)"},{"line_number":567,"context_line":"        res_dict \u003d self.controller.index(req)"},{"line_number":568,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"3a50d1a3_ef32b0f1","line":565,"updated":"2015-07-22 11:11:15.000000000","message":"just curious , are we able to consider merge the cases ?\nmost of them are identical except the forced_down flag?","commit_id":"2a06029e043721a38c6acf693d424083fecfcc35"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"60b1bae1118adb336da1cab985f7fb60d8c18993","unresolved":false,"context_lines":[{"line_number":562,"context_line":"class ServicesTestV27(ServicesTestV21):"},{"line_number":563,"context_line":"    wsgi_api_version \u003d \u00272.7\u0027"},{"line_number":564,"context_line":""},{"line_number":565,"context_line":"    def test_services_list(self):"},{"line_number":566,"context_line":"        req \u003d FakeRequest(self.wsgi_api_version)"},{"line_number":567,"context_line":"        res_dict \u003d self.controller.index(req)"},{"line_number":568,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"3a50d1a3_84df4a68","line":565,"in_reply_to":"3a50d1a3_ef32b0f1","updated":"2015-07-22 13:17:07.000000000","message":"The only reason I wouldn\u0027t do this is to keep the test cases separately for potential changes and clarity.","commit_id":"2a06029e043721a38c6acf693d424083fecfcc35"}],"nova/tests/unit/objects/test_objects.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"730cae2ce36e27c47f1358e2c97d374735a0ac83","unresolved":false,"context_lines":[{"line_number":1121,"context_line":"    \u0027SecurityGroupRule\u0027: \u00271.1-ae1da17b79970012e8536f88cb3c6b29\u0027,"},{"line_number":1122,"context_line":"    \u0027SecurityGroupRuleList\u0027: \u00271.1-521f1aeb7b0cc00d026175509289d020\u0027,"},{"line_number":1123,"context_line":"    \u0027Service\u0027: \u00271.13-bc6c9671a91439e08224c2652da5fc4c\u0027,"},{"line_number":1124,"context_line":"    \u0027ServiceList\u0027: \u00271.11-d1728430a30700c143e542b7c75f65b0\u0027,"},{"line_number":1125,"context_line":"    \u0027Tag\u0027: \u00271.0-616bf44af4a22e853c17b37a758ec73e\u0027,"},{"line_number":1126,"context_line":"    \u0027TagList\u0027: \u00271.0-e16d65894484b7530b720792ffbbbd02\u0027,"},{"line_number":1127,"context_line":"    \u0027TaskLog\u0027: \u00271.0-78b0534366f29aa3eebb01860fbe18fe\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba3cc151_99e5faa9","side":"PARENT","line":1124,"updated":"2015-06-29 14:07:02.000000000","message":"This change belongs in the patch that actually modifies these objects, not here.","commit_id":"02474cd71ff8efb7a39103f4992d2ebb5d86f032"}]}
