)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"5904563f840d6bdfed972de39d372231fc4b0b66","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This makes us automatically set up a usable CellsV2 environment in"},{"line_number":10,"context_line":"the base test case, if we\u0027re setting up database stuff. If the test"},{"line_number":11,"context_line":"uses the DB normally, we get a cell0, two real cells, and create"},{"line_number":12,"context_line":"hostmappings for any compute services that we start. If we\u0027re not"},{"line_number":13,"context_line":"a DB-using test, we mock out the cell mapping stuff so that"},{"line_number":14,"context_line":"everything appears to just be in the same cell."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"3a71b18c_100bf57d","line":11,"range":{"start_line":11,"start_character":38,"end_line":11,"end_character":52},"updated":"2016-12-07 01:28:11.000000000","message":"What is meant by this? cell0 and a compute cell? It makes it sound like two compute cells because you already said cell0.","commit_id":"60fb8a6799d00de7086e60c10158ff83a2e36629"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"366cf229587d1863f79709f96b36c4247301d565","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This makes us automatically set up a usable CellsV2 environment in"},{"line_number":10,"context_line":"the base test case, if we\u0027re setting up database stuff. If the test"},{"line_number":11,"context_line":"uses the DB normally, we get a cell0, two real cells, and create"},{"line_number":12,"context_line":"hostmappings for any compute services that we start. If we\u0027re not"},{"line_number":13,"context_line":"a DB-using test, we mock out the cell mapping stuff so that"},{"line_number":14,"context_line":"everything appears to just be in the same cell."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"3a71b18c_2ff792f6","line":11,"range":{"start_line":11,"start_character":38,"end_line":11,"end_character":52},"in_reply_to":"3a71b18c_100bf57d","updated":"2016-12-07 15:44:29.000000000","message":"I changed this from setting up two non-cell0 cells to one a while back and forgot to change this.","commit_id":"60fb8a6799d00de7086e60c10158ff83a2e36629"}],"nova/test.py":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"9a6c94eca85cd66cc1aa8cbefbc0f653ee4de840","unresolved":false,"context_lines":[{"line_number":268,"context_line":"        self.celldbs.add_cell_database(uuids.cell1, default\u003dTrue)"},{"line_number":269,"context_line":"        self.useFixture(self.celldbs)"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"        ctxt \u003d context.RequestContext()"},{"line_number":272,"context_line":"        fake_transport \u003d \u0027fake://nowhere/\u0027"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"        c0 \u003d objects.CellMapping("}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_e6051111","line":271,"range":{"start_line":271,"start_character":15,"end_line":271,"end_character":39},"updated":"2016-12-06 07:33:28.000000000","message":"Should use nova.context.get_context() (see next comment)","commit_id":"d36416ab95fc1ec273cd05ba0e1b7838ad3e3211"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"9a6c94eca85cd66cc1aa8cbefbc0f653ee4de840","unresolved":false,"context_lines":[{"line_number":330,"context_line":"            nova_fixtures.ServiceFixture(name, host, **kwargs))"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"        if name \u003d\u003d \u0027compute\u0027:"},{"line_number":333,"context_line":"            ctxt \u003d context.RequestContext(overwrite\u003dFalse)"},{"line_number":334,"context_line":"            cell \u003d self.cell_mappings[kwargs.pop(\u0027cell\u0027, \u0027cell1\u0027)]"},{"line_number":335,"context_line":"            hm \u003d objects.HostMapping(context\u003dctxt,"},{"line_number":336,"context_line":"                                     host\u003dsvc.service.host,"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_8b562828","line":333,"range":{"start_line":333,"start_character":19,"end_line":333,"end_character":58},"updated":"2016-12-06 07:33:28.000000000","message":"I remembered later there\u0027s a function get_context() in nova/context.py alaski added for this use case instead of doing this, to avoid the problem we ran into and also provide a way other than the old de facto get_admin_context().","commit_id":"d36416ab95fc1ec273cd05ba0e1b7838ad3e3211"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"5904563f840d6bdfed972de39d372231fc4b0b66","unresolved":false,"context_lines":[{"line_number":268,"context_line":"        self.celldbs.add_cell_database(uuids.cell1, default\u003dTrue)"},{"line_number":269,"context_line":"        self.useFixture(self.celldbs)"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"        ctxt \u003d context.RequestContext()"},{"line_number":272,"context_line":"        fake_transport \u003d \u0027fake://nowhere/\u0027"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"        c0 \u003d objects.CellMapping("}],"source_content_type":"text/x-python","patch_set":6,"id":"3a71b18c_b0a7a1a5","line":271,"range":{"start_line":271,"start_character":23,"end_line":271,"end_character":39},"updated":"2016-12-07 01:28:11.000000000","message":"Let\u0027s use get_context() instead of propagating the perilous overwrite\u003dTrue RequestContext()","commit_id":"60fb8a6799d00de7086e60c10158ff83a2e36629"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"a739b3a71a08e67afae7791edce6eec29836bd14","unresolved":false,"context_lines":[{"line_number":268,"context_line":"        self.celldbs.add_cell_database(uuids.cell1, default\u003dTrue)"},{"line_number":269,"context_line":"        self.useFixture(self.celldbs)"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"        ctxt \u003d context.RequestContext()"},{"line_number":272,"context_line":"        fake_transport \u003d \u0027fake://nowhere/\u0027"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"        c0 \u003d objects.CellMapping("}],"source_content_type":"text/x-python","patch_set":6,"id":"3a71b18c_2a7220ae","line":271,"range":{"start_line":271,"start_character":23,"end_line":271,"end_character":39},"in_reply_to":"3a71b18c_b0a7a1a5","updated":"2016-12-07 15:55:41.000000000","message":"Done","commit_id":"60fb8a6799d00de7086e60c10158ff83a2e36629"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"5904563f840d6bdfed972de39d372231fc4b0b66","unresolved":false,"context_lines":[{"line_number":330,"context_line":"            nova_fixtures.ServiceFixture(name, host, **kwargs))"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"        if name \u003d\u003d \u0027compute\u0027:"},{"line_number":333,"context_line":"            ctxt \u003d context.RequestContext(overwrite\u003dFalse)"},{"line_number":334,"context_line":"            cell \u003d self.cell_mappings[kwargs.pop(\u0027cell\u0027, \u0027cell1\u0027)]"},{"line_number":335,"context_line":"            hm \u003d objects.HostMapping(context\u003dctxt,"},{"line_number":336,"context_line":"                                     host\u003dsvc.service.host,"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a71b18c_30b2b1e5","line":333,"range":{"start_line":333,"start_character":27,"end_line":333,"end_character":58},"updated":"2016-12-07 01:28:11.000000000","message":"Let\u0027s use get_context()","commit_id":"60fb8a6799d00de7086e60c10158ff83a2e36629"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6cad130a6c3131a8e744846125ce025472e5ff49","unresolved":false,"context_lines":[{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        self.cell_mappings \u003d {}"},{"line_number":232,"context_line":"        self.host_mappings \u003d {}"},{"line_number":233,"context_line":"        if self.USES_DB:"},{"line_number":234,"context_line":"            self.useFixture(nova_fixtures.Database(database\u003d\u0027api\u0027))"},{"line_number":235,"context_line":"            self._setup_cells()"},{"line_number":236,"context_line":"            self.useFixture(nova_fixtures.DefaultFlavorsFixture())"},{"line_number":237,"context_line":"        elif not self.USES_DB_SELF:"},{"line_number":238,"context_line":"            self.useFixture(nova_fixtures.SingleCellSimple())"},{"line_number":239,"context_line":"            self.useFixture(nova_fixtures.DatabasePoisonFixture())"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"        # NOTE(blk-u): WarningsFixture must be after the Database fixture"},{"line_number":242,"context_line":"        # because sqlalchemy-migrate messes with the warnings filters."}],"source_content_type":"text/x-python","patch_set":9,"id":"3a71b18c_9ee1a101","line":239,"range":{"start_line":233,"start_character":8,"end_line":239,"end_character":66},"updated":"2016-12-08 01:15:51.000000000","message":"Comments in these conditional blocks might be nice.","commit_id":"3f37b155c2ef8f01733e0156856157662539d3fb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6cad130a6c3131a8e744846125ce025472e5ff49","unresolved":false,"context_lines":[{"line_number":262,"context_line":""},{"line_number":263,"context_line":"        self.useFixture(nova_fixtures.ForbidNewLegacyNotificationFixture())"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"    def _setup_cells(self):"},{"line_number":266,"context_line":"        self.celldbs \u003d nova_fixtures.CellDatabases()"},{"line_number":267,"context_line":"        self.celldbs.add_cell_database(objects.CellMapping.CELL0_UUID)"},{"line_number":268,"context_line":"        self.celldbs.add_cell_database(uuids.cell1, default\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a71b18c_deca396e","line":265,"updated":"2016-12-08 01:15:51.000000000","message":"Similar, I could benefit from some documentation in this method for posterity.","commit_id":"3f37b155c2ef8f01733e0156856157662539d3fb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6cad130a6c3131a8e744846125ce025472e5ff49","unresolved":false,"context_lines":[{"line_number":263,"context_line":"        self.useFixture(nova_fixtures.ForbidNewLegacyNotificationFixture())"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"    def _setup_cells(self):"},{"line_number":266,"context_line":"        self.celldbs \u003d nova_fixtures.CellDatabases()"},{"line_number":267,"context_line":"        self.celldbs.add_cell_database(objects.CellMapping.CELL0_UUID)"},{"line_number":268,"context_line":"        self.celldbs.add_cell_database(uuids.cell1, default\u003dTrue)"},{"line_number":269,"context_line":"        self.useFixture(self.celldbs)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a71b18c_3eb96ded","line":266,"range":{"start_line":266,"start_character":8,"end_line":266,"end_character":20},"updated":"2016-12-08 01:15:51.000000000","message":"Does this need to be a member variable?","commit_id":"3f37b155c2ef8f01733e0156856157662539d3fb"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"050b99a26d4622c7fe39505acb7bd856f5aaad83","unresolved":false,"context_lines":[{"line_number":263,"context_line":"        self.useFixture(nova_fixtures.ForbidNewLegacyNotificationFixture())"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"    def _setup_cells(self):"},{"line_number":266,"context_line":"        self.celldbs \u003d nova_fixtures.CellDatabases()"},{"line_number":267,"context_line":"        self.celldbs.add_cell_database(objects.CellMapping.CELL0_UUID)"},{"line_number":268,"context_line":"        self.celldbs.add_cell_database(uuids.cell1, default\u003dTrue)"},{"line_number":269,"context_line":"        self.useFixture(self.celldbs)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a71b18c_885d8e7b","line":266,"range":{"start_line":266,"start_character":8,"end_line":266,"end_character":20},"in_reply_to":"3a71b18c_3eb96ded","updated":"2016-12-09 18:24:49.000000000","message":"I was using it for debugging at one point, but I can remove it now I think.","commit_id":"3f37b155c2ef8f01733e0156856157662539d3fb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6cad130a6c3131a8e744846125ce025472e5ff49","unresolved":false,"context_lines":[{"line_number":282,"context_line":"        c1 \u003d objects.CellMapping("},{"line_number":283,"context_line":"            context\u003dctxt,"},{"line_number":284,"context_line":"            uuid\u003duuids.cell1,"},{"line_number":285,"context_line":"            name\u003d\u0027cell1\u0027,"},{"line_number":286,"context_line":"            transport_url\u003dfake_transport,"},{"line_number":287,"context_line":"            database_connection\u003duuids.cell1)"},{"line_number":288,"context_line":"        c1.create()"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a71b18c_1e9cb168","line":285,"range":{"start_line":285,"start_character":17,"end_line":285,"end_character":24},"updated":"2016-12-08 01:15:51.000000000","message":"It might be worth creating a constant for this as it\u0027s used later when starting a compute service as it\u0027s the default main cell.","commit_id":"3f37b155c2ef8f01733e0156856157662539d3fb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6cad130a6c3131a8e744846125ce025472e5ff49","unresolved":false,"context_lines":[{"line_number":288,"context_line":"        c1.create()"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"        self.cell_mappings \u003d {cm.name: cm for cm in (c0, c1)}"},{"line_number":291,"context_line":"        self.host_mappings \u003d {}"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"    def _restore_obj_registry(self):"},{"line_number":294,"context_line":"        objects_base.NovaObjectRegistry._registry._obj_classes \u003d \\"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a71b18c_7e98456b","line":291,"updated":"2016-12-08 01:15:51.000000000","message":"nit: don\u0027t really need to redefine this.","commit_id":"3f37b155c2ef8f01733e0156856157662539d3fb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6cad130a6c3131a8e744846125ce025472e5ff49","unresolved":false,"context_lines":[{"line_number":331,"context_line":""},{"line_number":332,"context_line":"        if name \u003d\u003d \u0027compute\u0027:"},{"line_number":333,"context_line":"            ctxt \u003d context.get_context()"},{"line_number":334,"context_line":"            cell \u003d self.cell_mappings[kwargs.pop(\u0027cell\u0027, \u0027cell1\u0027)]"},{"line_number":335,"context_line":"            hm \u003d objects.HostMapping(context\u003dctxt,"},{"line_number":336,"context_line":"                                     host\u003dsvc.service.host,"},{"line_number":337,"context_line":"                                     cell_mapping\u003dcell)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a71b18c_7eaa0587","line":334,"range":{"start_line":334,"start_character":19,"end_line":334,"end_character":66},"updated":"2016-12-08 01:15:51.000000000","message":"Can we start services without a database? I\u0027m guessing not, but if any test did, we\u0027d get a KeyError here. We wouldn\u0027t get here anyway I guess because the ServiceFixture creates a service record in the DB when the service is started.","commit_id":"3f37b155c2ef8f01733e0156856157662539d3fb"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"050b99a26d4622c7fe39505acb7bd856f5aaad83","unresolved":false,"context_lines":[{"line_number":331,"context_line":""},{"line_number":332,"context_line":"        if name \u003d\u003d \u0027compute\u0027:"},{"line_number":333,"context_line":"            ctxt \u003d context.get_context()"},{"line_number":334,"context_line":"            cell \u003d self.cell_mappings[kwargs.pop(\u0027cell\u0027, \u0027cell1\u0027)]"},{"line_number":335,"context_line":"            hm \u003d objects.HostMapping(context\u003dctxt,"},{"line_number":336,"context_line":"                                     host\u003dsvc.service.host,"},{"line_number":337,"context_line":"                                     cell_mapping\u003dcell)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a71b18c_e877e2ff","line":334,"range":{"start_line":334,"start_character":19,"end_line":334,"end_character":66},"in_reply_to":"3a71b18c_7eaa0587","updated":"2016-12-09 18:24:49.000000000","message":"If they did, the service would crash on startup because it couldn\u0027t create its service record. It\u0027s a quiet thing and I noticed that other tests (like those sriov ones) have done that without noticing. Putting this here actually exposed the sriov broken tests, so it\u0027s probably cool to leave this to fail if someone tries that.","commit_id":"3f37b155c2ef8f01733e0156856157662539d3fb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6cad130a6c3131a8e744846125ce025472e5ff49","unresolved":false,"context_lines":[{"line_number":336,"context_line":"                                     host\u003dsvc.service.host,"},{"line_number":337,"context_line":"                                     cell_mapping\u003dcell)"},{"line_number":338,"context_line":"            hm.create()"},{"line_number":339,"context_line":"            self.host_mappings[hm.host] \u003d hm"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"        return svc.service"},{"line_number":342,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3a71b18c_7eaf657d","line":339,"updated":"2016-12-08 01:15:51.000000000","message":"Do we actually need to map this? I don\u0027t see self.host_mappings read from anywhere.","commit_id":"3f37b155c2ef8f01733e0156856157662539d3fb"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"050b99a26d4622c7fe39505acb7bd856f5aaad83","unresolved":false,"context_lines":[{"line_number":336,"context_line":"                                     host\u003dsvc.service.host,"},{"line_number":337,"context_line":"                                     cell_mapping\u003dcell)"},{"line_number":338,"context_line":"            hm.create()"},{"line_number":339,"context_line":"            self.host_mappings[hm.host] \u003d hm"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"        return svc.service"},{"line_number":342,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3a71b18c_e858c258","line":339,"in_reply_to":"3a71b18c_7eaf657d","updated":"2016-12-09 18:24:49.000000000","message":"Yep, I use it later:\n\n https://review.openstack.org/#/c/367557/32/nova/tests/unit/conductor/test_conductor.py@1473","commit_id":"3f37b155c2ef8f01733e0156856157662539d3fb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b87b4ddb1c7bda1ae9a4aebce3cee973186cdcc8","unresolved":false,"context_lines":[{"line_number":336,"context_line":"                                     host\u003dsvc.service.host,"},{"line_number":337,"context_line":"                                     cell_mapping\u003dcell)"},{"line_number":338,"context_line":"            hm.create()"},{"line_number":339,"context_line":"            self.host_mappings[hm.host] \u003d hm"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"        return svc.service"},{"line_number":342,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3a71b18c_e3c8e376","line":339,"in_reply_to":"3a71b18c_e858c258","updated":"2016-12-09 18:35:42.000000000","message":"OK, I tend to leave things out until they need to be used in case we change our minds later and then don\u0027t use this, then it\u0027s just debt. But I\u0027ll trust you Dan, just this one time.","commit_id":"3f37b155c2ef8f01733e0156856157662539d3fb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3a311c5e379c62dcb8d19adbf6bac9b3fee06593","unresolved":false,"context_lines":[{"line_number":274,"context_line":"    def _setup_cells(self):"},{"line_number":275,"context_line":"        \"\"\"Setup a normal cellsv2 environment."},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"        This sets up the CellDatabase fixture with two cells, one cell0"},{"line_number":278,"context_line":"        and one normal cell. CellMappings are created for both so that"},{"line_number":279,"context_line":"        cells-aware code can find those two databases."},{"line_number":280,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":10,"id":"3a71b18c_039b1f73","line":277,"range":{"start_line":277,"start_character":25,"end_line":277,"end_character":37},"updated":"2016-12-09 18:37:09.000000000","message":"nit: CellDatabases","commit_id":"979639b21cb55e7d1e585a091281a89933716b67"}],"nova/tests/unit/test_context.py":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"1cb73967caf60b4e497a9c80b09cb897d3ed9734","unresolved":false,"context_lines":[{"line_number":25,"context_line":"class ContextTestCase(test.NoDBTestCase):"},{"line_number":26,"context_line":"    # NOTE(danms): Avoid any cells setup by claiming we will"},{"line_number":27,"context_line":"    # do things ourselves."},{"line_number":28,"context_line":"    USES_DB_SELF \u003d True"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def setUp(self):"},{"line_number":31,"context_line":"        super(ContextTestCase, self).setUp()"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a71b18c_9e6dc434","line":28,"updated":"2016-12-09 19:20:01.000000000","message":"So this is needed because of the target_cell tests, to avoid monkey patching it.","commit_id":"979639b21cb55e7d1e585a091281a89933716b67"}]}
