)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b4bf46151785fd3296cdd4279d4634f25cd1e523","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add functional tests for numa-aware-vswitches"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add tests to ensure everything, from the scheduler to the compute node,"},{"line_number":10,"context_line":"works in tandem. Note that some of these are currently passing when they"},{"line_number":11,"context_line":"should be failing. This will be resolved once the final changes land."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"5f7c97a3_a4b5e3d1","line":9,"range":{"start_line":9,"start_character":32,"end_line":9,"end_character":50},"updated":"2018-07-20 14:34:56.000000000","message":"Yeah...kind of odd to have this functional test before the actual API/scheduler changes are done...","commit_id":"10e948da6cb8cc82b342a8137a370cd1fc9110ac"}],"nova/tests/fixtures.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"1c9a8a1e949bff7af950c5811bbd5a9ff5af1b73","unresolved":false,"context_lines":[{"line_number":1213,"context_line":"            \u0027nova.network.neutronv2.api.API.\u0027"},{"line_number":1214,"context_line":"            \u0027validate_networks\u0027,"},{"line_number":1215,"context_line":"            lambda *args, **kwargs: 1)"},{"line_number":1216,"context_line":"        # TODO(stephenfin): Stop globally stubbing this out"},{"line_number":1217,"context_line":"        self.test.stub_out("},{"line_number":1218,"context_line":"            \u0027nova.network.neutronv2.api.API.\u0027"},{"line_number":1219,"context_line":"            \u0027create_resource_requests\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_cd689bbd","line":1216,"updated":"2018-07-27 08:07:02.000000000","message":"Yeah, I agree https://review.openstack.org/#/c/567268/25/nova/tests/fixtures.py","commit_id":"60616ef5fd4414d9a834fe745ec4f371f990beb2"}],"nova/tests/functional/libvirt/test_numa_servers.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"eb2c6e91f7ecf24f1e859aae342a8a9f128479e6","unresolved":false,"context_lines":[{"line_number":209,"context_line":"           fakelibvirt))"},{"line_number":210,"context_line":"        self.useFixture(fakelibvirt.FakeLibvirtFixture())"},{"line_number":211,"context_line":"        self.useFixture(nova_fixtures.PlacementFixture())"},{"line_number":212,"context_line":"        self.useFixture(nova_fixtures.NeutronFixture(self))"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    def _setup_compute_service(self):"},{"line_number":215,"context_line":"        # we need to mock some libvirt stuff so we start this service in the"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_8d6623ee","line":212,"range":{"start_line":212,"start_character":38,"end_line":212,"end_character":52},"updated":"2018-07-17 15:32:24.000000000","message":"Since you\u0027re extending from _IntegratedTestBase you need to set:\n\nUSE_NEUTRON \u003d True","commit_id":"60616ef5fd4414d9a834fe745ec4f371f990beb2"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"069beb57de1c6101fbc6df4da4cbcb9f82b588ad","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"        # Replace libvirt with fakelibvirt"},{"line_number":43,"context_line":"        self.useFixture(fake_imagebackend.ImageBackendFixture())"},{"line_number":44,"context_line":"        self.useFixture(fixtures.MonkeyPatch("},{"line_number":45,"context_line":"            \u0027nova.virt.libvirt.driver.libvirt_utils\u0027,"},{"line_number":46,"context_line":"            fake_libvirt_utils))"},{"line_number":47,"context_line":"        self.useFixture(fixtures.MonkeyPatch("}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_a492c3fa","line":44,"updated":"2018-07-20 14:58:20.000000000","message":"Unrelated.","commit_id":"10e948da6cb8cc82b342a8137a370cd1fc9110ac"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9a26c57b2f262e10ca235e0e366ac4f2bdd862c0","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"        # Replace libvirt with fakelibvirt"},{"line_number":43,"context_line":"        self.useFixture(fake_imagebackend.ImageBackendFixture())"},{"line_number":44,"context_line":"        self.useFixture(fixtures.MonkeyPatch("},{"line_number":45,"context_line":"            \u0027nova.virt.libvirt.driver.libvirt_utils\u0027,"},{"line_number":46,"context_line":"            fake_libvirt_utils))"},{"line_number":47,"context_line":"        self.useFixture(fixtures.MonkeyPatch("}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_ff912554","line":44,"in_reply_to":"5f7c97a3_a492c3fa","updated":"2018-07-20 15:52:21.000000000","message":"Done","commit_id":"10e948da6cb8cc82b342a8137a370cd1fc9110ac"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"069beb57de1c6101fbc6df4da4cbcb9f82b588ad","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    def _setup_scheduler_service(self):"},{"line_number":65,"context_line":"        self.flags(compute_driver\u003d\u0027libvirt.LibvirtDriver\u0027)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        enabled_filters \u003d CONF.filter_scheduler.enabled_filters + ["},{"line_number":68,"context_line":"            \u0027NUMATopologyFilter\u0027]"},{"line_number":69,"context_line":"        self.flags(driver\u003d\u0027filter_scheduler\u0027, group\u003d\u0027scheduler\u0027)"},{"line_number":70,"context_line":"        self.flags(enabled_filters\u003denabled_filters, group\u003d\u0027filter_scheduler\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_c4957fe4","line":67,"updated":"2018-07-20 14:58:20.000000000","message":"unrelated","commit_id":"10e948da6cb8cc82b342a8137a370cd1fc9110ac"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9a26c57b2f262e10ca235e0e366ac4f2bdd862c0","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    def _setup_scheduler_service(self):"},{"line_number":65,"context_line":"        self.flags(compute_driver\u003d\u0027libvirt.LibvirtDriver\u0027)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        enabled_filters \u003d CONF.filter_scheduler.enabled_filters + ["},{"line_number":68,"context_line":"            \u0027NUMATopologyFilter\u0027]"},{"line_number":69,"context_line":"        self.flags(driver\u003d\u0027filter_scheduler\u0027, group\u003d\u0027scheduler\u0027)"},{"line_number":70,"context_line":"        self.flags(enabled_filters\u003denabled_filters, group\u003d\u0027filter_scheduler\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_1fc9814f","line":67,"in_reply_to":"5f7c97a3_c4957fe4","updated":"2018-07-20 15:52:21.000000000","message":"Done","commit_id":"10e948da6cb8cc82b342a8137a370cd1fc9110ac"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"069beb57de1c6101fbc6df4da4cbcb9f82b588ad","unresolved":false,"context_lines":[{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        self.assertEqual(end_status, found_server[\u0027status\u0027])"},{"line_number":119,"context_line":"        self.addCleanup(self._delete_server, created_server_id)"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        return created_server"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def test_create_server_with_numa_topology(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_c41a5f7a","line":120,"updated":"2018-07-20 14:58:20.000000000","message":"unrelated","commit_id":"10e948da6cb8cc82b342a8137a370cd1fc9110ac"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9a26c57b2f262e10ca235e0e366ac4f2bdd862c0","unresolved":false,"context_lines":[{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        self.assertEqual(end_status, found_server[\u0027status\u0027])"},{"line_number":119,"context_line":"        self.addCleanup(self._delete_server, created_server_id)"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        return created_server"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def test_create_server_with_numa_topology(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_ffcda55d","line":120,"in_reply_to":"5f7c97a3_c41a5f7a","updated":"2018-07-20 15:52:21.000000000","message":"Done","commit_id":"10e948da6cb8cc82b342a8137a370cd1fc9110ac"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"069beb57de1c6101fbc6df4da4cbcb9f82b588ad","unresolved":false,"context_lines":[{"line_number":189,"context_line":"            self._run_build_test(flavor_id, filter_mock, end_status\u003d\u0027ERROR\u0027)"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"class NeutronFixture(nova_fixtures.NeutronFixture):"},{"line_number":193,"context_line":"    \"\"\"A custom variant of the stock neutron fixture with more networks.\"\"\""},{"line_number":194,"context_line":"    network_1 \u003d {"},{"line_number":195,"context_line":"        \u0027id\u0027: \u00273cb9bc59-5699-4588-a4b1-b87f96708bc6\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_bf840e5e","line":192,"range":{"start_line":192,"start_character":6,"end_line":192,"end_character":20},"updated":"2018-07-20 14:58:20.000000000","message":"This is a but confusing since it\u0027s the same name, I\u0027d name it something like NUMAAffinityNeutronFixture or something like that.","commit_id":"10e948da6cb8cc82b342a8137a370cd1fc9110ac"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9a26c57b2f262e10ca235e0e366ac4f2bdd862c0","unresolved":false,"context_lines":[{"line_number":189,"context_line":"            self._run_build_test(flavor_id, filter_mock, end_status\u003d\u0027ERROR\u0027)"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"class NeutronFixture(nova_fixtures.NeutronFixture):"},{"line_number":193,"context_line":"    \"\"\"A custom variant of the stock neutron fixture with more networks.\"\"\""},{"line_number":194,"context_line":"    network_1 \u003d {"},{"line_number":195,"context_line":"        \u0027id\u0027: \u00273cb9bc59-5699-4588-a4b1-b87f96708bc6\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_5fe379d7","line":192,"range":{"start_line":192,"start_character":6,"end_line":192,"end_character":20},"in_reply_to":"5f7c97a3_bf840e5e","updated":"2018-07-20 15:52:21.000000000","message":"Done","commit_id":"10e948da6cb8cc82b342a8137a370cd1fc9110ac"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"069beb57de1c6101fbc6df4da4cbcb9f82b588ad","unresolved":false,"context_lines":[{"line_number":191,"context_line":""},{"line_number":192,"context_line":"class NeutronFixture(nova_fixtures.NeutronFixture):"},{"line_number":193,"context_line":"    \"\"\"A custom variant of the stock neutron fixture with more networks.\"\"\""},{"line_number":194,"context_line":"    network_1 \u003d {"},{"line_number":195,"context_line":"        \u0027id\u0027: \u00273cb9bc59-5699-4588-a4b1-b87f96708bc6\u0027,"},{"line_number":196,"context_line":"        \u0027status\u0027: \u0027ACTIVE\u0027,"},{"line_number":197,"context_line":"        \u0027subnets\u0027: [],"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_ff10464e","line":194,"range":{"start_line":194,"start_character":4,"end_line":194,"end_character":13},"updated":"2018-07-20 14:58:20.000000000","message":"nit: giving these more descriptive names could be nice, like net_physnet_foo, net_physnet_bar, net_tunneled.","commit_id":"10e948da6cb8cc82b342a8137a370cd1fc9110ac"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9a26c57b2f262e10ca235e0e366ac4f2bdd862c0","unresolved":false,"context_lines":[{"line_number":191,"context_line":""},{"line_number":192,"context_line":"class NeutronFixture(nova_fixtures.NeutronFixture):"},{"line_number":193,"context_line":"    \"\"\"A custom variant of the stock neutron fixture with more networks.\"\"\""},{"line_number":194,"context_line":"    network_1 \u003d {"},{"line_number":195,"context_line":"        \u0027id\u0027: \u00273cb9bc59-5699-4588-a4b1-b87f96708bc6\u0027,"},{"line_number":196,"context_line":"        \u0027status\u0027: \u0027ACTIVE\u0027,"},{"line_number":197,"context_line":"        \u0027subnets\u0027: [],"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_7f28b5ec","line":194,"range":{"start_line":194,"start_character":4,"end_line":194,"end_character":13},"in_reply_to":"5f7c97a3_ff10464e","updated":"2018-07-20 15:52:21.000000000","message":"I kept this the same since not overriding this would mean we\u0027d have four networks in the fixture but only use three of them, except for ports and subnets where we\u0027d use the other one... It gets confusing. I did improve the docstring though","commit_id":"10e948da6cb8cc82b342a8137a370cd1fc9110ac"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"069beb57de1c6101fbc6df4da4cbcb9f82b588ad","unresolved":false,"context_lines":[{"line_number":213,"context_line":"    network_3.update({"},{"line_number":214,"context_line":"        \u0027id\u0027: \u0027877a79cc-295b-4b80-9606-092bf132931e\u0027,"},{"line_number":215,"context_line":"        \u0027provider:physical_network\u0027: None,"},{"line_number":216,"context_line":"        \u0027provider:network_type\u0027: \u0027vxlan\u0027,"},{"line_number":217,"context_line":"        \u0027provider:segmentation_id\u0027: 69,"},{"line_number":218,"context_line":"    })"},{"line_number":219,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_e400bb05","line":216,"range":{"start_line":216,"start_character":34,"end_line":216,"end_character":39},"updated":"2018-07-20 14:58:20.000000000","message":"OK so this is our tunneled buddy.","commit_id":"10e948da6cb8cc82b342a8137a370cd1fc9110ac"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"069beb57de1c6101fbc6df4da4cbcb9f82b588ad","unresolved":false,"context_lines":[{"line_number":229,"context_line":"    def setUp(self):"},{"line_number":230,"context_line":"        # We need to enable neutron in this one"},{"line_number":231,"context_line":"        self.flags(physnets\u003d[\u0027foo\u0027, \u0027bar\u0027], group\u003d\u0027neutron\u0027)"},{"line_number":232,"context_line":"        neutron_conf.register_dynamic_opts(CONF)"},{"line_number":233,"context_line":"        self.flags(numa_nodes\u003d[1], group\u003d\u0027neutron_physnet_foo\u0027)"},{"line_number":234,"context_line":"        self.flags(numa_nodes\u003d[0], group\u003d\u0027neutron_physnet_bar\u0027)"},{"line_number":235,"context_line":"        self.flags(numa_nodes\u003d[0, 1], group\u003d\u0027neutron_tunnel\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_5f505a09","line":232,"updated":"2018-07-20 14:58:20.000000000","message":"And I guess the ConfFixture doesn\u0027t help us here - not really sure why you needed to add it to the ConfFixture (or base test case before that) in the previous change if we always have to do this every time we set the flag. In fact, maybe we should check for this in the flags() method...","commit_id":"10e948da6cb8cc82b342a8137a370cd1fc9110ac"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9a26c57b2f262e10ca235e0e366ac4f2bdd862c0","unresolved":false,"context_lines":[{"line_number":229,"context_line":"    def setUp(self):"},{"line_number":230,"context_line":"        # We need to enable neutron in this one"},{"line_number":231,"context_line":"        self.flags(physnets\u003d[\u0027foo\u0027, \u0027bar\u0027], group\u003d\u0027neutron\u0027)"},{"line_number":232,"context_line":"        neutron_conf.register_dynamic_opts(CONF)"},{"line_number":233,"context_line":"        self.flags(numa_nodes\u003d[1], group\u003d\u0027neutron_physnet_foo\u0027)"},{"line_number":234,"context_line":"        self.flags(numa_nodes\u003d[0], group\u003d\u0027neutron_physnet_bar\u0027)"},{"line_number":235,"context_line":"        self.flags(numa_nodes\u003d[0, 1], group\u003d\u0027neutron_tunnel\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_1f20a1f7","line":232,"in_reply_to":"5f7c97a3_5f505a09","updated":"2018-07-20 15:52:21.000000000","message":"I\u0027ll tackle this in the follow up since this affects earlier patches too","commit_id":"10e948da6cb8cc82b342a8137a370cd1fc9110ac"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"069beb57de1c6101fbc6df4da4cbcb9f82b588ad","unresolved":false,"context_lines":[{"line_number":256,"context_line":""},{"line_number":257,"context_line":"        created_server \u003d self.api.post_server(post)"},{"line_number":258,"context_line":"        LOG.debug(\"created_server: %s\", created_server)"},{"line_number":259,"context_line":"        self.assertTrue(created_server[\u0027id\u0027])"},{"line_number":260,"context_line":"        created_server_id \u003d created_server[\u0027id\u0027]"},{"line_number":261,"context_line":"        self.addCleanup(self._delete_server, created_server_id)"},{"line_number":262,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_5fecda26","line":259,"range":{"start_line":259,"start_character":8,"end_line":259,"end_character":45},"updated":"2018-07-20 14:58:20.000000000","message":"this isn\u0027t needed","commit_id":"10e948da6cb8cc82b342a8137a370cd1fc9110ac"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9a26c57b2f262e10ca235e0e366ac4f2bdd862c0","unresolved":false,"context_lines":[{"line_number":256,"context_line":""},{"line_number":257,"context_line":"        created_server \u003d self.api.post_server(post)"},{"line_number":258,"context_line":"        LOG.debug(\"created_server: %s\", created_server)"},{"line_number":259,"context_line":"        self.assertTrue(created_server[\u0027id\u0027])"},{"line_number":260,"context_line":"        created_server_id \u003d created_server[\u0027id\u0027]"},{"line_number":261,"context_line":"        self.addCleanup(self._delete_server, created_server_id)"},{"line_number":262,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_3fe31da2","line":259,"range":{"start_line":259,"start_character":8,"end_line":259,"end_character":45},"in_reply_to":"5f7c97a3_5fecda26","updated":"2018-07-20 15:52:21.000000000","message":"Done","commit_id":"10e948da6cb8cc82b342a8137a370cd1fc9110ac"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"069beb57de1c6101fbc6df4da4cbcb9f82b588ad","unresolved":false,"context_lines":[{"line_number":258,"context_line":"        LOG.debug(\"created_server: %s\", created_server)"},{"line_number":259,"context_line":"        self.assertTrue(created_server[\u0027id\u0027])"},{"line_number":260,"context_line":"        created_server_id \u003d created_server[\u0027id\u0027]"},{"line_number":261,"context_line":"        self.addCleanup(self._delete_server, created_server_id)"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"        # Validate that the server has been created"},{"line_number":264,"context_line":"        found_server \u003d self.api.get_server(created_server_id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_1fdae277","line":261,"range":{"start_line":261,"start_character":8,"end_line":261,"end_character":63},"updated":"2018-07-20 14:58:20.000000000","message":"This isn\u0027t needed - the db is torn down between test cases.","commit_id":"10e948da6cb8cc82b342a8137a370cd1fc9110ac"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9a26c57b2f262e10ca235e0e366ac4f2bdd862c0","unresolved":false,"context_lines":[{"line_number":258,"context_line":"        LOG.debug(\"created_server: %s\", created_server)"},{"line_number":259,"context_line":"        self.assertTrue(created_server[\u0027id\u0027])"},{"line_number":260,"context_line":"        created_server_id \u003d created_server[\u0027id\u0027]"},{"line_number":261,"context_line":"        self.addCleanup(self._delete_server, created_server_id)"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"        # Validate that the server has been created"},{"line_number":264,"context_line":"        found_server \u003d self.api.get_server(created_server_id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_7fed158c","line":261,"range":{"start_line":261,"start_character":8,"end_line":261,"end_character":63},"in_reply_to":"5f7c97a3_1fdae277","updated":"2018-07-20 15:52:21.000000000","message":"Cool. There\u0027s more cleanup needed elsewhere though as this section was mostly a copy-paste job","commit_id":"10e948da6cb8cc82b342a8137a370cd1fc9110ac"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"069beb57de1c6101fbc6df4da4cbcb9f82b588ad","unresolved":false,"context_lines":[{"line_number":260,"context_line":"        created_server_id \u003d created_server[\u0027id\u0027]"},{"line_number":261,"context_line":"        self.addCleanup(self._delete_server, created_server_id)"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"        # Validate that the server has been created"},{"line_number":264,"context_line":"        found_server \u003d self.api.get_server(created_server_id)"},{"line_number":265,"context_line":"        self.assertEqual(created_server_id, found_server[\u0027id\u0027])"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"        # It should also be in the all-servers list"},{"line_number":268,"context_line":"        servers \u003d self.api.get_servers()"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_9fcfd2b1","line":265,"range":{"start_line":263,"start_character":8,"end_line":265,"end_character":63},"updated":"2018-07-20 14:58:20.000000000","message":"This is kind of pointless because we\u0027re using the CastAsCall fixture (setup in the base class) so if post_server failed we\u0027d have already failed by now. So this can be removed.","commit_id":"10e948da6cb8cc82b342a8137a370cd1fc9110ac"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9a26c57b2f262e10ca235e0e366ac4f2bdd862c0","unresolved":false,"context_lines":[{"line_number":260,"context_line":"        created_server_id \u003d created_server[\u0027id\u0027]"},{"line_number":261,"context_line":"        self.addCleanup(self._delete_server, created_server_id)"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"        # Validate that the server has been created"},{"line_number":264,"context_line":"        found_server \u003d self.api.get_server(created_server_id)"},{"line_number":265,"context_line":"        self.assertEqual(created_server_id, found_server[\u0027id\u0027])"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"        # It should also be in the all-servers list"},{"line_number":268,"context_line":"        servers \u003d self.api.get_servers()"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_9f9591e5","line":265,"range":{"start_line":263,"start_character":8,"end_line":265,"end_character":63},"in_reply_to":"5f7c97a3_9fcfd2b1","updated":"2018-07-20 15:52:21.000000000","message":"Done","commit_id":"10e948da6cb8cc82b342a8137a370cd1fc9110ac"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"069beb57de1c6101fbc6df4da4cbcb9f82b588ad","unresolved":false,"context_lines":[{"line_number":269,"context_line":"        server_ids \u003d [s[\u0027id\u0027] for s in servers]"},{"line_number":270,"context_line":"        self.assertIn(created_server_id, server_ids)"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"        return self._wait_for_state_change(found_server, \u0027BUILD\u0027)[\u0027status\u0027]"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    def test_create_server_with_single_physnet(self):"},{"line_number":275,"context_line":"        extra_spec \u003d {\u0027hw:numa_nodes\u0027: \u00271\u0027}"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_5fc5ba8e","line":272,"range":{"start_line":272,"start_character":15,"end_line":272,"end_character":75},"updated":"2018-07-20 14:58:20.000000000","message":"We shouldn\u0027t need this really because as noted above, it\u0027s going to be ACTIVE b/c of the CastAsCall fixture usage.","commit_id":"10e948da6cb8cc82b342a8137a370cd1fc9110ac"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"df2f5ca62e7e0eecc4d4ce7e95bfe1311f609411","unresolved":false,"context_lines":[{"line_number":269,"context_line":"        server_ids \u003d [s[\u0027id\u0027] for s in servers]"},{"line_number":270,"context_line":"        self.assertIn(created_server_id, server_ids)"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"        return self._wait_for_state_change(found_server, \u0027BUILD\u0027)[\u0027status\u0027]"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    def test_create_server_with_single_physnet(self):"},{"line_number":275,"context_line":"        extra_spec \u003d {\u0027hw:numa_nodes\u0027: \u00271\u0027}"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_a8f05167","line":272,"range":{"start_line":272,"start_character":15,"end_line":272,"end_character":75},"in_reply_to":"5f7c97a3_0210464e","updated":"2018-07-20 17:54:50.000000000","message":"I\u0027m pretty sure if there is an error, you get a 500 from post_server because of CastAsCall returning NoValidHost which the POST /servers doesn\u0027t handle. So no I don\u0027t think we can get to ERROR here if scheduling failed and we\u0027re using CastAsCall.","commit_id":"10e948da6cb8cc82b342a8137a370cd1fc9110ac"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"a2366dd6811dd6b06d0c2b187475f09d358e7741","unresolved":false,"context_lines":[{"line_number":269,"context_line":"        server_ids \u003d [s[\u0027id\u0027] for s in servers]"},{"line_number":270,"context_line":"        self.assertIn(created_server_id, server_ids)"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"        return self._wait_for_state_change(found_server, \u0027BUILD\u0027)[\u0027status\u0027]"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    def test_create_server_with_single_physnet(self):"},{"line_number":275,"context_line":"        extra_spec \u003d {\u0027hw:numa_nodes\u0027: \u00271\u0027}"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_0210464e","line":272,"range":{"start_line":272,"start_character":15,"end_line":272,"end_character":75},"in_reply_to":"5f7c97a3_5fc5ba8e","updated":"2018-07-20 15:52:10.000000000","message":"It could be ERROR if something went wrong right?","commit_id":"10e948da6cb8cc82b342a8137a370cd1fc9110ac"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9a26c57b2f262e10ca235e0e366ac4f2bdd862c0","unresolved":false,"context_lines":[{"line_number":269,"context_line":"        server_ids \u003d [s[\u0027id\u0027] for s in servers]"},{"line_number":270,"context_line":"        self.assertIn(created_server_id, server_ids)"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"        return self._wait_for_state_change(found_server, \u0027BUILD\u0027)[\u0027status\u0027]"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    def test_create_server_with_single_physnet(self):"},{"line_number":275,"context_line":"        extra_spec \u003d {\u0027hw:numa_nodes\u0027: \u00271\u0027}"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_dff1c965","line":272,"range":{"start_line":272,"start_character":15,"end_line":272,"end_character":75},"in_reply_to":"5f7c97a3_5fc5ba8e","updated":"2018-07-20 15:52:21.000000000","message":"Something\u0027s happening here because that\u0027s not the case for me. I\u0027m seeing this in the \"build\" status if I remove this","commit_id":"10e948da6cb8cc82b342a8137a370cd1fc9110ac"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"069beb57de1c6101fbc6df4da4cbcb9f82b588ad","unresolved":false,"context_lines":[{"line_number":286,"context_line":"                flavor_id, networks)"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"        self.assertTrue(filter_mock.called)"},{"line_number":289,"context_line":"        self.assertEqual(\u0027ACTIVE\u0027, status)"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"    def test_create_server_with_multiple_physnets(self):"},{"line_number":292,"context_line":"        \"\"\"Test multiple networks split across host NUMA nodes."}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_dfb8ea12","line":289,"updated":"2018-07-20 14:58:20.000000000","message":"don\u0027t need this - if it failed to build we\u0027d be dead already","commit_id":"10e948da6cb8cc82b342a8137a370cd1fc9110ac"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9a26c57b2f262e10ca235e0e366ac4f2bdd862c0","unresolved":false,"context_lines":[{"line_number":286,"context_line":"                flavor_id, networks)"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"        self.assertTrue(filter_mock.called)"},{"line_number":289,"context_line":"        self.assertEqual(\u0027ACTIVE\u0027, status)"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"    def test_create_server_with_multiple_physnets(self):"},{"line_number":292,"context_line":"        \"\"\"Test multiple networks split across host NUMA nodes."}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_9fbef161","line":289,"in_reply_to":"5f7c97a3_dfb8ea12","updated":"2018-07-20 15:52:21.000000000","message":"Odd. I assert on an error state in the following patch (as seen below)","commit_id":"10e948da6cb8cc82b342a8137a370cd1fc9110ac"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"069beb57de1c6101fbc6df4da4cbcb9f82b588ad","unresolved":false,"context_lines":[{"line_number":291,"context_line":"    def test_create_server_with_multiple_physnets(self):"},{"line_number":292,"context_line":"        \"\"\"Test multiple networks split across host NUMA nodes."},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"        This should pass because we\u0027ve the networks requested are split across"},{"line_number":295,"context_line":"        multiple host NUMA nodes but the guest explicitly allows multiple NUMA"},{"line_number":296,"context_line":"        nodes."},{"line_number":297,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_ffb36633","line":294,"range":{"start_line":294,"start_character":32,"end_line":294,"end_character":42},"updated":"2018-07-20 14:58:20.000000000","message":"?","commit_id":"10e948da6cb8cc82b342a8137a370cd1fc9110ac"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9a26c57b2f262e10ca235e0e366ac4f2bdd862c0","unresolved":false,"context_lines":[{"line_number":291,"context_line":"    def test_create_server_with_multiple_physnets(self):"},{"line_number":292,"context_line":"        \"\"\"Test multiple networks split across host NUMA nodes."},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"        This should pass because we\u0027ve the networks requested are split across"},{"line_number":295,"context_line":"        multiple host NUMA nodes but the guest explicitly allows multiple NUMA"},{"line_number":296,"context_line":"        nodes."},{"line_number":297,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_9f62713c","line":294,"range":{"start_line":294,"start_character":32,"end_line":294,"end_character":42},"in_reply_to":"5f7c97a3_ffb36633","updated":"2018-07-20 15:52:21.000000000","message":"Done","commit_id":"10e948da6cb8cc82b342a8137a370cd1fc9110ac"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"069beb57de1c6101fbc6df4da4cbcb9f82b588ad","unresolved":false,"context_lines":[{"line_number":310,"context_line":"                flavor_id, networks)"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"        self.assertTrue(filter_mock.called)"},{"line_number":313,"context_line":"        self.assertEqual(\u0027ACTIVE\u0027, status)"},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"    def test_create_server_with_multiple_physnets_fail(self):"},{"line_number":316,"context_line":"        \"\"\"Test multiple networks split across host NUMA nodes."}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_df4d4a3c","line":313,"updated":"2018-07-20 14:58:20.000000000","message":"same","commit_id":"10e948da6cb8cc82b342a8137a370cd1fc9110ac"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"0716d6c0b1bc28ef7d0f4b4fc7c8e0ebdf7f014b","unresolved":false,"context_lines":[{"line_number":279,"context_line":"                flavor_id, networks)"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"        self.assertTrue(filter_mock.called)"},{"line_number":282,"context_line":"        self.assertEqual(\u0027ACTIVE\u0027, status)"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"    def test_create_server_with_multiple_physnets(self):"},{"line_number":285,"context_line":"        \"\"\"Test multiple networks split across host NUMA nodes."}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_422e3ef9","line":282,"range":{"start_line":282,"start_character":25,"end_line":282,"end_character":33},"updated":"2018-07-20 16:15:21.000000000","message":"Okay actually I\u0027m confused now. I missed that Matt\u0027s point previously was that you were waiting for BUILD. Since you\u0027re waiting for it to be BUILD in _test_create_server_with_networks(), shouldn\u0027t this never be ACTIVE here?\n\nAnd, agreed with Matt on the point that you shouldn\u0027t be waiting for BUILD in there, as we should go through that to ACTIVE (or ERROR, my point) because of CastAsCall.","commit_id":"588da7ad659ee7982a7b435ae968382aea12750b"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"cde17dfc15da3ead503f1410291946d7db958457","unresolved":false,"context_lines":[{"line_number":279,"context_line":"                flavor_id, networks)"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"        self.assertTrue(filter_mock.called)"},{"line_number":282,"context_line":"        self.assertEqual(\u0027ACTIVE\u0027, status)"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"    def test_create_server_with_multiple_physnets(self):"},{"line_number":285,"context_line":"        \"\"\"Test multiple networks split across host NUMA nodes."}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_a2639218","line":282,"range":{"start_line":282,"start_character":25,"end_line":282,"end_character":33},"in_reply_to":"5f7c97a3_422e3ef9","updated":"2018-07-20 16:25:28.000000000","message":"Oh right right. This is calling ServersTestBase._wait_for_state_change(), not the one from integrated_helpers. This one takes the current state and returns when it changes from that value, which is the opposite of the other one. So this behaves like I was initially commenting to Matt... we wait until we get *out* of BUILD state, either to ACTIVE or ERROR, and asserting that we\u0027re ACTIVE and _not_ ERROR is useful, IMHO.","commit_id":"588da7ad659ee7982a7b435ae968382aea12750b"}]}
