)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"5ca07f7f83783b28934fd8e1ffa4c3fe434dc31b","unresolved":false,"context_lines":[{"line_number":10,"context_line":"_get_provider_traits would log a warning and return None on placement"},{"line_number":11,"context_line":"API errors.  The callers were ignoring these errors, resulting in the"},{"line_number":12,"context_line":"internal ProviderTree representation potentially being out of sync with"},{"line_number":13,"context_line":"reality."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"With this change set, these two methods raise exceptions on API errors."},{"line_number":16,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"9f91af0f_c5245310","line":13,"updated":"2018-01-03 12:08:00.000000000","message":"You may want to be more clear about what happens when the exceptions are raised and how that helps to keep things in sync, if in fact it does. What, if anything, catches the exceptions and protects reality?\n\nIf it\u0027s not here, is it later in the stack?","commit_id":"4ccce8b865e6645fdec8df89dba9d7fbbc3ce788"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"aa3b49ee999d065b2a4f8e4d4598be581bbbbbf4","unresolved":false,"context_lines":[{"line_number":10,"context_line":"_get_provider_traits would log a warning and return None on placement"},{"line_number":11,"context_line":"API errors.  The callers were ignoring these errors, resulting in the"},{"line_number":12,"context_line":"internal ProviderTree representation potentially being out of sync with"},{"line_number":13,"context_line":"reality."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"With this change set, these two methods raise exceptions on API errors."},{"line_number":16,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"9f91af0f_f609ea2b","line":13,"in_reply_to":"9f91af0f_c5245310","updated":"2018-01-04 23:12:17.000000000","message":"Okay, I added words; see if you like.","commit_id":"4ccce8b865e6645fdec8df89dba9d7fbbc3ce788"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7b1823373a8d55c8ea173a4bd01f453edbf1fa63","unresolved":false,"context_lines":[{"line_number":22,"context_line":"Why is this an improvement?  Because at least the routine that"},{"line_number":23,"context_line":"encountered the error doesn\u0027t continue on as if nothing went wrong.  (We"},{"line_number":24,"context_line":"could have dealt with this by having the callers check for None"},{"line_number":25,"context_line":"explicitly, but this approach was deemed more rigorous and robust.)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Change-Id: I20fe0d895f61ec83759cf880a87238ecc43c08f5"},{"line_number":28,"context_line":"blueprint: nested-resource-providers"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"7f96bb07_e5e2b601","line":25,"range":{"start_line":25,"start_character":12,"end_line":25,"end_character":65},"updated":"2018-01-22 13:11:36.000000000","message":"+1","commit_id":"b214dfc41928d9e05199263301f8e5b23555c170"}],"nova/scheduler/client/report.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"65818462d53687051bca28f01b6a73b58cc5d2e8","unresolved":false,"context_lines":[{"line_number":366,"context_line":"    def _get_provider_aggregates(self, rp_uuid):"},{"line_number":367,"context_line":"        \"\"\"Queries the placement API for a resource provider\u0027s aggregates."},{"line_number":368,"context_line":"        Returns a set() of aggregate UUIDs or None if no such resource provider"},{"line_number":369,"context_line":"        was found or there was an error communicating with the placement API."},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"        :param rp_uuid: UUID of the resource provider to grab aggregates for."},{"line_number":372,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":17,"id":"7f96bb07_cfc7c264","line":369,"updated":"2018-01-19 16:31:32.000000000","message":"please document that this method now can raise an exception.","commit_id":"f489378b6f3de90245723c477ced6ecab0cb2bd6"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"c5439b04c023f65a7d31332c98b0b81a43adc5df","unresolved":false,"context_lines":[{"line_number":366,"context_line":"    def _get_provider_aggregates(self, rp_uuid):"},{"line_number":367,"context_line":"        \"\"\"Queries the placement API for a resource provider\u0027s aggregates."},{"line_number":368,"context_line":"        Returns a set() of aggregate UUIDs or None if no such resource provider"},{"line_number":369,"context_line":"        was found or there was an error communicating with the placement API."},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"        :param rp_uuid: UUID of the resource provider to grab aggregates for."},{"line_number":372,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":17,"id":"7f96bb07_db1f81b5","line":369,"in_reply_to":"7f96bb07_cfc7c264","updated":"2018-01-19 20:57:38.000000000","message":"Done","commit_id":"f489378b6f3de90245723c477ced6ecab0cb2bd6"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"0a1002c778c9462f7865078397500279637f2a4b","unresolved":false,"context_lines":[{"line_number":387,"context_line":"            \u0027err_text\u0027: resp.text,"},{"line_number":388,"context_line":"        }"},{"line_number":389,"context_line":"        LOG.error(msg, args)"},{"line_number":390,"context_line":"        raise exception.ResourceProviderAggregateRetrievalFailed(uuid\u003drp_uuid)"},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"    @safe_connect"},{"line_number":393,"context_line":"    def _get_provider_traits(self, rp_uuid):"}],"source_content_type":"text/x-python","patch_set":17,"id":"7f96bb07_2fe2e602","line":390,"updated":"2018-01-19 16:31:04.000000000","message":"So we no longer care why it failed? (below, too)","commit_id":"f489378b6f3de90245723c477ced6ecab0cb2bd6"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"da75aec3b19f4e64521436d5e9941cfd7b8e2743","unresolved":false,"context_lines":[{"line_number":387,"context_line":"            \u0027err_text\u0027: resp.text,"},{"line_number":388,"context_line":"        }"},{"line_number":389,"context_line":"        LOG.error(msg, args)"},{"line_number":390,"context_line":"        raise exception.ResourceProviderAggregateRetrievalFailed(uuid\u003drp_uuid)"},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"    @safe_connect"},{"line_number":393,"context_line":"    def _get_provider_traits(self, rp_uuid):"}],"source_content_type":"text/x-python","patch_set":17,"id":"7f96bb07_5bca91a1","line":390,"in_reply_to":"7f96bb07_2fcae34e","updated":"2018-01-19 20:37:27.000000000","message":"Ah, I see.\n\nThe response text on a 404 already says something helpful about the provider not existing:\n\n \u003chtml\u003e\n  \u003chead\u003e\n   \u003ctitle\u003e404 Not Found\u003c/title\u003e\n  \u003c/head\u003e\n  \u003cbody\u003e\n   \u003ch1\u003e404 Not Found\u003c/h1\u003e\n   The resource could not be found.\u003cbr /\u003e\u003cbr /\u003e\n No resource provider with uuid abcd found\n\n\n  \u003c/body\u003e\n \u003c/html\u003e\n\nWe\u0027re already including that response text in the log message.","commit_id":"f489378b6f3de90245723c477ced6ecab0cb2bd6"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"6c7a84cbd72da1269fc57f14666677115843144c","unresolved":false,"context_lines":[{"line_number":387,"context_line":"            \u0027err_text\u0027: resp.text,"},{"line_number":388,"context_line":"        }"},{"line_number":389,"context_line":"        LOG.error(msg, args)"},{"line_number":390,"context_line":"        raise exception.ResourceProviderAggregateRetrievalFailed(uuid\u003drp_uuid)"},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"    @safe_connect"},{"line_number":393,"context_line":"    def _get_provider_traits(self, rp_uuid):"}],"source_content_type":"text/x-python","patch_set":17,"id":"7f96bb07_efd5dee6","line":390,"in_reply_to":"7f96bb07_2fe2e602","updated":"2018-01-19 16:36:25.000000000","message":"We still care, as much as we did before: log message above.  Or am I misunderstanding what you\u0027re asking?","commit_id":"f489378b6f3de90245723c477ced6ecab0cb2bd6"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"4bf94546c2c75721297776312a5a1e2dee3e5122","unresolved":false,"context_lines":[{"line_number":387,"context_line":"            \u0027err_text\u0027: resp.text,"},{"line_number":388,"context_line":"        }"},{"line_number":389,"context_line":"        LOG.error(msg, args)"},{"line_number":390,"context_line":"        raise exception.ResourceProviderAggregateRetrievalFailed(uuid\u003drp_uuid)"},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"    @safe_connect"},{"line_number":393,"context_line":"    def _get_provider_traits(self, rp_uuid):"}],"source_content_type":"text/x-python","patch_set":17,"id":"7f96bb07_2fcae34e","line":390,"in_reply_to":"7f96bb07_efd5dee6","updated":"2018-01-19 18:09:52.000000000","message":"I would have preferred that the text to still include the reason for the failure, instead of relying on interpreting a 404 status to mean that the RP doesn\u0027t exist. Helpful error messages are helpful.","commit_id":"f489378b6f3de90245723c477ced6ecab0cb2bd6"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"65818462d53687051bca28f01b6a73b58cc5d2e8","unresolved":false,"context_lines":[{"line_number":393,"context_line":"    def _get_provider_traits(self, rp_uuid):"},{"line_number":394,"context_line":"        \"\"\"Queries the placement API for a resource provider\u0027s traits.  Returns"},{"line_number":395,"context_line":"        a set() of string trait names, or None if no such resource provider was"},{"line_number":396,"context_line":"        found or there was an error communicating with the placement API."},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"        :param rp_uuid: UUID of the resource provider to grab traits for."},{"line_number":399,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":17,"id":"7f96bb07_6fb9cee7","line":396,"updated":"2018-01-19 16:31:32.000000000","message":"please document that this method now can raise an exception.","commit_id":"f489378b6f3de90245723c477ced6ecab0cb2bd6"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"c5439b04c023f65a7d31332c98b0b81a43adc5df","unresolved":false,"context_lines":[{"line_number":393,"context_line":"    def _get_provider_traits(self, rp_uuid):"},{"line_number":394,"context_line":"        \"\"\"Queries the placement API for a resource provider\u0027s traits.  Returns"},{"line_number":395,"context_line":"        a set() of string trait names, or None if no such resource provider was"},{"line_number":396,"context_line":"        found or there was an error communicating with the placement API."},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"        :param rp_uuid: UUID of the resource provider to grab traits for."},{"line_number":399,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":17,"id":"7f96bb07_fb1cbdc2","line":396,"in_reply_to":"7f96bb07_6fb9cee7","updated":"2018-01-19 20:57:38.000000000","message":"Done","commit_id":"f489378b6f3de90245723c477ced6ecab0cb2bd6"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"65818462d53687051bca28f01b6a73b58cc5d2e8","unresolved":false,"context_lines":[{"line_number":663,"context_line":""},{"line_number":664,"context_line":"        Only refresh if there has been no refresh during the lifetime of"},{"line_number":665,"context_line":"        this process, ASSOCIATION_REFRESH seconds have passed, or the force arg"},{"line_number":666,"context_line":"        has been set to True."},{"line_number":667,"context_line":""},{"line_number":668,"context_line":"        :param rp_uuid: UUID of the resource provider to check for fresh"},{"line_number":669,"context_line":"                        aggregates and traits"}],"source_content_type":"text/x-python","patch_set":17,"id":"7f96bb07_0f936a5e","line":666,"updated":"2018-01-19 16:31:32.000000000","message":"please document that this method now can raise multiple exceptions.","commit_id":"f489378b6f3de90245723c477ced6ecab0cb2bd6"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"c5439b04c023f65a7d31332c98b0b81a43adc5df","unresolved":false,"context_lines":[{"line_number":663,"context_line":""},{"line_number":664,"context_line":"        Only refresh if there has been no refresh during the lifetime of"},{"line_number":665,"context_line":"        this process, ASSOCIATION_REFRESH seconds have passed, or the force arg"},{"line_number":666,"context_line":"        has been set to True."},{"line_number":667,"context_line":""},{"line_number":668,"context_line":"        :param rp_uuid: UUID of the resource provider to check for fresh"},{"line_number":669,"context_line":"                        aggregates and traits"}],"source_content_type":"text/x-python","patch_set":17,"id":"7f96bb07_9b77b909","line":666,"in_reply_to":"7f96bb07_0f936a5e","updated":"2018-01-19 20:57:38.000000000","message":"Done.  Though I\u0027m wondering whether I should roll these up into a catch-all ResourceProviderAssociationRefreshFailed.","commit_id":"f489378b6f3de90245723c477ced6ecab0cb2bd6"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"adfd74fcfedd64bdb5df06a4ed49496aa1876780","unresolved":false,"context_lines":[{"line_number":663,"context_line":""},{"line_number":664,"context_line":"        Only refresh if there has been no refresh during the lifetime of"},{"line_number":665,"context_line":"        this process, ASSOCIATION_REFRESH seconds have passed, or the force arg"},{"line_number":666,"context_line":"        has been set to True."},{"line_number":667,"context_line":""},{"line_number":668,"context_line":"        :param rp_uuid: UUID of the resource provider to check for fresh"},{"line_number":669,"context_line":"                        aggregates and traits"}],"source_content_type":"text/x-python","patch_set":17,"id":"7f96bb07_06182c73","line":666,"in_reply_to":"7f96bb07_9b77b909","updated":"2018-01-19 21:06:42.000000000","message":"Nope, no need... just document that either exception may be raised.","commit_id":"f489378b6f3de90245723c477ced6ecab0cb2bd6"}],"nova/tests/unit/scheduler/client/test_report.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"40a8aba06e7dbbf4d86fe52ff4300ba849761556","unresolved":false,"context_lines":[{"line_number":1743,"context_line":"        uuid \u003d uuids.compute_node"},{"line_number":1744,"context_line":"        resp_mock \u003d mock.Mock(status_code\u003d200)"},{"line_number":1745,"context_line":"        traits \u003d ["},{"line_number":1746,"context_line":"            \u0027CUSTOM_GOLD\u0027"},{"line_number":1747,"context_line":"            \u0027CUSTOM_SILVER\u0027,"},{"line_number":1748,"context_line":"        ]"},{"line_number":1749,"context_line":"        resp_mock.json.return_value \u003d {\u0027traits\u0027: traits}"},{"line_number":1750,"context_line":"        self.ks_adap_mock.get.return_value \u003d resp_mock"}],"source_content_type":"text/x-python","patch_set":1,"id":"df87a7cf_607703a2","line":1747,"range":{"start_line":1746,"start_character":1,"end_line":1747,"end_character":28},"updated":"2017-12-08 14:26:40.000000000","message":"Missing a \u0027,\u0027 between CUSTOM_GOLD and CUSTOM_SILVER this will become traits \u003d [\u0027CUSTOM_GOLDCUSTOM_SILVER\u0027] by the python interpreter.","commit_id":"4c8486509bf1a4772174057040852389e823a504"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"318ef92f0e722092c89e1a32874f458a68fb5e71","unresolved":false,"context_lines":[{"line_number":1743,"context_line":"        uuid \u003d uuids.compute_node"},{"line_number":1744,"context_line":"        resp_mock \u003d mock.Mock(status_code\u003d200)"},{"line_number":1745,"context_line":"        traits \u003d ["},{"line_number":1746,"context_line":"            \u0027CUSTOM_GOLD\u0027"},{"line_number":1747,"context_line":"            \u0027CUSTOM_SILVER\u0027,"},{"line_number":1748,"context_line":"        ]"},{"line_number":1749,"context_line":"        resp_mock.json.return_value \u003d {\u0027traits\u0027: traits}"},{"line_number":1750,"context_line":"        self.ks_adap_mock.get.return_value \u003d resp_mock"}],"source_content_type":"text/x-python","patch_set":1,"id":"df87a7cf_faf1fb02","line":1747,"range":{"start_line":1746,"start_character":1,"end_line":1747,"end_character":28},"in_reply_to":"df87a7cf_607703a2","updated":"2017-12-14 13:22:18.000000000","message":"Maybe I *wanted* my provider to have a single trait called CUSTOM_GOLDCUSTOM_SILVER :)\n\nGood eye, although it doesn\u0027t actually matter.","commit_id":"4c8486509bf1a4772174057040852389e823a504"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"368a096796b7773fa39901901b1e7cc25634a5de","unresolved":false,"context_lines":[{"line_number":1743,"context_line":"        uuid \u003d uuids.compute_node"},{"line_number":1744,"context_line":"        resp_mock \u003d mock.Mock(status_code\u003d200)"},{"line_number":1745,"context_line":"        traits \u003d ["},{"line_number":1746,"context_line":"            \u0027CUSTOM_GOLD\u0027"},{"line_number":1747,"context_line":"            \u0027CUSTOM_SILVER\u0027,"},{"line_number":1748,"context_line":"        ]"},{"line_number":1749,"context_line":"        resp_mock.json.return_value \u003d {\u0027traits\u0027: traits}"},{"line_number":1750,"context_line":"        self.ks_adap_mock.get.return_value \u003d resp_mock"}],"source_content_type":"text/x-python","patch_set":1,"id":"df87a7cf_379459e8","line":1747,"range":{"start_line":1746,"start_character":1,"end_line":1747,"end_character":28},"in_reply_to":"df87a7cf_faf1fb02","updated":"2017-12-14 16:03:23.000000000","message":"Done","commit_id":"4c8486509bf1a4772174057040852389e823a504"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"368a096796b7773fa39901901b1e7cc25634a5de","unresolved":false,"context_lines":[{"line_number":1746,"context_line":"        uuid \u003d uuids.compute_node"},{"line_number":1747,"context_line":"        resp_mock \u003d mock.Mock(status_code\u003d200)"},{"line_number":1748,"context_line":"        traits \u003d ["},{"line_number":1749,"context_line":"            \u0027CUSTOM_GOLD\u0027"},{"line_number":1750,"context_line":"            \u0027CUSTOM_SILVER\u0027,"},{"line_number":1751,"context_line":"        ]"},{"line_number":1752,"context_line":"        resp_mock.json.return_value \u003d {\u0027traits\u0027: traits}"}],"source_content_type":"text/x-python","patch_set":3,"id":"df87a7cf_374bf987","line":1749,"range":{"start_line":1749,"start_character":0,"end_line":1749,"end_character":25},"updated":"2017-12-14 16:03:23.000000000","message":"This is really weird - I don\u0027t see this locally","commit_id":"2f43196a4f9bf876bbffce363f0b82ff1b348156"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7120e75b6c29d7160847c4d02fd05f2e0de87db7","unresolved":false,"context_lines":[{"line_number":1746,"context_line":"        uuid \u003d uuids.compute_node"},{"line_number":1747,"context_line":"        resp_mock \u003d mock.Mock(status_code\u003d200)"},{"line_number":1748,"context_line":"        traits \u003d ["},{"line_number":1749,"context_line":"            \u0027CUSTOM_GOLD\u0027"},{"line_number":1750,"context_line":"            \u0027CUSTOM_SILVER\u0027,"},{"line_number":1751,"context_line":"        ]"},{"line_number":1752,"context_line":"        resp_mock.json.return_value \u003d {\u0027traits\u0027: traits}"}],"source_content_type":"text/x-python","patch_set":3,"id":"df87a7cf_ce30e7a1","line":1749,"range":{"start_line":1749,"start_character":0,"end_line":1749,"end_character":25},"in_reply_to":"df87a7cf_374bf987","updated":"2017-12-15 01:31:19.000000000","message":"It wasn\u0027t causing an error.  There\u0027s nothing illegal about a trait called `CUSTOM_GOLDCUSTOM_SILVER`, and we\u0027re just comparing (part of) the output to the input, so they match either way.\n\nOr did you mean you don\u0027t see the lack of comma locally?","commit_id":"2f43196a4f9bf876bbffce363f0b82ff1b348156"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"81b94a4829ade6dbd06c32fb0e27ce78cbf326ef","unresolved":false,"context_lines":[{"line_number":1746,"context_line":"        uuid \u003d uuids.compute_node"},{"line_number":1747,"context_line":"        resp_mock \u003d mock.Mock(status_code\u003d200)"},{"line_number":1748,"context_line":"        traits \u003d ["},{"line_number":1749,"context_line":"            \u0027CUSTOM_GOLD\u0027"},{"line_number":1750,"context_line":"            \u0027CUSTOM_SILVER\u0027,"},{"line_number":1751,"context_line":"        ]"},{"line_number":1752,"context_line":"        resp_mock.json.return_value \u003d {\u0027traits\u0027: traits}"}],"source_content_type":"text/x-python","patch_set":3,"id":"df87a7cf_d0ecaebc","line":1749,"range":{"start_line":1749,"start_character":0,"end_line":1749,"end_character":25},"in_reply_to":"df87a7cf_ce30e7a1","updated":"2017-12-19 10:30:48.000000000","message":"The latter. I don\u0027t know what was happening, tbh, but I pulled the patch down again and it appeared. Weiiiirrrddd","commit_id":"2f43196a4f9bf876bbffce363f0b82ff1b348156"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"e0c09f442625569ed2e3b170740cb7b585371835","unresolved":false,"context_lines":[{"line_number":1841,"context_line":"                expected_url, raise_exc\u003dFalse, microversion\u003d\u00271.1\u0027)"},{"line_number":1842,"context_line":"            self.assertTrue(log_mock.called)"},{"line_number":1843,"context_line":"            self.assertEqual(uuids.request_id,"},{"line_number":1844,"context_line":"                            log_mock.call_args[0][1][\u0027placement_req_id\u0027])"},{"line_number":1845,"context_line":"            self.ks_adap_mock.get.reset_mock()"},{"line_number":1846,"context_line":"            log_mock.reset_mock()"},{"line_number":1847,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"7f96bb07_1d49138a","line":1844,"range":{"start_line":1844,"start_character":28,"end_line":1844,"end_character":29},"updated":"2018-01-23 14:20:30.000000000","message":"Nit: if you\u0027re going to use the (IMO) ugly visual indentation style, you should line up with \u0027uuids\u0027. See L1911 of the base version of this module for an example.","commit_id":"b214dfc41928d9e05199263301f8e5b23555c170"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"6c306337ef6eb26604781490e1100c773ac8f0d7","unresolved":false,"context_lines":[{"line_number":1841,"context_line":"                expected_url, raise_exc\u003dFalse, microversion\u003d\u00271.1\u0027)"},{"line_number":1842,"context_line":"            self.assertTrue(log_mock.called)"},{"line_number":1843,"context_line":"            self.assertEqual(uuids.request_id,"},{"line_number":1844,"context_line":"                            log_mock.call_args[0][1][\u0027placement_req_id\u0027])"},{"line_number":1845,"context_line":"            self.ks_adap_mock.get.reset_mock()"},{"line_number":1846,"context_line":"            log_mock.reset_mock()"},{"line_number":1847,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"7f96bb07_abc0c77d","line":1844,"range":{"start_line":1844,"start_character":28,"end_line":1844,"end_character":29},"in_reply_to":"7f96bb07_1d49138a","updated":"2018-01-23 23:03:11.000000000","message":"Agreed.  Normally I would.  Not sure what happened here.  (It was like that in the base version - I just indented it into the loop - but I\u0027m pretty sure the base was mine too.)  Will fix in the followon.","commit_id":"b214dfc41928d9e05199263301f8e5b23555c170"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b486d25ef8eaff45eb186f641919cdfc7c057379","unresolved":false,"context_lines":[{"line_number":1841,"context_line":"                expected_url, raise_exc\u003dFalse, microversion\u003d\u00271.1\u0027)"},{"line_number":1842,"context_line":"            self.assertTrue(log_mock.called)"},{"line_number":1843,"context_line":"            self.assertEqual(uuids.request_id,"},{"line_number":1844,"context_line":"                            log_mock.call_args[0][1][\u0027placement_req_id\u0027])"},{"line_number":1845,"context_line":"            self.ks_adap_mock.get.reset_mock()"},{"line_number":1846,"context_line":"            log_mock.reset_mock()"},{"line_number":1847,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"5f93b717_556d1530","line":1844,"range":{"start_line":1844,"start_character":28,"end_line":1844,"end_character":29},"in_reply_to":"7f96bb07_abc0c77d","updated":"2018-01-30 00:08:50.000000000","message":"Done in https://review.openstack.org/#/c/531260/","commit_id":"b214dfc41928d9e05199263301f8e5b23555c170"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"e0c09f442625569ed2e3b170740cb7b585371835","unresolved":false,"context_lines":[{"line_number":1887,"context_line":"                expected_url, **self.trait_api_kwargs)"},{"line_number":1888,"context_line":"            self.assertTrue(log_mock.called)"},{"line_number":1889,"context_line":"            self.assertEqual(uuids.request_id,"},{"line_number":1890,"context_line":"                            log_mock.call_args[0][1][\u0027placement_req_id\u0027])"},{"line_number":1891,"context_line":"            self.ks_adap_mock.get.reset_mock()"},{"line_number":1892,"context_line":"            log_mock.reset_mock()"},{"line_number":1893,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"7f96bb07_9d544323","line":1890,"range":{"start_line":1890,"start_character":28,"end_line":1890,"end_character":29},"updated":"2018-01-23 14:20:30.000000000","message":"ditto","commit_id":"b214dfc41928d9e05199263301f8e5b23555c170"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b486d25ef8eaff45eb186f641919cdfc7c057379","unresolved":false,"context_lines":[{"line_number":1887,"context_line":"                expected_url, **self.trait_api_kwargs)"},{"line_number":1888,"context_line":"            self.assertTrue(log_mock.called)"},{"line_number":1889,"context_line":"            self.assertEqual(uuids.request_id,"},{"line_number":1890,"context_line":"                            log_mock.call_args[0][1][\u0027placement_req_id\u0027])"},{"line_number":1891,"context_line":"            self.ks_adap_mock.get.reset_mock()"},{"line_number":1892,"context_line":"            log_mock.reset_mock()"},{"line_number":1893,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"5f93b717_15778d04","line":1890,"range":{"start_line":1890,"start_character":28,"end_line":1890,"end_character":29},"in_reply_to":"7f96bb07_9d544323","updated":"2018-01-30 00:08:50.000000000","message":"Ditto","commit_id":"b214dfc41928d9e05199263301f8e5b23555c170"}]}
