)]}'
{"nova/scheduler/client/report.py":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"d6ea01e43b7c0de0d4ae8fa9679fae81ed4e7268","unresolved":false,"context_lines":[{"line_number":951,"context_line":"                \u0027err_text\u0027: response.text,"},{"line_number":952,"context_line":"            }"},{"line_number":953,"context_line":"            LOG.error(msg, args)"},{"line_number":954,"context_line":"            raise exception.InvalidResourceClass(resource_class\u003dname)"},{"line_number":955,"context_line":""},{"line_number":956,"context_line":"    def _get_or_create_resource_class(self, name):"},{"line_number":957,"context_line":"        \"\"\"Queries the placement API for a resource class supplied resource"}],"source_content_type":"text/x-python","patch_set":1,"id":"df87a7cf_a24bee28","side":"PARENT","line":954,"updated":"2017-12-18 19:42:48.000000000","message":"Working through this highlighted that this exception doesn\u0027t feel properly accurate. there could be a variety of responses, but maybe \"it didn\u0027t work is sufficient\".","commit_id":"07c925a5321e379293bbf0e55bf3c40798eaf21b"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"d6ea01e43b7c0de0d4ae8fa9679fae81ed4e7268","unresolved":false,"context_lines":[{"line_number":889,"context_line":"            self._delete_inventory(rp_uuid)"},{"line_number":890,"context_line":""},{"line_number":891,"context_line":"    @safe_connect"},{"line_number":892,"context_line":"    def _ensure_resource_class(self, name):"},{"line_number":893,"context_line":"        \"\"\"Make sure a custom resource class exists."},{"line_number":894,"context_line":""},{"line_number":895,"context_line":"        PUT the resource class using microversion 1.7."}],"source_content_type":"text/x-python","patch_set":1,"id":"df87a7cf_22d35e62","line":892,"updated":"2017-12-18 19:42:48.000000000","message":"this method was well covered with unit tests prior this change. what was covered was that it failed over, not that it called put or did the logging. That can probably be addressed if necessary, but there\u0027s not a lot going on here.","commit_id":"323e58ace61f7bb14d531da3d87209f0612f813c"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"73a7b3ecca298f07e77464c9fe32c4cb7ced3bf4","unresolved":false,"context_lines":[{"line_number":846,"context_line":"            if r.status_code \u003d\u003d 200:"},{"line_number":847,"context_line":"                # Update our view of the generation for next time"},{"line_number":848,"context_line":"                updated_inv \u003d r.json()"},{"line_number":849,"context_line":"                new_gen \u003d updated_inv[\u0027resource_provider_generation\u0027]"},{"line_number":850,"context_line":""},{"line_number":851,"context_line":"                self._provider_tree.update_inventory(rp_uuid, {}, new_gen)"},{"line_number":852,"context_line":"                msg_args[\u0027generation\u0027] \u003d new_gen"},{"line_number":853,"context_line":"                LOG.info(\"[%(placement_req_id)s] Deleted all inventory for \""},{"line_number":854,"context_line":"                         \"resource provider %(rp_uuid)s at generation \""}],"source_content_type":"text/x-python","patch_set":2,"id":"5f93b717_dd3a90ca","side":"PARENT","line":851,"range":{"start_line":849,"start_character":16,"end_line":851,"end_character":74},"updated":"2018-01-30 20:50:50.000000000","message":"this","commit_id":"3bc4cb022f7dc782feccf0b6ab939754603392cf"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b6cc4676db4f900836d095abb4ac8ae3b4e2b5ad","unresolved":false,"context_lines":[{"line_number":949,"context_line":"                \u0027rc_name\u0027: name,"},{"line_number":950,"context_line":"                \u0027status_code\u0027: response.status_code,"},{"line_number":951,"context_line":"                \u0027err_text\u0027: response.text,"},{"line_number":952,"context_line":"            }"},{"line_number":953,"context_line":"            LOG.error(msg, args)"},{"line_number":954,"context_line":"            raise exception.InvalidResourceClass(resource_class\u003dname)"},{"line_number":955,"context_line":""},{"line_number":956,"context_line":"    def _get_or_create_resource_class(self, name):"},{"line_number":957,"context_line":"        \"\"\"Queries the placement API for a resource class supplied resource"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f93b717_b357d902","side":"PARENT","line":954,"range":{"start_line":952,"start_character":0,"end_line":954,"end_character":69},"updated":"2018-01-29 19:06:34.000000000","message":"This shouldn\u0027t be removed, should it?\n\n...a thing for which we are apparently lacking a test case.\n\n...or were, until Idb579acf6852650d4d5a6bc7704f123a40258f2d","commit_id":"3bc4cb022f7dc782feccf0b6ab939754603392cf"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"2dd00d475f8829b431709f2513dc2e5b772ee654","unresolved":false,"context_lines":[{"line_number":949,"context_line":"                \u0027rc_name\u0027: name,"},{"line_number":950,"context_line":"                \u0027status_code\u0027: response.status_code,"},{"line_number":951,"context_line":"                \u0027err_text\u0027: response.text,"},{"line_number":952,"context_line":"            }"},{"line_number":953,"context_line":"            LOG.error(msg, args)"},{"line_number":954,"context_line":"            raise exception.InvalidResourceClass(resource_class\u003dname)"},{"line_number":955,"context_line":""},{"line_number":956,"context_line":"    def _get_or_create_resource_class(self, name):"},{"line_number":957,"context_line":"        \"\"\"Queries the placement API for a resource class supplied resource"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f93b717_24085d2a","side":"PARENT","line":954,"range":{"start_line":952,"start_character":0,"end_line":954,"end_character":69},"in_reply_to":"5f93b717_b357d902","updated":"2018-01-29 21:54:31.000000000","message":"It\u0027s not removed, it\u0027s down below, the diff is just being dumb.","commit_id":"3bc4cb022f7dc782feccf0b6ab939754603392cf"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b6cc4676db4f900836d095abb4ac8ae3b4e2b5ad","unresolved":false,"context_lines":[{"line_number":904,"context_line":"        response \u003d self.put(\"/resource_classes/%s\" % name, None, version\u003d\"1.7\")"},{"line_number":905,"context_line":"        if 200 \u003c\u003d response.status_code \u003c 300:"},{"line_number":906,"context_line":"            return name"},{"line_number":907,"context_line":"        else:"},{"line_number":908,"context_line":"            msg \u003d (\"Failed to ensure resource class record with placement API \""},{"line_number":909,"context_line":"                   \"for resource class %(rc_name)s. Got %(status_code)d: \""},{"line_number":910,"context_line":"                   \"%(err_text)s.\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f93b717_d325c5ac","line":907,"range":{"start_line":907,"start_character":8,"end_line":907,"end_character":12},"updated":"2018-01-29 19:06:34.000000000","message":"Could remove this and outdent, cdent.","commit_id":"832b49875324df30950b58607112594717bb2dd8"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"2dd00d475f8829b431709f2513dc2e5b772ee654","unresolved":false,"context_lines":[{"line_number":904,"context_line":"        response \u003d self.put(\"/resource_classes/%s\" % name, None, version\u003d\"1.7\")"},{"line_number":905,"context_line":"        if 200 \u003c\u003d response.status_code \u003c 300:"},{"line_number":906,"context_line":"            return name"},{"line_number":907,"context_line":"        else:"},{"line_number":908,"context_line":"            msg \u003d (\"Failed to ensure resource class record with placement API \""},{"line_number":909,"context_line":"                   \"for resource class %(rc_name)s. Got %(status_code)d: \""},{"line_number":910,"context_line":"                   \"%(err_text)s.\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f93b717_ff50c00c","line":907,"range":{"start_line":907,"start_character":8,"end_line":907,"end_character":12},"in_reply_to":"5f93b717_d325c5ac","updated":"2018-01-29 21:54:31.000000000","message":"Could, but it would make the change more impactful. And the whole if something return, then do some other stuff, but not in an else, I find confusing.","commit_id":"832b49875324df30950b58607112594717bb2dd8"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"014cb745d760be4b96a47f8e1d419af8158bbaf6","unresolved":false,"context_lines":[{"line_number":913,"context_line":"                \u0027status_code\u0027: response.status_code,"},{"line_number":914,"context_line":"                \u0027err_text\u0027: response.text,"},{"line_number":915,"context_line":"            }"},{"line_number":916,"context_line":"            LOG.error(msg, args)"},{"line_number":917,"context_line":"            raise exception.InvalidResourceClass(resource_class\u003dname)"},{"line_number":918,"context_line":""},{"line_number":919,"context_line":"    def update_compute_node(self, compute_node):"},{"line_number":920,"context_line":"        \"\"\"Creates or updates stats for the supplied compute node."}],"source_content_type":"text/x-python","patch_set":2,"id":"5f93b717_bfea38a9","line":917,"range":{"start_line":916,"start_character":1,"end_line":917,"end_character":69},"updated":"2018-01-29 22:19:19.000000000","message":"d\u0027oh","commit_id":"832b49875324df30950b58607112594717bb2dd8"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"50ba9679181a8861569bd190bf34cae597ff770d","unresolved":false,"context_lines":[{"line_number":940,"context_line":""},{"line_number":941,"context_line":"        cur_gen \u003d curr[\u0027resource_provider_generation\u0027]"},{"line_number":942,"context_line":"        url \u003d \u0027/resource_providers/%s/inventories\u0027 % rp_uuid"},{"line_number":943,"context_line":"        r \u003d self.delete(url, version\u003d\"1.5\","},{"line_number":944,"context_line":"                        global_request_id\u003dcontext.global_id)"},{"line_number":945,"context_line":"        placement_req_id \u003d get_placement_request_id(r)"},{"line_number":946,"context_line":"        msg_args \u003d {"},{"line_number":947,"context_line":"            \u0027rp_uuid\u0027: rp_uuid,"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa0c359_da568907","line":944,"range":{"start_line":943,"start_character":0,"end_line":944,"end_character":60},"updated":"2018-02-06 02:08:23.000000000","message":"I see the commitment which requires 1.14+ from http://lists.openstack.org/pipermail/openstack-dev/2017-December/125643.html\n\nOne question is that why v1.5 specific code in the client?","commit_id":"35845090749d61402aae21558250a180dca9e6f3"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"73063dc47e19eff6ba09ad43e1644eb5fee49e6e","unresolved":false,"context_lines":[{"line_number":940,"context_line":""},{"line_number":941,"context_line":"        cur_gen \u003d curr[\u0027resource_provider_generation\u0027]"},{"line_number":942,"context_line":"        url \u003d \u0027/resource_providers/%s/inventories\u0027 % rp_uuid"},{"line_number":943,"context_line":"        r \u003d self.delete(url, version\u003d\"1.5\","},{"line_number":944,"context_line":"                        global_request_id\u003dcontext.global_id)"},{"line_number":945,"context_line":"        placement_req_id \u003d get_placement_request_id(r)"},{"line_number":946,"context_line":"        msg_args \u003d {"},{"line_number":947,"context_line":"            \u0027rp_uuid\u0027: rp_uuid,"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa0c359_f9cb42a2","line":944,"range":{"start_line":943,"start_character":0,"end_line":944,"end_character":60},"in_reply_to":"3fa0c359_d27d061d","updated":"2018-02-06 18:18:41.000000000","message":"I see, thanks for your explanation.","commit_id":"35845090749d61402aae21558250a180dca9e6f3"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"faaa543cb819397660423f675bfbbdea523afdae","unresolved":false,"context_lines":[{"line_number":940,"context_line":""},{"line_number":941,"context_line":"        cur_gen \u003d curr[\u0027resource_provider_generation\u0027]"},{"line_number":942,"context_line":"        url \u003d \u0027/resource_providers/%s/inventories\u0027 % rp_uuid"},{"line_number":943,"context_line":"        r \u003d self.delete(url, version\u003d\"1.5\","},{"line_number":944,"context_line":"                        global_request_id\u003dcontext.global_id)"},{"line_number":945,"context_line":"        placement_req_id \u003d get_placement_request_id(r)"},{"line_number":946,"context_line":"        msg_args \u003d {"},{"line_number":947,"context_line":"            \u0027rp_uuid\u0027: rp_uuid,"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa0c359_d27d061d","line":944,"range":{"start_line":943,"start_character":0,"end_line":944,"end_character":60},"in_reply_to":"3fa0c359_da568907","updated":"2018-02-06 11:37:32.000000000","message":"Because we made a decision to explicitly mark each call that is not version 1.0 with the version that introduced the functionality.\n\nThis is becoming something of a standard/best-practice for microversion handling: use the microversion that introduces the functionality that the request is using. Per request.","commit_id":"35845090749d61402aae21558250a180dca9e6f3"}],"nova/tests/functional/api/openstack/placement/test_report_client.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b6cc4676db4f900836d095abb4ac8ae3b4e2b5ad","unresolved":false,"context_lines":[{"line_number":185,"context_line":"                    \u0027allocation_ratio\u0027: 1.0,"},{"line_number":186,"context_line":"                },"},{"line_number":187,"context_line":"            }"},{"line_number":188,"context_line":"            self.assertRaises(exception.InvalidResourceClass,"},{"line_number":189,"context_line":"                              self.client.set_inventory_for_provider,"},{"line_number":190,"context_line":"                              self.compute_uuid, self.compute_name, inv_data)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f93b717_734b912a","line":188,"updated":"2018-01-29 19:06:34.000000000","message":"So why is this still passing?","commit_id":"832b49875324df30950b58607112594717bb2dd8"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"2dd00d475f8829b431709f2513dc2e5b772ee654","unresolved":false,"context_lines":[{"line_number":185,"context_line":"                    \u0027allocation_ratio\u0027: 1.0,"},{"line_number":186,"context_line":"                },"},{"line_number":187,"context_line":"            }"},{"line_number":188,"context_line":"            self.assertRaises(exception.InvalidResourceClass,"},{"line_number":189,"context_line":"                              self.client.set_inventory_for_provider,"},{"line_number":190,"context_line":"                              self.compute_uuid, self.compute_name, inv_data)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f93b717_5f41b438","line":188,"in_reply_to":"5f93b717_734b912a","updated":"2018-01-29 21:54:31.000000000","message":"Because you misread the diff","commit_id":"832b49875324df30950b58607112594717bb2dd8"}],"nova/tests/unit/scheduler/client/test_report.py":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"d6ea01e43b7c0de0d4ae8fa9679fae81ed4e7268","unresolved":false,"context_lines":[{"line_number":1879,"context_line":"    @mock.patch.object(report.LOG, \u0027info\u0027)"},{"line_number":1880,"context_line":"    @mock.patch(\u0027nova.scheduler.client.report.SchedulerReportClient.\u0027"},{"line_number":1881,"context_line":"                \u0027put\u0027)"},{"line_number":1882,"context_line":"    @mock.patch.object(report.LOG, \u0027info\u0027)"},{"line_number":1883,"context_line":"    @mock.patch(\u0027nova.scheduler.client.report.SchedulerReportClient.\u0027"},{"line_number":1884,"context_line":"                \u0027delete\u0027)"},{"line_number":1885,"context_line":"    @mock.patch(\u0027nova.scheduler.client.report.SchedulerReportClient.\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"df87a7cf_e2efb61a","side":"PARENT","line":1882,"updated":"2017-12-18 19:42:48.000000000","message":"turns out these mocks were wrong in the original, but the wrongness didn\u0027t hugely impact the nature of the test","commit_id":"07c925a5321e379293bbf0e55bf3c40798eaf21b"}]}
