)]}'
{"nova/tests/functional/libvirt/test_numa_servers.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"1c87d418494cacff99c075f6dcffa6626dff042b","unresolved":false,"context_lines":[{"line_number":44,"context_line":"                                           self.kB_mem)"},{"line_number":45,"context_line":"        self.numa_topology \u003d topology"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        # update nember of active cpus"},{"line_number":48,"context_line":"        cpu_count \u003d len(topology.cells) * len(topology.cells[0].cpus)"},{"line_number":49,"context_line":"        self.cpus \u003d cpu_count - len(self.disabled_cpus_list)"},{"line_number":50,"context_line":"        return topology"}],"source_content_type":"text/x-python","patch_set":11,"id":"7aaa499b_cb1288b4","line":47,"range":{"start_line":47,"start_character":17,"end_line":47,"end_character":23},"updated":"2015-04-13 20:19:51.000000000","message":"Number?","commit_id":"be260a046bf7e3dcce4339be0fdfdfa2bac27f46"}],"nova/tests/functional/test_servers.py":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"8ee906d5673e1b530c168ed0475a562a5bd6f0a3","unresolved":false,"context_lines":[{"line_number":534,"context_line":"    def _setup_compute_service(self):"},{"line_number":535,"context_line":"        pass"},{"line_number":536,"context_line":""},{"line_number":537,"context_line":"    def _update_fakelibvirt_defaults(self, version, nodes, sockets,"},{"line_number":538,"context_line":"                                     cores, threads, topology):"},{"line_number":539,"context_line":"        fakelibvirt.FAKE_LIBVIRT_VERSION \u003d version"},{"line_number":540,"context_line":"        fakelibvirt.node_sockets \u003d sockets"}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_1db648f9","line":537,"updated":"2015-02-12 16:35:48.000000000","message":"Oh i see now.. some of these tests are running in parallel ?","commit_id":"0040d3f08b917643dd6de75a74718a4717b3e676"},{"author":{"_account_id":8802,"name":"Vladik Romanovsky","email":"vromanso@redhat.com","username":"vladikr"},"change_message_id":"d14e0839fb963dd25807e86d126d1184cc328314","unresolved":false,"context_lines":[{"line_number":534,"context_line":"    def _setup_compute_service(self):"},{"line_number":535,"context_line":"        pass"},{"line_number":536,"context_line":""},{"line_number":537,"context_line":"    def _update_fakelibvirt_defaults(self, version, nodes, sockets,"},{"line_number":538,"context_line":"                                     cores, threads, topology):"},{"line_number":539,"context_line":"        fakelibvirt.FAKE_LIBVIRT_VERSION \u003d version"},{"line_number":540,"context_line":"        fakelibvirt.node_sockets \u003d sockets"}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_86c90428","line":537,"in_reply_to":"da86d52c_1db648f9","updated":"2015-02-12 17:49:48.000000000","message":"Hmm.. maybe, but why are you asking? :)\nThis method is needed in order to set a different topology before starting a compute service..","commit_id":"0040d3f08b917643dd6de75a74718a4717b3e676"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"3aa82c1a8c6e35db52957d936ab1b48061a3d13b","unresolved":false,"context_lines":[{"line_number":534,"context_line":"    def _setup_compute_service(self):"},{"line_number":535,"context_line":"        pass"},{"line_number":536,"context_line":""},{"line_number":537,"context_line":"    def _update_fakelibvirt_defaults(self, version, nodes, sockets,"},{"line_number":538,"context_line":"                                     cores, threads, topology):"},{"line_number":539,"context_line":"        fakelibvirt.FAKE_LIBVIRT_VERSION \u003d version"},{"line_number":540,"context_line":"        fakelibvirt.node_sockets \u003d sockets"}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_fe7b05bc","line":537,"in_reply_to":"da86d52c_86c90428","updated":"2015-02-13 11:46:09.000000000","message":"Because if test_create_server_with_numa_topology and test_create_server_with_numa_fails are executed in a \"same time\" i believe that the excepted behavior of fakelibvirt (topology) will be not consistent. What do you think?","commit_id":"0040d3f08b917643dd6de75a74718a4717b3e676"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"48215685175ca95cb725c02ff631c0ac8c950fdc","unresolved":false,"context_lines":[{"line_number":20,"context_line":"import zlib"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"import fixtures"},{"line_number":23,"context_line":"from oslo.config import cfg"},{"line_number":24,"context_line":"from oslo_log import log as logging"},{"line_number":25,"context_line":"from oslo_utils import timeutils"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9a80dd14_983af332","line":23,"updated":"2015-03-17 14:38:55.000000000","message":"N333  \u0027from oslo_config import cfg\u0027 must be used instead of \u0027from oslo.config import cfg\u0027.","commit_id":"9b94b77e750b8358e3c53b89e2c9e73fe3386637"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"568fa7d36abb3c3048e391cee0fd7b6c3c279548","unresolved":false,"context_lines":[{"line_number":531,"context_line":"        self.useFixture(fixtures.MonkeyPatch("},{"line_number":532,"context_line":"           \u0027nova.virt.libvirt.host.libvirt\u0027,"},{"line_number":533,"context_line":"           fakelibvirt))"},{"line_number":534,"context_line":"        self.useFixture(fakelibvirt.FakeLibvirtFixture())"},{"line_number":535,"context_line":""},{"line_number":536,"context_line":"    def _setup_compute_service(self):"},{"line_number":537,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":8,"id":"9aa53dc9_a1fe4c69","line":534,"updated":"2015-04-07 14:29:42.000000000","message":"Hmm, why doesn\u0027t the other servers test need to make these substitutions?","commit_id":"2bfcef78496d23cb8e7716cdb862dbe83876b10e"},{"author":{"_account_id":8802,"name":"Vladik Romanovsky","email":"vromanso@redhat.com","username":"vladikr"},"change_message_id":"783d3db4edfe2e3e601addb1e52e17a2b486653d","unresolved":false,"context_lines":[{"line_number":531,"context_line":"        self.useFixture(fixtures.MonkeyPatch("},{"line_number":532,"context_line":"           \u0027nova.virt.libvirt.host.libvirt\u0027,"},{"line_number":533,"context_line":"           fakelibvirt))"},{"line_number":534,"context_line":"        self.useFixture(fakelibvirt.FakeLibvirtFixture())"},{"line_number":535,"context_line":""},{"line_number":536,"context_line":"    def _setup_compute_service(self):"},{"line_number":537,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":8,"id":"9aa53dc9_c68a74bf","line":534,"in_reply_to":"9aa53dc9_a1fe4c69","updated":"2015-04-07 19:51:49.000000000","message":"I think none of the tests are testing the whole instance creation path.. but maybe I\u0027m wrong here.","commit_id":"2bfcef78496d23cb8e7716cdb862dbe83876b10e"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"568fa7d36abb3c3048e391cee0fd7b6c3c279548","unresolved":false,"context_lines":[{"line_number":621,"context_line":"        \u003c/topology\u003e\u0027\u0027\u0027"},{"line_number":622,"context_line":""},{"line_number":623,"context_line":"        fake_connection \u003d fakelibvirt.Connection(\u0027qemu:///system\u0027,"},{"line_number":624,"context_line":"                                                 version\u003d1000006)"},{"line_number":625,"context_line":"        fake_connection.host_info.cpu_nodes \u003d 2"},{"line_number":626,"context_line":"        fake_connection.host_info.cpu_sockets \u003d 1"},{"line_number":627,"context_line":"        fake_connection.host_info.cpu_cores \u003d 2"}],"source_content_type":"text/x-python","patch_set":8,"id":"9aa53dc9_616e0431","line":624,"updated":"2015-04-07 14:29:42.000000000","message":"This is where I think we should have subclassed HostInfo to be NumaHostInfo or something, and pass that into the connection here. Stabbing our data into it like below is less than desirable I think.","commit_id":"2bfcef78496d23cb8e7716cdb862dbe83876b10e"},{"author":{"_account_id":8802,"name":"Vladik Romanovsky","email":"vromanso@redhat.com","username":"vladikr"},"change_message_id":"783d3db4edfe2e3e601addb1e52e17a2b486653d","unresolved":false,"context_lines":[{"line_number":621,"context_line":"        \u003c/topology\u003e\u0027\u0027\u0027"},{"line_number":622,"context_line":""},{"line_number":623,"context_line":"        fake_connection \u003d fakelibvirt.Connection(\u0027qemu:///system\u0027,"},{"line_number":624,"context_line":"                                                 version\u003d1000006)"},{"line_number":625,"context_line":"        fake_connection.host_info.cpu_nodes \u003d 2"},{"line_number":626,"context_line":"        fake_connection.host_info.cpu_sockets \u003d 1"},{"line_number":627,"context_line":"        fake_connection.host_info.cpu_cores \u003d 2"}],"source_content_type":"text/x-python","patch_set":8,"id":"9aa53dc9_e601f86b","line":624,"in_reply_to":"9aa53dc9_616e0431","updated":"2015-04-07 19:51:49.000000000","message":"Done","commit_id":"2bfcef78496d23cb8e7716cdb862dbe83876b10e"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"568fa7d36abb3c3048e391cee0fd7b6c3c279548","unresolved":false,"context_lines":[{"line_number":636,"context_line":"            mock.patch(\u0027nova.virt.libvirt.host.Host.get_connection\u0027,"},{"line_number":637,"context_line":"                       return_value\u003dfake_connection),"},{"line_number":638,"context_line":"            mock.patch(\u0027nova.scheduler.filters\u0027"},{"line_number":639,"context_line":"                       \u0027.numa_topology_filter.NUMATopologyFilter.host_passes\u0027,"},{"line_number":640,"context_line":"                       side_effect\u003dhost_pass_mock)) as (conn_mock,"},{"line_number":641,"context_line":"                                                       filter_mock):"},{"line_number":642,"context_line":"            self._run_build_test(flavor_id, filter_mock)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9aa53dc9_c19a7014","line":639,"updated":"2015-04-07 14:29:42.000000000","message":"Note to self: So this tests the libvirt side, but bypasses the numa bits of the scheduler.\n\nSince that is harder for us to test in d-g, I hope we can end up with some many-node functional tests to exercise those pieces.","commit_id":"2bfcef78496d23cb8e7716cdb862dbe83876b10e"},{"author":{"_account_id":8802,"name":"Vladik Romanovsky","email":"vromanso@redhat.com","username":"vladikr"},"change_message_id":"783d3db4edfe2e3e601addb1e52e17a2b486653d","unresolved":false,"context_lines":[{"line_number":636,"context_line":"            mock.patch(\u0027nova.virt.libvirt.host.Host.get_connection\u0027,"},{"line_number":637,"context_line":"                       return_value\u003dfake_connection),"},{"line_number":638,"context_line":"            mock.patch(\u0027nova.scheduler.filters\u0027"},{"line_number":639,"context_line":"                       \u0027.numa_topology_filter.NUMATopologyFilter.host_passes\u0027,"},{"line_number":640,"context_line":"                       side_effect\u003dhost_pass_mock)) as (conn_mock,"},{"line_number":641,"context_line":"                                                       filter_mock):"},{"line_number":642,"context_line":"            self._run_build_test(flavor_id, filter_mock)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9aa53dc9_0684dcd1","line":639,"in_reply_to":"9aa53dc9_c19a7014","updated":"2015-04-07 19:51:49.000000000","message":"It check whether the scheduler NUMATopologyFilter was at least called, on line 572..","commit_id":"2bfcef78496d23cb8e7716cdb862dbe83876b10e"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"12e71f98489f7b2f2e75c3d38039136a76a1f489","unresolved":false,"context_lines":[{"line_number":545,"context_line":"                                        for thread in range(self.cpu_threads)])"},{"line_number":546,"context_line":"                    cell.cpus.append(cpu)"},{"line_number":547,"context_line":""},{"line_number":548,"context_line":"                    cpu_count +\u003d 1"},{"line_number":549,"context_line":"            # Set mempages per nuam cell. if numa_mempages_list is empty"},{"line_number":550,"context_line":"            # we will set only the default 4K pages."},{"line_number":551,"context_line":"            if self.numa_mempages_list:"}],"source_content_type":"text/x-python","patch_set":9,"id":"9aa53dc9_2fa68c10","line":548,"updated":"2015-04-07 23:23:12.000000000","message":"I fear that the above logic for setting the cell configs introduces a substantial risk that we are introducing code that duplicates functionality in nova/virt/hardware.py or nova/virt/libvirt/driver.py -- and the above code isn\u0027t unit tested in the same way that the hardware.py or driver.py module is.\n\nThoughts?","commit_id":"c752143759b0750dbbb236f07d87b9db7c66c1f0"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"2cf1087bb2ce153633d3019d6339a5520f76b8d7","unresolved":false,"context_lines":[{"line_number":545,"context_line":"                                        for thread in range(self.cpu_threads)])"},{"line_number":546,"context_line":"                    cell.cpus.append(cpu)"},{"line_number":547,"context_line":""},{"line_number":548,"context_line":"                    cpu_count +\u003d 1"},{"line_number":549,"context_line":"            # Set mempages per nuam cell. if numa_mempages_list is empty"},{"line_number":550,"context_line":"            # we will set only the default 4K pages."},{"line_number":551,"context_line":"            if self.numa_mempages_list:"}],"source_content_type":"text/x-python","patch_set":9,"id":"9aa53dc9_ea141245","line":548,"in_reply_to":"9aa53dc9_2fa68c10","updated":"2015-04-07 23:45:39.000000000","message":"I see your point. However, I feel like the above is actually fairly simple in that it\u0027s just iterating over ranges. There aren\u0027t a lot of conditionals that generate a lot of edge cases.\n\nAside from doing a few assertEqual() calls on the output of this (as he does in the next patch, at least for one example) I\u0027m not sure what else to do here. We have a lot of test fixtures that aren\u0027t tested as well as the things they mimic.\n\nMaybe vladik has some good ideas about re-using some existing verification code... I\u0027d have to go survey the complexity of the actual driver internals to see if I think reusing them here is a good idea or not...","commit_id":"c752143759b0750dbbb236f07d87b9db7c66c1f0"},{"author":{"_account_id":8802,"name":"Vladik Romanovsky","email":"vromanso@redhat.com","username":"vladikr"},"change_message_id":"2b9d5ef39af9dac6533f482c08c26ff16987f38b","unresolved":false,"context_lines":[{"line_number":545,"context_line":"                                        for thread in range(self.cpu_threads)])"},{"line_number":546,"context_line":"                    cell.cpus.append(cpu)"},{"line_number":547,"context_line":""},{"line_number":548,"context_line":"                    cpu_count +\u003d 1"},{"line_number":549,"context_line":"            # Set mempages per nuam cell. if numa_mempages_list is empty"},{"line_number":550,"context_line":"            # we will set only the default 4K pages."},{"line_number":551,"context_line":"            if self.numa_mempages_list:"}],"source_content_type":"text/x-python","patch_set":9,"id":"9aa53dc9_c90f1be0","line":548,"in_reply_to":"9aa53dc9_ea141245","updated":"2015-04-08 01:26:24.000000000","message":"I think here is only one place, in libvirt/test_driver.py, _fake_caps_numa_topology(), that does something similar..\n\nI could maybe move _gen_numa_topology back to fakelibvirt, make it a HostInfo classmethod and test it in test_fakelibvirt.py. Then, in another patch try to use it instead of _fake_caps_numa_topology ?\ntest_driver.py is already importing fakelibvirt.","commit_id":"c752143759b0750dbbb236f07d87b9db7c66c1f0"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"12e71f98489f7b2f2e75c3d38039136a76a1f489","unresolved":false,"context_lines":[{"line_number":546,"context_line":"                    cell.cpus.append(cpu)"},{"line_number":547,"context_line":""},{"line_number":548,"context_line":"                    cpu_count +\u003d 1"},{"line_number":549,"context_line":"            # Set mempages per nuam cell. if numa_mempages_list is empty"},{"line_number":550,"context_line":"            # we will set only the default 4K pages."},{"line_number":551,"context_line":"            if self.numa_mempages_list:"},{"line_number":552,"context_line":"                mempages \u003d self.numa_mempages_list[cell_count]"}],"source_content_type":"text/x-python","patch_set":9,"id":"9aa53dc9_59bd1e67","line":549,"updated":"2015-04-07 23:23:12.000000000","message":"s/nuam/NUMA","commit_id":"c752143759b0750dbbb236f07d87b9db7c66c1f0"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"12e71f98489f7b2f2e75c3d38039136a76a1f489","unresolved":false,"context_lines":[{"line_number":558,"context_line":"            topology.cells.append(cell)"},{"line_number":559,"context_line":"        self.numa_topology \u003d topology"},{"line_number":560,"context_line":""},{"line_number":561,"context_line":"        # update nember of active cpus"},{"line_number":562,"context_line":"        self.cpus \u003d cpu_count - len(self.disabled_cpus_list)"},{"line_number":563,"context_line":"        return topology"},{"line_number":564,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"9aa53dc9_5964fe20","line":561,"updated":"2015-04-07 23:23:12.000000000","message":"s/nember/number","commit_id":"c752143759b0750dbbb236f07d87b9db7c66c1f0"}],"nova/tests/unit/virt/libvirt/fakelibvirt.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"568fa7d36abb3c3048e391cee0fd7b6c3c279548","unresolved":false,"context_lines":[{"line_number":864,"context_line":"        total_cpus \u003d active_cpus + len(self.host_info.disabled_cpus_list)"},{"line_number":865,"context_line":"        cpu_map \u003d [True if cpu_num not in self.host_info.disabled_cpus_list"},{"line_number":866,"context_line":"                   else False for cpu_num in range(total_cpus)]"},{"line_number":867,"context_line":"        return (total_cpus, cpu_map, active_cpus)"},{"line_number":868,"context_line":""},{"line_number":869,"context_line":"    def getCapabilities(self):"},{"line_number":870,"context_line":"        \"\"\"Return spoofed capabilities.\"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"9aa53dc9_c136f002","line":867,"updated":"2015-04-07 14:29:42.000000000","message":"I think we could put this into the base patch that adds the HostInfo object, and then just override the disabled_cpus_list in our NumaHostInfo() object, right? That seems cleaner to me than coming back to re-modify fakelibvirt again.","commit_id":"2bfcef78496d23cb8e7716cdb862dbe83876b10e"},{"author":{"_account_id":8802,"name":"Vladik Romanovsky","email":"vromanso@redhat.com","username":"vladikr"},"change_message_id":"783d3db4edfe2e3e601addb1e52e17a2b486653d","unresolved":false,"context_lines":[{"line_number":864,"context_line":"        total_cpus \u003d active_cpus + len(self.host_info.disabled_cpus_list)"},{"line_number":865,"context_line":"        cpu_map \u003d [True if cpu_num not in self.host_info.disabled_cpus_list"},{"line_number":866,"context_line":"                   else False for cpu_num in range(total_cpus)]"},{"line_number":867,"context_line":"        return (total_cpus, cpu_map, active_cpus)"},{"line_number":868,"context_line":""},{"line_number":869,"context_line":"    def getCapabilities(self):"},{"line_number":870,"context_line":"        \"\"\"Return spoofed capabilities.\"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"9aa53dc9_6c5cb425","line":867,"in_reply_to":"9aa53dc9_c136f002","updated":"2015-04-07 19:51:49.000000000","message":"Done","commit_id":"2bfcef78496d23cb8e7716cdb862dbe83876b10e"}]}
