)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5d02ef1c938c4414457b7cd9979b1c96a8d49f23","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Moving more utils to ServerResourceAllocationTestBase"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The I635481b944b8a6c73001bbc69f1393a2eeb54527 refactor created a base class"},{"line_number":10,"context_line":"for test cases that are checking allocations. This patch moves additional util"},{"line_number":11,"context_line":"functions from the ServerMovingTest class to the base. The subsequent patch"},{"line_number":12,"context_line":"covering soft delete cases needs these utils for non server moving tests."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"ff82abbf_aeb8f929","line":9,"range":{"start_line":9,"start_character":4,"end_line":9,"end_character":45},"updated":"2017-11-22 14:26:21.000000000","message":"This isn\u0027t the correct change id is it? Did you mean I55edd2c6e4c752dbe675b6d51d71a047bf49597a ?","commit_id":"06ad1cd8b9917f2955c505dfd97367d76d00011f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"fe49150c52bf41064f3cdf502e72cfaff0f848c6","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Moving more utils to ServerResourceAllocationTestBase"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The I635481b944b8a6c73001bbc69f1393a2eeb54527 refactor created a base class"},{"line_number":10,"context_line":"for test cases that are checking allocations. This patch moves additional util"},{"line_number":11,"context_line":"functions from the ServerMovingTest class to the base. The subsequent patch"},{"line_number":12,"context_line":"covering soft delete cases needs these utils for non server moving tests."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"ff82abbf_8e7c15ec","line":9,"range":{"start_line":9,"start_character":4,"end_line":9,"end_character":45},"in_reply_to":"ff82abbf_aeb8f929","updated":"2017-11-22 14:35:57.000000000","message":"You are correct. Thanks for noticing my copy-paste mistake.","commit_id":"06ad1cd8b9917f2955c505dfd97367d76d00011f"}],"nova/tests/functional/test_servers.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1262352de0cc18291644bb40660e3e259abc8415","unresolved":false,"context_lines":[{"line_number":1139,"context_line":"        self.assertEqual(source_hostname, server[\u0027OS-EXT-SRV-ATTR:host\u0027])"},{"line_number":1140,"context_line":""},{"line_number":1141,"context_line":"        source_rp_uuid \u003d self._get_provider_uuid_by_host(source_hostname)"},{"line_number":1142,"context_line":""},{"line_number":1143,"context_line":"        # Before we run periodics, make sure that we have allocations/usages"},{"line_number":1144,"context_line":"        # only on the source host"},{"line_number":1145,"context_line":"        source_usages \u003d self._get_provider_usages(source_rp_uuid)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f287b81_e6060621","line":1142,"updated":"2017-09-04 13:48:46.000000000","message":"We\u0027ve stopped checking a single destination RP UUID here because we don\u0027t need it...","commit_id":"18622eccef6622b73ff2281eaae56b5a3bacea92"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1262352de0cc18291644bb40660e3e259abc8415","unresolved":false,"context_lines":[{"line_number":1145,"context_line":"        source_usages \u003d self._get_provider_usages(source_rp_uuid)"},{"line_number":1146,"context_line":"        self.assertFlavorMatchesAllocation(flavor, source_usages)"},{"line_number":1147,"context_line":""},{"line_number":1148,"context_line":"        # Check that the other providers has no usage"},{"line_number":1149,"context_line":"        for rp_uuid in [self._get_provider_uuid_by_host(hostname)"},{"line_number":1150,"context_line":"                        for hostname in self.computes.keys()"},{"line_number":1151,"context_line":"                        if hostname !\u003d source_hostname]:"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f287b81_090da534","line":1148,"updated":"2017-09-04 13:48:46.000000000","message":"...because we now support checking multiple destination RPs, and we\u0027re checking those here","commit_id":"18622eccef6622b73ff2281eaae56b5a3bacea92"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1262352de0cc18291644bb40660e3e259abc8415","unresolved":false,"context_lines":[{"line_number":1174,"context_line":"        self.assertFlavorMatchesAllocation(flavor, source_usages)"},{"line_number":1175,"context_line":""},{"line_number":1176,"context_line":"        # Check that the other providers has no usage"},{"line_number":1177,"context_line":"        for rp_uuid in [self._get_provider_uuid_by_host(hostname)"},{"line_number":1178,"context_line":"                        for hostname in self.computes.keys()"},{"line_number":1179,"context_line":"                        if hostname !\u003d source_hostname]:"},{"line_number":1180,"context_line":"            usages \u003d self._get_provider_usages(rp_uuid)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f287b81_69566909","line":1177,"updated":"2017-09-04 13:48:46.000000000","message":"Same story here","commit_id":"18622eccef6622b73ff2281eaae56b5a3bacea92"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1262352de0cc18291644bb40660e3e259abc8415","unresolved":false,"context_lines":[{"line_number":1198,"context_line":"        self.api.delete_server(server[\u0027id\u0027])"},{"line_number":1199,"context_line":"        self._wait_until_deleted(server)"},{"line_number":1200,"context_line":""},{"line_number":1201,"context_line":"        self._run_periodics()"},{"line_number":1202,"context_line":""},{"line_number":1203,"context_line":"        for rp_uuid in [self._get_provider_uuid_by_host(hostname)"},{"line_number":1204,"context_line":"                        for hostname in self.computes.keys()]:"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f287b81_e9493960","line":1201,"range":{"start_line":1201,"start_character":8,"end_line":1201,"end_character":29},"updated":"2017-09-04 13:48:46.000000000","message":"This is new. I\u0027m assuming it\u0027s required by a later change?","commit_id":"18622eccef6622b73ff2281eaae56b5a3bacea92"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e574915fb745cc5a088f41068c4f78351aa85a0e","unresolved":false,"context_lines":[{"line_number":1198,"context_line":"        self.api.delete_server(server[\u0027id\u0027])"},{"line_number":1199,"context_line":"        self._wait_until_deleted(server)"},{"line_number":1200,"context_line":""},{"line_number":1201,"context_line":"        self._run_periodics()"},{"line_number":1202,"context_line":""},{"line_number":1203,"context_line":"        for rp_uuid in [self._get_provider_uuid_by_host(hostname)"},{"line_number":1204,"context_line":"                        for hostname in self.computes.keys()]:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f2577a7_68e783e6","line":1201,"range":{"start_line":1201,"start_character":8,"end_line":1201,"end_character":29},"in_reply_to":"7f287b81_e9493960","updated":"2017-09-12 15:34:01.000000000","message":"Removed, it seems it is not needed here.","commit_id":"18622eccef6622b73ff2281eaae56b5a3bacea92"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1262352de0cc18291644bb40660e3e259abc8415","unresolved":false,"context_lines":[{"line_number":1200,"context_line":""},{"line_number":1201,"context_line":"        self._run_periodics()"},{"line_number":1202,"context_line":""},{"line_number":1203,"context_line":"        for rp_uuid in [self._get_provider_uuid_by_host(hostname)"},{"line_number":1204,"context_line":"                        for hostname in self.computes.keys()]:"},{"line_number":1205,"context_line":"            usages \u003d self._get_provider_usages(rp_uuid)"},{"line_number":1206,"context_line":"            self.assertEqual({\u0027VCPU\u0027: 0,"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f287b81_29406135","line":1203,"updated":"2017-09-04 13:48:46.000000000","message":"And again here","commit_id":"18622eccef6622b73ff2281eaae56b5a3bacea92"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7547fd3946699d86573d0e16f5b615071385c213","unresolved":false,"context_lines":[{"line_number":1165,"context_line":""},{"line_number":1166,"context_line":"        self._run_periodics()"},{"line_number":1167,"context_line":""},{"line_number":1168,"context_line":"        # After running the periodics but before we start any resize operation,"},{"line_number":1169,"context_line":"        # we should have exactly the same allocation/usage information as"},{"line_number":1170,"context_line":"        # before running the periodics"},{"line_number":1171,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5f2577a7_1c71a1e1","line":1168,"range":{"start_line":1168,"start_character":62,"end_line":1168,"end_character":68},"updated":"2017-09-08 19:03:34.000000000","message":"This could be confusing if you\u0027re using this for a series of tests that only have a single compute service, or aren\u0027t doing resize to same host on a single compute.","commit_id":"bf1022d05e691d9c0dbb650969187513e0ece264"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d2532c87f9b8262f4de79564b820f50422d881fd","unresolved":false,"context_lines":[{"line_number":1165,"context_line":""},{"line_number":1166,"context_line":"        self._run_periodics()"},{"line_number":1167,"context_line":""},{"line_number":1168,"context_line":"        # After running the periodics but before we start any resize operation,"},{"line_number":1169,"context_line":"        # we should have exactly the same allocation/usage information as"},{"line_number":1170,"context_line":"        # before running the periodics"},{"line_number":1171,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5f2577a7_ffbc5d6a","line":1168,"range":{"start_line":1168,"start_character":62,"end_line":1168,"end_character":68},"in_reply_to":"5f2577a7_1c71a1e1","updated":"2017-09-12 15:33:25.000000000","message":"Done","commit_id":"bf1022d05e691d9c0dbb650969187513e0ece264"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7547fd3946699d86573d0e16f5b615071385c213","unresolved":false,"context_lines":[{"line_number":1175,"context_line":""},{"line_number":1176,"context_line":"        # Check that the other providers has no usage"},{"line_number":1177,"context_line":"        for rp_uuid in [self._get_provider_uuid_by_host(hostname)"},{"line_number":1178,"context_line":"                        for hostname in self.computes.keys()"},{"line_number":1179,"context_line":"                        if hostname !\u003d source_hostname]:"},{"line_number":1180,"context_line":"            usages \u003d self._get_provider_usages(rp_uuid)"},{"line_number":1181,"context_line":"            self.assertEqual({\u0027VCPU\u0027: 0,"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f2577a7_dc5b1952","line":1178,"range":{"start_line":1178,"start_character":40,"end_line":1178,"end_character":53},"updated":"2017-09-08 19:03:34.000000000","message":"Mention the requirement for classes to have this attribute set? Like how it mentions subclasses need to define a \u0027compute_driver\u0027 attribute.","commit_id":"bf1022d05e691d9c0dbb650969187513e0ece264"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d2532c87f9b8262f4de79564b820f50422d881fd","unresolved":false,"context_lines":[{"line_number":1175,"context_line":""},{"line_number":1176,"context_line":"        # Check that the other providers has no usage"},{"line_number":1177,"context_line":"        for rp_uuid in [self._get_provider_uuid_by_host(hostname)"},{"line_number":1178,"context_line":"                        for hostname in self.computes.keys()"},{"line_number":1179,"context_line":"                        if hostname !\u003d source_hostname]:"},{"line_number":1180,"context_line":"            usages \u003d self._get_provider_usages(rp_uuid)"},{"line_number":1181,"context_line":"            self.assertEqual({\u0027VCPU\u0027: 0,"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f2577a7_5f4c919d","line":1178,"range":{"start_line":1178,"start_character":40,"end_line":1178,"end_character":53},"in_reply_to":"5f2577a7_dc5b1952","updated":"2017-09-12 15:33:25.000000000","message":"Done.\nThis also makes generalizing the compute service startup even more desirable.","commit_id":"bf1022d05e691d9c0dbb650969187513e0ece264"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7547fd3946699d86573d0e16f5b615071385c213","unresolved":false,"context_lines":[{"line_number":1182,"context_line":"                              \u0027MEMORY_MB\u0027: 0,"},{"line_number":1183,"context_line":"                              \u0027DISK_GB\u0027: 0}, usages)"},{"line_number":1184,"context_line":""},{"line_number":1185,"context_line":"        # Check that the server only allocates resource from the host it is"},{"line_number":1186,"context_line":"        # booted on"},{"line_number":1187,"context_line":"        allocations \u003d self._get_allocations_by_server_uuid(server[\u0027id\u0027])"},{"line_number":1188,"context_line":"        self.assertEqual(1, len(allocations),"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f2577a7_3c457d71","line":1185,"updated":"2017-09-08 19:03:34.000000000","message":"Do you want to do this before the for loop for other providers above?","commit_id":"bf1022d05e691d9c0dbb650969187513e0ece264"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d2532c87f9b8262f4de79564b820f50422d881fd","unresolved":false,"context_lines":[{"line_number":1182,"context_line":"                              \u0027MEMORY_MB\u0027: 0,"},{"line_number":1183,"context_line":"                              \u0027DISK_GB\u0027: 0}, usages)"},{"line_number":1184,"context_line":""},{"line_number":1185,"context_line":"        # Check that the server only allocates resource from the host it is"},{"line_number":1186,"context_line":"        # booted on"},{"line_number":1187,"context_line":"        allocations \u003d self._get_allocations_by_server_uuid(server[\u0027id\u0027])"},{"line_number":1188,"context_line":"        self.assertEqual(1, len(allocations),"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f2577a7_9f59d95b","line":1185,"in_reply_to":"5f2577a7_3c457d71","updated":"2017-09-12 15:33:25.000000000","message":"Done","commit_id":"bf1022d05e691d9c0dbb650969187513e0ece264"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ccda25d3686cdd563e9c28a898ff7c5bb68c7657","unresolved":false,"context_lines":[{"line_number":1239,"context_line":""},{"line_number":1240,"context_line":"    def setUp(self):"},{"line_number":1241,"context_line":"        super(ServerMovingTests, self).setUp()"},{"line_number":1242,"context_line":"        self.computes \u003d {}"},{"line_number":1243,"context_line":"        fake.set_nodes([\u0027host1\u0027])"},{"line_number":1244,"context_line":"        self.flags(host\u003d\u0027host1\u0027)"},{"line_number":1245,"context_line":"        self.compute1 \u003d self.start_service(\u0027compute\u0027, host\u003d\u0027host1\u0027)"},{"line_number":1246,"context_line":"        self.computes[self.compute1.host] \u003d self.compute1"},{"line_number":1247,"context_line":""},{"line_number":1248,"context_line":"        # NOTE(sbauza): Make sure the FakeDriver returns a different nodename"},{"line_number":1249,"context_line":"        # for the second compute node."},{"line_number":1250,"context_line":"        fake.set_nodes([\u0027host2\u0027])"},{"line_number":1251,"context_line":"        self.addCleanup(fake.restore_nodes)"},{"line_number":1252,"context_line":"        self.flags(host\u003d\u0027host2\u0027)"},{"line_number":1253,"context_line":"        self.compute2 \u003d self.start_service(\u0027compute\u0027, host\u003d\u0027host2\u0027)"},{"line_number":1254,"context_line":"        self.computes[self.compute2.host] \u003d self.compute2"},{"line_number":1255,"context_line":""},{"line_number":1256,"context_line":"        flavors \u003d self.api.get_flavors()"},{"line_number":1257,"context_line":"        self.flavor1 \u003d flavors[0]"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f2577a7_879adac2","line":1254,"range":{"start_line":1242,"start_character":8,"end_line":1254,"end_character":57},"updated":"2017-09-08 19:16:00.000000000","message":"This pattern could probably also be made generic in the base class with some helper method called \"start_compute(self, host)\" which would set the nodes, set the flags, start the compute service, reset the nodes on teardown, and update the self.computes dict. But that can be a later cleanup.","commit_id":"bf1022d05e691d9c0dbb650969187513e0ece264"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d2532c87f9b8262f4de79564b820f50422d881fd","unresolved":false,"context_lines":[{"line_number":1239,"context_line":""},{"line_number":1240,"context_line":"    def setUp(self):"},{"line_number":1241,"context_line":"        super(ServerMovingTests, self).setUp()"},{"line_number":1242,"context_line":"        self.computes \u003d {}"},{"line_number":1243,"context_line":"        fake.set_nodes([\u0027host1\u0027])"},{"line_number":1244,"context_line":"        self.flags(host\u003d\u0027host1\u0027)"},{"line_number":1245,"context_line":"        self.compute1 \u003d self.start_service(\u0027compute\u0027, host\u003d\u0027host1\u0027)"},{"line_number":1246,"context_line":"        self.computes[self.compute1.host] \u003d self.compute1"},{"line_number":1247,"context_line":""},{"line_number":1248,"context_line":"        # NOTE(sbauza): Make sure the FakeDriver returns a different nodename"},{"line_number":1249,"context_line":"        # for the second compute node."},{"line_number":1250,"context_line":"        fake.set_nodes([\u0027host2\u0027])"},{"line_number":1251,"context_line":"        self.addCleanup(fake.restore_nodes)"},{"line_number":1252,"context_line":"        self.flags(host\u003d\u0027host2\u0027)"},{"line_number":1253,"context_line":"        self.compute2 \u003d self.start_service(\u0027compute\u0027, host\u003d\u0027host2\u0027)"},{"line_number":1254,"context_line":"        self.computes[self.compute2.host] \u003d self.compute2"},{"line_number":1255,"context_line":""},{"line_number":1256,"context_line":"        flavors \u003d self.api.get_flavors()"},{"line_number":1257,"context_line":"        self.flavor1 \u003d flavors[0]"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f2577a7_1f3ba9eb","line":1254,"range":{"start_line":1242,"start_character":8,"end_line":1254,"end_character":57},"in_reply_to":"5f2577a7_879adac2","updated":"2017-09-12 15:33:25.000000000","message":"Agree. Let\u0027s do this as a separate patch as this is getting too big already. Here is the separate patch I204e17fe105f6378f1c9f8a7fc622a1886babecc","commit_id":"bf1022d05e691d9c0dbb650969187513e0ece264"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"c73c9bc22e48dce7ba7cc83478548603907c100f","unresolved":false,"context_lines":[{"line_number":1128,"context_line":"        self.assertEqual(old_flavor[\u0027disk\u0027] + new_flavor[\u0027disk\u0027],"},{"line_number":1129,"context_line":"                         allocation[\u0027DISK_GB\u0027])"},{"line_number":1130,"context_line":""},{"line_number":1131,"context_line":"    def _boot_and_check_allocations(self, flavor, source_hostname):"},{"line_number":1132,"context_line":"        server_req \u003d self._build_minimal_create_server_request("},{"line_number":1133,"context_line":"            self.api, \u0027some-server\u0027, flavor_id\u003dflavor[\u0027id\u0027],"},{"line_number":1134,"context_line":"            image_uuid\u003d\u0027155d900f-4e14-4e4c-a73d-069cbf4541e6\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"7f515b1d_0df1e701","line":1131,"updated":"2017-09-27 14:16:37.000000000","message":"These are great instances where it would be really nice to get docstrings added about when these are intended to be used. I do realize this is just a move, but now is great time to do that.","commit_id":"098424d0b37e3eb51a1662245081bfed81b9d0e9"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"940d14ae64c40ff7a17ec45c9446f6052a12026d","unresolved":false,"context_lines":[{"line_number":1128,"context_line":"        self.assertEqual(old_flavor[\u0027disk\u0027] + new_flavor[\u0027disk\u0027],"},{"line_number":1129,"context_line":"                         allocation[\u0027DISK_GB\u0027])"},{"line_number":1130,"context_line":""},{"line_number":1131,"context_line":"    def _boot_and_check_allocations(self, flavor, source_hostname):"},{"line_number":1132,"context_line":"        server_req \u003d self._build_minimal_create_server_request("},{"line_number":1133,"context_line":"            self.api, \u0027some-server\u0027, flavor_id\u003dflavor[\u0027id\u0027],"},{"line_number":1134,"context_line":"            image_uuid\u003d\u0027155d900f-4e14-4e4c-a73d-069cbf4541e6\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"7f515b1d_f83e4b89","line":1131,"in_reply_to":"7f515b1d_0df1e701","updated":"2017-09-27 14:38:36.000000000","message":"Good point. I will do that.","commit_id":"098424d0b37e3eb51a1662245081bfed81b9d0e9"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c414d97827e53a8711cc9b84add881a45bc400df","unresolved":false,"context_lines":[{"line_number":1128,"context_line":"        self.assertEqual(old_flavor[\u0027disk\u0027] + new_flavor[\u0027disk\u0027],"},{"line_number":1129,"context_line":"                         allocation[\u0027DISK_GB\u0027])"},{"line_number":1130,"context_line":""},{"line_number":1131,"context_line":"    def _boot_and_check_allocations(self, flavor, source_hostname):"},{"line_number":1132,"context_line":"        server_req \u003d self._build_minimal_create_server_request("},{"line_number":1133,"context_line":"            self.api, \u0027some-server\u0027, flavor_id\u003dflavor[\u0027id\u0027],"},{"line_number":1134,"context_line":"            image_uuid\u003d\u0027155d900f-4e14-4e4c-a73d-069cbf4541e6\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"7f515b1d_45d96bf2","line":1131,"in_reply_to":"7f515b1d_f83e4b89","updated":"2017-10-04 13:15:21.000000000","message":"Done","commit_id":"098424d0b37e3eb51a1662245081bfed81b9d0e9"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"c73c9bc22e48dce7ba7cc83478548603907c100f","unresolved":false,"context_lines":[{"line_number":1214,"context_line":""},{"line_number":1215,"context_line":"    def _run_periodics(self):"},{"line_number":1216,"context_line":"        # NOTE(gibi): this runs periodics on the computes in an undefined order"},{"line_number":1217,"context_line":"        # some child class redefined this function to force a specific order."},{"line_number":1218,"context_line":"        ctx \u003d context.get_admin_context()"},{"line_number":1219,"context_line":"        for compute in self.computes.values():"},{"line_number":1220,"context_line":"            LOG.info(\u0027Running periodic for compute (%s)\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"7f515b1d_0dca07a0","line":1217,"updated":"2017-09-27 14:16:37.000000000","message":"Turn these comments into docstrings, and expand out a bit about when these would be expected to be used in a test.","commit_id":"098424d0b37e3eb51a1662245081bfed81b9d0e9"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c414d97827e53a8711cc9b84add881a45bc400df","unresolved":false,"context_lines":[{"line_number":1214,"context_line":""},{"line_number":1215,"context_line":"    def _run_periodics(self):"},{"line_number":1216,"context_line":"        # NOTE(gibi): this runs periodics on the computes in an undefined order"},{"line_number":1217,"context_line":"        # some child class redefined this function to force a specific order."},{"line_number":1218,"context_line":"        ctx \u003d context.get_admin_context()"},{"line_number":1219,"context_line":"        for compute in self.computes.values():"},{"line_number":1220,"context_line":"            LOG.info(\u0027Running periodic for compute (%s)\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"7f515b1d_05e373a6","line":1217,"in_reply_to":"7f515b1d_0dca07a0","updated":"2017-10-04 13:15:21.000000000","message":"Done","commit_id":"098424d0b37e3eb51a1662245081bfed81b9d0e9"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"0b20bc3e68ff8855b2daa66823f2aa8edc80373a","unresolved":false,"context_lines":[{"line_number":1132,"context_line":"    def _boot_and_check_allocations(self, flavor, source_hostname):"},{"line_number":1133,"context_line":"        \"\"\"Boot an instance and check that the resource allocation is correct"},{"line_number":1134,"context_line":""},{"line_number":1135,"context_line":"        After booting and instance on the given host with a given flavor it"},{"line_number":1136,"context_line":"        asserts that both the providers usages and resource allocations match"},{"line_number":1137,"context_line":"        with the resources requested in the flavor. It also asserts that"},{"line_number":1138,"context_line":"        running the periodic update_available_resource call does not change the"}],"source_content_type":"text/x-python","patch_set":14,"id":"7f515b1d_233179a3","line":1135,"range":{"start_line":1135,"start_character":22,"end_line":1135,"end_character":25},"updated":"2017-10-06 15:34:18.000000000","message":"an","commit_id":"9575a29173d31bacd186f8df38773449aab726d1"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"0b20bc3e68ff8855b2daa66823f2aa8edc80373a","unresolved":false,"context_lines":[{"line_number":1163,"context_line":"        source_usages \u003d self._get_provider_usages(source_rp_uuid)"},{"line_number":1164,"context_line":"        self.assertFlavorMatchesAllocation(flavor, source_usages)"},{"line_number":1165,"context_line":""},{"line_number":1166,"context_line":"        # Check that the other providers has no usage"},{"line_number":1167,"context_line":"        for rp_uuid in [self._get_provider_uuid_by_host(hostname)"},{"line_number":1168,"context_line":"                        for hostname in self.computes.keys()"},{"line_number":1169,"context_line":"                        if hostname !\u003d source_hostname]:"}],"source_content_type":"text/x-python","patch_set":14,"id":"7f515b1d_03dd5d41","line":1166,"range":{"start_line":1166,"start_character":41,"end_line":1166,"end_character":44},"updated":"2017-10-06 15:34:18.000000000","message":"have","commit_id":"9575a29173d31bacd186f8df38773449aab726d1"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"0b20bc3e68ff8855b2daa66823f2aa8edc80373a","unresolved":false,"context_lines":[{"line_number":1200,"context_line":"        allocation \u003d allocations[source_rp_uuid][\u0027resources\u0027]"},{"line_number":1201,"context_line":"        self.assertFlavorMatchesAllocation(flavor, allocation)"},{"line_number":1202,"context_line":""},{"line_number":1203,"context_line":"        # Check that the other providers has no usage"},{"line_number":1204,"context_line":"        for rp_uuid in [self._get_provider_uuid_by_host(hostname)"},{"line_number":1205,"context_line":"                        for hostname in self.computes.keys()"},{"line_number":1206,"context_line":"                        if hostname !\u003d source_hostname]:"}],"source_content_type":"text/x-python","patch_set":14,"id":"7f515b1d_a3e1e9fe","line":1203,"range":{"start_line":1203,"start_character":41,"end_line":1203,"end_character":44},"updated":"2017-10-06 15:34:18.000000000","message":"have","commit_id":"9575a29173d31bacd186f8df38773449aab726d1"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"0b20bc3e68ff8855b2daa66823f2aa8edc80373a","unresolved":false,"context_lines":[{"line_number":1211,"context_line":"        return server"},{"line_number":1212,"context_line":""},{"line_number":1213,"context_line":"    def _delete_and_check_allocations(self, server):"},{"line_number":1214,"context_line":"        \"\"\"Delete the instance and asserts that the allocations are cleaned"},{"line_number":1215,"context_line":""},{"line_number":1216,"context_line":"        :param server: The API representation of the instance to be deleted"},{"line_number":1217,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":14,"id":"7f515b1d_03b67dfb","line":1214,"range":{"start_line":1214,"start_character":11,"end_line":1214,"end_character":17},"updated":"2017-10-06 15:34:18.000000000","message":"Deletes (or change asserts to assert)","commit_id":"9575a29173d31bacd186f8df38773449aab726d1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5d02ef1c938c4414457b7cd9979b1c96a8d49f23","unresolved":false,"context_lines":[{"line_number":1146,"context_line":"    def _boot_and_check_allocations(self, flavor, source_hostname):"},{"line_number":1147,"context_line":"        \"\"\"Boot an instance and check that the resource allocation is correct"},{"line_number":1148,"context_line":""},{"line_number":1149,"context_line":"        After booting and instance on the given host with a given flavor it"},{"line_number":1150,"context_line":"        asserts that both the providers usages and resource allocations match"},{"line_number":1151,"context_line":"        with the resources requested in the flavor. It also asserts that"},{"line_number":1152,"context_line":"        running the periodic update_available_resource call does not change the"}],"source_content_type":"text/x-python","patch_set":18,"id":"ff82abbf_4ef60dfc","line":1149,"range":{"start_line":1149,"start_character":22,"end_line":1149,"end_character":25},"updated":"2017-11-22 14:26:21.000000000","message":"an","commit_id":"06ad1cd8b9917f2955c505dfd97367d76d00011f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"fe49150c52bf41064f3cdf502e72cfaff0f848c6","unresolved":false,"context_lines":[{"line_number":1146,"context_line":"    def _boot_and_check_allocations(self, flavor, source_hostname):"},{"line_number":1147,"context_line":"        \"\"\"Boot an instance and check that the resource allocation is correct"},{"line_number":1148,"context_line":""},{"line_number":1149,"context_line":"        After booting and instance on the given host with a given flavor it"},{"line_number":1150,"context_line":"        asserts that both the providers usages and resource allocations match"},{"line_number":1151,"context_line":"        with the resources requested in the flavor. It also asserts that"},{"line_number":1152,"context_line":"        running the periodic update_available_resource call does not change the"}],"source_content_type":"text/x-python","patch_set":18,"id":"ff82abbf_6e8f5123","line":1149,"range":{"start_line":1149,"start_character":22,"end_line":1149,"end_character":25},"in_reply_to":"ff82abbf_4ef60dfc","updated":"2017-11-22 14:35:57.000000000","message":"Done","commit_id":"06ad1cd8b9917f2955c505dfd97367d76d00011f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5d02ef1c938c4414457b7cd9979b1c96a8d49f23","unresolved":false,"context_lines":[{"line_number":1253,"context_line":"    def _run_periodics(self):"},{"line_number":1254,"context_line":"        \"\"\"Run the update_available_resource task on every compute manager"},{"line_number":1255,"context_line":""},{"line_number":1256,"context_line":"        This runs periodics on the computes in an undefined order some child"},{"line_number":1257,"context_line":"        class redefined this function to force a specific order."},{"line_number":1258,"context_line":"        \"\"\""},{"line_number":1259,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"ff82abbf_ae6d5999","line":1256,"range":{"start_line":1256,"start_character":60,"end_line":1256,"end_character":65},"updated":"2017-11-22 14:26:21.000000000","message":"s/order/order;/","commit_id":"06ad1cd8b9917f2955c505dfd97367d76d00011f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"fe49150c52bf41064f3cdf502e72cfaff0f848c6","unresolved":false,"context_lines":[{"line_number":1253,"context_line":"    def _run_periodics(self):"},{"line_number":1254,"context_line":"        \"\"\"Run the update_available_resource task on every compute manager"},{"line_number":1255,"context_line":""},{"line_number":1256,"context_line":"        This runs periodics on the computes in an undefined order some child"},{"line_number":1257,"context_line":"        class redefined this function to force a specific order."},{"line_number":1258,"context_line":"        \"\"\""},{"line_number":1259,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"ff82abbf_aeac798c","line":1256,"range":{"start_line":1256,"start_character":60,"end_line":1256,"end_character":65},"in_reply_to":"ff82abbf_ae6d5999","updated":"2017-11-22 14:35:57.000000000","message":"Done","commit_id":"06ad1cd8b9917f2955c505dfd97367d76d00011f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5d02ef1c938c4414457b7cd9979b1c96a8d49f23","unresolved":false,"context_lines":[{"line_number":2682,"context_line":"        # We only need one compute service/host/node for these tests."},{"line_number":2683,"context_line":"        fake.set_nodes([\u0027host1\u0027])"},{"line_number":2684,"context_line":"        self.flags(host\u003d\u0027host1\u0027)"},{"line_number":2685,"context_line":"        self.compute1 \u003d self.start_service(\u0027compute\u0027, host\u003d\u0027host1\u0027)"},{"line_number":2686,"context_line":""},{"line_number":2687,"context_line":"        flavors \u003d self.api.get_flavors()"},{"line_number":2688,"context_line":"        self.flavor1 \u003d flavors[0]"}],"source_content_type":"text/x-python","patch_set":18,"id":"ff82abbf_ee4a8125","line":2685,"updated":"2017-11-22 14:26:21.000000000","message":"I guess we don\u0027t care about this one because it\u0027s not using the helper methods in the base class.\n\nAt some point we should probably create a helper within the base class to start compute services and register them in the dict in that code that knows about it, otherwise someone writing a new test might miss that part and struggle figuring out the failure, or worse, the test won\u0027t validate what they think it should and pass even though it didn\u0027t run anything because the computes dict is empty.","commit_id":"06ad1cd8b9917f2955c505dfd97367d76d00011f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"fe49150c52bf41064f3cdf502e72cfaff0f848c6","unresolved":false,"context_lines":[{"line_number":2682,"context_line":"        # We only need one compute service/host/node for these tests."},{"line_number":2683,"context_line":"        fake.set_nodes([\u0027host1\u0027])"},{"line_number":2684,"context_line":"        self.flags(host\u003d\u0027host1\u0027)"},{"line_number":2685,"context_line":"        self.compute1 \u003d self.start_service(\u0027compute\u0027, host\u003d\u0027host1\u0027)"},{"line_number":2686,"context_line":""},{"line_number":2687,"context_line":"        flavors \u003d self.api.get_flavors()"},{"line_number":2688,"context_line":"        self.flavor1 \u003d flavors[0]"}],"source_content_type":"text/x-python","patch_set":18,"id":"ff82abbf_2eb2a9e7","line":2685,"in_reply_to":"ff82abbf_6e2e7144","updated":"2017-11-22 14:35:57.000000000","message":"Yepp.","commit_id":"06ad1cd8b9917f2955c505dfd97367d76d00011f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a3dc7083bb6ab753fdbf4f3b594c00266add42db","unresolved":false,"context_lines":[{"line_number":2682,"context_line":"        # We only need one compute service/host/node for these tests."},{"line_number":2683,"context_line":"        fake.set_nodes([\u0027host1\u0027])"},{"line_number":2684,"context_line":"        self.flags(host\u003d\u0027host1\u0027)"},{"line_number":2685,"context_line":"        self.compute1 \u003d self.start_service(\u0027compute\u0027, host\u003d\u0027host1\u0027)"},{"line_number":2686,"context_line":""},{"line_number":2687,"context_line":"        flavors \u003d self.api.get_flavors()"},{"line_number":2688,"context_line":"        self.flavor1 \u003d flavors[0]"}],"source_content_type":"text/x-python","patch_set":18,"id":"ff82abbf_6e2e7144","line":2685,"in_reply_to":"ff82abbf_ee4a8125","updated":"2017-11-22 14:27:10.000000000","message":"I see you\u0027ve already got that covered:\n\nhttps://review.openstack.org/#/c/503037/","commit_id":"06ad1cd8b9917f2955c505dfd97367d76d00011f"}]}
