)]}'
{"releasenotes/notes/support-placement-api-58ce6bef1bbbe98a.yaml":[{"author":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"change_message_id":"65503ff8a0e73b4cae823961682af4b0c2fa6c59","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Added Placement to Watcher, it can be used for the data model and strategies."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"9fb8cfa7_135c0f4a","line":4,"range":{"start_line":4,"start_character":9,"end_line":4,"end_character":19},"updated":"2019-06-01 10:18:44.000000000","message":"Support Placement API","commit_id":"9b7e94c80c04b0e6d54d1b73803d6332da0cd694"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"6eddf1d057462aa2a9493e6e5f9dfcc3e22ef829","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Added Placement to Watcher, it can be used for the data model and strategies."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"9fb8cfa7_7a30b808","line":4,"range":{"start_line":4,"start_character":9,"end_line":4,"end_character":19},"in_reply_to":"9fb8cfa7_135c0f4a","updated":"2019-06-03 06:45:20.000000000","message":"Done","commit_id":"9b7e94c80c04b0e6d54d1b73803d6332da0cd694"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"342b2f507b4a19bd519035ca8de3bbdda39e3e78","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"9fb8cfa7_fb06e020","line":6,"updated":"2019-06-03 17:23:17.000000000","message":"I would mention the ``[placement_client]`` configuration option group in here somewhere.","commit_id":"ef0149d3d6234e8f4997c4dbe53f3cf5fe235bb8"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"42d5a9342fbc766749118180e06ed191c411aa24","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"9fb8cfa7_cf78ecf9","line":6,"in_reply_to":"9fb8cfa7_fb06e020","updated":"2019-06-04 09:12:23.000000000","message":"Done","commit_id":"ef0149d3d6234e8f4997c4dbe53f3cf5fe235bb8"}],"watcher/common/clients.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"342b2f507b4a19bd519035ca8de3bbdda39e3e78","unresolved":false,"context_lines":[{"line_number":284,"context_line":"            service_type\u003d\u0027placement\u0027,"},{"line_number":285,"context_line":"            interface\u003dplacement_interface,"},{"line_number":286,"context_line":"            region_name\u003dplacement_region_name,"},{"line_number":287,"context_line":"            version\u003dplacement_version,"},{"line_number":288,"context_line":"            additional_headers\u003dheaders)"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"        return self._placement"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fb8cfa7_5b3b6c37","line":287,"range":{"start_line":287,"start_character":12,"end_line":287,"end_character":19},"updated":"2019-06-03 17:23:17.000000000","message":"I\u0027m not sure this is the kwarg you want since I think this is about major versions not microversions:\n\nhttps://github.com/openstack/keystoneauth/blob/3.14.0/keystoneauth1/adapter.py#L40\n\nYou may want default_microversion instead:\n\nhttps://github.com/openstack/keystoneauth/blob/3.14.0/keystoneauth1/adapter.py#L82\n\nhttps://docs.openstack.org/keystoneauth/latest/using-sessions.html#requesting-a-microversion","commit_id":"ef0149d3d6234e8f4997c4dbe53f3cf5fe235bb8"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"42d5a9342fbc766749118180e06ed191c411aa24","unresolved":false,"context_lines":[{"line_number":284,"context_line":"            service_type\u003d\u0027placement\u0027,"},{"line_number":285,"context_line":"            interface\u003dplacement_interface,"},{"line_number":286,"context_line":"            region_name\u003dplacement_region_name,"},{"line_number":287,"context_line":"            version\u003dplacement_version,"},{"line_number":288,"context_line":"            additional_headers\u003dheaders)"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"        return self._placement"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fb8cfa7_0ff044c9","line":287,"range":{"start_line":287,"start_character":12,"end_line":287,"end_character":19},"in_reply_to":"9fb8cfa7_5b3b6c37","updated":"2019-06-04 09:12:23.000000000","message":"Add api_version to get method.","commit_id":"ef0149d3d6234e8f4997c4dbe53f3cf5fe235bb8"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bb9e28e32972c982b3bb549f82a1cfbf941e8037","unresolved":false,"context_lines":[{"line_number":277,"context_line":"        # Set accept header on every request to ensure we notify placement"},{"line_number":278,"context_line":"        # service of our response body media type preferences."},{"line_number":279,"context_line":"        headers \u003d {\u0027accept\u0027: \u0027application/json\u0027}"},{"line_number":280,"context_line":"        self._placement \u003d ka_adapter.Adapter("},{"line_number":281,"context_line":"            session\u003dself.session,"},{"line_number":282,"context_line":"            service_type\u003d\u0027placement\u0027,"},{"line_number":283,"context_line":"            interface\u003dplacement_interface,"}],"source_content_type":"text/x-python","patch_set":13,"id":"9fb8cfa7_54cf7baf","line":280,"updated":"2019-06-06 13:37:51.000000000","message":"You could pass default_microversion\u003dCONF.placement_client.api_version here which will provide the default microversion if one is not explicitly requested per GET request. At this point it probably doesn\u0027t matter, and the way you have the microversion kwarg on the get() method does allow for overriding that in the future, although it\u0027s kind of confusing to have an api_version config option that could be overridden in parts of the code (unless we assume that the api_version config option is really a minimum required version like what I did for nova here: https://review.opendev.org/#/c/659194/","commit_id":"008f96b27f46b156639746ba4d96be1a6a5f1d81"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"1354914e1d1bbcafa66834b182d4ce40f2709bae","unresolved":false,"context_lines":[{"line_number":277,"context_line":"        # Set accept header on every request to ensure we notify placement"},{"line_number":278,"context_line":"        # service of our response body media type preferences."},{"line_number":279,"context_line":"        headers \u003d {\u0027accept\u0027: \u0027application/json\u0027}"},{"line_number":280,"context_line":"        self._placement \u003d ka_adapter.Adapter("},{"line_number":281,"context_line":"            session\u003dself.session,"},{"line_number":282,"context_line":"            service_type\u003d\u0027placement\u0027,"},{"line_number":283,"context_line":"            interface\u003dplacement_interface,"}],"source_content_type":"text/x-python","patch_set":13,"id":"9fb8cfa7_b3ed6cf1","line":280,"in_reply_to":"9fb8cfa7_54cf7baf","updated":"2019-06-11 07:21:45.000000000","message":"OK, it\u0027s better to use default_microversion  instead of microversion in get() method.","commit_id":"008f96b27f46b156639746ba4d96be1a6a5f1d81"}],"watcher/common/placement_helper.py":[{"author":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"change_message_id":"65503ff8a0e73b4cae823961682af4b0c2fa6c59","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    def __init__(self, osc\u003dNone):"},{"line_number":26,"context_line":"        \"\"\":param osc: an OpenStackClients instance\"\"\""},{"line_number":27,"context_line":"        self.osc \u003d osc if osc else clients.OpenStackClients()"},{"line_number":28,"context_line":"        self._client \u003d self.osc.placement()"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def get(self, url):"},{"line_number":31,"context_line":"        return self._client.get(url, raise_exc\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":11,"id":"9fb8cfa7_a634e3df","line":28,"range":{"start_line":28,"start_character":12,"end_line":28,"end_character":20},"updated":"2019-06-01 10:18:44.000000000","message":"self.placement is better.","commit_id":"9b7e94c80c04b0e6d54d1b73803d6332da0cd694"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"6eddf1d057462aa2a9493e6e5f9dfcc3e22ef829","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    def __init__(self, osc\u003dNone):"},{"line_number":26,"context_line":"        \"\"\":param osc: an OpenStackClients instance\"\"\""},{"line_number":27,"context_line":"        self.osc \u003d osc if osc else clients.OpenStackClients()"},{"line_number":28,"context_line":"        self._client \u003d self.osc.placement()"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def get(self, url):"},{"line_number":31,"context_line":"        return self._client.get(url, raise_exc\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":11,"id":"9fb8cfa7_ba587056","line":28,"range":{"start_line":28,"start_character":12,"end_line":28,"end_character":20},"in_reply_to":"9fb8cfa7_a634e3df","updated":"2019-06-03 06:45:20.000000000","message":"Done","commit_id":"9b7e94c80c04b0e6d54d1b73803d6332da0cd694"},{"author":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"change_message_id":"65503ff8a0e73b4cae823961682af4b0c2fa6c59","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    def get_inventories(self, rp_uuid):"},{"line_number":59,"context_line":"        \"\"\"Calls the placement API to get resource inventory information."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        :param rp_uuid: UUID of the resource provider to get"},{"line_number":62,"context_line":"        :return: A dictionary of inventories keyed by resource classes."},{"line_number":63,"context_line":"        \"\"\""},{"line_number":64,"context_line":"        url \u003d \u0027/resource_providers/%s/inventories\u0027 % rp_uuid"}],"source_content_type":"text/x-python","patch_set":11,"id":"9fb8cfa7_d34bd7ad","line":61,"range":{"start_line":61,"start_character":57,"end_line":61,"end_character":60},"updated":"2019-06-01 10:18:44.000000000","message":"get.","commit_id":"9b7e94c80c04b0e6d54d1b73803d6332da0cd694"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"6eddf1d057462aa2a9493e6e5f9dfcc3e22ef829","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    def get_inventories(self, rp_uuid):"},{"line_number":59,"context_line":"        \"\"\"Calls the placement API to get resource inventory information."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        :param rp_uuid: UUID of the resource provider to get"},{"line_number":62,"context_line":"        :return: A dictionary of inventories keyed by resource classes."},{"line_number":63,"context_line":"        \"\"\""},{"line_number":64,"context_line":"        url \u003d \u0027/resource_providers/%s/inventories\u0027 % rp_uuid"}],"source_content_type":"text/x-python","patch_set":11,"id":"9fb8cfa7_1a5c1c4a","line":61,"range":{"start_line":61,"start_character":57,"end_line":61,"end_character":60},"in_reply_to":"9fb8cfa7_d34bd7ad","updated":"2019-06-03 06:45:20.000000000","message":"Done","commit_id":"9b7e94c80c04b0e6d54d1b73803d6332da0cd694"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"342b2f507b4a19bd519035ca8de3bbdda39e3e78","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        self._placement \u003d self.osc.placement()"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def get(self, url):"},{"line_number":31,"context_line":"        return self._placement .get(url, raise_exc\u003dFalse)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def get_resource_providers(self, rp_name\u003dNone):"},{"line_number":34,"context_line":"        \"\"\"Calls the placement API for a resource provider record."}],"source_content_type":"text/x-python","patch_set":12,"id":"9fb8cfa7_3bda38e9","line":31,"range":{"start_line":31,"start_character":30,"end_line":31,"end_character":31},"updated":"2019-06-03 17:23:17.000000000","message":"oops","commit_id":"ef0149d3d6234e8f4997c4dbe53f3cf5fe235bb8"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"42d5a9342fbc766749118180e06ed191c411aa24","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        self._placement \u003d self.osc.placement()"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def get(self, url):"},{"line_number":31,"context_line":"        return self._placement .get(url, raise_exc\u003dFalse)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def get_resource_providers(self, rp_name\u003dNone):"},{"line_number":34,"context_line":"        \"\"\"Calls the placement API for a resource provider record."}],"source_content_type":"text/x-python","patch_set":12,"id":"9fb8cfa7_98247d0f","line":31,"range":{"start_line":31,"start_character":30,"end_line":31,"end_character":31},"in_reply_to":"9fb8cfa7_3bda38e9","updated":"2019-06-04 09:12:23.000000000","message":"Done","commit_id":"ef0149d3d6234e8f4997c4dbe53f3cf5fe235bb8"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"342b2f507b4a19bd519035ca8de3bbdda39e3e78","unresolved":false,"context_lines":[{"line_number":46,"context_line":"            json_resp \u003d resp.json()"},{"line_number":47,"context_line":"            return json_resp[\u0027resource_providers\u0027]"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        msg \u003d (\"Failed to get resource provider %(name)s. \""},{"line_number":50,"context_line":"               \"Got %(status_code)d: %(err_text)s.\")"},{"line_number":51,"context_line":"        args \u003d {"},{"line_number":52,"context_line":"            \u0027name\u0027: rp_name,"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fb8cfa7_1be1749b","line":49,"range":{"start_line":49,"start_character":8,"end_line":49,"end_character":59},"updated":"2019-06-03 17:23:17.000000000","message":"This will be misleading if a name isn\u0027t provided.","commit_id":"ef0149d3d6234e8f4997c4dbe53f3cf5fe235bb8"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"42d5a9342fbc766749118180e06ed191c411aa24","unresolved":false,"context_lines":[{"line_number":46,"context_line":"            json_resp \u003d resp.json()"},{"line_number":47,"context_line":"            return json_resp[\u0027resource_providers\u0027]"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        msg \u003d (\"Failed to get resource provider %(name)s. \""},{"line_number":50,"context_line":"               \"Got %(status_code)d: %(err_text)s.\")"},{"line_number":51,"context_line":"        args \u003d {"},{"line_number":52,"context_line":"            \u0027name\u0027: rp_name,"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fb8cfa7_58fa8542","line":49,"range":{"start_line":49,"start_character":8,"end_line":49,"end_character":59},"in_reply_to":"9fb8cfa7_1be1749b","updated":"2019-06-04 09:12:23.000000000","message":"Done","commit_id":"ef0149d3d6234e8f4997c4dbe53f3cf5fe235bb8"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"342b2f507b4a19bd519035ca8de3bbdda39e3e78","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    def get_allocations_for_consumer(self, consumer_uuid):"},{"line_number":99,"context_line":"        \"\"\"Retrieves the allocations for a specific consumer."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        :param rp_uuid: The UUID of the provider."},{"line_number":102,"context_line":"        :return: A dictionary of allocation records keyed by resource"},{"line_number":103,"context_line":"                 provider uuid."},{"line_number":104,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":12,"id":"9fb8cfa7_7b9e7008","line":101,"range":{"start_line":101,"start_character":8,"end_line":101,"end_character":49},"updated":"2019-06-03 17:23:17.000000000","message":"Copy/paste error here.","commit_id":"ef0149d3d6234e8f4997c4dbe53f3cf5fe235bb8"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"42d5a9342fbc766749118180e06ed191c411aa24","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    def get_allocations_for_consumer(self, consumer_uuid):"},{"line_number":99,"context_line":"        \"\"\"Retrieves the allocations for a specific consumer."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        :param rp_uuid: The UUID of the provider."},{"line_number":102,"context_line":"        :return: A dictionary of allocation records keyed by resource"},{"line_number":103,"context_line":"                 provider uuid."},{"line_number":104,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":12,"id":"9fb8cfa7_189acd13","line":101,"range":{"start_line":101,"start_character":8,"end_line":101,"end_character":49},"in_reply_to":"9fb8cfa7_7b9e7008","updated":"2019-06-04 09:12:23.000000000","message":"Done","commit_id":"ef0149d3d6234e8f4997c4dbe53f3cf5fe235bb8"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"342b2f507b4a19bd519035ca8de3bbdda39e3e78","unresolved":false,"context_lines":[{"line_number":140,"context_line":"    def get_candidate_providers(self, resources):"},{"line_number":141,"context_line":"        \"\"\"Returns a dictionary of resource provider summaries."},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"        :returns: A dict, keyed by resource provider UUID, which can"},{"line_number":144,"context_line":"                  provide the required resources."},{"line_number":145,"context_line":"        :param resources: A comma-separated list of strings indicating"},{"line_number":146,"context_line":"                  an amount of resource of a specified class that"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fb8cfa7_5bae0c2f","line":143,"range":{"start_line":143,"start_character":9,"end_line":143,"end_character":16},"updated":"2019-06-03 17:23:17.000000000","message":"This should come after :param: in the docstring.","commit_id":"ef0149d3d6234e8f4997c4dbe53f3cf5fe235bb8"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"42d5a9342fbc766749118180e06ed191c411aa24","unresolved":false,"context_lines":[{"line_number":140,"context_line":"    def get_candidate_providers(self, resources):"},{"line_number":141,"context_line":"        \"\"\"Returns a dictionary of resource provider summaries."},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"        :returns: A dict, keyed by resource provider UUID, which can"},{"line_number":144,"context_line":"                  provide the required resources."},{"line_number":145,"context_line":"        :param resources: A comma-separated list of strings indicating"},{"line_number":146,"context_line":"                  an amount of resource of a specified class that"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fb8cfa7_98aebd2c","line":143,"range":{"start_line":143,"start_character":9,"end_line":143,"end_character":16},"in_reply_to":"9fb8cfa7_5bae0c2f","updated":"2019-06-04 09:12:23.000000000","message":"Done","commit_id":"ef0149d3d6234e8f4997c4dbe53f3cf5fe235bb8"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"342b2f507b4a19bd519035ca8de3bbdda39e3e78","unresolved":false,"context_lines":[{"line_number":159,"context_line":"            \u0027status_code\u0027: resp.status_code,"},{"line_number":160,"context_line":"            \u0027err_text\u0027: resp.text,"},{"line_number":161,"context_line":"        }"},{"line_number":162,"context_line":"        msg \u003d (\"Failed to get resource provider from placement \""},{"line_number":163,"context_line":"               \"API for resources: %(resource_request)s\\n\""},{"line_number":164,"context_line":"               \"Got %(status_code)d: %(err_text)s.\")"},{"line_number":165,"context_line":"        LOG.error(msg, args)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fb8cfa7_1b7df4b0","line":162,"range":{"start_line":162,"start_character":30,"end_line":162,"end_character":47},"updated":"2019-06-03 17:23:17.000000000","message":"This is misleading, I would say \"Failed to get allocation candidates from placement\" instead.","commit_id":"ef0149d3d6234e8f4997c4dbe53f3cf5fe235bb8"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"42d5a9342fbc766749118180e06ed191c411aa24","unresolved":false,"context_lines":[{"line_number":159,"context_line":"            \u0027status_code\u0027: resp.status_code,"},{"line_number":160,"context_line":"            \u0027err_text\u0027: resp.text,"},{"line_number":161,"context_line":"        }"},{"line_number":162,"context_line":"        msg \u003d (\"Failed to get resource provider from placement \""},{"line_number":163,"context_line":"               \"API for resources: %(resource_request)s\\n\""},{"line_number":164,"context_line":"               \"Got %(status_code)d: %(err_text)s.\")"},{"line_number":165,"context_line":"        LOG.error(msg, args)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fb8cfa7_d84af57e","line":162,"range":{"start_line":162,"start_character":30,"end_line":162,"end_character":47},"in_reply_to":"9fb8cfa7_1b7df4b0","updated":"2019-06-04 09:12:23.000000000","message":"Done","commit_id":"ef0149d3d6234e8f4997c4dbe53f3cf5fe235bb8"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bb9e28e32972c982b3bb549f82a1cfbf941e8037","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        self.osc \u003d osc if osc else clients.OpenStackClients()"},{"line_number":28,"context_line":"        self._placement \u003d self.osc.placement()"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def get(self, url, microversion\u003dCONF.placement_client.api_version):"},{"line_number":31,"context_line":"        return self._placement.get(url,"},{"line_number":32,"context_line":"                                   microversion\u003dmicroversion,"},{"line_number":33,"context_line":"                                   raise_exc\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9fb8cfa7_5481bb49","line":30,"range":{"start_line":30,"start_character":35,"end_line":30,"end_character":69},"updated":"2019-06-06 13:37:51.000000000","message":"nit: I\u0027ve seen issues in the past (years ago now though) where assigning default kwarg values to global conf options can cause problems. Maybe that\u0027s no longer an issue, but if it is, you could instead do this:\n\ndef get(self, url, microversion\u003dNone):\n   if microversion is None:\n       microversion \u003d CONF.placement_client.api_version\n   ...","commit_id":"008f96b27f46b156639746ba4d96be1a6a5f1d81"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"1653bc0e85e73d72ef548254379b7436b12ac521","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        self.osc \u003d osc if osc else clients.OpenStackClients()"},{"line_number":28,"context_line":"        self._placement \u003d self.osc.placement()"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def get(self, url, microversion\u003dCONF.placement_client.api_version):"},{"line_number":31,"context_line":"        return self._placement.get(url,"},{"line_number":32,"context_line":"                                   microversion\u003dmicroversion,"},{"line_number":33,"context_line":"                                   raise_exc\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9fb8cfa7_94d2a5ff","line":30,"range":{"start_line":30,"start_character":35,"end_line":30,"end_character":69},"in_reply_to":"9fb8cfa7_5481bb49","updated":"2019-06-10 10:26:40.000000000","message":"I agree that would be better. The state of global CONF is unpredictable...","commit_id":"008f96b27f46b156639746ba4d96be1a6a5f1d81"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"1354914e1d1bbcafa66834b182d4ce40f2709bae","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        self.osc \u003d osc if osc else clients.OpenStackClients()"},{"line_number":28,"context_line":"        self._placement \u003d self.osc.placement()"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def get(self, url, microversion\u003dCONF.placement_client.api_version):"},{"line_number":31,"context_line":"        return self._placement.get(url,"},{"line_number":32,"context_line":"                                   microversion\u003dmicroversion,"},{"line_number":33,"context_line":"                                   raise_exc\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9fb8cfa7_13ceb881","line":30,"range":{"start_line":30,"start_character":35,"end_line":30,"end_character":69},"in_reply_to":"9fb8cfa7_5481bb49","updated":"2019-06-11 07:21:45.000000000","message":"I\u0027ll remove this microversion.","commit_id":"008f96b27f46b156639746ba4d96be1a6a5f1d81"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bb9e28e32972c982b3bb549f82a1cfbf941e8037","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def get(self, url, microversion\u003dCONF.placement_client.api_version):"},{"line_number":31,"context_line":"        return self._placement.get(url,"},{"line_number":32,"context_line":"                                   microversion\u003dmicroversion,"},{"line_number":33,"context_line":"                                   raise_exc\u003dFalse)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def get_resource_providers(self, rp_name\u003dNone):"}],"source_content_type":"text/x-python","patch_set":13,"id":"9fb8cfa7_94873362","line":32,"updated":"2019-06-06 13:37:51.000000000","message":"Looks like this should work:\n\nhttps://docs.openstack.org/keystoneauth/latest/using-sessions.html#requesting-a-microversion","commit_id":"008f96b27f46b156639746ba4d96be1a6a5f1d81"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"1653bc0e85e73d72ef548254379b7436b12ac521","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        args \u003d {"},{"line_number":77,"context_line":"            \u0027rp_uuid\u0027: rp_uuid,"},{"line_number":78,"context_line":"            \u0027status_code\u0027: resp.status_code,"},{"line_number":79,"context_line":"            \u0027err_text\u0027: resp.text,"},{"line_number":80,"context_line":"        }"},{"line_number":81,"context_line":"        LOG.error(msg, args)"},{"line_number":82,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"9fb8cfa7_b4f8097b","line":79,"updated":"2019-06-10 10:26:40.000000000","message":"This will show the raw JSON of the response, which may be noisier than you want. Another option is to process the JSON and use it\u0027s structure, which follows the API-SIG errors guideline [1] as implemented here [2].\n\n[1] http://specs.openstack.org/openstack/api-sig/guidelines/errors.html\n[2] https://opendev.org/openstack/placement/src/commit/9bb68ff1fc3b70596acc267fdc2f915456ca0ad4/placement/util.py#L94","commit_id":"008f96b27f46b156639746ba4d96be1a6a5f1d81"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"1354914e1d1bbcafa66834b182d4ce40f2709bae","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        args \u003d {"},{"line_number":77,"context_line":"            \u0027rp_uuid\u0027: rp_uuid,"},{"line_number":78,"context_line":"            \u0027status_code\u0027: resp.status_code,"},{"line_number":79,"context_line":"            \u0027err_text\u0027: resp.text,"},{"line_number":80,"context_line":"        }"},{"line_number":81,"context_line":"        LOG.error(msg, args)"},{"line_number":82,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"9fb8cfa7_33a89c8a","line":79,"in_reply_to":"9fb8cfa7_b4f8097b","updated":"2019-06-11 07:21:45.000000000","message":"I\u0027ll update later, thanks.","commit_id":"008f96b27f46b156639746ba4d96be1a6a5f1d81"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0258750c19ee9b003ebf495aa6fc0bf1ee526167","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    def get(self, url):"},{"line_number":31,"context_line":"        return self._placement.get(url, raise_exc\u003dFalse)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def get_error_msg(self, resp):"},{"line_number":34,"context_line":"        json_resp \u003d resp.json()"},{"line_number":35,"context_line":"        # https://developer.openstack.org/api-ref/placement/#errors"},{"line_number":36,"context_line":"        if \u0027errors\u0027 in json_resp.keys():"}],"source_content_type":"text/x-python","patch_set":14,"id":"9fb8cfa7_2106f91d","line":33,"range":{"start_line":33,"start_character":22,"end_line":33,"end_character":26},"updated":"2019-06-11 19:35:16.000000000","message":"This could be a staticmethod.","commit_id":"c0c98e1f69155cfb866fb442f241bbddbec5b19d"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"87f1205e38605c05237fe77d5988671ae76fb1a7","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    def get(self, url):"},{"line_number":31,"context_line":"        return self._placement.get(url, raise_exc\u003dFalse)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def get_error_msg(self, resp):"},{"line_number":34,"context_line":"        json_resp \u003d resp.json()"},{"line_number":35,"context_line":"        # https://developer.openstack.org/api-ref/placement/#errors"},{"line_number":36,"context_line":"        if \u0027errors\u0027 in json_resp.keys():"}],"source_content_type":"text/x-python","patch_set":14,"id":"9fb8cfa7_da533b16","line":33,"range":{"start_line":33,"start_character":22,"end_line":33,"end_character":26},"in_reply_to":"9fb8cfa7_2106f91d","updated":"2019-06-12 03:11:37.000000000","message":"Done","commit_id":"c0c98e1f69155cfb866fb442f241bbddbec5b19d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0258750c19ee9b003ebf495aa6fc0bf1ee526167","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    def get_error_msg(self, resp):"},{"line_number":34,"context_line":"        json_resp \u003d resp.json()"},{"line_number":35,"context_line":"        # https://developer.openstack.org/api-ref/placement/#errors"},{"line_number":36,"context_line":"        if \u0027errors\u0027 in json_resp.keys():"},{"line_number":37,"context_line":"            error_msg \u003d json_resp[\u0027errors\u0027][0].get(\u0027detail\u0027)"},{"line_number":38,"context_line":"        else:"},{"line_number":39,"context_line":"            error_msg \u003d resp.text"}],"source_content_type":"text/x-python","patch_set":14,"id":"9fb8cfa7_8637bbff","line":36,"range":{"start_line":36,"start_character":32,"end_line":36,"end_character":39},"updated":"2019-06-11 19:35:16.000000000","message":"nit: this is likely redundant","commit_id":"c0c98e1f69155cfb866fb442f241bbddbec5b19d"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"87f1205e38605c05237fe77d5988671ae76fb1a7","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    def get_error_msg(self, resp):"},{"line_number":34,"context_line":"        json_resp \u003d resp.json()"},{"line_number":35,"context_line":"        # https://developer.openstack.org/api-ref/placement/#errors"},{"line_number":36,"context_line":"        if \u0027errors\u0027 in json_resp.keys():"},{"line_number":37,"context_line":"            error_msg \u003d json_resp[\u0027errors\u0027][0].get(\u0027detail\u0027)"},{"line_number":38,"context_line":"        else:"},{"line_number":39,"context_line":"            error_msg \u003d resp.text"}],"source_content_type":"text/x-python","patch_set":14,"id":"9fb8cfa7_7a548ffe","line":36,"range":{"start_line":36,"start_character":32,"end_line":36,"end_character":39},"in_reply_to":"9fb8cfa7_8637bbff","updated":"2019-06-12 03:11:37.000000000","message":"Done","commit_id":"c0c98e1f69155cfb866fb442f241bbddbec5b19d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0258750c19ee9b003ebf495aa6fc0bf1ee526167","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        json_resp \u003d resp.json()"},{"line_number":35,"context_line":"        # https://developer.openstack.org/api-ref/placement/#errors"},{"line_number":36,"context_line":"        if \u0027errors\u0027 in json_resp.keys():"},{"line_number":37,"context_line":"            error_msg \u003d json_resp[\u0027errors\u0027][0].get(\u0027detail\u0027)"},{"line_number":38,"context_line":"        else:"},{"line_number":39,"context_line":"            error_msg \u003d resp.text"},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"9fb8cfa7_c6013308","line":37,"range":{"start_line":37,"start_character":43,"end_line":37,"end_character":46},"updated":"2019-06-11 19:35:16.000000000","message":"OK it looks like there will be exactly one entry in the list:\n\nhttps://opendev.org/openstack/placement/src/commit/9bb68ff1fc3b70596acc267fdc2f915456ca0ad4/placement/util.py#L94","commit_id":"c0c98e1f69155cfb866fb442f241bbddbec5b19d"}],"watcher/conf/placement_client.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"342b2f507b4a19bd519035ca8de3bbdda39e3e78","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"placement_opts \u003d ["},{"line_number":22,"context_line":"    cfg.StrOpt(\u0027api_version\u0027,"},{"line_number":23,"context_line":"               default\u003d\u00271.29\u0027,"},{"line_number":24,"context_line":"               help\u003d\u0027Version of placement API when using placement service. \u0027"},{"line_number":25,"context_line":"                    \u0027The minimum version restricted to a given Major API\u0027),"},{"line_number":26,"context_line":"    cfg.StrOpt(\u0027interface\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fb8cfa7_dbcbdc1b","line":23,"updated":"2019-06-03 17:23:17.000000000","message":"This seems like a random version to pick for all requests but I guess it should be new enough for most anything you need. You could even go up to 1.31 and then you require extracted placement from Stein:\n\nhttps://docs.openstack.org/placement/latest/placement-api-microversion-history.html#add-in-tree-queryparam-on-get-allocation-candidates\n\nBut it\u0027s not a big deal.","commit_id":"ef0149d3d6234e8f4997c4dbe53f3cf5fe235bb8"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"42d5a9342fbc766749118180e06ed191c411aa24","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"placement_opts \u003d ["},{"line_number":22,"context_line":"    cfg.StrOpt(\u0027api_version\u0027,"},{"line_number":23,"context_line":"               default\u003d\u00271.29\u0027,"},{"line_number":24,"context_line":"               help\u003d\u0027Version of placement API when using placement service. \u0027"},{"line_number":25,"context_line":"                    \u0027The minimum version restricted to a given Major API\u0027),"},{"line_number":26,"context_line":"    cfg.StrOpt(\u0027interface\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fb8cfa7_8cf20206","line":23,"in_reply_to":"9fb8cfa7_dbcbdc1b","updated":"2019-06-04 09:12:23.000000000","message":"I had checked the placement api history, and I think the version 1.29 can satisfy watcher needs.","commit_id":"ef0149d3d6234e8f4997c4dbe53f3cf5fe235bb8"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"342b2f507b4a19bd519035ca8de3bbdda39e3e78","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    cfg.StrOpt(\u0027api_version\u0027,"},{"line_number":23,"context_line":"               default\u003d\u00271.29\u0027,"},{"line_number":24,"context_line":"               help\u003d\u0027Version of placement API when using placement service. \u0027"},{"line_number":25,"context_line":"                    \u0027The minimum version restricted to a given Major API\u0027),"},{"line_number":26,"context_line":"    cfg.StrOpt(\u0027interface\u0027,"},{"line_number":27,"context_line":"               default\u003d\u0027public\u0027,"},{"line_number":28,"context_line":"               choices\u003d[\u0027internal\u0027, \u0027public\u0027, \u0027admin\u0027],"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fb8cfa7_db667c52","line":25,"range":{"start_line":25,"start_character":21,"end_line":25,"end_character":72},"updated":"2019-06-03 17:23:17.000000000","message":"I\u0027m not sure what this means, I would probably remove it.","commit_id":"ef0149d3d6234e8f4997c4dbe53f3cf5fe235bb8"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"42d5a9342fbc766749118180e06ed191c411aa24","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    cfg.StrOpt(\u0027api_version\u0027,"},{"line_number":23,"context_line":"               default\u003d\u00271.29\u0027,"},{"line_number":24,"context_line":"               help\u003d\u0027Version of placement API when using placement service. \u0027"},{"line_number":25,"context_line":"                    \u0027The minimum version restricted to a given Major API\u0027),"},{"line_number":26,"context_line":"    cfg.StrOpt(\u0027interface\u0027,"},{"line_number":27,"context_line":"               default\u003d\u0027public\u0027,"},{"line_number":28,"context_line":"               choices\u003d[\u0027internal\u0027, \u0027public\u0027, \u0027admin\u0027],"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fb8cfa7_af88181f","line":25,"range":{"start_line":25,"start_character":21,"end_line":25,"end_character":72},"in_reply_to":"9fb8cfa7_db667c52","updated":"2019-06-04 09:12:23.000000000","message":"Done","commit_id":"ef0149d3d6234e8f4997c4dbe53f3cf5fe235bb8"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"342b2f507b4a19bd519035ca8de3bbdda39e3e78","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    cfg.StrOpt(\u0027interface\u0027,"},{"line_number":27,"context_line":"               default\u003d\u0027public\u0027,"},{"line_number":28,"context_line":"               choices\u003d[\u0027internal\u0027, \u0027public\u0027, \u0027admin\u0027],"},{"line_number":29,"context_line":"               help\u003d\u0027Type of endpoint to use in placementclient.\u0027),"},{"line_number":30,"context_line":"    cfg.StrOpt(\u0027region_name\u0027,"},{"line_number":31,"context_line":"               help\u003d\u0027Region in Identity service catalog to use for \u0027"},{"line_number":32,"context_line":"                    \u0027communication with the OpenStack service.\u0027)]"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fb8cfa7_bb61483c","line":29,"range":{"start_line":29,"start_character":44,"end_line":29,"end_character":64},"updated":"2019-06-03 17:23:17.000000000","message":"I would remove this part, there is no placementclient.","commit_id":"ef0149d3d6234e8f4997c4dbe53f3cf5fe235bb8"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"42d5a9342fbc766749118180e06ed191c411aa24","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    cfg.StrOpt(\u0027interface\u0027,"},{"line_number":27,"context_line":"               default\u003d\u0027public\u0027,"},{"line_number":28,"context_line":"               choices\u003d[\u0027internal\u0027, \u0027public\u0027, \u0027admin\u0027],"},{"line_number":29,"context_line":"               help\u003d\u0027Type of endpoint to use in placementclient.\u0027),"},{"line_number":30,"context_line":"    cfg.StrOpt(\u0027region_name\u0027,"},{"line_number":31,"context_line":"               help\u003d\u0027Region in Identity service catalog to use for \u0027"},{"line_number":32,"context_line":"                    \u0027communication with the OpenStack service.\u0027)]"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fb8cfa7_acf7c6f5","line":29,"range":{"start_line":29,"start_character":44,"end_line":29,"end_character":64},"in_reply_to":"9fb8cfa7_bb61483c","updated":"2019-06-04 09:12:23.000000000","message":"Done","commit_id":"ef0149d3d6234e8f4997c4dbe53f3cf5fe235bb8"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bb9e28e32972c982b3bb549f82a1cfbf941e8037","unresolved":false,"context_lines":[{"line_number":21,"context_line":"placement_opts \u003d ["},{"line_number":22,"context_line":"    cfg.StrOpt(\u0027api_version\u0027,"},{"line_number":23,"context_line":"               default\u003d\u00271.29\u0027,"},{"line_number":24,"context_line":"               help\u003d\u0027microversion of placement API when using \u0027"},{"line_number":25,"context_line":"                    \u0027placement service.\u0027),"},{"line_number":26,"context_line":"    cfg.StrOpt(\u0027interface\u0027,"},{"line_number":27,"context_line":"               default\u003d\u0027public\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"9fb8cfa7_340f67e2","line":24,"updated":"2019-06-06 13:37:51.000000000","message":"As noted inline, with the way you have the code written now since PS12, I could see a future where certain parts of watcher will override this to use a specific version which makes the config option sort of pointless, but I guess we could deal with that when the time comes. If you want to enforce that this is the version we use for *all* GET requests then you should define it with the default_microversion kwarg when constructing the Adapter object and remove the get\u003d kwarg on the get() method.","commit_id":"008f96b27f46b156639746ba4d96be1a6a5f1d81"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"1354914e1d1bbcafa66834b182d4ce40f2709bae","unresolved":false,"context_lines":[{"line_number":21,"context_line":"placement_opts \u003d ["},{"line_number":22,"context_line":"    cfg.StrOpt(\u0027api_version\u0027,"},{"line_number":23,"context_line":"               default\u003d\u00271.29\u0027,"},{"line_number":24,"context_line":"               help\u003d\u0027microversion of placement API when using \u0027"},{"line_number":25,"context_line":"                    \u0027placement service.\u0027),"},{"line_number":26,"context_line":"    cfg.StrOpt(\u0027interface\u0027,"},{"line_number":27,"context_line":"               default\u003d\u0027public\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"9fb8cfa7_9390684c","line":24,"in_reply_to":"9fb8cfa7_340f67e2","updated":"2019-06-11 07:21:45.000000000","message":"yes, I agree that default_microversion is better.","commit_id":"008f96b27f46b156639746ba4d96be1a6a5f1d81"}],"watcher/tests/common/test_placement_helper.py":[{"author":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"change_message_id":"65503ff8a0e73b4cae823961682af4b0c2fa6c59","unresolved":false,"context_lines":[{"line_number":249,"context_line":"        result \u003d self.client.get_usages_for_resource_provider(rp_uuid)"},{"line_number":250,"context_line":"        self.assertIsNone(result)"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"    def test_get_candidate_providers(self, kss_req):"},{"line_number":253,"context_line":"        resources \u003d \u0027VCPU:4,DISK_GB:64,MEMORY_MB:2048\u0027"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"        fake_provider_summaries \u003d {"}],"source_content_type":"text/x-python","patch_set":11,"id":"9fb8cfa7_b3aae316","line":252,"range":{"start_line":252,"start_character":8,"end_line":252,"end_character":36},"updated":"2019-06-01 10:18:44.000000000","message":"I think test_get_candidate_providers_success is better.","commit_id":"9b7e94c80c04b0e6d54d1b73803d6332da0cd694"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"6eddf1d057462aa2a9493e6e5f9dfcc3e22ef829","unresolved":false,"context_lines":[{"line_number":249,"context_line":"        result \u003d self.client.get_usages_for_resource_provider(rp_uuid)"},{"line_number":250,"context_line":"        self.assertIsNone(result)"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"    def test_get_candidate_providers(self, kss_req):"},{"line_number":253,"context_line":"        resources \u003d \u0027VCPU:4,DISK_GB:64,MEMORY_MB:2048\u0027"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"        fake_provider_summaries \u003d {"}],"source_content_type":"text/x-python","patch_set":11,"id":"9fb8cfa7_15c86f53","line":252,"range":{"start_line":252,"start_character":8,"end_line":252,"end_character":36},"in_reply_to":"9fb8cfa7_b3aae316","updated":"2019-06-03 06:45:20.000000000","message":"add _OK trail","commit_id":"9b7e94c80c04b0e6d54d1b73803d6332da0cd694"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"342b2f507b4a19bd519035ca8de3bbdda39e3e78","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def _add_default_kwargs(self, kwargs):"},{"line_number":38,"context_line":"        kwargs[\u0027endpoint_filter\u0027] \u003d {\u0027service_type\u0027: \u0027placement\u0027,"},{"line_number":39,"context_line":"                                     \u0027interface\u0027: \u0027public\u0027,"},{"line_number":40,"context_line":"                                     \u0027version\u0027: \u00271.29\u0027}"},{"line_number":41,"context_line":"        kwargs[\u0027headers\u0027] \u003d {\u0027accept\u0027: \u0027application/json\u0027}"},{"line_number":42,"context_line":"        kwargs[\u0027raise_exc\u0027] \u003d False"},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"9fb8cfa7_9b3fa4d5","line":40,"range":{"start_line":39,"start_character":37,"end_line":40,"end_character":55},"updated":"2019-06-03 17:23:17.000000000","message":"Why not use the config option values here? Then if the defaults change, like for api_version, you don\u0027t have to modify this code.","commit_id":"ef0149d3d6234e8f4997c4dbe53f3cf5fe235bb8"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"42d5a9342fbc766749118180e06ed191c411aa24","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def _add_default_kwargs(self, kwargs):"},{"line_number":38,"context_line":"        kwargs[\u0027endpoint_filter\u0027] \u003d {\u0027service_type\u0027: \u0027placement\u0027,"},{"line_number":39,"context_line":"                                     \u0027interface\u0027: \u0027public\u0027,"},{"line_number":40,"context_line":"                                     \u0027version\u0027: \u00271.29\u0027}"},{"line_number":41,"context_line":"        kwargs[\u0027headers\u0027] \u003d {\u0027accept\u0027: \u0027application/json\u0027}"},{"line_number":42,"context_line":"        kwargs[\u0027raise_exc\u0027] \u003d False"},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"9fb8cfa7_ace10601","line":40,"range":{"start_line":39,"start_character":37,"end_line":40,"end_character":55},"in_reply_to":"9fb8cfa7_9b3fa4d5","updated":"2019-06-04 09:12:23.000000000","message":"Done","commit_id":"ef0149d3d6234e8f4997c4dbe53f3cf5fe235bb8"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e1fb49a824f8551b87025b283d3bea5259b6ade5","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"@mock.patch(\u0027keystoneauth1.session.Session.request\u0027)"},{"line_number":29,"context_line":"class TestPlacementHelper(base.TestCase):"},{"line_number":30,"context_line":"    def setUp(self):"},{"line_number":31,"context_line":"        super(TestPlacementHelper, self).setUp()"},{"line_number":32,"context_line":"        _AUTH_CONF_GROUP \u003d \u0027watcher_clients_auth\u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"9fb8cfa7_d4a7eba6","line":29,"updated":"2019-06-06 13:42:41.000000000","message":"Note that there is a PlacementFixture in the placement repo:\n\nhttps://github.com/openstack/placement/blob/master/placement/tests/functional/fixtures/placement.py\n\nUsing that allows making requests against a real working placement API and DB which is useful to know that you\u0027re tests aren\u0027t just passing from false positive results due to mocks. It\u0027s a bit more work to setup though so it could be a follow up item if we wanted to use that.\n\nSome pointers on the nova code to use the PlacementFixture:\n\nhttps://github.com/openstack/nova/blob/70a2879b2c75377f728f8faec8bd581613061230/tox.ini#L75\n\nhttps://github.com/openstack/nova/blob/70a2879b2c75377f728f8faec8bd581613061230/nova/tests/functional/fixtures.py\n\nAnd an example of test code that uses it:\n\nhttps://github.com/openstack/nova/blob/70a2879b2c75377f728f8faec8bd581613061230/nova/tests/functional/integrated_helpers.py#L464","commit_id":"008f96b27f46b156639746ba4d96be1a6a5f1d81"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"1354914e1d1bbcafa66834b182d4ce40f2709bae","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"@mock.patch(\u0027keystoneauth1.session.Session.request\u0027)"},{"line_number":29,"context_line":"class TestPlacementHelper(base.TestCase):"},{"line_number":30,"context_line":"    def setUp(self):"},{"line_number":31,"context_line":"        super(TestPlacementHelper, self).setUp()"},{"line_number":32,"context_line":"        _AUTH_CONF_GROUP \u003d \u0027watcher_clients_auth\u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"9fb8cfa7_13a1d894","line":29,"in_reply_to":"9fb8cfa7_d4a7eba6","updated":"2019-06-11 07:21:45.000000000","message":"OK, I\u0027ll consider PlacementFixture in the functional tests","commit_id":"008f96b27f46b156639746ba4d96be1a6a5f1d81"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bb9e28e32972c982b3bb549f82a1cfbf941e8037","unresolved":false,"context_lines":[{"line_number":39,"context_line":"            \u0027service_type\u0027: \u0027placement\u0027,"},{"line_number":40,"context_line":"            \u0027interface\u0027: CONF.placement_client.interface}"},{"line_number":41,"context_line":"        kwargs[\u0027headers\u0027] \u003d {\u0027accept\u0027: \u0027application/json\u0027}"},{"line_number":42,"context_line":"        kwargs[\u0027microversion\u0027] \u003d \u00271.29\u0027"},{"line_number":43,"context_line":"        kwargs[\u0027raise_exc\u0027] \u003d False"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def _assert_keystone_called_once(self, kss_req, url, method, **kwargs):"}],"source_content_type":"text/x-python","patch_set":13,"id":"9fb8cfa7_74bcffdb","line":42,"range":{"start_line":42,"start_character":33,"end_line":42,"end_character":39},"updated":"2019-06-06 13:37:51.000000000","message":"Use CONF.placement_client.api_version here.","commit_id":"008f96b27f46b156639746ba4d96be1a6a5f1d81"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"1354914e1d1bbcafa66834b182d4ce40f2709bae","unresolved":false,"context_lines":[{"line_number":39,"context_line":"            \u0027service_type\u0027: \u0027placement\u0027,"},{"line_number":40,"context_line":"            \u0027interface\u0027: CONF.placement_client.interface}"},{"line_number":41,"context_line":"        kwargs[\u0027headers\u0027] \u003d {\u0027accept\u0027: \u0027application/json\u0027}"},{"line_number":42,"context_line":"        kwargs[\u0027microversion\u0027] \u003d \u00271.29\u0027"},{"line_number":43,"context_line":"        kwargs[\u0027raise_exc\u0027] \u003d False"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def _assert_keystone_called_once(self, kss_req, url, method, **kwargs):"}],"source_content_type":"text/x-python","patch_set":13,"id":"9fb8cfa7_137c781d","line":42,"range":{"start_line":42,"start_character":33,"end_line":42,"end_character":39},"in_reply_to":"9fb8cfa7_74bcffdb","updated":"2019-06-11 07:21:45.000000000","message":"OK, will fix it","commit_id":"008f96b27f46b156639746ba4d96be1a6a5f1d81"}],"watcher/tests/fakes.py":[{"author":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"change_message_id":"65503ff8a0e73b4cae823961682af4b0c2fa6c59","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        if content:"},{"line_number":111,"context_line":"            self._content \u003d content"},{"line_number":112,"context_line":"        if headers:"},{"line_number":113,"context_line":"            self.headers \u003d headers"}],"source_content_type":"text/x-python","patch_set":11,"id":"9fb8cfa7_f3d93bf4","line":113,"range":{"start_line":113,"start_character":16,"end_line":113,"end_character":23},"updated":"2019-06-01 10:18:44.000000000","message":"self.headers or self._headers?","commit_id":"9b7e94c80c04b0e6d54d1b73803d6332da0cd694"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"6eddf1d057462aa2a9493e6e5f9dfcc3e22ef829","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        if content:"},{"line_number":111,"context_line":"            self._content \u003d content"},{"line_number":112,"context_line":"        if headers:"},{"line_number":113,"context_line":"            self.headers \u003d headers"}],"source_content_type":"text/x-python","patch_set":11,"id":"9fb8cfa7_7561ab39","line":113,"range":{"start_line":113,"start_character":16,"end_line":113,"end_character":23},"in_reply_to":"9fb8cfa7_f3d93bf4","updated":"2019-06-03 06:45:20.000000000","message":"headers is a member of class requests.","commit_id":"9b7e94c80c04b0e6d54d1b73803d6332da0cd694"}]}
