)]}'
{"nova/scheduler/client/report.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"08eb141a223ab66289c0371eff46deae837fb0f8","unresolved":false,"context_lines":[{"line_number":620,"context_line":"                # Since we just created this guy, there\u0027s guaranteed to be no"},{"line_number":621,"context_line":"                # aggregates or traits associated with him, so no need to"},{"line_number":622,"context_line":"                # refresh anything."},{"line_number":623,"context_line":"                rps_to_refresh \u003d []"},{"line_number":624,"context_line":"            self._provider_tree.populate_from_iterable("},{"line_number":625,"context_line":"                rps_to_refresh or [created_rp])"},{"line_number":626,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"df87a7cf_7be336da","line":623,"updated":"2017-12-08 15:36:42.000000000","message":"Add created_rp to rps_to_refresh here then you don\u0027t have to initalize created_rp at L610 and then you can simply user rps_to_refresh at L625 without the conditional.","commit_id":"880c56e1b0be2b120790b8e66d0b968439ccda4c"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"3be1d18147c6ad309c968eab4ac9e80f858a2646","unresolved":false,"context_lines":[{"line_number":620,"context_line":"                # Since we just created this guy, there\u0027s guaranteed to be no"},{"line_number":621,"context_line":"                # aggregates or traits associated with him, so no need to"},{"line_number":622,"context_line":"                # refresh anything."},{"line_number":623,"context_line":"                rps_to_refresh \u003d []"},{"line_number":624,"context_line":"            self._provider_tree.populate_from_iterable("},{"line_number":625,"context_line":"                rps_to_refresh or [created_rp])"},{"line_number":626,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"df87a7cf_ba20534b","line":623,"in_reply_to":"df87a7cf_7be336da","updated":"2017-12-14 13:32:03.000000000","message":"Actually, this is correct as is.  Per the comment, we want to leave created_rp out of rps_to_refresh when we _refresh_associations below (L637): since we just created it, it doesn\u0027t have any associations, so that would be a handful of unnecessary REST calls.","commit_id":"880c56e1b0be2b120790b8e66d0b968439ccda4c"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"96e262e3b7a8fb37e3550ce677eb57dba428d5b5","unresolved":false,"context_lines":[{"line_number":632,"context_line":"        # At this point, the whole tree exists in the local cache."},{"line_number":633,"context_line":"        # If we had the requested provider locally, only refresh it and its"},{"line_number":634,"context_line":"        # descendants."},{"line_number":635,"context_line":"        if rps_to_refresh is None:"},{"line_number":636,"context_line":"            rps_to_refresh \u003d ["},{"line_number":637,"context_line":"                {\u0027uuid\u0027: u}"},{"line_number":638,"context_line":"                for u in self._provider_tree.get_provider_uuids(uuid)"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf8cb3f7_de6c0b38","line":635,"range":{"start_line":635,"start_character":8,"end_line":635,"end_character":33},"updated":"2017-12-26 12:30:03.000000000","message":"prefer using `else:` here so that we can delete L628 and L612 for readability?","commit_id":"6abd75f04e8086d36e0a5a8b36a3a8baf346f626"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"bfd46512b98665b9b5d0e6cc04c6112b2f778c43","unresolved":false,"context_lines":[{"line_number":632,"context_line":"        # At this point, the whole tree exists in the local cache."},{"line_number":633,"context_line":"        # If we had the requested provider locally, only refresh it and its"},{"line_number":634,"context_line":"        # descendants."},{"line_number":635,"context_line":"        if rps_to_refresh is None:"},{"line_number":636,"context_line":"            rps_to_refresh \u003d ["},{"line_number":637,"context_line":"                {\u0027uuid\u0027: u}"},{"line_number":638,"context_line":"                for u in self._provider_tree.get_provider_uuids(uuid)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f91af0f_163faed6","line":635,"range":{"start_line":635,"start_character":8,"end_line":635,"end_character":33},"in_reply_to":"bf8cb3f7_de6c0b38","updated":"2018-01-04 23:12:46.000000000","message":"Not sure that (or anything) will improve readability here, but I\u0027ll do it :)","commit_id":"6abd75f04e8086d36e0a5a8b36a3a8baf346f626"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"4b3ac9a678026057351cb421e20b2f42bd5a2298","unresolved":false,"context_lines":[{"line_number":591,"context_line":"        placement API contains a record of the provider; and that the local"},{"line_number":592,"context_line":"        cache of resource provider information contains a record of:"},{"line_number":593,"context_line":"        - The specified provider"},{"line_number":594,"context_line":"        - All providers in its nested tree"},{"line_number":595,"context_line":"        - All providers associated with via aggregate with all providers in"},{"line_number":596,"context_line":"          said tree"},{"line_number":597,"context_line":"        and for each of those providers:"}],"source_content_type":"text/x-python","patch_set":18,"id":"7f96bb07_95ea28aa","line":594,"range":{"start_line":594,"start_character":31,"end_line":594,"end_character":42},"updated":"2018-01-19 19:50:06.000000000","message":"s/nested tree/tree","commit_id":"46db6e23797cf9f264c928910d3b2285c5e4b817"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"fa9998f4db3617f7af0f7a236ed1c4060aa33653","unresolved":false,"context_lines":[{"line_number":591,"context_line":"        placement API contains a record of the provider; and that the local"},{"line_number":592,"context_line":"        cache of resource provider information contains a record of:"},{"line_number":593,"context_line":"        - The specified provider"},{"line_number":594,"context_line":"        - All providers in its nested tree"},{"line_number":595,"context_line":"        - All providers associated with via aggregate with all providers in"},{"line_number":596,"context_line":"          said tree"},{"line_number":597,"context_line":"        and for each of those providers:"}],"source_content_type":"text/x-python","patch_set":18,"id":"7f96bb07_f0127362","line":594,"range":{"start_line":594,"start_character":31,"end_line":594,"end_character":42},"in_reply_to":"7f96bb07_537cb51f","updated":"2018-01-22 15:38:57.000000000","message":"I\u0027m a pedant, what can I say... there\u0027s no such thing as a \"nested tree\" :)","commit_id":"46db6e23797cf9f264c928910d3b2285c5e4b817"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a0b7fb5471cb00028abf3bb676ab1a21cf0e21e3","unresolved":false,"context_lines":[{"line_number":591,"context_line":"        placement API contains a record of the provider; and that the local"},{"line_number":592,"context_line":"        cache of resource provider information contains a record of:"},{"line_number":593,"context_line":"        - The specified provider"},{"line_number":594,"context_line":"        - All providers in its nested tree"},{"line_number":595,"context_line":"        - All providers associated with via aggregate with all providers in"},{"line_number":596,"context_line":"          said tree"},{"line_number":597,"context_line":"        and for each of those providers:"}],"source_content_type":"text/x-python","patch_set":18,"id":"7f96bb07_537cb51f","line":594,"range":{"start_line":594,"start_character":31,"end_line":594,"end_character":42},"in_reply_to":"7f96bb07_95ea28aa","updated":"2018-01-19 23:18:42.000000000","message":"Done (here and one other spot, since this seems to be a bugaboo for you).","commit_id":"46db6e23797cf9f264c928910d3b2285c5e4b817"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"6343782c9633f5c792ca121cb6b33419ce99ecfc","unresolved":false,"context_lines":[{"line_number":591,"context_line":"        placement API contains a record of the provider; and that the local"},{"line_number":592,"context_line":"        cache of resource provider information contains a record of:"},{"line_number":593,"context_line":"        - The specified provider"},{"line_number":594,"context_line":"        - All providers in its nested tree"},{"line_number":595,"context_line":"        - All providers associated with via aggregate with all providers in"},{"line_number":596,"context_line":"          said tree"},{"line_number":597,"context_line":"        and for each of those providers:"}],"source_content_type":"text/x-python","patch_set":18,"id":"7f96bb07_cb0ea831","line":594,"range":{"start_line":594,"start_character":31,"end_line":594,"end_character":42},"in_reply_to":"7f96bb07_f0127362","updated":"2018-01-22 15:40:12.000000000","message":"Fair","commit_id":"46db6e23797cf9f264c928910d3b2285c5e4b817"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"4b3ac9a678026057351cb421e20b2f42bd5a2298","unresolved":false,"context_lines":[{"line_number":592,"context_line":"        cache of resource provider information contains a record of:"},{"line_number":593,"context_line":"        - The specified provider"},{"line_number":594,"context_line":"        - All providers in its nested tree"},{"line_number":595,"context_line":"        - All providers associated with via aggregate with all providers in"},{"line_number":596,"context_line":"          said tree"},{"line_number":597,"context_line":"        and for each of those providers:"},{"line_number":598,"context_line":"        - The UUIDs of its aggregates"}],"source_content_type":"text/x-python","patch_set":18,"id":"7f96bb07_f5d84c1f","line":595,"range":{"start_line":595,"start_character":34,"end_line":595,"end_character":43},"updated":"2018-01-19 19:50:06.000000000","message":"s/with via/via/","commit_id":"46db6e23797cf9f264c928910d3b2285c5e4b817"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a0b7fb5471cb00028abf3bb676ab1a21cf0e21e3","unresolved":false,"context_lines":[{"line_number":592,"context_line":"        cache of resource provider information contains a record of:"},{"line_number":593,"context_line":"        - The specified provider"},{"line_number":594,"context_line":"        - All providers in its nested tree"},{"line_number":595,"context_line":"        - All providers associated with via aggregate with all providers in"},{"line_number":596,"context_line":"          said tree"},{"line_number":597,"context_line":"        and for each of those providers:"},{"line_number":598,"context_line":"        - The UUIDs of its aggregates"}],"source_content_type":"text/x-python","patch_set":18,"id":"7f96bb07_7379b12d","line":595,"range":{"start_line":595,"start_character":34,"end_line":595,"end_character":43},"in_reply_to":"7f96bb07_f5d84c1f","updated":"2018-01-19 23:18:42.000000000","message":"Done","commit_id":"46db6e23797cf9f264c928910d3b2285c5e4b817"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"4b3ac9a678026057351cb421e20b2f42bd5a2298","unresolved":false,"context_lines":[{"line_number":596,"context_line":"          said tree"},{"line_number":597,"context_line":"        and for each of those providers:"},{"line_number":598,"context_line":"        - The UUIDs of its aggregates"},{"line_number":599,"context_line":"        - Its traits"},{"line_number":600,"context_line":""},{"line_number":601,"context_line":"        Note that if the provider did not exist prior to this call, the above"},{"line_number":602,"context_line":"        reduces to just the specified provider as a root, with no aggregates or"}],"source_content_type":"text/x-python","patch_set":18,"id":"7f96bb07_95030874","line":599,"range":{"start_line":599,"start_character":10,"end_line":599,"end_character":20},"updated":"2018-01-19 19:50:06.000000000","message":"s/Its traits/The trait strings associated with the provider","commit_id":"46db6e23797cf9f264c928910d3b2285c5e4b817"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a0b7fb5471cb00028abf3bb676ab1a21cf0e21e3","unresolved":false,"context_lines":[{"line_number":596,"context_line":"          said tree"},{"line_number":597,"context_line":"        and for each of those providers:"},{"line_number":598,"context_line":"        - The UUIDs of its aggregates"},{"line_number":599,"context_line":"        - Its traits"},{"line_number":600,"context_line":""},{"line_number":601,"context_line":"        Note that if the provider did not exist prior to this call, the above"},{"line_number":602,"context_line":"        reduces to just the specified provider as a root, with no aggregates or"}],"source_content_type":"text/x-python","patch_set":18,"id":"7f96bb07_13762d40","line":599,"range":{"start_line":599,"start_character":10,"end_line":599,"end_character":20},"in_reply_to":"7f96bb07_95030874","updated":"2018-01-19 23:18:42.000000000","message":"Done","commit_id":"46db6e23797cf9f264c928910d3b2285c5e4b817"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"4b3ac9a678026057351cb421e20b2f42bd5a2298","unresolved":false,"context_lines":[{"line_number":616,"context_line":"        if self._provider_tree.exists(uuid):"},{"line_number":617,"context_line":"            # If we had the requested provider locally, refresh it and its"},{"line_number":618,"context_line":"            # descendants."},{"line_number":619,"context_line":"            rps_to_refresh \u003d ["},{"line_number":620,"context_line":"                {\u0027uuid\u0027: u}"},{"line_number":621,"context_line":"                for u in self._provider_tree.get_provider_uuids(uuid)"},{"line_number":622,"context_line":"            ]"},{"line_number":623,"context_line":"        else:"},{"line_number":624,"context_line":"            # We don\u0027t have it locally; check placement or create it."},{"line_number":625,"context_line":"            created_rp \u003d None"}],"source_content_type":"text/x-python","patch_set":18,"id":"7f96bb07_b5772409","line":622,"range":{"start_line":619,"start_character":0,"end_line":622,"end_character":13},"updated":"2018-01-19 19:50:06.000000000","message":"Seems like it would be clearer to just do this here:\n\n for u in self._provider_tree.get_provider_uuids(uuid):\n     self._refresh_associations(u, force\u003dFalse)\n return uuid","commit_id":"46db6e23797cf9f264c928910d3b2285c5e4b817"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a0b7fb5471cb00028abf3bb676ab1a21cf0e21e3","unresolved":false,"context_lines":[{"line_number":616,"context_line":"        if self._provider_tree.exists(uuid):"},{"line_number":617,"context_line":"            # If we had the requested provider locally, refresh it and its"},{"line_number":618,"context_line":"            # descendants."},{"line_number":619,"context_line":"            rps_to_refresh \u003d ["},{"line_number":620,"context_line":"                {\u0027uuid\u0027: u}"},{"line_number":621,"context_line":"                for u in self._provider_tree.get_provider_uuids(uuid)"},{"line_number":622,"context_line":"            ]"},{"line_number":623,"context_line":"        else:"},{"line_number":624,"context_line":"            # We don\u0027t have it locally; check placement or create it."},{"line_number":625,"context_line":"            created_rp \u003d None"}],"source_content_type":"text/x-python","patch_set":18,"id":"7f96bb07_53f8357b","line":622,"range":{"start_line":619,"start_character":0,"end_line":622,"end_character":13},"in_reply_to":"7f96bb07_b5772409","updated":"2018-01-19 23:18:42.000000000","message":"Done","commit_id":"46db6e23797cf9f264c928910d3b2285c5e4b817"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"4b3ac9a678026057351cb421e20b2f42bd5a2298","unresolved":false,"context_lines":[{"line_number":624,"context_line":"            # We don\u0027t have it locally; check placement or create it."},{"line_number":625,"context_line":"            created_rp \u003d None"},{"line_number":626,"context_line":"            rps_to_refresh \u003d self._get_providers_in_tree(uuid)"},{"line_number":627,"context_line":"            if rps_to_refresh:"},{"line_number":628,"context_line":"                # If we didn\u0027t have it locally, but it existed in placement,"},{"line_number":629,"context_line":"                # ensure we pull all associations for all providers in the tree"},{"line_number":630,"context_line":"                force_refresh \u003d True"},{"line_number":631,"context_line":"            else:"},{"line_number":632,"context_line":"                created_rp \u003d self._create_resource_provider("},{"line_number":633,"context_line":"                    uuid, name or uuid,"},{"line_number":634,"context_line":"                    parent_provider_uuid\u003dparent_provider_uuid)"}],"source_content_type":"text/x-python","patch_set":18,"id":"7f96bb07_e033a8f5","line":631,"range":{"start_line":627,"start_character":15,"end_line":631,"end_character":17},"updated":"2018-01-19 19:50:06.000000000","message":"you can simplify this code by removing this block entirely and doing:\n\n if not rps_to_refresh:\n     ... do the create\n\n self._provider_tree.populate_from_iterable(\n     rps_to_refresh or [created_rp])\n\n for rp in rps_to_refresh:\n     self._refresh_associations(rp[\u0027uuid\u0027],\n         rp.get(\u0027generation\u0027), force\u003dTrue)","commit_id":"46db6e23797cf9f264c928910d3b2285c5e4b817"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a0b7fb5471cb00028abf3bb676ab1a21cf0e21e3","unresolved":false,"context_lines":[{"line_number":624,"context_line":"            # We don\u0027t have it locally; check placement or create it."},{"line_number":625,"context_line":"            created_rp \u003d None"},{"line_number":626,"context_line":"            rps_to_refresh \u003d self._get_providers_in_tree(uuid)"},{"line_number":627,"context_line":"            if rps_to_refresh:"},{"line_number":628,"context_line":"                # If we didn\u0027t have it locally, but it existed in placement,"},{"line_number":629,"context_line":"                # ensure we pull all associations for all providers in the tree"},{"line_number":630,"context_line":"                force_refresh \u003d True"},{"line_number":631,"context_line":"            else:"},{"line_number":632,"context_line":"                created_rp \u003d self._create_resource_provider("},{"line_number":633,"context_line":"                    uuid, name or uuid,"},{"line_number":634,"context_line":"                    parent_provider_uuid\u003dparent_provider_uuid)"}],"source_content_type":"text/x-python","patch_set":18,"id":"7f96bb07_13f2ad9b","line":631,"range":{"start_line":627,"start_character":15,"end_line":631,"end_character":17},"in_reply_to":"7f96bb07_e033a8f5","updated":"2018-01-19 23:18:42.000000000","message":"Thanks, much cleaner.  I went through a bunch of iterations of this algorithm, and got to a point where I couldn\u0027t see it anymore.","commit_id":"46db6e23797cf9f264c928910d3b2285c5e4b817"}],"nova/tests/unit/scheduler/client/test_report.py":[{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"96e262e3b7a8fb37e3550ce677eb57dba428d5b5","unresolved":false,"context_lines":[{"line_number":1355,"context_line":"    @mock.patch(\u0027nova.compute.provider_tree.ProviderTree.exists\u0027)"},{"line_number":1356,"context_line":"    @mock.patch(\u0027nova.scheduler.client.report.SchedulerReportClient.\u0027"},{"line_number":1357,"context_line":"                \u0027_get_providers_in_tree\u0027)"},{"line_number":1358,"context_line":"    @mock.patch(\u0027nova.compute.provider_tree.ProviderTree.\u0027"},{"line_number":1359,"context_line":"                \u0027populate_from_iterable\u0027)"},{"line_number":1360,"context_line":"    @mock.patch(\u0027nova.scheduler.client.report.SchedulerReportClient.\u0027"},{"line_number":1361,"context_line":"                \u0027_refresh_associations\u0027)"},{"line_number":1362,"context_line":"    def test_ensure_resource_provider_refresh_fetch(self, mock_refresh,"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf8cb3f7_19228da5","line":1359,"range":{"start_line":1358,"start_character":0,"end_line":1359,"end_character":41},"updated":"2017-12-26 12:30:03.000000000","message":"Can\u0027t we build the test without mocking `populate_from_iterable()`? \n\nBecause this is the first change to use the new function of `populate_from_iterable`, I don\u0027t think mocking this function is a good idea.","commit_id":"6abd75f04e8086d36e0a5a8b36a3a8baf346f626"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"bfd46512b98665b9b5d0e6cc04c6112b2f778c43","unresolved":false,"context_lines":[{"line_number":1355,"context_line":"    @mock.patch(\u0027nova.compute.provider_tree.ProviderTree.exists\u0027)"},{"line_number":1356,"context_line":"    @mock.patch(\u0027nova.scheduler.client.report.SchedulerReportClient.\u0027"},{"line_number":1357,"context_line":"                \u0027_get_providers_in_tree\u0027)"},{"line_number":1358,"context_line":"    @mock.patch(\u0027nova.compute.provider_tree.ProviderTree.\u0027"},{"line_number":1359,"context_line":"                \u0027populate_from_iterable\u0027)"},{"line_number":1360,"context_line":"    @mock.patch(\u0027nova.scheduler.client.report.SchedulerReportClient.\u0027"},{"line_number":1361,"context_line":"                \u0027_refresh_associations\u0027)"},{"line_number":1362,"context_line":"    def test_ensure_resource_provider_refresh_fetch(self, mock_refresh,"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f91af0f_e737f6e2","line":1359,"range":{"start_line":1358,"start_character":0,"end_line":1359,"end_character":41},"in_reply_to":"bf8cb3f7_19228da5","updated":"2018-01-04 23:12:46.000000000","message":"Yeah, good call.  I was trying to isolate the algorithm in _ensure_resource_provider, but it certainly doesn\u0027t hurt to have the extra depth in testing here.  And it actually reduces the LOC, so win/win.","commit_id":"6abd75f04e8086d36e0a5a8b36a3a8baf346f626"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"96e262e3b7a8fb37e3550ce677eb57dba428d5b5","unresolved":false,"context_lines":[{"line_number":1364,"context_line":"        \"\"\"Make sure refreshes are called with the appropriate UUIDs and flags"},{"line_number":1365,"context_line":"        when we fetch the provider tree from placement."},{"line_number":1366,"context_line":"        \"\"\""},{"line_number":1367,"context_line":"        mock_exists.return_value \u003d False"},{"line_number":1368,"context_line":"        tree_uuids \u003d (uuids.root, uuids.one, uuids.two)"},{"line_number":1369,"context_line":"        mock_gpit.return_value \u003d [{\u0027uuid\u0027: u, \u0027generation\u0027: 42}"},{"line_number":1370,"context_line":"                                  for u in tree_uuids]"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf8cb3f7_19704da5","line":1367,"range":{"start_line":1367,"start_character":8,"end_line":1367,"end_character":40},"updated":"2017-12-26 12:30:03.000000000","message":"Do we really need mocking exists() here?\n\nWithout having to mock, we get False if we call exits() in the beginning of the test. And without mocking exits(), we can use exists() to make sure that populate_from_iterable() is properly called?","commit_id":"6abd75f04e8086d36e0a5a8b36a3a8baf346f626"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"bfd46512b98665b9b5d0e6cc04c6112b2f778c43","unresolved":false,"context_lines":[{"line_number":1364,"context_line":"        \"\"\"Make sure refreshes are called with the appropriate UUIDs and flags"},{"line_number":1365,"context_line":"        when we fetch the provider tree from placement."},{"line_number":1366,"context_line":"        \"\"\""},{"line_number":1367,"context_line":"        mock_exists.return_value \u003d False"},{"line_number":1368,"context_line":"        tree_uuids \u003d (uuids.root, uuids.one, uuids.two)"},{"line_number":1369,"context_line":"        mock_gpit.return_value \u003d [{\u0027uuid\u0027: u, \u0027generation\u0027: 42}"},{"line_number":1370,"context_line":"                                  for u in tree_uuids]"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f91af0f_87362ae6","line":1367,"range":{"start_line":1367,"start_character":8,"end_line":1367,"end_character":40},"in_reply_to":"bf8cb3f7_19704da5","updated":"2018-01-04 23:12:46.000000000","message":"Done","commit_id":"6abd75f04e8086d36e0a5a8b36a3a8baf346f626"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"96e262e3b7a8fb37e3550ce677eb57dba428d5b5","unresolved":false,"context_lines":[{"line_number":1366,"context_line":"        \"\"\""},{"line_number":1367,"context_line":"        mock_exists.return_value \u003d False"},{"line_number":1368,"context_line":"        tree_uuids \u003d (uuids.root, uuids.one, uuids.two)"},{"line_number":1369,"context_line":"        mock_gpit.return_value \u003d [{\u0027uuid\u0027: u, \u0027generation\u0027: 42}"},{"line_number":1370,"context_line":"                                  for u in tree_uuids]"},{"line_number":1371,"context_line":"        self.assertEqual(uuids.root,"},{"line_number":1372,"context_line":"                         self.client._ensure_resource_provider(uuids.root))"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf8cb3f7_3973d1b3","line":1369,"range":{"start_line":1369,"start_character":34,"end_line":1369,"end_character":63},"updated":"2017-12-26 12:30:03.000000000","message":"Good to add \u0027name\u0027. That would be needed for populate_from_iterable.","commit_id":"6abd75f04e8086d36e0a5a8b36a3a8baf346f626"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"bfd46512b98665b9b5d0e6cc04c6112b2f778c43","unresolved":false,"context_lines":[{"line_number":1366,"context_line":"        \"\"\""},{"line_number":1367,"context_line":"        mock_exists.return_value \u003d False"},{"line_number":1368,"context_line":"        tree_uuids \u003d (uuids.root, uuids.one, uuids.two)"},{"line_number":1369,"context_line":"        mock_gpit.return_value \u003d [{\u0027uuid\u0027: u, \u0027generation\u0027: 42}"},{"line_number":1370,"context_line":"                                  for u in tree_uuids]"},{"line_number":1371,"context_line":"        self.assertEqual(uuids.root,"},{"line_number":1372,"context_line":"                         self.client._ensure_resource_provider(uuids.root))"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f91af0f_a731eeee","line":1369,"range":{"start_line":1369,"start_character":34,"end_line":1369,"end_character":63},"in_reply_to":"bf8cb3f7_3973d1b3","updated":"2018-01-04 23:12:46.000000000","message":"Done","commit_id":"6abd75f04e8086d36e0a5a8b36a3a8baf346f626"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"96e262e3b7a8fb37e3550ce677eb57dba428d5b5","unresolved":false,"context_lines":[{"line_number":1377,"context_line":"            [mock.call(uuid, generation\u003d42, force\u003dTrue)"},{"line_number":1378,"context_line":"             for uuid in tree_uuids])"},{"line_number":1379,"context_line":""},{"line_number":1380,"context_line":"    @mock.patch(\u0027nova.compute.provider_tree.ProviderTree.exists\u0027)"},{"line_number":1381,"context_line":"    @mock.patch(\u0027nova.scheduler.client.report.SchedulerReportClient.\u0027"},{"line_number":1382,"context_line":"                \u0027_get_providers_in_tree\u0027)"},{"line_number":1383,"context_line":"    @mock.patch(\u0027nova.scheduler.client.report.SchedulerReportClient.\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf8cb3f7_b9e1212d","line":1380,"range":{"start_line":1380,"start_character":4,"end_line":1380,"end_character":65},"updated":"2017-12-26 12:30:03.000000000","message":"the same here.","commit_id":"6abd75f04e8086d36e0a5a8b36a3a8baf346f626"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"bfd46512b98665b9b5d0e6cc04c6112b2f778c43","unresolved":false,"context_lines":[{"line_number":1377,"context_line":"            [mock.call(uuid, generation\u003d42, force\u003dTrue)"},{"line_number":1378,"context_line":"             for uuid in tree_uuids])"},{"line_number":1379,"context_line":""},{"line_number":1380,"context_line":"    @mock.patch(\u0027nova.compute.provider_tree.ProviderTree.exists\u0027)"},{"line_number":1381,"context_line":"    @mock.patch(\u0027nova.scheduler.client.report.SchedulerReportClient.\u0027"},{"line_number":1382,"context_line":"                \u0027_get_providers_in_tree\u0027)"},{"line_number":1383,"context_line":"    @mock.patch(\u0027nova.scheduler.client.report.SchedulerReportClient.\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f91af0f_474ee26f","line":1380,"range":{"start_line":1380,"start_character":4,"end_line":1380,"end_character":65},"in_reply_to":"bf8cb3f7_b9e1212d","updated":"2018-01-04 23:12:46.000000000","message":"Done","commit_id":"6abd75f04e8086d36e0a5a8b36a3a8baf346f626"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"96e262e3b7a8fb37e3550ce677eb57dba428d5b5","unresolved":false,"context_lines":[{"line_number":1382,"context_line":"                \u0027_get_providers_in_tree\u0027)"},{"line_number":1383,"context_line":"    @mock.patch(\u0027nova.scheduler.client.report.SchedulerReportClient.\u0027"},{"line_number":1384,"context_line":"                \u0027_create_resource_provider\u0027)"},{"line_number":1385,"context_line":"    @mock.patch(\u0027nova.compute.provider_tree.ProviderTree.\u0027"},{"line_number":1386,"context_line":"                \u0027populate_from_iterable\u0027)"},{"line_number":1387,"context_line":"    @mock.patch(\u0027nova.scheduler.client.report.SchedulerReportClient.\u0027"},{"line_number":1388,"context_line":"                \u0027_refresh_associations\u0027)"},{"line_number":1389,"context_line":"    def test_ensure_resource_provider_refresh_create(self, mock_refresh,"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf8cb3f7_b9ba8107","line":1386,"range":{"start_line":1385,"start_character":4,"end_line":1386,"end_character":41},"updated":"2017-12-26 12:30:03.000000000","message":"the same here.","commit_id":"6abd75f04e8086d36e0a5a8b36a3a8baf346f626"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"bfd46512b98665b9b5d0e6cc04c6112b2f778c43","unresolved":false,"context_lines":[{"line_number":1382,"context_line":"                \u0027_get_providers_in_tree\u0027)"},{"line_number":1383,"context_line":"    @mock.patch(\u0027nova.scheduler.client.report.SchedulerReportClient.\u0027"},{"line_number":1384,"context_line":"                \u0027_create_resource_provider\u0027)"},{"line_number":1385,"context_line":"    @mock.patch(\u0027nova.compute.provider_tree.ProviderTree.\u0027"},{"line_number":1386,"context_line":"                \u0027populate_from_iterable\u0027)"},{"line_number":1387,"context_line":"    @mock.patch(\u0027nova.scheduler.client.report.SchedulerReportClient.\u0027"},{"line_number":1388,"context_line":"                \u0027_refresh_associations\u0027)"},{"line_number":1389,"context_line":"    def test_ensure_resource_provider_refresh_create(self, mock_refresh,"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f91af0f_0758da2f","line":1386,"range":{"start_line":1385,"start_character":4,"end_line":1386,"end_character":41},"in_reply_to":"bf8cb3f7_b9ba8107","updated":"2018-01-04 23:12:46.000000000","message":"Done","commit_id":"6abd75f04e8086d36e0a5a8b36a3a8baf346f626"}]}
