)]}'
{"nova/tests/functional/test_scheduler.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5cb837d6d0575e6ae4b250361539ab8c059125c0","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# All Rights Reserved."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfeb2761_d7d520bb","line":1,"updated":"2017-03-31 15:29:45.000000000","message":"Missing a Red Hat copyright?","commit_id":"1a2c6952a402cc0e9e3711a65f477fa91b3ebb63"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5cb837d6d0575e6ae4b250361539ab8c059125c0","unresolved":false,"context_lines":[{"line_number":36,"context_line":"CELL2_NAME \u003d \u0027cell2\u0027"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"class SchedulerTestBase(test.TestCase,"},{"line_number":40,"context_line":"                        integrated_helpers.InstanceHelperMixin):"},{"line_number":41,"context_line":"    USES_DB \u003d True"},{"line_number":42,"context_line":"    REQUIRES_LOCKING \u003d True"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfeb2761_9238c6d3","line":39,"range":{"start_line":39,"start_character":6,"end_line":39,"end_character":23},"updated":"2017-03-31 15:29:45.000000000","message":"MultiCellSchedulerTestBase would give more context.","commit_id":"1a2c6952a402cc0e9e3711a65f477fa91b3ebb63"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5cb837d6d0575e6ae4b250361539ab8c059125c0","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"class SchedulerTestBase(test.TestCase,"},{"line_number":40,"context_line":"                        integrated_helpers.InstanceHelperMixin):"},{"line_number":41,"context_line":"    USES_DB \u003d True"},{"line_number":42,"context_line":"    REQUIRES_LOCKING \u003d True"},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dfeb2761_774f74bd","line":40,"range":{"start_line":40,"start_character":24,"end_line":40,"end_character":62},"updated":"2017-03-31 15:29:45.000000000","message":"We generally want to avoid this I think, I have been anyway. That keeps the setUp cleaner and more obvious of what actually needs to happen.","commit_id":"1a2c6952a402cc0e9e3711a65f477fa91b3ebb63"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"76ae285fb657b777b1b91c60594f5b15afcccad3","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"class SchedulerTestBase(test.TestCase,"},{"line_number":40,"context_line":"                        integrated_helpers.InstanceHelperMixin):"},{"line_number":41,"context_line":"    USES_DB \u003d True"},{"line_number":42,"context_line":"    REQUIRES_LOCKING \u003d True"},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dfeb2761_72f0a2ca","line":40,"range":{"start_line":40,"start_character":24,"end_line":40,"end_character":62},"in_reply_to":"dfeb2761_774f74bd","updated":"2017-03-31 15:35:24.000000000","message":"I don\u0027t think this changes setUp at all, we just get a couple of build/wait helpers.","commit_id":"1a2c6952a402cc0e9e3711a65f477fa91b3ebb63"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5cb837d6d0575e6ae4b250361539ab8c059125c0","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"class SchedulerTestBase(test.TestCase,"},{"line_number":40,"context_line":"                        integrated_helpers.InstanceHelperMixin):"},{"line_number":41,"context_line":"    USES_DB \u003d True"},{"line_number":42,"context_line":"    REQUIRES_LOCKING \u003d True"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def _setup_cells(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfeb2761_f7d024cc","line":41,"range":{"start_line":41,"start_character":4,"end_line":41,"end_character":18},"updated":"2017-03-31 15:29:45.000000000","message":"This is redundant when you\u0027re extending TestCase. I figured you\u0027d actually use USES_DB_SELF \u003d False here and setup the cells fixtures and databases yourself, which it actually looks like you\u0027re doing.","commit_id":"1a2c6952a402cc0e9e3711a65f477fa91b3ebb63"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"76ae285fb657b777b1b91c60594f5b15afcccad3","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"class SchedulerTestBase(test.TestCase,"},{"line_number":40,"context_line":"                        integrated_helpers.InstanceHelperMixin):"},{"line_number":41,"context_line":"    USES_DB \u003d True"},{"line_number":42,"context_line":"    REQUIRES_LOCKING \u003d True"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def _setup_cells(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfeb2761_92cc468a","line":41,"range":{"start_line":41,"start_character":4,"end_line":41,"end_character":18},"in_reply_to":"dfeb2761_f7d024cc","updated":"2017-03-31 15:35:24.000000000","message":"Yeah, leftover from an earlier thing.","commit_id":"1a2c6952a402cc0e9e3711a65f477fa91b3ebb63"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5cb837d6d0575e6ae4b250361539ab8c059125c0","unresolved":false,"context_lines":[{"line_number":120,"context_line":"        # Wait for it to finish being created"},{"line_number":121,"context_line":"        found_server \u003d self._wait_for_state_change("},{"line_number":122,"context_line":"            self.admin_api, created_server, \u0027ACTIVE\u0027)"},{"line_number":123,"context_line":"        self.admin_api.api_post(\u0027/servers/%s/action\u0027 % found_server[\u0027id\u0027],"},{"line_number":124,"context_line":"                                {\u0027migrate\u0027: None},"},{"line_number":125,"context_line":"                                check_response_status\u003d[expected_status])"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def test_migrate_between_cells(self):"},{"line_number":128,"context_line":"        ctxt \u003d context.get_admin_context()"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfeb2761_b2dcea74","line":125,"range":{"start_line":123,"start_character":8,"end_line":125,"end_character":72},"updated":"2017-03-31 15:29:45.000000000","message":"Will we get a fault on the instance? If so, it would be good to assert the fault is what we expected rather than, for example, a schema validation failure or status check in the request.","commit_id":"1a2c6952a402cc0e9e3711a65f477fa91b3ebb63"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c9b57c98e77099c856737858960b619481efd061","unresolved":false,"context_lines":[{"line_number":120,"context_line":"        # Wait for it to finish being created"},{"line_number":121,"context_line":"        found_server \u003d self._wait_for_state_change("},{"line_number":122,"context_line":"            self.admin_api, created_server, \u0027ACTIVE\u0027)"},{"line_number":123,"context_line":"        self.admin_api.api_post(\u0027/servers/%s/action\u0027 % found_server[\u0027id\u0027],"},{"line_number":124,"context_line":"                                {\u0027migrate\u0027: None},"},{"line_number":125,"context_line":"                                check_response_status\u003d[expected_status])"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def test_migrate_between_cells(self):"},{"line_number":128,"context_line":"        ctxt \u003d context.get_admin_context()"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfeb2761_123396ad","line":125,"range":{"start_line":123,"start_character":8,"end_line":125,"end_character":72},"in_reply_to":"dfeb2761_b2dcea74","updated":"2017-03-31 15:34:10.000000000","message":"Oh, I had that before I collapsed these together and I guess I lost it. But yeah.","commit_id":"1a2c6952a402cc0e9e3711a65f477fa91b3ebb63"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5cb837d6d0575e6ae4b250361539ab8c059125c0","unresolved":false,"context_lines":[{"line_number":124,"context_line":"                                {\u0027migrate\u0027: None},"},{"line_number":125,"context_line":"                                check_response_status\u003d[expected_status])"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def test_migrate_between_cells(self):"},{"line_number":128,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        # Hosts in different cells"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfeb2761_324d7a72","line":127,"updated":"2017-03-31 15:29:45.000000000","message":"Let\u0027s add a docstring for the scenario this is testing and expected result.","commit_id":"1a2c6952a402cc0e9e3711a65f477fa91b3ebb63"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5cb837d6d0575e6ae4b250361539ab8c059125c0","unresolved":false,"context_lines":[{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        self._test_create_and_migrate(400)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def test_migrate_within_cell(self):"},{"line_number":143,"context_line":"        # Hosts in different cells"},{"line_number":144,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":145,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dfeb2761_d25bee2b","line":142,"updated":"2017-03-31 15:29:45.000000000","message":"Let\u0027s add a docstring for the scenario this is testing and expected result.","commit_id":"1a2c6952a402cc0e9e3711a65f477fa91b3ebb63"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5cb837d6d0575e6ae4b250361539ab8c059125c0","unresolved":false,"context_lines":[{"line_number":140,"context_line":"        self._test_create_and_migrate(400)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def test_migrate_within_cell(self):"},{"line_number":143,"context_line":"        # Hosts in different cells"},{"line_number":144,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        # Hosts in the same cell"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfeb2761_52e35e34","line":143,"range":{"start_line":143,"start_character":8,"end_line":143,"end_character":34},"updated":"2017-03-31 15:29:45.000000000","message":"Copy paste error?","commit_id":"1a2c6952a402cc0e9e3711a65f477fa91b3ebb63"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cd8d7d84cd21f49d2ac0a6ea5b89c95c6f195dfd","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        # NOTE(danms): We need to create the HostMapping first, because"},{"line_number":107,"context_line":"        # otherwise we\u0027ll fail to update the scheduler while running"},{"line_number":108,"context_line":"        # the compute node startup routines below."},{"line_number":109,"context_line":"        ctxt \u003d context.get_context()"},{"line_number":110,"context_line":"        cell \u003d self.cell_mappings[cell]"},{"line_number":111,"context_line":"        hm \u003d objects.HostMapping(context\u003dctxt,"},{"line_number":112,"context_line":"                                 host\u003dhost,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1f1a1f67_73684520","line":109,"range":{"start_line":109,"start_character":8,"end_line":109,"end_character":36},"updated":"2017-07-15 17:28:37.000000000","message":"This is an untargeted context isn\u0027t it? When we have with context.target_cell(ctxt, self.cell_mappings[CELL1_NAME]): below should we pass that targeted context into this method and create the host mapping using that targeted context? Or maybe that doesn\u0027t matter because when hm.create() is called it\u0027s using the db connection from the targeted context we\u0027re in. So get_context() is just a dummy blank context, we could also be using get_admin_context().\n\nI\u0027m wondering if the hosts are really getting created in separate cells - but if the filter scheduler tests are passing then they\u0027d have to be - so why would the caching scheduler not work here? I see the caching scheduler has a periodic task it runs to update the host state cache, but if we schedule before that periodic runs then we still force load it before getting the hosts in the cell based on the request spec destination - which is targeted to the same cell that the instance lives in. Perplexing.","commit_id":"4e90a32457cc7ab485469dd88d9f0fc413e6808f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a44cc448a1ad8786b2759d02d8443fbeefb77569","unresolved":false,"context_lines":[{"line_number":134,"context_line":"            {\u0027migrate\u0027: None},"},{"line_number":135,"context_line":"            check_response_status\u003d[expected_status])"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def test_migrate_between_cells(self):"},{"line_number":138,"context_line":"        \"\"\"Verify that migrating between cells is not allowed."},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        Right now, we can\u0027t migrate between cells. So, create two computes"}],"source_content_type":"text/x-python","patch_set":8,"id":"1f1a1f67_53db091a","line":137,"updated":"2017-07-15 17:10:37.000000000","message":"This is failing for the caching scheduler for some reason - the migrate action is returning a 202:\n\nhttp://logs.openstack.org/06/452006/8/check/gate-nova-tox-functional-ubuntu-xenial/87a1b1a/testr_results.html.gz\n\nI\u0027m not sure how best to debug this, but we could assert the hosts and nodes we expect to live in which cells before running the migrate test, and if we fail with an unexpected 202, we could use the server migrations API to pull the migration off and check which hosts it\u0027s running on to get some more details.","commit_id":"4e90a32457cc7ab485469dd88d9f0fc413e6808f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9a3da9ab98dd1935d8acb479e978938066375f0c","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from nova.tests.functional import integrated_helpers"},{"line_number":20,"context_line":"from nova.tests.unit import fake_network"},{"line_number":21,"context_line":"from nova.tests.unit import policy_fixture"},{"line_number":22,"context_line":"from nova.tests import uuidsentinel as uuids"},{"line_number":23,"context_line":"from nova.virt import fake"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"import nova.scheduler.utils"}],"source_content_type":"text/x-python","patch_set":10,"id":"bfb3d3c7_03bf0bd1","line":22,"updated":"2019-05-30 15:24:08.000000000","message":"This has moved.","commit_id":"fc678981b886b0a90790eeafaf37c124f95206fb"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"95460419ba8b4def764ca4cbf5471999c7d65556","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from nova.tests import uuidsentinel as uuids"},{"line_number":23,"context_line":"from nova.virt import fake"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"import nova.scheduler.utils"},{"line_number":26,"context_line":"import nova.servicegroup"},{"line_number":27,"context_line":"import nova.tests.unit.image.fake"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f4e5783_5763bcb2","line":26,"range":{"start_line":25,"start_character":0,"end_line":26,"end_character":24},"updated":"2017-10-17 05:41:31.000000000","message":"These are unnecessary.","commit_id":"fc678981b886b0a90790eeafaf37c124f95206fb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9a3da9ab98dd1935d8acb479e978938066375f0c","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from nova.tests import uuidsentinel as uuids"},{"line_number":23,"context_line":"from nova.virt import fake"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"import nova.scheduler.utils"},{"line_number":26,"context_line":"import nova.servicegroup"},{"line_number":27,"context_line":"import nova.tests.unit.image.fake"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":10,"id":"bfb3d3c7_e3b757f4","line":26,"range":{"start_line":25,"start_character":0,"end_line":26,"end_character":24},"in_reply_to":"5f4e5783_5763bcb2","updated":"2019-05-30 15:24:08.000000000","message":"Done","commit_id":"fc678981b886b0a90790eeafaf37c124f95206fb"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"95460419ba8b4def764ca4cbf5471999c7d65556","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"import nova.scheduler.utils"},{"line_number":26,"context_line":"import nova.servicegroup"},{"line_number":27,"context_line":"import nova.tests.unit.image.fake"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"CONF \u003d cfg.CONF"},{"line_number":30,"context_line":"CELL1_NAME \u003d \u0027cell1\u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f4e5783_f75bc8f2","line":27,"range":{"start_line":27,"start_character":0,"end_line":27,"end_character":33},"updated":"2017-10-17 05:41:31.000000000","message":"It should be between line line 20 and line21.","commit_id":"fc678981b886b0a90790eeafaf37c124f95206fb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9a3da9ab98dd1935d8acb479e978938066375f0c","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"import nova.scheduler.utils"},{"line_number":26,"context_line":"import nova.servicegroup"},{"line_number":27,"context_line":"import nova.tests.unit.image.fake"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"CONF \u003d cfg.CONF"},{"line_number":30,"context_line":"CELL1_NAME \u003d \u0027cell1\u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"bfb3d3c7_c3b493f4","line":27,"range":{"start_line":27,"start_character":0,"end_line":27,"end_character":33},"in_reply_to":"5f4e5783_f75bc8f2","updated":"2019-05-30 15:24:08.000000000","message":"Done","commit_id":"fc678981b886b0a90790eeafaf37c124f95206fb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9a3da9ab98dd1935d8acb479e978938066375f0c","unresolved":false,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        self.useFixture(nova_fixtures.AllServicesCurrent())"},{"line_number":90,"context_line":"        self.useFixture(nova_fixtures.DefaultFlavorsFixture())"},{"line_number":91,"context_line":"        self.useFixture(nova_fixtures.PlacementFixture())"},{"line_number":92,"context_line":"        api_fixture \u003d self.useFixture(nova_fixtures.OSAPIFixture("},{"line_number":93,"context_line":"            api_version\u003d\u0027v2.1\u0027))"},{"line_number":94,"context_line":"        self.api \u003d api_fixture.api"}],"source_content_type":"text/x-python","patch_set":10,"id":"bfb3d3c7_a3cddf85","line":91,"range":{"start_line":91,"start_character":38,"end_line":91,"end_character":54},"updated":"2019-05-30 15:24:08.000000000","message":"This has moved.","commit_id":"fc678981b886b0a90790eeafaf37c124f95206fb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9a3da9ab98dd1935d8acb479e978938066375f0c","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        nova.tests.unit.image.fake.stub_out_image_service(self)"},{"line_number":103,"context_line":"        self.addCleanup(nova.tests.unit.image.fake.FakeImageService_reset)"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def start_compute_service(self, host, cell, **kwargs):"},{"line_number":106,"context_line":"        # NOTE(danms): We need to create the HostMapping first, because"},{"line_number":107,"context_line":"        # otherwise we\u0027ll fail to update the scheduler while running"},{"line_number":108,"context_line":"        # the compute node startup routines below."}],"source_content_type":"text/x-python","patch_set":10,"id":"bfb3d3c7_23900f4a","line":105,"updated":"2019-05-30 15:24:08.000000000","message":"I think the base test start_service stuff for compute handles all of this natively now since you can pass the cell you want the host in, we can just re-use that. You were ahead of your time. :)","commit_id":"fc678981b886b0a90790eeafaf37c124f95206fb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9a3da9ab98dd1935d8acb479e978938066375f0c","unresolved":false,"context_lines":[{"line_number":184,"context_line":"class MultiCellCachingSchedulerTest(MultiCellSchedulerTestBase):"},{"line_number":185,"context_line":"    def configure_scheduler(self):"},{"line_number":186,"context_line":"        super(MultiCellCachingSchedulerTest, self).configure_scheduler()"},{"line_number":187,"context_line":"        self.flags(driver\u003d\u0027caching_scheduler\u0027, group\u003d\u0027scheduler\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"bfb3d3c7_c3825300","line":187,"updated":"2019-05-30 15:24:08.000000000","message":"This is gone now.","commit_id":"fc678981b886b0a90790eeafaf37c124f95206fb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"316063d611e2e1af19a4b73cbd9997f52baf0b85","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    USES_DB \u003d False"},{"line_number":35,"context_line":"    USES_DB_SELF \u003d True"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def _setup_cells(self):"},{"line_number":38,"context_line":"        self.useFixture(nova_fixtures.Database(database\u003d\u0027api\u0027))"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        celldbs \u003d nova_fixtures.CellDatabases()"}],"source_content_type":"text/x-python","patch_set":11,"id":"bfb3d3c7_a3c95f59","line":37,"updated":"2019-05-30 15:27:09.000000000","message":"This is also natively handled in TestCase if you set NUMBER_OF_CELLS \u003d 2.","commit_id":"a04405e2137d2f097dd45af45385719a306ef467"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7b72eb028b7be73a4581765f64bd9b5eaf4b755e","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        # both cells"},{"line_number":99,"context_line":"        fake.set_nodes([\u0027host3\u0027])"},{"line_number":100,"context_line":"        self.addCleanup(fake.restore_nodes)"},{"line_number":101,"context_line":"        self.start_service(\u0027compute\u0027, host\u003d\u0027compute3\u0027, cell\u003dCELL2_NAME)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        self._test_create_and_migrate(expected_status\u003d202)"}],"source_content_type":"text/x-python","patch_set":12,"id":"bfb3d3c7_d12a127d","line":101,"updated":"2019-05-30 21:37:24.000000000","message":"This test is racy because if the server lands on compute3 then we can\u0027t migrate since there are no other hosts in cell2. We could put the hosts in per-cell aggregates/AZs and then create the server in the cell1 AZ, but then the AZFilter would restrict the server to cell1 rather than the multi-cell filtering, so that\u0027s not a great option. It\u0027s probably easier to just force the server onto a specific host in cell1.","commit_id":"a2d10eead8c8b9963bb8a9581537076b8e5df181"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2402bfa134edaf0eff5ba7cd7236992ce5f258a5","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        # both cells"},{"line_number":99,"context_line":"        fake.set_nodes([\u0027host3\u0027])"},{"line_number":100,"context_line":"        self.addCleanup(fake.restore_nodes)"},{"line_number":101,"context_line":"        self.start_service(\u0027compute\u0027, host\u003d\u0027compute3\u0027, cell\u003dCELL2_NAME)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        self._test_create_and_migrate(expected_status\u003d202)"}],"source_content_type":"text/x-python","patch_set":12,"id":"bfb3d3c7_f152b612","line":101,"in_reply_to":"bfb3d3c7_d12a127d","updated":"2019-05-30 21:38:40.000000000","message":"Alternatively we could add a custom weigher to always prefer hosts in cell1 over cell2, but that\u0027s probably unnecessarily complex.","commit_id":"a2d10eead8c8b9963bb8a9581537076b8e5df181"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0416039159eecb98a0727c978755d7427f4f9e8e","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        in different cells and make sure that migration fails with NoValidHost."},{"line_number":74,"context_line":"        \"\"\""},{"line_number":75,"context_line":"        # Hosts in different cells"},{"line_number":76,"context_line":"        fake.set_nodes([\u0027host1\u0027])"},{"line_number":77,"context_line":"        self.addCleanup(fake.restore_nodes)"},{"line_number":78,"context_line":"        self.start_service(\u0027compute\u0027, host\u003d\u0027compute1\u0027, cell\u003dCELL1_NAME)"},{"line_number":79,"context_line":"        fake.set_nodes([\u0027host2\u0027])"}],"source_content_type":"text/x-python","patch_set":13,"id":"3fa7e38b_dba7bea7","line":76,"updated":"2019-10-30 15:11:50.000000000","message":"There is no such thing than fake.set_nodes any more. You need to rebase the paths and see what else also changed.","commit_id":"b5d5f87a0c783347d89aacbe5a75cb79e3cfed5d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0416039159eecb98a0727c978755d7427f4f9e8e","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        \"\"\""},{"line_number":75,"context_line":"        # Hosts in different cells"},{"line_number":76,"context_line":"        fake.set_nodes([\u0027host1\u0027])"},{"line_number":77,"context_line":"        self.addCleanup(fake.restore_nodes)"},{"line_number":78,"context_line":"        self.start_service(\u0027compute\u0027, host\u003d\u0027compute1\u0027, cell\u003dCELL1_NAME)"},{"line_number":79,"context_line":"        fake.set_nodes([\u0027host2\u0027])"},{"line_number":80,"context_line":"        self.addCleanup(fake.restore_nodes)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3fa7e38b_bbbc42bb","line":77,"range":{"start_line":77,"start_character":29,"end_line":77,"end_character":42},"updated":"2019-10-30 15:11:50.000000000","message":"ditto","commit_id":"b5d5f87a0c783347d89aacbe5a75cb79e3cfed5d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e355091f602d231964f0c63d147200e7df94ffe6","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from nova.tests.unit import fake_network"},{"line_number":18,"context_line":"import nova.tests.unit.image.fake as fake_image"},{"line_number":19,"context_line":"from nova.tests.unit import policy_fixture"},{"line_number":20,"context_line":"from nova.virt import fake"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"CELL1_NAME \u003d \u0027cell1\u0027"},{"line_number":23,"context_line":"CELL2_NAME \u003d \u0027cell2\u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"3fa7e38b_b2a455a4","line":20,"updated":"2019-10-31 13:45:36.000000000","message":"pep8 since this import is unused now.","commit_id":"c398d28a74699aa95865d2482055913916bc1b26"}]}
