)]}'
{"nova/conf/zvm.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5dac8c0b2015f491e71c0e7be080be4ee187a35d","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"The z/VM driver relies on communication between the instance and cloud"},{"line_number":51,"context_line":"connector. After an instance is created, it must have enough time to wait"},{"line_number":52,"context_line":"all the network info is written into the user direct. The driver will keep"},{"line_number":53,"context_line":"rechecking network status to the instance for this timeout. If setting"},{"line_number":54,"context_line":"network failed, it will notify the user that starting the instance failed"},{"line_number":55,"context_line":"and put the instance in ERROR state. The underlying z/VM guest will then be"}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_ac4a37a9","line":52,"range":{"start_line":52,"start_character":0,"end_line":52,"end_character":52},"updated":"2018-03-21 16:00:11.000000000","message":"\"...for all the network info to be written into the user directory\" ?\n\n(Is \"directory\" right?)","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"0b6f6ed2045277d15d370961cb361ddca33bc9d3","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"The z/VM driver relies on communication between the instance and cloud"},{"line_number":51,"context_line":"connector. After an instance is created, it must have enough time to wait"},{"line_number":52,"context_line":"all the network info is written into the user direct. The driver will keep"},{"line_number":53,"context_line":"rechecking network status to the instance for this timeout. If setting"},{"line_number":54,"context_line":"network failed, it will notify the user that starting the instance failed"},{"line_number":55,"context_line":"and put the instance in ERROR state. The underlying z/VM guest will then be"}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_b4b7cf86","line":52,"range":{"start_line":52,"start_character":0,"end_line":52,"end_character":52},"in_reply_to":"df7087c5_ac4a37a9","updated":"2018-03-22 08:52:28.000000000","message":"yes ,user directory","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f6bed38e2927805bad2e74ab89a5547a6d36aea7","unresolved":false,"context_lines":[{"line_number":41,"context_line":"               help\u003d\"\"\""},{"line_number":42,"context_line":"The path at which images will be stored (snapshot, deploy, etc)."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"The image used to deploy or image captured from instance need to be"},{"line_number":45,"context_line":"stored in local disk of compute node host. This configuration identifies"},{"line_number":46,"context_line":"the directory location."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"Possible values:"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_ad16c0a6","line":45,"range":{"start_line":44,"start_character":0,"end_line":45,"end_character":41},"updated":"2018-04-09 20:34:04.000000000","message":"Suggest reword:\n\nImages used for deploy and images captured via snapshot need to be stored on the local disk of the compute host.","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"f4e1032b77822972a7d758f0d29934a4b731053b","unresolved":false,"context_lines":[{"line_number":41,"context_line":"               help\u003d\"\"\""},{"line_number":42,"context_line":"The path at which images will be stored (snapshot, deploy, etc)."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"The image used to deploy or image captured from instance need to be"},{"line_number":45,"context_line":"stored in local disk of compute node host. This configuration identifies"},{"line_number":46,"context_line":"the directory location."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"Possible values:"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_03d451bc","line":45,"range":{"start_line":44,"start_character":0,"end_line":45,"end_character":41},"in_reply_to":"bf659307_ad16c0a6","updated":"2018-04-10 08:05:34.000000000","message":"ok, will do","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f6bed38e2927805bad2e74ab89a5547a6d36aea7","unresolved":false,"context_lines":[{"line_number":46,"context_line":"the directory location."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"Possible values:"},{"line_number":49,"context_line":"    A path in host that running compute service."},{"line_number":50,"context_line":"\"\"\"),"},{"line_number":51,"context_line":"    cfg.IntOpt(\u0027reachable_timeout\u0027,"},{"line_number":52,"context_line":"               default\u003d300,"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_2d671054","line":49,"range":{"start_line":49,"start_character":4,"end_line":49,"end_character":47},"updated":"2018-04-09 20:34:04.000000000","message":"Suggest reword:\n\nA file system path on the host running the compute service.","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"f4e1032b77822972a7d758f0d29934a4b731053b","unresolved":false,"context_lines":[{"line_number":46,"context_line":"the directory location."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"Possible values:"},{"line_number":49,"context_line":"    A path in host that running compute service."},{"line_number":50,"context_line":"\"\"\"),"},{"line_number":51,"context_line":"    cfg.IntOpt(\u0027reachable_timeout\u0027,"},{"line_number":52,"context_line":"               default\u003d300,"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_43f32974","line":49,"range":{"start_line":49,"start_character":4,"end_line":49,"end_character":47},"in_reply_to":"bf659307_2d671054","updated":"2018-04-10 08:05:34.000000000","message":"Done","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f6bed38e2927805bad2e74ab89a5547a6d36aea7","unresolved":false,"context_lines":[{"line_number":54,"context_line":"Timeout (seconds) to wait for an instance to start."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"The z/VM driver relies on communication between the instance and cloud"},{"line_number":57,"context_line":"connector. After an instance is created, it must have enough time to wait"},{"line_number":58,"context_line":"all the network info is written into the user directory. The driver will keep"},{"line_number":59,"context_line":"rechecking network status to the instance for this timeout. If setting"},{"line_number":60,"context_line":"network failed, it will notify the user that starting the instance failed"},{"line_number":61,"context_line":"and put the instance in ERROR state. The underlying z/VM guest will then be"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_4dd044ca","line":58,"range":{"start_line":57,"start_character":69,"end_line":58,"end_character":31},"updated":"2018-04-09 20:34:04.000000000","message":"wait for all the network info to be written","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"f4e1032b77822972a7d758f0d29934a4b731053b","unresolved":false,"context_lines":[{"line_number":54,"context_line":"Timeout (seconds) to wait for an instance to start."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"The z/VM driver relies on communication between the instance and cloud"},{"line_number":57,"context_line":"connector. After an instance is created, it must have enough time to wait"},{"line_number":58,"context_line":"all the network info is written into the user directory. The driver will keep"},{"line_number":59,"context_line":"rechecking network status to the instance for this timeout. If setting"},{"line_number":60,"context_line":"network failed, it will notify the user that starting the instance failed"},{"line_number":61,"context_line":"and put the instance in ERROR state. The underlying z/VM guest will then be"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_23f07567","line":58,"range":{"start_line":57,"start_character":69,"end_line":58,"end_character":31},"in_reply_to":"bf659307_4dd044ca","updated":"2018-04-10 08:05:34.000000000","message":"Done","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"cee27323d66147e39e3e15cc56f635c38420030a","unresolved":false,"context_lines":[{"line_number":40,"context_line":"A string, it must be a path to a CA bundle to use."},{"line_number":41,"context_line":"\"\"\"),"},{"line_number":42,"context_line":"    cfg.StrOpt(\u0027image_tmp_path\u0027,"},{"line_number":43,"context_line":"               default\u003d\u0027/var/lib/nova/images\u0027,"},{"line_number":44,"context_line":"               help\u003d\"\"\""},{"line_number":45,"context_line":"The path at which images will be stored (snapshot, deploy, etc)."},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":57,"id":"5f7c97a3_ae7d261f","line":43,"range":{"start_line":43,"start_character":24,"end_line":43,"end_character":44},"updated":"2018-07-04 07:47:47.000000000","message":"This can be configurable like this https://github.com/openstack/nova/blob/master/nova/conf/compute.py#L500 ?","commit_id":"4cff3cadb7d7b4ccd3946b4efa2e3606e3aeb776"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"a1f6b1afc1c970f6ea15e84a1069df564ad27fea","unresolved":false,"context_lines":[{"line_number":40,"context_line":"A string, it must be a path to a CA bundle to use."},{"line_number":41,"context_line":"\"\"\"),"},{"line_number":42,"context_line":"    cfg.StrOpt(\u0027image_tmp_path\u0027,"},{"line_number":43,"context_line":"               default\u003d\u0027/var/lib/nova/images\u0027,"},{"line_number":44,"context_line":"               help\u003d\"\"\""},{"line_number":45,"context_line":"The path at which images will be stored (snapshot, deploy, etc)."},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":57,"id":"5f7c97a3_70f7db5b","line":43,"range":{"start_line":43,"start_character":24,"end_line":43,"end_character":44},"in_reply_to":"5f7c97a3_ae7d261f","updated":"2018-07-05 06:12:51.000000000","message":"yes,  indeed, will update","commit_id":"4cff3cadb7d7b4ccd3946b4efa2e3606e3aeb776"}],"nova/tests/unit/virt/zvm/test_configdrive.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5dac8c0b2015f491e71c0e7be080be4ee187a35d","unresolved":false,"context_lines":[{"line_number":51,"context_line":"            self.assertTrue(os.path.exists(self._file_name))"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        finally:"},{"line_number":54,"context_line":"            fileutils.remove_path_on_error(self._file_path)"}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_97c5003f","line":54,"range":{"start_line":54,"start_character":22,"end_line":54,"end_character":42},"updated":"2018-03-21 16:00:11.000000000","message":"I would think you would want to remove the path no matter what.  I would do that in a tearDown method.","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"0b6f6ed2045277d15d370961cb361ddca33bc9d3","unresolved":false,"context_lines":[{"line_number":51,"context_line":"            self.assertTrue(os.path.exists(self._file_name))"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        finally:"},{"line_number":54,"context_line":"            fileutils.remove_path_on_error(self._file_path)"}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_f44b0784","line":54,"range":{"start_line":54,"start_character":22,"end_line":54,"end_character":42},"in_reply_to":"df7087c5_97c5003f","updated":"2018-03-22 08:52:28.000000000","message":"good point, will do","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ffe1b2668700b3083970f010bbcf84073f879d67","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def tearDown(self):"},{"line_number":43,"context_line":"        super(ZVMConfigDriveTestCase, self).tearDown()"},{"line_number":44,"context_line":"        fileutils.remove_path_on_error(self._file_path)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def test_create_configdrive_tgz(self):"},{"line_number":47,"context_line":"        fileutils.ensure_tree(self._file_path)"}],"source_content_type":"text/x-python","patch_set":17,"id":"bf659307_984ef5bf","line":44,"range":{"start_line":44,"start_character":18,"end_line":44,"end_character":38},"updated":"2018-03-23 16:31:33.000000000","message":"remove_path_on_error is a context manager which only attempts to delete the file if an exception is raised in the context.  This should use something which removes the entire subtree (not just the file) regardless of error.","commit_id":"f1d806643673a41628939970bfb27aa431f0ba04"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"7db31eb88d1790222755205b0ff52db2b25c7cf3","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def tearDown(self):"},{"line_number":43,"context_line":"        super(ZVMConfigDriveTestCase, self).tearDown()"},{"line_number":44,"context_line":"        fileutils.remove_path_on_error(self._file_path)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def test_create_configdrive_tgz(self):"},{"line_number":47,"context_line":"        fileutils.ensure_tree(self._file_path)"}],"source_content_type":"text/x-python","patch_set":17,"id":"bf659307_743ba8ea","line":44,"range":{"start_line":44,"start_character":18,"end_line":44,"end_character":38},"in_reply_to":"bf659307_984ef5bf","updated":"2018-03-27 06:10:17.000000000","message":"right, will make change","commit_id":"f1d806643673a41628939970bfb27aa431f0ba04"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"6d42d63b9480b020755bc965cf6383ec827f21a7","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def tearDown(self):"},{"line_number":45,"context_line":"        super(ZVMConfigDriveTestCase, self).tearDown()"},{"line_number":46,"context_line":"        shutil.rmtree(self._file_path)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def test_create_configdrive_tgz(self):"},{"line_number":49,"context_line":"        fileutils.ensure_tree(self._file_path)"}],"source_content_type":"text/x-python","patch_set":21,"id":"bf659307_7af59882","line":46,"range":{"start_line":46,"start_character":15,"end_line":46,"end_character":21},"updated":"2018-03-28 18:58:25.000000000","message":"use ignore_errors\u003dTrue","commit_id":"8c97de265e1c4ca02cff3fc93443cc23c8a1c8c3"}],"nova/tests/unit/virt/zvm/test_driver.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5dac8c0b2015f491e71c0e7be080be4ee187a35d","unresolved":false,"context_lines":[{"line_number":418,"context_line":"        wait_ready.assert_called_once_with(_inst)"},{"line_number":419,"context_line":"        call.assert_any_call(\u0027guest_start\u0027, _inst[\u0027name\u0027])"},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"    @mock.patch(\u0027nova.virt.zvm.driver.ZVMDriver._nic_coupled\u0027)"},{"line_number":422,"context_line":"    @mock.patch(\u0027nova.virt.zvm.utils.zVMConnectorRequestHandler.call\u0027)"},{"line_number":423,"context_line":"    def test_private_wait_network_ready(self, call, nic_coupled):"},{"line_number":424,"context_line":"        call_resp \u003d []"}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_578a081b","line":421,"range":{"start_line":421,"start_character":48,"end_line":421,"end_character":60},"updated":"2018-03-21 16:00:11.000000000","message":"Oh, so you can mock it.\n\nMeh, seems like that would be easy enough to get around.","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8e123d66dbc98dc18a26633888ed2753d0e830f2","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        self.flags(my_ip\u003d\u0027192.168.1.1\u0027,"},{"line_number":38,"context_line":"                   instance_name_template\u003d\u0027abc%05d\u0027)"},{"line_number":39,"context_line":"        self.flags(cloud_connector_url\u003d\u0027https://1.1.1.1:1111\u0027, group\u003d\u0027zvm\u0027)"},{"line_number":40,"context_line":"        with test.nested("},{"line_number":41,"context_line":"            mock.patch(\u0027nova.virt.zvm.utils.ConnectorClient.call\u0027),"},{"line_number":42,"context_line":"            mock.patch(\u0027pwd.getpwuid\u0027),"},{"line_number":43,"context_line":"        ) as (mcall, getpwuid):"},{"line_number":44,"context_line":"            getpwuid.return_value \u003d mock.Mock(pw_name\u003d\u0027test\u0027)"},{"line_number":45,"context_line":"            mcall.return_value \u003d {\u0027hypervisor_hostname\u0027: \u0027TESTHOST\u0027,"},{"line_number":46,"context_line":"                                  \u0027ipl_time\u0027: \u0027IPL at 11/14/17 10:47:44 EST\u0027}"}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_f1a96c7b","line":43,"range":{"start_line":40,"start_character":8,"end_line":43,"end_character":31},"updated":"2018-05-31 22:05:07.000000000","message":"You don\u0027t need test.nested.","commit_id":"96a49f21703d9605759dfecde23a94a3b7fbc094"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"706b05bab8a6be87cea6322cf740131d68569efc","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        self.flags(my_ip\u003d\u0027192.168.1.1\u0027,"},{"line_number":38,"context_line":"                   instance_name_template\u003d\u0027abc%05d\u0027)"},{"line_number":39,"context_line":"        self.flags(cloud_connector_url\u003d\u0027https://1.1.1.1:1111\u0027, group\u003d\u0027zvm\u0027)"},{"line_number":40,"context_line":"        with test.nested("},{"line_number":41,"context_line":"            mock.patch(\u0027nova.virt.zvm.utils.ConnectorClient.call\u0027),"},{"line_number":42,"context_line":"            mock.patch(\u0027pwd.getpwuid\u0027),"},{"line_number":43,"context_line":"        ) as (mcall, getpwuid):"},{"line_number":44,"context_line":"            getpwuid.return_value \u003d mock.Mock(pw_name\u003d\u0027test\u0027)"},{"line_number":45,"context_line":"            mcall.return_value \u003d {\u0027hypervisor_hostname\u0027: \u0027TESTHOST\u0027,"},{"line_number":46,"context_line":"                                  \u0027ipl_time\u0027: \u0027IPL at 11/14/17 10:47:44 EST\u0027}"}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_a57e4a67","line":43,"range":{"start_line":40,"start_character":8,"end_line":43,"end_character":31},"in_reply_to":"5f7c97a3_f1a96c7b","updated":"2018-06-01 05:03:41.000000000","message":"Done","commit_id":"96a49f21703d9605759dfecde23a94a3b7fbc094"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8e123d66dbc98dc18a26633888ed2753d0e830f2","unresolved":false,"context_lines":[{"line_number":41,"context_line":"            mock.patch(\u0027nova.virt.zvm.utils.ConnectorClient.call\u0027),"},{"line_number":42,"context_line":"            mock.patch(\u0027pwd.getpwuid\u0027),"},{"line_number":43,"context_line":"        ) as (mcall, getpwuid):"},{"line_number":44,"context_line":"            getpwuid.return_value \u003d mock.Mock(pw_name\u003d\u0027test\u0027)"},{"line_number":45,"context_line":"            mcall.return_value \u003d {\u0027hypervisor_hostname\u0027: \u0027TESTHOST\u0027,"},{"line_number":46,"context_line":"                                  \u0027ipl_time\u0027: \u0027IPL at 11/14/17 10:47:44 EST\u0027}"},{"line_number":47,"context_line":"            self._driver \u003d zvmdriver.ZVMDriver(fake.FakeVirtAPI())"},{"line_number":48,"context_line":"            self._hypervisor \u003d self._driver._hypervisor"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_51cdc05a","line":46,"range":{"start_line":44,"start_character":0,"end_line":46,"end_character":77},"updated":"2018-05-31 22:05:07.000000000","message":"You can embed these as mock.patch args.","commit_id":"96a49f21703d9605759dfecde23a94a3b7fbc094"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"706b05bab8a6be87cea6322cf740131d68569efc","unresolved":false,"context_lines":[{"line_number":41,"context_line":"            mock.patch(\u0027nova.virt.zvm.utils.ConnectorClient.call\u0027),"},{"line_number":42,"context_line":"            mock.patch(\u0027pwd.getpwuid\u0027),"},{"line_number":43,"context_line":"        ) as (mcall, getpwuid):"},{"line_number":44,"context_line":"            getpwuid.return_value \u003d mock.Mock(pw_name\u003d\u0027test\u0027)"},{"line_number":45,"context_line":"            mcall.return_value \u003d {\u0027hypervisor_hostname\u0027: \u0027TESTHOST\u0027,"},{"line_number":46,"context_line":"                                  \u0027ipl_time\u0027: \u0027IPL at 11/14/17 10:47:44 EST\u0027}"},{"line_number":47,"context_line":"            self._driver \u003d zvmdriver.ZVMDriver(fake.FakeVirtAPI())"},{"line_number":48,"context_line":"            self._hypervisor \u003d self._driver._hypervisor"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_6594b28b","line":46,"range":{"start_line":44,"start_character":0,"end_line":46,"end_character":77},"in_reply_to":"5f7c97a3_51cdc05a","updated":"2018-06-01 05:03:41.000000000","message":"Done","commit_id":"96a49f21703d9605759dfecde23a94a3b7fbc094"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8e123d66dbc98dc18a26633888ed2753d0e830f2","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        self._instance.flavor \u003d self._flavor"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        self._eph_disks \u003d [{\u0027guest_format\u0027: u\u0027ext3\u0027,"},{"line_number":69,"context_line":"                      \u0027device_name\u0027: u\u0027/dev/sdb\u0027,"},{"line_number":70,"context_line":"                      \u0027disk_bus\u0027: None,"},{"line_number":71,"context_line":"                      \u0027device_type\u0027: None,"},{"line_number":72,"context_line":"                      \u0027size\u0027: 1},"}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_b12c5402","line":69,"updated":"2018-05-31 22:05:07.000000000","message":"weird indent","commit_id":"96a49f21703d9605759dfecde23a94a3b7fbc094"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"706b05bab8a6be87cea6322cf740131d68569efc","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        self._instance.flavor \u003d self._flavor"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        self._eph_disks \u003d [{\u0027guest_format\u0027: u\u0027ext3\u0027,"},{"line_number":69,"context_line":"                      \u0027device_name\u0027: u\u0027/dev/sdb\u0027,"},{"line_number":70,"context_line":"                      \u0027disk_bus\u0027: None,"},{"line_number":71,"context_line":"                      \u0027device_type\u0027: None,"},{"line_number":72,"context_line":"                      \u0027size\u0027: 1},"}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_85546eff","line":69,"in_reply_to":"5f7c97a3_b12c5402","updated":"2018-06-01 05:03:41.000000000","message":"Done","commit_id":"96a49f21703d9605759dfecde23a94a3b7fbc094"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8e123d66dbc98dc18a26633888ed2753d0e830f2","unresolved":false,"context_lines":[{"line_number":138,"context_line":"    def test_driver_template_validation(self):"},{"line_number":139,"context_line":"        self.flags(instance_name_template\u003d\u0027abc%6d\u0027)"},{"line_number":140,"context_line":"        self.assertRaises(exception.ZVMDriverException,"},{"line_number":141,"context_line":"                          self._driver._validate_options)"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    @mock.patch(\u0027nova.virt.zvm.guest.Guest.get_info\u0027)"},{"line_number":144,"context_line":"    def test_get_info(self, mock_get):"}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_111ae8c4","line":141,"updated":"2018-05-31 22:05:07.000000000","message":"and one for when CONF.zvm.cloud_connector_url is unset","commit_id":"96a49f21703d9605759dfecde23a94a3b7fbc094"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"706b05bab8a6be87cea6322cf740131d68569efc","unresolved":false,"context_lines":[{"line_number":138,"context_line":"    def test_driver_template_validation(self):"},{"line_number":139,"context_line":"        self.flags(instance_name_template\u003d\u0027abc%6d\u0027)"},{"line_number":140,"context_line":"        self.assertRaises(exception.ZVMDriverException,"},{"line_number":141,"context_line":"                          self._driver._validate_options)"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    @mock.patch(\u0027nova.virt.zvm.guest.Guest.get_info\u0027)"},{"line_number":144,"context_line":"    def test_get_info(self, mock_get):"}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_45b09643","line":141,"in_reply_to":"5f7c97a3_111ae8c4","updated":"2018-06-01 05:03:41.000000000","message":"will this same to line 124\u0027s test?","commit_id":"96a49f21703d9605759dfecde23a94a3b7fbc094"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ff70b6e8ede2bcbed793dc710996956b1be8128b","unresolved":false,"context_lines":[{"line_number":138,"context_line":"    def test_driver_template_validation(self):"},{"line_number":139,"context_line":"        self.flags(instance_name_template\u003d\u0027abc%6d\u0027)"},{"line_number":140,"context_line":"        self.assertRaises(exception.ZVMDriverException,"},{"line_number":141,"context_line":"                          self._driver._validate_options)"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    @mock.patch(\u0027nova.virt.zvm.guest.Guest.get_info\u0027)"},{"line_number":144,"context_line":"    def test_get_info(self, mock_get):"}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_9f1831d3","line":141,"in_reply_to":"5f7c97a3_45b09643","updated":"2018-06-01 16:26:09.000000000","message":"Sorry, yes, I missed it.","commit_id":"96a49f21703d9605759dfecde23a94a3b7fbc094"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8e123d66dbc98dc18a26633888ed2753d0e830f2","unresolved":false,"context_lines":[{"line_number":163,"context_line":"        self._driver._get_image_info(\u0027context\u0027, \u0027image_meta_id\u0027, \u0027os_distro\u0027)"},{"line_number":164,"context_line":"        image_import.assert_called_once_with(\u0027context\u0027, \u0027image_meta_id\u0027,"},{"line_number":165,"context_line":"                                             \u0027os_distro\u0027)"},{"line_number":166,"context_line":"        call.assert_has_calls(["},{"line_number":167,"context_line":"            mock.call(\u0027image_query\u0027, imagename\u003d\u0027image_meta_id\u0027),"},{"line_number":168,"context_line":"            mock.call(\u0027image_query\u0027, imagename\u003d\u0027image_meta_id\u0027)"},{"line_number":169,"context_line":"        ])"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    @mock.patch(\u0027nova.virt.zvm.utils.ConnectorClient.call\u0027)"},{"line_number":172,"context_line":"    def test_private_get_image_info_exist(self, call):"}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_915cb87d","line":169,"range":{"start_line":166,"start_character":30,"end_line":169,"end_character":9},"updated":"2018-05-31 22:05:07.000000000","message":"or\n\n [mock.call(...)] * 2","commit_id":"96a49f21703d9605759dfecde23a94a3b7fbc094"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"706b05bab8a6be87cea6322cf740131d68569efc","unresolved":false,"context_lines":[{"line_number":163,"context_line":"        self._driver._get_image_info(\u0027context\u0027, \u0027image_meta_id\u0027, \u0027os_distro\u0027)"},{"line_number":164,"context_line":"        image_import.assert_called_once_with(\u0027context\u0027, \u0027image_meta_id\u0027,"},{"line_number":165,"context_line":"                                             \u0027os_distro\u0027)"},{"line_number":166,"context_line":"        call.assert_has_calls(["},{"line_number":167,"context_line":"            mock.call(\u0027image_query\u0027, imagename\u003d\u0027image_meta_id\u0027),"},{"line_number":168,"context_line":"            mock.call(\u0027image_query\u0027, imagename\u003d\u0027image_meta_id\u0027)"},{"line_number":169,"context_line":"        ])"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    @mock.patch(\u0027nova.virt.zvm.utils.ConnectorClient.call\u0027)"},{"line_number":172,"context_line":"    def test_private_get_image_info_exist(self, call):"}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_05485e59","line":169,"range":{"start_line":166,"start_character":30,"end_line":169,"end_character":9},"in_reply_to":"5f7c97a3_915cb87d","updated":"2018-06-01 05:03:41.000000000","message":"Done","commit_id":"96a49f21703d9605759dfecde23a94a3b7fbc094"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8e123d66dbc98dc18a26633888ed2753d0e830f2","unresolved":false,"context_lines":[{"line_number":182,"context_line":"        disk_list \u003d [{\u0027is_boot_disk\u0027: True, \u0027size\u0027: \u00273g\u0027}]"},{"line_number":183,"context_line":"        eph_disk_list \u003d [{\u0027format\u0027: u\u0027ext3\u0027, \u0027size\u0027: \u00271g\u0027},"},{"line_number":184,"context_line":"                         {\u0027format\u0027: u\u0027ext3\u0027, \u0027size\u0027: \u00272g\u0027}]"},{"line_number":185,"context_line":"        _inst \u003d copy.copy(self._instance)"},{"line_number":186,"context_line":"        _bdi \u003d copy.copy(self._block_device_info)"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"        if has_get_root_units:"}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_f14c0cc9","line":185,"range":{"start_line":185,"start_character":21,"end_line":185,"end_character":25},"updated":"2018-05-31 22:05:07.000000000","message":"probably ought to deepcopy this","commit_id":"96a49f21703d9605759dfecde23a94a3b7fbc094"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"706b05bab8a6be87cea6322cf740131d68569efc","unresolved":false,"context_lines":[{"line_number":182,"context_line":"        disk_list \u003d [{\u0027is_boot_disk\u0027: True, \u0027size\u0027: \u00273g\u0027}]"},{"line_number":183,"context_line":"        eph_disk_list \u003d [{\u0027format\u0027: u\u0027ext3\u0027, \u0027size\u0027: \u00271g\u0027},"},{"line_number":184,"context_line":"                         {\u0027format\u0027: u\u0027ext3\u0027, \u0027size\u0027: \u00272g\u0027}]"},{"line_number":185,"context_line":"        _inst \u003d copy.copy(self._instance)"},{"line_number":186,"context_line":"        _bdi \u003d copy.copy(self._block_device_info)"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"        if has_get_root_units:"}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_c577c69f","line":185,"range":{"start_line":185,"start_character":21,"end_line":185,"end_character":25},"in_reply_to":"5f7c97a3_f14c0cc9","updated":"2018-06-01 05:03:41.000000000","message":"Done","commit_id":"96a49f21703d9605759dfecde23a94a3b7fbc094"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8e123d66dbc98dc18a26633888ed2753d0e830f2","unresolved":false,"context_lines":[{"line_number":183,"context_line":"        eph_disk_list \u003d [{\u0027format\u0027: u\u0027ext3\u0027, \u0027size\u0027: \u00271g\u0027},"},{"line_number":184,"context_line":"                         {\u0027format\u0027: u\u0027ext3\u0027, \u0027size\u0027: \u00272g\u0027}]"},{"line_number":185,"context_line":"        _inst \u003d copy.copy(self._instance)"},{"line_number":186,"context_line":"        _bdi \u003d copy.copy(self._block_device_info)"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"        if has_get_root_units:"},{"line_number":189,"context_line":"            # overwrite"}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_1148a8b0","line":186,"range":{"start_line":186,"start_character":20,"end_line":186,"end_character":24},"updated":"2018-05-31 22:05:07.000000000","message":"ditto","commit_id":"96a49f21703d9605759dfecde23a94a3b7fbc094"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"706b05bab8a6be87cea6322cf740131d68569efc","unresolved":false,"context_lines":[{"line_number":183,"context_line":"        eph_disk_list \u003d [{\u0027format\u0027: u\u0027ext3\u0027, \u0027size\u0027: \u00271g\u0027},"},{"line_number":184,"context_line":"                         {\u0027format\u0027: u\u0027ext3\u0027, \u0027size\u0027: \u00272g\u0027}]"},{"line_number":185,"context_line":"        _inst \u003d copy.copy(self._instance)"},{"line_number":186,"context_line":"        _bdi \u003d copy.copy(self._block_device_info)"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"        if has_get_root_units:"},{"line_number":189,"context_line":"            # overwrite"}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_e57a0286","line":186,"range":{"start_line":186,"start_character":20,"end_line":186,"end_character":24},"in_reply_to":"5f7c97a3_1148a8b0","updated":"2018-06-01 05:03:41.000000000","message":"Done","commit_id":"96a49f21703d9605759dfecde23a94a3b7fbc094"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ff70b6e8ede2bcbed793dc710996956b1be8128b","unresolved":false,"context_lines":[{"line_number":38,"context_line":"                   instance_name_template\u003d\u0027abc%05d\u0027)"},{"line_number":39,"context_line":"        self.flags(cloud_connector_url\u003d\u0027https://1.1.1.1:1111\u0027, group\u003d\u0027zvm\u0027)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        @mock.patch(\u0027nova.virt.zvm.utils.ConnectorClient.call\u0027)"},{"line_number":42,"context_line":"        @mock.patch(\u0027pwd.getpwuid\u0027, return_value\u003dmock.Mock(pw_name\u003d\u0027test\u0027))"},{"line_number":43,"context_line":"        def _init_driver(mget, mcall):"},{"line_number":44,"context_line":"            mcall.return_value \u003d {\u0027hypervisor_hostname\u0027: \u0027TESTHOST\u0027,"},{"line_number":45,"context_line":"                                  \u0027ipl_time\u0027: \u0027IPL at 11/14/17 10:47:44 EST\u0027}"},{"line_number":46,"context_line":"            self._driver \u003d zvmdriver.ZVMDriver(fake.FakeVirtAPI())"}],"source_content_type":"text/x-python","patch_set":50,"id":"5f7c97a3_df40e9a4","line":43,"range":{"start_line":41,"start_character":0,"end_line":43,"end_character":38},"updated":"2018-06-01 16:26:09.000000000","message":"Okay, pulling them out into decorators works too.  But what I was talking about is that you can (since py27) say:\n\n with mock.patch(\u0027...1...\u0027), mock.patch(\u0027...2...\u0027):\n\nhttps://stackoverflow.com/questions/893333/multiple-variables-in-python-with-statement","commit_id":"dcfe3aa98363db7ffa0b2f322f08310a0b17c0b1"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"4c4a953116a4af1a946758df8f4f3be2b07392d0","unresolved":false,"context_lines":[{"line_number":38,"context_line":"                   instance_name_template\u003d\u0027abc%05d\u0027)"},{"line_number":39,"context_line":"        self.flags(cloud_connector_url\u003d\u0027https://1.1.1.1:1111\u0027, group\u003d\u0027zvm\u0027)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        @mock.patch(\u0027nova.virt.zvm.utils.ConnectorClient.call\u0027)"},{"line_number":42,"context_line":"        @mock.patch(\u0027pwd.getpwuid\u0027, return_value\u003dmock.Mock(pw_name\u003d\u0027test\u0027))"},{"line_number":43,"context_line":"        def _init_driver(mget, mcall):"},{"line_number":44,"context_line":"            mcall.return_value \u003d {\u0027hypervisor_hostname\u0027: \u0027TESTHOST\u0027,"},{"line_number":45,"context_line":"                                  \u0027ipl_time\u0027: \u0027IPL at 11/14/17 10:47:44 EST\u0027}"},{"line_number":46,"context_line":"            self._driver \u003d zvmdriver.ZVMDriver(fake.FakeVirtAPI())"}],"source_content_type":"text/x-python","patch_set":50,"id":"5f7c97a3_d11671a8","line":43,"range":{"start_line":41,"start_character":0,"end_line":43,"end_character":38},"in_reply_to":"5f7c97a3_df40e9a4","updated":"2018-06-05 07:02:26.000000000","message":"ok, I modified this accordingly, thanks~","commit_id":"dcfe3aa98363db7ffa0b2f322f08310a0b17c0b1"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"fd09410330c53090623875153270603a8684ff0b","unresolved":false,"context_lines":[{"line_number":38,"context_line":"                   instance_name_template\u003d\u0027abc%05d\u0027)"},{"line_number":39,"context_line":"        self.flags(cloud_connector_url\u003d\u0027https://1.1.1.1:1111\u0027, group\u003d\u0027zvm\u0027)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        with mock.patch(\u0027nova.virt.zvm.utils.ConnectorClient.call\u0027) as mcall, \\"},{"line_number":42,"context_line":"            mock.patch(\u0027pwd.getpwuid\u0027, return_value\u003dmock.Mock(pw_name\u003d\u0027test\u0027)):"},{"line_number":43,"context_line":"            mcall.return_value \u003d {\u0027hypervisor_hostname\u0027: \u0027TESTHOST\u0027,"},{"line_number":44,"context_line":"                                  \u0027ipl_time\u0027: \u0027IPL at 11/14/17 10:47:44 EST\u0027}"}],"source_content_type":"text/x-python","patch_set":52,"id":"5f7c97a3_1c2ff488","line":41,"range":{"start_line":41,"start_character":78,"end_line":41,"end_character":79},"updated":"2018-06-06 15:43:21.000000000","message":"Use parens instead of backslash.","commit_id":"612ce5cdea6ffe165bf94ff59c22e59d2d4f33f4"}],"nova/tests/unit/virt/zvm/test_guestop.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f6bed38e2927805bad2e74ab89a5547a6d36aea7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":31,"id":"bf659307_a3dfaf0a","updated":"2018-04-09 20:34:04.000000000","message":"Since this file corresponds to guest.py, it should be named test_guest.py, yah?","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"f4e1032b77822972a7d758f0d29934a4b731053b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":31,"id":"bf659307_2395d5e4","in_reply_to":"bf659307_a3dfaf0a","updated":"2018-04-10 08:05:34.000000000","message":"ok, make sense to me","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f6bed38e2927805bad2e74ab89a5547a6d36aea7","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                   reachable_timeout\u003d300, group\u003d\u0027zvm\u0027)"},{"line_number":41,"context_line":"        self.flags(my_ip\u003d\u0027192.168.1.1\u0027,"},{"line_number":42,"context_line":"                   instance_name_template\u003d\u0027test%04x\u0027)"},{"line_number":43,"context_line":"        with mock.patch(\u0027nova.virt.zvm.utils.\u0027"},{"line_number":44,"context_line":"                        \u0027ConnectorRequestHandler.call\u0027) as mcall:"},{"line_number":45,"context_line":"            with mock.patch(\u0027pwd.getpwuid\u0027) as getpwuid:"},{"line_number":46,"context_line":"                getpwuid.return_value \u003d FakePwuid()"},{"line_number":47,"context_line":"                mcall.return_value \u003d {\u0027hypervisor_hostname\u0027: \u0027TESTHOST\u0027,"},{"line_number":48,"context_line":"                                      \u0027ipl_time\u0027: \u0027TESTTIME\u0027}"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_43b1f3e0","line":45,"range":{"start_line":43,"start_character":0,"end_line":45,"end_character":56},"updated":"2018-04-09 20:34:04.000000000","message":"These can be comma-separated rather than nested.","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"f4e1032b77822972a7d758f0d29934a4b731053b","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                   reachable_timeout\u003d300, group\u003d\u0027zvm\u0027)"},{"line_number":41,"context_line":"        self.flags(my_ip\u003d\u0027192.168.1.1\u0027,"},{"line_number":42,"context_line":"                   instance_name_template\u003d\u0027test%04x\u0027)"},{"line_number":43,"context_line":"        with mock.patch(\u0027nova.virt.zvm.utils.\u0027"},{"line_number":44,"context_line":"                        \u0027ConnectorRequestHandler.call\u0027) as mcall:"},{"line_number":45,"context_line":"            with mock.patch(\u0027pwd.getpwuid\u0027) as getpwuid:"},{"line_number":46,"context_line":"                getpwuid.return_value \u003d FakePwuid()"},{"line_number":47,"context_line":"                mcall.return_value \u003d {\u0027hypervisor_hostname\u0027: \u0027TESTHOST\u0027,"},{"line_number":48,"context_line":"                                      \u0027ipl_time\u0027: \u0027TESTTIME\u0027}"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_a3b1e591","line":45,"range":{"start_line":43,"start_character":0,"end_line":45,"end_character":56},"in_reply_to":"bf659307_43b1f3e0","updated":"2018-04-10 08:05:34.000000000","message":"Done","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f6bed38e2927805bad2e74ab89a5547a6d36aea7","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        with mock.patch(\u0027nova.virt.zvm.utils.\u0027"},{"line_number":44,"context_line":"                        \u0027ConnectorRequestHandler.call\u0027) as mcall:"},{"line_number":45,"context_line":"            with mock.patch(\u0027pwd.getpwuid\u0027) as getpwuid:"},{"line_number":46,"context_line":"                getpwuid.return_value \u003d FakePwuid()"},{"line_number":47,"context_line":"                mcall.return_value \u003d {\u0027hypervisor_hostname\u0027: \u0027TESTHOST\u0027,"},{"line_number":48,"context_line":"                                      \u0027ipl_time\u0027: \u0027TESTTIME\u0027}"},{"line_number":49,"context_line":"                self._driver \u003d driver.ZVMDriver(\u0027virtapi\u0027)"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_43981369","line":46,"range":{"start_line":46,"start_character":40,"end_line":46,"end_character":51},"updated":"2018-04-09 20:34:04.000000000","message":"This could be mock.Mock(pw_name\u003d\u0027test\u0027) and then you don\u0027t need FakePwuid","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"f4e1032b77822972a7d758f0d29934a4b731053b","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        with mock.patch(\u0027nova.virt.zvm.utils.\u0027"},{"line_number":44,"context_line":"                        \u0027ConnectorRequestHandler.call\u0027) as mcall:"},{"line_number":45,"context_line":"            with mock.patch(\u0027pwd.getpwuid\u0027) as getpwuid:"},{"line_number":46,"context_line":"                getpwuid.return_value \u003d FakePwuid()"},{"line_number":47,"context_line":"                mcall.return_value \u003d {\u0027hypervisor_hostname\u0027: \u0027TESTHOST\u0027,"},{"line_number":48,"context_line":"                                      \u0027ipl_time\u0027: \u0027TESTTIME\u0027}"},{"line_number":49,"context_line":"                self._driver \u003d driver.ZVMDriver(\u0027virtapi\u0027)"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_2363951c","line":46,"range":{"start_line":46,"start_character":40,"end_line":46,"end_character":51},"in_reply_to":"bf659307_43981369","updated":"2018-04-10 08:05:34.000000000","message":"thanks, that\u0027s what I am looking fo","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f6bed38e2927805bad2e74ab89a5547a6d36aea7","unresolved":false,"context_lines":[{"line_number":50,"context_line":"                self._hypervisor \u003d self._driver._hypervisor"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        self._context \u003d context.RequestContext(\u0027fake_user\u0027, \u0027fake_project\u0027)"},{"line_number":53,"context_line":"        self._uuid \u003d uuidsentinel.foo"},{"line_number":54,"context_line":"        self._image_id \u003d uuidsentinel.foo"},{"line_number":55,"context_line":"        self._instance_values \u003d {"},{"line_number":56,"context_line":"            \u0027display_name\u0027: \u0027test\u0027,"},{"line_number":57,"context_line":"            \u0027uuid\u0027: self._uuid,"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_a32d6ffe","line":54,"range":{"start_line":53,"start_character":0,"end_line":54,"end_character":41},"updated":"2018-04-09 20:34:04.000000000","message":"You should use different UUIDs for these.\n\nAlso suggest using a better name (e.g. self._instance_uuid) for the first one.\n\nBut since it\u0027s only used below (L57), why not just inline it?","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"f4e1032b77822972a7d758f0d29934a4b731053b","unresolved":false,"context_lines":[{"line_number":50,"context_line":"                self._hypervisor \u003d self._driver._hypervisor"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        self._context \u003d context.RequestContext(\u0027fake_user\u0027, \u0027fake_project\u0027)"},{"line_number":53,"context_line":"        self._uuid \u003d uuidsentinel.foo"},{"line_number":54,"context_line":"        self._image_id \u003d uuidsentinel.foo"},{"line_number":55,"context_line":"        self._instance_values \u003d {"},{"line_number":56,"context_line":"            \u0027display_name\u0027: \u0027test\u0027,"},{"line_number":57,"context_line":"            \u0027uuid\u0027: self._uuid,"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_63598d58","line":54,"range":{"start_line":53,"start_character":0,"end_line":54,"end_character":41},"in_reply_to":"bf659307_a32d6ffe","updated":"2018-04-10 08:05:34.000000000","message":"yes, will remove them and create a new one","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f6bed38e2927805bad2e74ab89a5547a6d36aea7","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                                   \u0027ephemerals\u0027: self._eph_disks,"},{"line_number":84,"context_line":"                                   \u0027block_device_mapping\u0027: []}"},{"line_number":85,"context_line":"        fake_image_meta \u003d {\u0027status\u0027: \u0027active\u0027,"},{"line_number":86,"context_line":"                                 \u0027properties\u0027: {\u0027os_distro\u0027: \u0027rhel7.2\u0027},"},{"line_number":87,"context_line":"                                 \u0027name\u0027: \u0027rhel72eckdimage\u0027,"},{"line_number":88,"context_line":"                                 \u0027deleted\u0027: False,"},{"line_number":89,"context_line":"                                 \u0027container_format\u0027: \u0027bare\u0027,"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_6337574f","line":86,"range":{"start_line":86,"start_character":27,"end_line":86,"end_character":34},"updated":"2018-04-09 20:34:04.000000000","message":"weird indents","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"f4e1032b77822972a7d758f0d29934a4b731053b","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                                   \u0027ephemerals\u0027: self._eph_disks,"},{"line_number":84,"context_line":"                                   \u0027block_device_mapping\u0027: []}"},{"line_number":85,"context_line":"        fake_image_meta \u003d {\u0027status\u0027: \u0027active\u0027,"},{"line_number":86,"context_line":"                                 \u0027properties\u0027: {\u0027os_distro\u0027: \u0027rhel7.2\u0027},"},{"line_number":87,"context_line":"                                 \u0027name\u0027: \u0027rhel72eckdimage\u0027,"},{"line_number":88,"context_line":"                                 \u0027deleted\u0027: False,"},{"line_number":89,"context_line":"                                 \u0027container_format\u0027: \u0027bare\u0027,"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_2331550c","line":86,"range":{"start_line":86,"start_character":27,"end_line":86,"end_character":34},"in_reply_to":"bf659307_6337574f","updated":"2018-04-10 08:05:34.000000000","message":"really weird.. will modify","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f6bed38e2927805bad2e74ab89a5547a6d36aea7","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        status \u003d self._guest._mapping_power_state(\u0027bad\u0027)"},{"line_number":133,"context_line":"        self.assertEqual(compute_power_state.NOSTATE, status)"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    @mock.patch(\u0027nova.virt.zvm.utils.ConnectorRequestHandler.call\u0027)"},{"line_number":136,"context_line":"    def test_get_info_err_InstanceNotFound(self, call):"},{"line_number":137,"context_line":"        call.side_effect \u003d exception.NovaException(results\u003d{\u0027overallRC\u0027: 404})"},{"line_number":138,"context_line":"        self.assertRaises(exception.InstanceNotFound, self._guest.get_info)"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_23671f54","line":135,"range":{"start_line":135,"start_character":4,"end_line":135,"end_character":67},"updated":"2018-04-09 20:34:04.000000000","message":"Since you\u0027re using this (almost) everywhere, you might as well put this decorator on the class (whereupon it\u0027ll show up as the last arg in all your test methods), or create the mock in your setUp as an instance variable (and then you can remove the arg from the test methods and instead refer to the instance var).","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"f4e1032b77822972a7d758f0d29934a4b731053b","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        status \u003d self._guest._mapping_power_state(\u0027bad\u0027)"},{"line_number":133,"context_line":"        self.assertEqual(compute_power_state.NOSTATE, status)"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    @mock.patch(\u0027nova.virt.zvm.utils.ConnectorRequestHandler.call\u0027)"},{"line_number":136,"context_line":"    def test_get_info_err_InstanceNotFound(self, call):"},{"line_number":137,"context_line":"        call.side_effect \u003d exception.NovaException(results\u003d{\u0027overallRC\u0027: 404})"},{"line_number":138,"context_line":"        self.assertRaises(exception.InstanceNotFound, self._guest.get_info)"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_86714f0f","line":135,"range":{"start_line":135,"start_character":4,"end_line":135,"end_character":67},"in_reply_to":"bf659307_23671f54","updated":"2018-04-10 08:05:34.000000000","message":"I tried to search reference in nova tree and no lucky and seems I need return different result to \u0027call\u0027 in different cases, can you point me some reference?","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f6bed38e2927805bad2e74ab89a5547a6d36aea7","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        call.side_effect \u003d exception.NovaException(results\u003d{\u0027overallRC\u0027: 500})"},{"line_number":143,"context_line":"        self.assertRaises(exception.NovaException, self._guest.get_info)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    @mock.patch(\u0027nova.virt.hardware.InstanceInfo\u0027)"},{"line_number":146,"context_line":"    @mock.patch(\u0027nova.virt.zvm.utils.ConnectorRequestHandler.call\u0027)"},{"line_number":147,"context_line":"    def test_get_info(self, call, InstanceInfo):"},{"line_number":148,"context_line":"        call.return_value \u003d \u0027on\u0027"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_23507f5e","line":145,"range":{"start_line":145,"start_character":4,"end_line":145,"end_character":50},"updated":"2018-04-09 20:34:04.000000000","message":"How about not mocking this...","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"f4e1032b77822972a7d758f0d29934a4b731053b","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        call.side_effect \u003d exception.NovaException(results\u003d{\u0027overallRC\u0027: 500})"},{"line_number":143,"context_line":"        self.assertRaises(exception.NovaException, self._guest.get_info)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    @mock.patch(\u0027nova.virt.hardware.InstanceInfo\u0027)"},{"line_number":146,"context_line":"    @mock.patch(\u0027nova.virt.zvm.utils.ConnectorRequestHandler.call\u0027)"},{"line_number":147,"context_line":"    def test_get_info(self, call, InstanceInfo):"},{"line_number":148,"context_line":"        call.return_value \u003d \u0027on\u0027"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_e69e0b06","line":145,"range":{"start_line":145,"start_character":4,"end_line":145,"end_character":50},"in_reply_to":"bf659307_23507f5e","updated":"2018-04-10 08:05:34.000000000","message":"Done","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f6bed38e2927805bad2e74ab89a5547a6d36aea7","unresolved":false,"context_lines":[{"line_number":146,"context_line":"    @mock.patch(\u0027nova.virt.zvm.utils.ConnectorRequestHandler.call\u0027)"},{"line_number":147,"context_line":"    def test_get_info(self, call, InstanceInfo):"},{"line_number":148,"context_line":"        call.return_value \u003d \u0027on\u0027"},{"line_number":149,"context_line":"        self._guest.get_info()"},{"line_number":150,"context_line":"        call.assert_called_once_with(\u0027guest_get_power_state\u0027,"},{"line_number":151,"context_line":"                                     self._instance[\u0027name\u0027])"},{"line_number":152,"context_line":"        InstanceInfo.assert_called_once_with(compute_power_state.RUNNING)"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_43e9f37d","line":149,"range":{"start_line":149,"start_character":8,"end_line":149,"end_character":30},"updated":"2018-04-09 20:34:04.000000000","message":"...and instead saving the return value from this, and validating that it\u0027s an instance of InstanceInfo with .state \u003d\u003d compute_power_state.RUNNING","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"f4e1032b77822972a7d758f0d29934a4b731053b","unresolved":false,"context_lines":[{"line_number":146,"context_line":"    @mock.patch(\u0027nova.virt.zvm.utils.ConnectorRequestHandler.call\u0027)"},{"line_number":147,"context_line":"    def test_get_info(self, call, InstanceInfo):"},{"line_number":148,"context_line":"        call.return_value \u003d \u0027on\u0027"},{"line_number":149,"context_line":"        self._guest.get_info()"},{"line_number":150,"context_line":"        call.assert_called_once_with(\u0027guest_get_power_state\u0027,"},{"line_number":151,"context_line":"                                     self._instance[\u0027name\u0027])"},{"line_number":152,"context_line":"        InstanceInfo.assert_called_once_with(compute_power_state.RUNNING)"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_2695e3e4","line":149,"range":{"start_line":149,"start_character":8,"end_line":149,"end_character":30},"in_reply_to":"bf659307_43e9f37d","updated":"2018-04-10 08:05:34.000000000","message":"Done","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f6bed38e2927805bad2e74ab89a5547a6d36aea7","unresolved":false,"context_lines":[{"line_number":170,"context_line":"        call.assert_any_call(\u0027image_query\u0027, imagename\u003d\u0027image_meta_id\u0027)"},{"line_number":171,"context_line":"        image_import.assert_called_once_with(\u0027context\u0027, \u0027image_meta_id\u0027,"},{"line_number":172,"context_line":"                                             \u0027os_distro\u0027)"},{"line_number":173,"context_line":"        call.assert_any_call(\u0027image_query\u0027, imagename\u003d\u0027image_meta_id\u0027)"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    @mock.patch(\u0027nova.virt.zvm.utils.ConnectorRequestHandler.call\u0027)"},{"line_number":176,"context_line":"    def test_private_get_image_info_exist(self, call):"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_a34ecf93","line":173,"range":{"start_line":173,"start_character":8,"end_line":173,"end_character":70},"updated":"2018-04-09 20:34:04.000000000","message":"dup of L170.\n\nAlso, is .call invoked more than once in this path?  If not, I would prefer this was assert_called_once_with","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"f4e1032b77822972a7d758f0d29934a4b731053b","unresolved":false,"context_lines":[{"line_number":170,"context_line":"        call.assert_any_call(\u0027image_query\u0027, imagename\u003d\u0027image_meta_id\u0027)"},{"line_number":171,"context_line":"        image_import.assert_called_once_with(\u0027context\u0027, \u0027image_meta_id\u0027,"},{"line_number":172,"context_line":"                                             \u0027os_distro\u0027)"},{"line_number":173,"context_line":"        call.assert_any_call(\u0027image_query\u0027, imagename\u003d\u0027image_meta_id\u0027)"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    @mock.patch(\u0027nova.virt.zvm.utils.ConnectorRequestHandler.call\u0027)"},{"line_number":176,"context_line":"    def test_private_get_image_info_exist(self, call):"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_c65ae74e","line":173,"range":{"start_line":173,"start_character":8,"end_line":173,"end_character":70},"in_reply_to":"bf659307_a34ecf93","updated":"2018-04-10 08:05:34.000000000","message":"right, will do","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f6bed38e2927805bad2e74ab89a5547a6d36aea7","unresolved":false,"context_lines":[{"line_number":177,"context_line":"        call.return_value \u003d \u0027image-info\u0027"},{"line_number":178,"context_line":"        res \u003d self._guest._get_image_info(\u0027context\u0027, \u0027image_meta_id\u0027,"},{"line_number":179,"context_line":"                                          \u0027os_distro\u0027)"},{"line_number":180,"context_line":"        call.assert_any_call(\u0027image_query\u0027, imagename\u003d\u0027image_meta_id\u0027)"},{"line_number":181,"context_line":"        self.assertEqual(\u0027image-info\u0027, res)"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    @mock.patch(\u0027nova.virt.zvm.utils.ConnectorRequestHandler.call\u0027)"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_235abf4f","line":180,"range":{"start_line":180,"start_character":13,"end_line":180,"end_character":28},"updated":"2018-04-09 20:34:04.000000000","message":"assert_called_once_with, if possible.","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"f4e1032b77822972a7d758f0d29934a4b731053b","unresolved":false,"context_lines":[{"line_number":177,"context_line":"        call.return_value \u003d \u0027image-info\u0027"},{"line_number":178,"context_line":"        res \u003d self._guest._get_image_info(\u0027context\u0027, \u0027image_meta_id\u0027,"},{"line_number":179,"context_line":"                                          \u0027os_distro\u0027)"},{"line_number":180,"context_line":"        call.assert_any_call(\u0027image_query\u0027, imagename\u003d\u0027image_meta_id\u0027)"},{"line_number":181,"context_line":"        self.assertEqual(\u0027image-info\u0027, res)"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    @mock.patch(\u0027nova.virt.zvm.utils.ConnectorRequestHandler.call\u0027)"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_f9f54cee","line":180,"range":{"start_line":180,"start_character":13,"end_line":180,"end_character":28},"in_reply_to":"bf659307_235abf4f","updated":"2018-04-10 08:05:34.000000000","message":"Done","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f6bed38e2927805bad2e74ab89a5547a6d36aea7","unresolved":false,"context_lines":[{"line_number":225,"context_line":"    def test_private_setup_network(self, call):"},{"line_number":226,"context_line":"        inst_nets \u003d []"},{"line_number":227,"context_line":"        _net \u003d {\u0027ip_addr\u0027: \u0027192.168.0.100\u0027,"},{"line_number":228,"context_line":"                    \u0027gateway_addr\u0027: \u0027192.168.0.1\u0027,"},{"line_number":229,"context_line":"                    \u0027cidr\u0027: \u0027192.168.0.1/24\u0027,"},{"line_number":230,"context_line":"                    \u0027mac_addr\u0027: \u0027DE:AD:BE:EF:00:00\u0027,"},{"line_number":231,"context_line":"                    \u0027nic_id\u0027: None}"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_e3012708","line":228,"range":{"start_line":228,"start_character":16,"end_line":228,"end_character":20},"updated":"2018-04-09 20:34:04.000000000","message":"weird indents","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"f4e1032b77822972a7d758f0d29934a4b731053b","unresolved":false,"context_lines":[{"line_number":225,"context_line":"    def test_private_setup_network(self, call):"},{"line_number":226,"context_line":"        inst_nets \u003d []"},{"line_number":227,"context_line":"        _net \u003d {\u0027ip_addr\u0027: \u0027192.168.0.100\u0027,"},{"line_number":228,"context_line":"                    \u0027gateway_addr\u0027: \u0027192.168.0.1\u0027,"},{"line_number":229,"context_line":"                    \u0027cidr\u0027: \u0027192.168.0.1/24\u0027,"},{"line_number":230,"context_line":"                    \u0027mac_addr\u0027: \u0027DE:AD:BE:EF:00:00\u0027,"},{"line_number":231,"context_line":"                    \u0027nic_id\u0027: None}"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_99c53091","line":228,"range":{"start_line":228,"start_character":16,"end_line":228,"end_character":20},"in_reply_to":"bf659307_e3012708","updated":"2018-04-10 08:05:34.000000000","message":"Done","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f6bed38e2927805bad2e74ab89a5547a6d36aea7","unresolved":false,"context_lines":[{"line_number":233,"context_line":"        self._guest._setup_network(\u0027vm_name\u0027, \u0027os_distro\u0027,"},{"line_number":234,"context_line":"                                     self._network_info,"},{"line_number":235,"context_line":"                                     self._instance)"},{"line_number":236,"context_line":"        call.assert_any_call(\u0027guest_create_network_interface\u0027,"},{"line_number":237,"context_line":"                             \u0027vm_name\u0027, \u0027os_distro\u0027, inst_nets)"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    def test_private_nic_coupled(self):"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_fe11bc54","line":236,"range":{"start_line":236,"start_character":13,"end_line":236,"end_character":29},"updated":"2018-04-09 20:34:04.000000000","message":"assert_called_once_with, if possible.","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"f4e1032b77822972a7d758f0d29934a4b731053b","unresolved":false,"context_lines":[{"line_number":233,"context_line":"        self._guest._setup_network(\u0027vm_name\u0027, \u0027os_distro\u0027,"},{"line_number":234,"context_line":"                                     self._network_info,"},{"line_number":235,"context_line":"                                     self._instance)"},{"line_number":236,"context_line":"        call.assert_any_call(\u0027guest_create_network_interface\u0027,"},{"line_number":237,"context_line":"                             \u0027vm_name\u0027, \u0027os_distro\u0027, inst_nets)"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    def test_private_nic_coupled(self):"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_79ba9c0a","line":236,"range":{"start_line":236,"start_character":13,"end_line":236,"end_character":29},"in_reply_to":"bf659307_fe11bc54","updated":"2018-04-10 08:05:34.000000000","message":"Done","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f6bed38e2927805bad2e74ab89a5547a6d36aea7","unresolved":false,"context_lines":[{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    def test_private_nic_coupled(self):"},{"line_number":240,"context_line":"        user_direct \u003d {\u0027user_direct\u0027:"},{"line_number":241,"context_line":"                            [\u0027User TEST\u0027,"},{"line_number":242,"context_line":"                             \"NICDEF 1000 TYPE QDIO LAN SYSTEM TESTVS\"]}"},{"line_number":243,"context_line":"        res \u003d self._guest._nic_coupled(user_direct, \u00271000\u0027, \u0027TESTVS\u0027)"},{"line_number":244,"context_line":"        self.assertTrue(res)"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_de16384a","line":241,"range":{"start_line":241,"start_character":23,"end_line":241,"end_character":28},"updated":"2018-04-09 20:34:04.000000000","message":"weird indents","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"f4e1032b77822972a7d758f0d29934a4b731053b","unresolved":false,"context_lines":[{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    def test_private_nic_coupled(self):"},{"line_number":240,"context_line":"        user_direct \u003d {\u0027user_direct\u0027:"},{"line_number":241,"context_line":"                            [\u0027User TEST\u0027,"},{"line_number":242,"context_line":"                             \"NICDEF 1000 TYPE QDIO LAN SYSTEM TESTVS\"]}"},{"line_number":243,"context_line":"        res \u003d self._guest._nic_coupled(user_direct, \u00271000\u0027, \u0027TESTVS\u0027)"},{"line_number":244,"context_line":"        self.assertTrue(res)"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_393ae497","line":241,"range":{"start_line":241,"start_character":23,"end_line":241,"end_character":28},"in_reply_to":"bf659307_de16384a","updated":"2018-04-10 08:05:34.000000000","message":"Done","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f6bed38e2927805bad2e74ab89a5547a6d36aea7","unresolved":false,"context_lines":[{"line_number":259,"context_line":"        image_meta \u003d {\u0027os_version\u0027: \u0027os_version\u0027}"},{"line_number":260,"context_line":"        self._guest._import_spawn_image(self._context, \u0027image_name\u0027,"},{"line_number":261,"context_line":"                                        \u0027os_version\u0027)"},{"line_number":262,"context_line":"        fetch.assert_called_once_with(self._context, \u0027image_name\u0027,"},{"line_number":263,"context_line":"                                      \"/test/image/image_name\")"},{"line_number":264,"context_line":"        call.assert_called_once_with(\u0027image_import\u0027, \u0027image_name\u0027, image_url,"},{"line_number":265,"context_line":"                        image_meta, \u0027test@192.168.1.1\u0027)"},{"line_number":266,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_be5344e2","line":263,"range":{"start_line":262,"start_character":8,"end_line":263,"end_character":63},"updated":"2018-04-09 20:34:04.000000000","message":"I would like to see this confirming the joining of CONF.zvm.image_tmp_path\n\nBUT note that if you do use self.flags to set that conf value, you need to move your os.path.exists mock inside the method so that self.flags is not invoked while that mock is active - see [1] and the ML thread referenced in the commit message.\n\nI\u0027m actually a little confused as to why it\u0027s not picking up the default of /var/lib/nova/images as it stands.  Possibly because NoDBTestCase is setting up ConfFixture?  But even so...\n\n[1] https://review.openstack.org/#/c/558084/","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"f4e1032b77822972a7d758f0d29934a4b731053b","unresolved":false,"context_lines":[{"line_number":259,"context_line":"        image_meta \u003d {\u0027os_version\u0027: \u0027os_version\u0027}"},{"line_number":260,"context_line":"        self._guest._import_spawn_image(self._context, \u0027image_name\u0027,"},{"line_number":261,"context_line":"                                        \u0027os_version\u0027)"},{"line_number":262,"context_line":"        fetch.assert_called_once_with(self._context, \u0027image_name\u0027,"},{"line_number":263,"context_line":"                                      \"/test/image/image_name\")"},{"line_number":264,"context_line":"        call.assert_called_once_with(\u0027image_import\u0027, \u0027image_name\u0027, image_url,"},{"line_number":265,"context_line":"                        image_meta, \u0027test@192.168.1.1\u0027)"},{"line_number":266,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_3cec1228","line":263,"range":{"start_line":262,"start_character":8,"end_line":263,"end_character":63},"in_reply_to":"bf659307_be5344e2","updated":"2018-04-10 08:05:34.000000000","message":"ok, I saw that ML before, thanks for the reminder and will do it","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f6bed38e2927805bad2e74ab89a5547a6d36aea7","unresolved":false,"context_lines":[{"line_number":298,"context_line":"                                    self._image_meta.properties.os_distro)"},{"line_number":299,"context_line":"        set_disk_list.assert_called_once_with(self._instance, \u0027image_name\u0027,"},{"line_number":300,"context_line":"                                              _bdi)"},{"line_number":301,"context_line":"        call.assert_any_call(\u0027guest_create\u0027, self._instance.name,"},{"line_number":302,"context_line":"                             1, 1024, \u0027disk_list\u0027)"},{"line_number":303,"context_line":"        call.assert_any_call(\u0027guest_deploy\u0027, self._instance.name, \u0027image_name\u0027,"},{"line_number":304,"context_line":"                             \u0027transportfiles\u0027, \u0027test@192.168.1.1\u0027)"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_be0104b2","line":301,"range":{"start_line":301,"start_character":13,"end_line":301,"end_character":28},"updated":"2018-04-09 20:34:04.000000000","message":"You should be asserting all of these calls in order.\n\n call.assert_has_calls([\n     mock.call(...),\n     mock.call(...),\n     ...\n ])","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"f4e1032b77822972a7d758f0d29934a4b731053b","unresolved":false,"context_lines":[{"line_number":298,"context_line":"                                    self._image_meta.properties.os_distro)"},{"line_number":299,"context_line":"        set_disk_list.assert_called_once_with(self._instance, \u0027image_name\u0027,"},{"line_number":300,"context_line":"                                              _bdi)"},{"line_number":301,"context_line":"        call.assert_any_call(\u0027guest_create\u0027, self._instance.name,"},{"line_number":302,"context_line":"                             1, 1024, \u0027disk_list\u0027)"},{"line_number":303,"context_line":"        call.assert_any_call(\u0027guest_deploy\u0027, self._instance.name, \u0027image_name\u0027,"},{"line_number":304,"context_line":"                             \u0027transportfiles\u0027, \u0027test@192.168.1.1\u0027)"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_1962803f","line":301,"range":{"start_line":301,"start_character":13,"end_line":301,"end_character":28},"in_reply_to":"bf659307_be0104b2","updated":"2018-04-10 08:05:34.000000000","message":"Done","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f6bed38e2927805bad2e74ab89a5547a6d36aea7","unresolved":false,"context_lines":[{"line_number":316,"context_line":"        call_resp \u003d []"},{"line_number":317,"context_line":"        switch_dict \u003d {\u00271000\u0027: \u0027TESTVM\u0027}"},{"line_number":318,"context_line":"        user_direct \u003d {\u0027user_direct\u0027:"},{"line_number":319,"context_line":"                            [\u0027User TEST\u0027,"},{"line_number":320,"context_line":"                             \"NICDEF 1000 TYPE QDIO LAN SYSTEM TESTVS\"]}"},{"line_number":321,"context_line":"        call_resp.append(switch_dict)"},{"line_number":322,"context_line":"        call_resp.append(user_direct)"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_5e2a282c","line":319,"range":{"start_line":319,"start_character":23,"end_line":319,"end_character":28},"updated":"2018-04-09 20:34:04.000000000","message":"weird indents","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"f4e1032b77822972a7d758f0d29934a4b731053b","unresolved":false,"context_lines":[{"line_number":316,"context_line":"        call_resp \u003d []"},{"line_number":317,"context_line":"        switch_dict \u003d {\u00271000\u0027: \u0027TESTVM\u0027}"},{"line_number":318,"context_line":"        user_direct \u003d {\u0027user_direct\u0027:"},{"line_number":319,"context_line":"                            [\u0027User TEST\u0027,"},{"line_number":320,"context_line":"                             \"NICDEF 1000 TYPE QDIO LAN SYSTEM TESTVS\"]}"},{"line_number":321,"context_line":"        call_resp.append(switch_dict)"},{"line_number":322,"context_line":"        call_resp.append(user_direct)"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_d95ba884","line":319,"range":{"start_line":319,"start_character":23,"end_line":319,"end_character":28},"in_reply_to":"bf659307_5e2a282c","updated":"2018-04-10 08:05:34.000000000","message":"Done","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f6bed38e2927805bad2e74ab89a5547a6d36aea7","unresolved":false,"context_lines":[{"line_number":323,"context_line":"        call.side_effect \u003d call_resp"},{"line_number":324,"context_line":"        nic_coupled.return_value \u003d True"},{"line_number":325,"context_line":"        self._guest._wait_network_ready(self._instance)"},{"line_number":326,"context_line":"        call.assert_any_call(\u0027guest_get_nic_vswitch_info\u0027,"},{"line_number":327,"context_line":"                             self._instance[\u0027name\u0027])"},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"        call.assert_any_call(\u0027guest_get_definition_info\u0027,"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_fe20dc4b","line":326,"range":{"start_line":326,"start_character":13,"end_line":326,"end_character":28},"updated":"2018-04-09 20:34:04.000000000","message":"see above","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"f4e1032b77822972a7d758f0d29934a4b731053b","unresolved":false,"context_lines":[{"line_number":323,"context_line":"        call.side_effect \u003d call_resp"},{"line_number":324,"context_line":"        nic_coupled.return_value \u003d True"},{"line_number":325,"context_line":"        self._guest._wait_network_ready(self._instance)"},{"line_number":326,"context_line":"        call.assert_any_call(\u0027guest_get_nic_vswitch_info\u0027,"},{"line_number":327,"context_line":"                             self._instance[\u0027name\u0027])"},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"        call.assert_any_call(\u0027guest_get_definition_info\u0027,"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_99553053","line":326,"range":{"start_line":326,"start_character":13,"end_line":326,"end_character":28},"in_reply_to":"bf659307_fe20dc4b","updated":"2018-04-10 08:05:34.000000000","message":"Done","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"}],"nova/tests/unit/virt/zvm/test_hypervisor.py":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"98c4bc0de9b12ac77a38a3dc389598f4baced536","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        self.assertEqual([\u0027TESTHOST\u0027], nodes)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    @mock.patch(\u0027nova.virt.zvm.utils.ConnectorClient.call\u0027)"},{"line_number":71,"context_line":"    def test_list_names(self, call):"},{"line_number":72,"context_line":"        call.return_value \u003d [\u0027vm1\u0027, \u0027vm2\u0027]"},{"line_number":73,"context_line":"        inst_list \u003d self._hypervisor.list_names()"},{"line_number":74,"context_line":"        self.assertEqual([\u0027vm1\u0027, \u0027vm2\u0027], inst_list)"}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_8f433b6c","line":71,"updated":"2018-05-31 10:55:24.000000000","message":"If you have to respin, perhaps it would be better to change that in the previous patch.","commit_id":"96a49f21703d9605759dfecde23a94a3b7fbc094"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"706b05bab8a6be87cea6322cf740131d68569efc","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        self.assertEqual([\u0027TESTHOST\u0027], nodes)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    @mock.patch(\u0027nova.virt.zvm.utils.ConnectorClient.call\u0027)"},{"line_number":71,"context_line":"    def test_list_names(self, call):"},{"line_number":72,"context_line":"        call.return_value \u003d [\u0027vm1\u0027, \u0027vm2\u0027]"},{"line_number":73,"context_line":"        inst_list \u003d self._hypervisor.list_names()"},{"line_number":74,"context_line":"        self.assertEqual([\u0027vm1\u0027, \u0027vm2\u0027], inst_list)"}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_c5ea660d","line":71,"in_reply_to":"5f7c97a3_8f433b6c","updated":"2018-06-01 05:03:41.000000000","message":"you are right, as this is trivial and previous patch is already +2, I will keep it and in case any comments on previous one, I will modify them together, thanks ~","commit_id":"96a49f21703d9605759dfecde23a94a3b7fbc094"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"b394e2edce5088e78227cfe10d540d79f97aaa89","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        self.assertEqual([\u0027TESTHOST\u0027], nodes)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    @mock.patch(\u0027nova.virt.zvm.utils.ConnectorClient.call\u0027)"},{"line_number":71,"context_line":"    def test_list_names(self, call):"},{"line_number":72,"context_line":"        call.return_value \u003d [\u0027vm1\u0027, \u0027vm2\u0027]"},{"line_number":73,"context_line":"        inst_list \u003d self._hypervisor.list_names()"},{"line_number":74,"context_line":"        self.assertEqual([\u0027vm1\u0027, \u0027vm2\u0027], inst_list)"}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_baed0426","line":71,"in_reply_to":"5f7c97a3_c5ea660d","updated":"2018-06-01 08:27:19.000000000","message":"ok, I got a chance, so I changed in previous patch","commit_id":"96a49f21703d9605759dfecde23a94a3b7fbc094"}],"nova/tests/unit/virt/zvm/test_utils.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f6bed38e2927805bad2e74ab89a5547a6d36aea7","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        self.assertEqual(expected, exc.kwargs[\u0027results\u0027])"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def test_get_instance_path(self):"},{"line_number":80,"context_line":"        with mock.patch(\u0027nova.virt.zvm.utils._get_instances_path\u0027) as fake_get:"},{"line_number":81,"context_line":"            fake_get.return_value \u003d \u0027/test/tmp\u0027"},{"line_number":82,"context_line":"            with mock.patch(\u0027os.path.exists\u0027) as fake_exist:"},{"line_number":83,"context_line":"                fake_exist.return_value \u003d True"},{"line_number":84,"context_line":"                folder \u003d zvmutils.get_instance_path(\u0027fake_uuid\u0027)"},{"line_number":85,"context_line":"                self.assertEqual(\u0027/test/tmp/fake_uuid\u0027, folder)"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_1e39103e","line":82,"range":{"start_line":80,"start_character":0,"end_line":82,"end_character":60},"updated":"2018-04-09 20:34:04.000000000","message":"These can be comma-separated rather than nested.  But you could also do them both as decorators.","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"b3b16a6f5a4a12b678867f1e65b402ec8521eea4","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        self.assertEqual(expected, exc.kwargs[\u0027results\u0027])"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def test_get_instance_path(self):"},{"line_number":80,"context_line":"        with mock.patch(\u0027nova.virt.zvm.utils._get_instances_path\u0027) as fake_get:"},{"line_number":81,"context_line":"            fake_get.return_value \u003d \u0027/test/tmp\u0027"},{"line_number":82,"context_line":"            with mock.patch(\u0027os.path.exists\u0027) as fake_exist:"},{"line_number":83,"context_line":"                fake_exist.return_value \u003d True"},{"line_number":84,"context_line":"                folder \u003d zvmutils.get_instance_path(\u0027fake_uuid\u0027)"},{"line_number":85,"context_line":"                self.assertEqual(\u0027/test/tmp/fake_uuid\u0027, folder)"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_777b6a27","line":82,"range":{"start_line":80,"start_character":0,"end_line":82,"end_character":60},"in_reply_to":"bf659307_1e39103e","updated":"2018-04-11 03:31:52.000000000","message":"os.path.exists need to be inside function ?\nI will move the first mock into function level","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ce2e26742f932c69c4bb3c0deae732394df8d3b7","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        self.assertEqual(expected, exc.kwargs[\u0027results\u0027])"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def test_get_instance_path(self):"},{"line_number":80,"context_line":"        with mock.patch(\u0027nova.virt.zvm.utils._get_instances_path\u0027) as fake_get:"},{"line_number":81,"context_line":"            fake_get.return_value \u003d \u0027/test/tmp\u0027"},{"line_number":82,"context_line":"            with mock.patch(\u0027os.path.exists\u0027) as fake_exist:"},{"line_number":83,"context_line":"                fake_exist.return_value \u003d True"},{"line_number":84,"context_line":"                folder \u003d zvmutils.get_instance_path(\u0027fake_uuid\u0027)"},{"line_number":85,"context_line":"                self.assertEqual(\u0027/test/tmp/fake_uuid\u0027, folder)"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_a0af70e1","line":82,"range":{"start_line":80,"start_character":0,"end_line":82,"end_character":60},"in_reply_to":"bf659307_777b6a27","updated":"2018-04-11 12:30:37.000000000","message":"os.path.exists mocks need to not encompass conf settings (self.flags) [1].  So in this case it would be fine either way.\n\n[1] https://review.openstack.org/#/c/558084/","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f6bed38e2927805bad2e74ab89a5547a6d36aea7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":31,"id":"bf659307_fe269c16","line":131,"updated":"2018-04-09 20:34:04.000000000","message":"Test exception path for unsupported config drive format.","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"b3b16a6f5a4a12b678867f1e65b402ec8521eea4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":31,"id":"bf659307_17746e35","line":131,"in_reply_to":"bf659307_fe269c16","updated":"2018-04-11 03:31:52.000000000","message":"Done","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"}],"nova/virt/zvm/configdrive.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5dac8c0b2015f491e71c0e7be080be4ee187a35d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2017 IBM Corp."},{"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":13,"id":"df7087c5_f7f47c89","line":1,"range":{"start_line":1,"start_character":12,"end_line":1,"end_character":16},"updated":"2018-03-21 16:00:11.000000000","message":"Should these be \u00272017, 2018\u0027 at this point?","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"0b6f6ed2045277d15d370961cb361ddca33bc9d3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2017 IBM Corp."},{"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":13,"id":"df7087c5_b4458f72","line":1,"range":{"start_line":1,"start_character":12,"end_line":1,"end_character":16},"in_reply_to":"df7087c5_f7f47c89","updated":"2018-03-22 08:52:28.000000000","message":"Done","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5dac8c0b2015f491e71c0e7be080be4ee187a35d","unresolved":false,"context_lines":[{"line_number":62,"context_line":"                os.chdir(olddir)"},{"line_number":63,"context_line":"            except Exception as e:"},{"line_number":64,"context_line":"                emsg \u003d six.text_type(e)"},{"line_number":65,"context_line":"                LOG.debug(\u0027exception in _make_tgz %s\u0027, emsg)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"            tar.close()"}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_17001067","line":65,"range":{"start_line":65,"start_character":40,"end_line":65,"end_character":49},"updated":"2018-03-21 16:00:11.000000000","message":"in chdir, really.","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"0b6f6ed2045277d15d370961cb361ddca33bc9d3","unresolved":false,"context_lines":[{"line_number":62,"context_line":"                os.chdir(olddir)"},{"line_number":63,"context_line":"            except Exception as e:"},{"line_number":64,"context_line":"                emsg \u003d six.text_type(e)"},{"line_number":65,"context_line":"                LOG.debug(\u0027exception in _make_tgz %s\u0027, emsg)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"            tar.close()"}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_54543321","line":65,"range":{"start_line":65,"start_character":40,"end_line":65,"end_character":49},"in_reply_to":"df7087c5_17001067","updated":"2018-03-22 08:52:28.000000000","message":"Done","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f6bed38e2927805bad2e74ab89a5547a6d36aea7","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2017,2018 IBM Corp."},{"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":31,"id":"bf659307_1e50305e","line":1,"updated":"2018-04-09 20:34:04.000000000","message":"Add tests for this file","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"b3b16a6f5a4a12b678867f1e65b402ec8521eea4","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2017,2018 IBM Corp."},{"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":31,"id":"bf659307_f7c1ba55","line":1,"in_reply_to":"bf659307_1e50305e","updated":"2018-04-11 03:31:52.000000000","message":"we do have a test_configdrive.py file in this patch...","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ce2e26742f932c69c4bb3c0deae732394df8d3b7","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2017,2018 IBM Corp."},{"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":31,"id":"bf659307_8067ccb7","line":1,"in_reply_to":"bf659307_f7c1ba55","updated":"2018-04-11 12:30:37.000000000","message":"Okay, I see it.  Not sure how I missed it.","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"c373659582e0c9b5bc059e9c1775cd3b8a98ccad","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"        \"\"\""},{"line_number":43,"context_line":"        if CONF.config_drive_format in [\u0027iso9660\u0027]:"},{"line_number":44,"context_line":"            self._make_tgz(path)"},{"line_number":45,"context_line":"        else:"},{"line_number":46,"context_line":"            raise exception.ConfigDriveUnknownFormat("},{"line_number":47,"context_line":"                format\u003dCONF.config_drive_format)"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_e87ec3e2","line":44,"updated":"2018-04-10 22:23:04.000000000","message":"Wait. No. You can\u0027t just pretend that iso9660 is tgz. What does the config drive as mounted inside the instance look like? Is it an iso9660 filesystem?\n\nIn the past we\u0027ve resisted adding new formats for config drives (as they appear in the guest). That\u0027s a complicated issue which includes a long term commitment from nova to support that format going forward, and the possible expectation that it will be supported in other hypervisors as well.","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"b3b16a6f5a4a12b678867f1e65b402ec8521eea4","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"        \"\"\""},{"line_number":43,"context_line":"        if CONF.config_drive_format in [\u0027iso9660\u0027]:"},{"line_number":44,"context_line":"            self._make_tgz(path)"},{"line_number":45,"context_line":"        else:"},{"line_number":46,"context_line":"            raise exception.ConfigDriveUnknownFormat("},{"line_number":47,"context_line":"                format\u003dCONF.config_drive_format)"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_97d95e57","line":44,"in_reply_to":"bf659307_e87ec3e2","updated":"2018-04-11 03:31:52.000000000","message":"you are right, cloudinit only support iso9660 and vfat, but in our z/VM implementation, we can\u0027t link a disk to VM as iso9660 before it\u0027s boot ,so we create a tgz file, then send to the VM deployed, and during startup process, the tgz file will be extracted and mounted as iso9660 format then cloud-init is able to consume it\n\nI will add a comment about it here in next PS","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"ed1d66ba46a989d89efb7106391b4a36bd0a5b05","unresolved":false,"context_lines":[{"line_number":46,"context_line":"            # boot ,so create a tgz file then send to the VM deployed, and"},{"line_number":47,"context_line":"            # during startup process, the tgz file will be extracted and"},{"line_number":48,"context_line":"            # mounted as iso9660 format then cloud-init is able to consume it"},{"line_number":49,"context_line":"            self._make_tgz(path)"},{"line_number":50,"context_line":"        else:"},{"line_number":51,"context_line":"            raise exception.ConfigDriveUnknownFormat("},{"line_number":52,"context_line":"                format\u003dCONF.config_drive_format)"}],"source_content_type":"text/x-python","patch_set":32,"id":"bf659307_a2366902","line":49,"updated":"2018-04-12 19:11:27.000000000","message":"Can someone explain more about how this works? Does this mean that the config drive is presented to the guest as a tarball? What is the thing that extracts the tarball and mounts it as iso9660? Does the zvm library do that or is some other software assumed to run on the guest to handle it?\n\nI had a look through the zvm CI logs and noticed that ssh validation is disabled (\u0027[validation]run_validation\u003dFalse\u0027 [0]). Because of this, we are unable to verify that the running instance works correctly using this config drive approach. This is the test [1] where the running instance and config drive are verified in tempest. It does not do the relevant validation if \u0027[validation]run_validation\u003dFalse\u0027.\n\n[0] http://extbasicopstackcilog01.podc.sl.edst.ibm.com/test_logs/jenkins-check-nova-master-16244/logs/tempest_conf\n[1] https://github.com/openstack/tempest/blob/master/tempest/scenario/test_server_basic_ops.py","commit_id":"fcc5702c1f576d48a1b02aa9e9883fa1d12f3799"}],"nova/virt/zvm/driver.py":[{"author":{"_account_id":10439,"name":"Xi Yang","email":"yang.xi@99cloud.net","username":"phenom"},"change_message_id":"ae249500e15ae3f37a68d155fe4347a8cc557c87","unresolved":false,"context_lines":[{"line_number":215,"context_line":"                raise err"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"        if not spawn_image_exist:"},{"line_number":218,"context_line":"            with self._imageop_semaphore:"},{"line_number":219,"context_line":"                self._import_spawn_image(context, image_meta_id, os_distro)"},{"line_number":220,"context_line":"            return self._reqh.call(\u0027image_query\u0027, imagename\u003dimage_meta_id)"},{"line_number":221,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":10,"id":"df7087c5_52fbda77","line":218,"updated":"2018-03-13 02:33:41.000000000","message":"I am not sure whether \u0027nova.utils.synchronized\u0027 can be used in this situation.","commit_id":"fcd69a64daa842db3b44ddbfca6d3675eb15ede5"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"78746b5ca2ef9cea24dea31853edff0c6cc0edb9","unresolved":false,"context_lines":[{"line_number":215,"context_line":"                raise err"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"        if not spawn_image_exist:"},{"line_number":218,"context_line":"            with self._imageop_semaphore:"},{"line_number":219,"context_line":"                self._import_spawn_image(context, image_meta_id, os_distro)"},{"line_number":220,"context_line":"            return self._reqh.call(\u0027image_query\u0027, imagename\u003dimage_meta_id)"},{"line_number":221,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":10,"id":"df7087c5_f2c46ef7","line":218,"in_reply_to":"df7087c5_52fbda77","updated":"2018-03-13 02:49:22.000000000","message":"are you suggesting instead of using this semaphore\nwe need use nova.utils.synchronized?\n\nor you are saying this kind of lock can\u0027t be used in virt driver?","commit_id":"fcd69a64daa842db3b44ddbfca6d3675eb15ede5"},{"author":{"_account_id":10439,"name":"Xi Yang","email":"yang.xi@99cloud.net","username":"phenom"},"change_message_id":"d9a1ba18d8e9d4fc0673060c8346a48709e47e26","unresolved":false,"context_lines":[{"line_number":215,"context_line":"                raise err"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"        if not spawn_image_exist:"},{"line_number":218,"context_line":"            with self._imageop_semaphore:"},{"line_number":219,"context_line":"                self._import_spawn_image(context, image_meta_id, os_distro)"},{"line_number":220,"context_line":"            return self._reqh.call(\u0027image_query\u0027, imagename\u003dimage_meta_id)"},{"line_number":221,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":10,"id":"df7087c5_29d08b50","line":218,"in_reply_to":"df7087c5_f2c46ef7","updated":"2018-03-20 02:08:32.000000000","message":"Sorry for the confusing comment.\n\nI think it is better to use utils.synchronized here.","commit_id":"fcd69a64daa842db3b44ddbfca6d3675eb15ede5"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5dac8c0b2015f491e71c0e7be080be4ee187a35d","unresolved":false,"context_lines":[{"line_number":41,"context_line":"HYPERVISOR_TYPE \u003d \u0027zvm\u0027"},{"line_number":42,"context_line":"ARCHITECTURE \u003d \u0027s390x\u0027"},{"line_number":43,"context_line":"DEFAULT_EPH_DISK_FMT \u003d \u0027ext3\u0027"},{"line_number":44,"context_line":"ZVM_POWER_STAT \u003d {"},{"line_number":45,"context_line":"    \u0027on\u0027: power_state.RUNNING,"},{"line_number":46,"context_line":"    \u0027off\u0027: power_state.SHUTDOWN,"},{"line_number":47,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_66d6802a","line":44,"range":{"start_line":44,"start_character":10,"end_line":44,"end_character":14},"updated":"2018-03-21 16:00:11.000000000","message":"May as well spell out STATE.  STAT is ambiguous.","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"0b6f6ed2045277d15d370961cb361ddca33bc9d3","unresolved":false,"context_lines":[{"line_number":41,"context_line":"HYPERVISOR_TYPE \u003d \u0027zvm\u0027"},{"line_number":42,"context_line":"ARCHITECTURE \u003d \u0027s390x\u0027"},{"line_number":43,"context_line":"DEFAULT_EPH_DISK_FMT \u003d \u0027ext3\u0027"},{"line_number":44,"context_line":"ZVM_POWER_STAT \u003d {"},{"line_number":45,"context_line":"    \u0027on\u0027: power_state.RUNNING,"},{"line_number":46,"context_line":"    \u0027off\u0027: power_state.SHUTDOWN,"},{"line_number":47,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_b4134f66","line":44,"range":{"start_line":44,"start_character":10,"end_line":44,"end_character":14},"in_reply_to":"df7087c5_66d6802a","updated":"2018-03-22 08:52:28.000000000","message":"Done","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5dac8c0b2015f491e71c0e7be080be4ee187a35d","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        self._hypervisor_hostname \u003d res[\u0027hypervisor_hostname\u0027]"},{"line_number":66,"context_line":"        self._ipl_time \u003d res[\u0027ipl_time\u0027]"},{"line_number":67,"context_line":"        self._vmutils \u003d zvmutils.VMUtils()"},{"line_number":68,"context_line":"        self._imageop_semaphore \u003d eventlet.semaphore.Semaphore(1)"},{"line_number":69,"context_line":"        LOG.info(\"The zVM compute driver has been initialized.\")"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def init_host(self, host):"}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_912e70a3","line":68,"range":{"start_line":68,"start_character":0,"end_line":68,"end_character":65},"updated":"2018-03-21 16:00:11.000000000","message":"Given how you\u0027re using this, lockutils seems like a simpler way to go.  See below.","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"0b6f6ed2045277d15d370961cb361ddca33bc9d3","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        self._hypervisor_hostname \u003d res[\u0027hypervisor_hostname\u0027]"},{"line_number":66,"context_line":"        self._ipl_time \u003d res[\u0027ipl_time\u0027]"},{"line_number":67,"context_line":"        self._vmutils \u003d zvmutils.VMUtils()"},{"line_number":68,"context_line":"        self._imageop_semaphore \u003d eventlet.semaphore.Semaphore(1)"},{"line_number":69,"context_line":"        LOG.info(\"The zVM compute driver has been initialized.\")"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def init_host(self, host):"}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_34073f1f","line":68,"range":{"start_line":68,"start_character":0,"end_line":68,"end_character":65},"in_reply_to":"df7087c5_912e70a3","updated":"2018-03-22 08:52:28.000000000","message":"ok, will try lockutils","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5dac8c0b2015f491e71c0e7be080be4ee187a35d","unresolved":false,"context_lines":[{"line_number":111,"context_line":"    def get_available_nodes(self, refresh\u003dFalse):"},{"line_number":112,"context_line":"        return [self._hypervisor_hostname]"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    def _mapping_power_stat(self, power_stat):"},{"line_number":115,"context_line":"        \"\"\"Translate power state to OpenStack defined constants.\"\"\""},{"line_number":116,"context_line":"        return ZVM_POWER_STAT.get(power_stat, power_state.NOSTATE)"},{"line_number":117,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_e6e130fe","line":114,"range":{"start_line":114,"start_character":23,"end_line":114,"end_character":27},"updated":"2018-03-21 16:00:11.000000000","message":"ditto","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5dac8c0b2015f491e71c0e7be080be4ee187a35d","unresolved":false,"context_lines":[{"line_number":111,"context_line":"    def get_available_nodes(self, refresh\u003dFalse):"},{"line_number":112,"context_line":"        return [self._hypervisor_hostname]"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    def _mapping_power_stat(self, power_stat):"},{"line_number":115,"context_line":"        \"\"\"Translate power state to OpenStack defined constants.\"\"\""},{"line_number":116,"context_line":"        return ZVM_POWER_STAT.get(power_stat, power_state.NOSTATE)"},{"line_number":117,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_86f074cb","line":114,"range":{"start_line":114,"start_character":40,"end_line":114,"end_character":44},"updated":"2018-03-21 16:00:11.000000000","message":"ditto\n\n...and throughout","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"0b6f6ed2045277d15d370961cb361ddca33bc9d3","unresolved":false,"context_lines":[{"line_number":111,"context_line":"    def get_available_nodes(self, refresh\u003dFalse):"},{"line_number":112,"context_line":"        return [self._hypervisor_hostname]"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    def _mapping_power_stat(self, power_stat):"},{"line_number":115,"context_line":"        \"\"\"Translate power state to OpenStack defined constants.\"\"\""},{"line_number":116,"context_line":"        return ZVM_POWER_STAT.get(power_stat, power_state.NOSTATE)"},{"line_number":117,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_b7083128","line":114,"range":{"start_line":114,"start_character":23,"end_line":114,"end_character":27},"in_reply_to":"df7087c5_e6e130fe","updated":"2018-03-22 08:52:28.000000000","message":"Done","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5dac8c0b2015f491e71c0e7be080be4ee187a35d","unresolved":false,"context_lines":[{"line_number":123,"context_line":"                                         instance[\u0027name\u0027])"},{"line_number":124,"context_line":"        except exception.NovaException as err:"},{"line_number":125,"context_line":"            if err.kwargs[\u0027results\u0027][\u0027overallRC\u0027] \u003d\u003d 404:"},{"line_number":126,"context_line":"                # instance not exists"},{"line_number":127,"context_line":"                LOG.warning(\"Get power state of non-exist instance: %s\","},{"line_number":128,"context_line":"                            instance[\u0027name\u0027])"},{"line_number":129,"context_line":"                raise exception.InstanceNotFound(instance_id\u003dinstance[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_e6ca906c","line":126,"range":{"start_line":126,"start_character":27,"end_line":126,"end_character":37},"updated":"2018-03-21 16:00:11.000000000","message":"does not exist","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"0b6f6ed2045277d15d370961cb361ddca33bc9d3","unresolved":false,"context_lines":[{"line_number":123,"context_line":"                                         instance[\u0027name\u0027])"},{"line_number":124,"context_line":"        except exception.NovaException as err:"},{"line_number":125,"context_line":"            if err.kwargs[\u0027results\u0027][\u0027overallRC\u0027] \u003d\u003d 404:"},{"line_number":126,"context_line":"                # instance not exists"},{"line_number":127,"context_line":"                LOG.warning(\"Get power state of non-exist instance: %s\","},{"line_number":128,"context_line":"                            instance[\u0027name\u0027])"},{"line_number":129,"context_line":"                raise exception.InstanceNotFound(instance_id\u003dinstance[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_970ded36","line":126,"range":{"start_line":126,"start_character":27,"end_line":126,"end_character":37},"in_reply_to":"df7087c5_e6ca906c","updated":"2018-03-22 08:52:28.000000000","message":"Done","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5dac8c0b2015f491e71c0e7be080be4ee187a35d","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        except exception.NovaException as err:"},{"line_number":125,"context_line":"            if err.kwargs[\u0027results\u0027][\u0027overallRC\u0027] \u003d\u003d 404:"},{"line_number":126,"context_line":"                # instance not exists"},{"line_number":127,"context_line":"                LOG.warning(\"Get power state of non-exist instance: %s\","},{"line_number":128,"context_line":"                            instance[\u0027name\u0027])"},{"line_number":129,"context_line":"                raise exception.InstanceNotFound(instance_id\u003dinstance[\u0027name\u0027])"},{"line_number":130,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_86c95479","line":127,"range":{"start_line":127,"start_character":48,"end_line":127,"end_character":57},"updated":"2018-03-21 16:00:11.000000000","message":"nonexistent","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"0b6f6ed2045277d15d370961cb361ddca33bc9d3","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        except exception.NovaException as err:"},{"line_number":125,"context_line":"            if err.kwargs[\u0027results\u0027][\u0027overallRC\u0027] \u003d\u003d 404:"},{"line_number":126,"context_line":"                # instance not exists"},{"line_number":127,"context_line":"                LOG.warning(\"Get power state of non-exist instance: %s\","},{"line_number":128,"context_line":"                            instance[\u0027name\u0027])"},{"line_number":129,"context_line":"                raise exception.InstanceNotFound(instance_id\u003dinstance[\u0027name\u0027])"},{"line_number":130,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_371c2169","line":127,"range":{"start_line":127,"start_character":48,"end_line":127,"end_character":57},"in_reply_to":"df7087c5_86c95479","updated":"2018-03-22 08:52:28.000000000","message":"Done","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5dac8c0b2015f491e71c0e7be080be4ee187a35d","unresolved":false,"context_lines":[{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        return _instance_info"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    def _instance_exists(self, instance_name):"},{"line_number":139,"context_line":"        \"\"\"Overwrite this to using instance name as input parameter.\"\"\""},{"line_number":140,"context_line":"        return instance_name in self.list_instances()"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def instance_exists(self, instance):"},{"line_number":143,"context_line":"        \"\"\"Overwrite this to using instance name as input parameter.\"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_a6725848","line":140,"range":{"start_line":138,"start_character":0,"end_line":140,"end_character":53},"updated":"2018-03-21 16:00:11.000000000","message":"Why bother with this method?","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"0b6f6ed2045277d15d370961cb361ddca33bc9d3","unresolved":false,"context_lines":[{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        return _instance_info"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    def _instance_exists(self, instance_name):"},{"line_number":139,"context_line":"        \"\"\"Overwrite this to using instance name as input parameter.\"\"\""},{"line_number":140,"context_line":"        return instance_name in self.list_instances()"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def instance_exists(self, instance):"},{"line_number":143,"context_line":"        \"\"\"Overwrite this to using instance name as input parameter.\"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_d724c5b1","line":140,"range":{"start_line":138,"start_character":0,"end_line":140,"end_character":53},"in_reply_to":"df7087c5_a6725848","updated":"2018-03-22 08:52:28.000000000","message":"remove this now","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5dac8c0b2015f491e71c0e7be080be4ee187a35d","unresolved":false,"context_lines":[{"line_number":146,"context_line":"    def spawn(self, context, instance, image_meta, injected_files,"},{"line_number":147,"context_line":"              admin_password, allocations, network_info\u003dNone,"},{"line_number":148,"context_line":"              block_device_info\u003dNone, flavor\u003dNone):"},{"line_number":149,"context_line":"        LOG.info(_(\"Spawning new instance %s on zVM hypervisor\"),"},{"line_number":150,"context_line":"                 instance[\u0027name\u0027], instance\u003dinstance)"},{"line_number":151,"context_line":"        # For zVM instance, limit the maximum length of instance name to \\ 8"},{"line_number":152,"context_line":"        if len(instance[\u0027name\u0027]) \u003e 8:"}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_0646a47d","line":149,"range":{"start_line":149,"start_character":17,"end_line":149,"end_character":18},"updated":"2018-03-21 16:00:11.000000000","message":"We don\u0027t translate log messages anymore.  (Throughout)","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"0b6f6ed2045277d15d370961cb361ddca33bc9d3","unresolved":false,"context_lines":[{"line_number":146,"context_line":"    def spawn(self, context, instance, image_meta, injected_files,"},{"line_number":147,"context_line":"              admin_password, allocations, network_info\u003dNone,"},{"line_number":148,"context_line":"              block_device_info\u003dNone, flavor\u003dNone):"},{"line_number":149,"context_line":"        LOG.info(_(\"Spawning new instance %s on zVM hypervisor\"),"},{"line_number":150,"context_line":"                 instance[\u0027name\u0027], instance\u003dinstance)"},{"line_number":151,"context_line":"        # For zVM instance, limit the maximum length of instance name to \\ 8"},{"line_number":152,"context_line":"        if len(instance[\u0027name\u0027]) \u003e 8:"}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_773b79d0","line":149,"range":{"start_line":149,"start_character":17,"end_line":149,"end_character":18},"in_reply_to":"df7087c5_0646a47d","updated":"2018-03-22 08:52:28.000000000","message":"right, totally forget this","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5dac8c0b2015f491e71c0e7be080be4ee187a35d","unresolved":false,"context_lines":[{"line_number":148,"context_line":"              block_device_info\u003dNone, flavor\u003dNone):"},{"line_number":149,"context_line":"        LOG.info(_(\"Spawning new instance %s on zVM hypervisor\"),"},{"line_number":150,"context_line":"                 instance[\u0027name\u0027], instance\u003dinstance)"},{"line_number":151,"context_line":"        # For zVM instance, limit the maximum length of instance name to \\ 8"},{"line_number":152,"context_line":"        if len(instance[\u0027name\u0027]) \u003e 8:"},{"line_number":153,"context_line":"            msg \u003d (_(\"Don\u0027t support spawn vm on zVM hypervisor with instance \""},{"line_number":154,"context_line":"                \"name: %s, please change your instance_name_template to make \""}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_269c085c","line":151,"range":{"start_line":151,"start_character":72,"end_line":151,"end_character":74},"updated":"2018-03-21 16:00:11.000000000","message":"strike","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"0b6f6ed2045277d15d370961cb361ddca33bc9d3","unresolved":false,"context_lines":[{"line_number":148,"context_line":"              block_device_info\u003dNone, flavor\u003dNone):"},{"line_number":149,"context_line":"        LOG.info(_(\"Spawning new instance %s on zVM hypervisor\"),"},{"line_number":150,"context_line":"                 instance[\u0027name\u0027], instance\u003dinstance)"},{"line_number":151,"context_line":"        # For zVM instance, limit the maximum length of instance name to \\ 8"},{"line_number":152,"context_line":"        if len(instance[\u0027name\u0027]) \u003e 8:"},{"line_number":153,"context_line":"            msg \u003d (_(\"Don\u0027t support spawn vm on zVM hypervisor with instance \""},{"line_number":154,"context_line":"                \"name: %s, please change your instance_name_template to make \""}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_f74c6977","line":151,"range":{"start_line":151,"start_character":72,"end_line":151,"end_character":74},"in_reply_to":"df7087c5_269c085c","updated":"2018-03-22 08:52:28.000000000","message":"Done","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5dac8c0b2015f491e71c0e7be080be4ee187a35d","unresolved":false,"context_lines":[{"line_number":150,"context_line":"                 instance[\u0027name\u0027], instance\u003dinstance)"},{"line_number":151,"context_line":"        # For zVM instance, limit the maximum length of instance name to \\ 8"},{"line_number":152,"context_line":"        if len(instance[\u0027name\u0027]) \u003e 8:"},{"line_number":153,"context_line":"            msg \u003d (_(\"Don\u0027t support spawn vm on zVM hypervisor with instance \""},{"line_number":154,"context_line":"                \"name: %s, please change your instance_name_template to make \""},{"line_number":155,"context_line":"                \"sure the length of instance name is not longer than 8 \""},{"line_number":156,"context_line":"                \"characters\") % instance[\u0027name\u0027])"},{"line_number":157,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":158,"context_line":"        try:"},{"line_number":159,"context_line":"            spawn_start \u003d time.time()"}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_06e784e6","line":156,"range":{"start_line":153,"start_character":22,"end_line":156,"end_character":27},"updated":"2018-03-21 16:00:11.000000000","message":"Suggest reword:\n\nCan\u0027t spawn instance with name \u0027%s\u0027. The zVM hypervisor does not support instance names longer than 8 characters. Please change your instance_name_template accordingly.","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"0b6f6ed2045277d15d370961cb361ddca33bc9d3","unresolved":false,"context_lines":[{"line_number":150,"context_line":"                 instance[\u0027name\u0027], instance\u003dinstance)"},{"line_number":151,"context_line":"        # For zVM instance, limit the maximum length of instance name to \\ 8"},{"line_number":152,"context_line":"        if len(instance[\u0027name\u0027]) \u003e 8:"},{"line_number":153,"context_line":"            msg \u003d (_(\"Don\u0027t support spawn vm on zVM hypervisor with instance \""},{"line_number":154,"context_line":"                \"name: %s, please change your instance_name_template to make \""},{"line_number":155,"context_line":"                \"sure the length of instance name is not longer than 8 \""},{"line_number":156,"context_line":"                \"characters\") % instance[\u0027name\u0027])"},{"line_number":157,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":158,"context_line":"        try:"},{"line_number":159,"context_line":"            spawn_start \u003d time.time()"}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_1750fd09","line":156,"range":{"start_line":153,"start_character":22,"end_line":156,"end_character":27},"in_reply_to":"df7087c5_06e784e6","updated":"2018-03-22 08:52:28.000000000","message":"Done","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5dac8c0b2015f491e71c0e7be080be4ee187a35d","unresolved":false,"context_lines":[{"line_number":168,"context_line":"                                                      block_device_info)"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"            # Create the guest vm"},{"line_number":171,"context_line":"            self._reqh.call(\u0027guest_create\u0027, instance[\u0027name\u0027],"},{"line_number":172,"context_line":"                            instance[\u0027vcpus\u0027], instance[\u0027memory_mb\u0027],"},{"line_number":173,"context_line":"                            disk_list\u003ddisk_list)"},{"line_number":174,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_c6daece7","line":171,"updated":"2018-03-21 16:00:11.000000000","message":"It seems apparent that the instance name is the primary key you\u0027re using to identify VMs.  So I assume this bounces if an instance of the specified name already exists, yes?\n\nSo I wonder if, to save the trouble of mucking with the config drive, image and disk info, you might want to check if instance_exists right up front.  Recognizing that there could still be race conditions and you\u0027re not eliminating the failure possibility entirely, but it would save you some processing in most cases.","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"0b6f6ed2045277d15d370961cb361ddca33bc9d3","unresolved":false,"context_lines":[{"line_number":168,"context_line":"                                                      block_device_info)"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"            # Create the guest vm"},{"line_number":171,"context_line":"            self._reqh.call(\u0027guest_create\u0027, instance[\u0027name\u0027],"},{"line_number":172,"context_line":"                            instance[\u0027vcpus\u0027], instance[\u0027memory_mb\u0027],"},{"line_number":173,"context_line":"                            disk_list\u003ddisk_list)"},{"line_number":174,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_b7cb51a3","line":171,"in_reply_to":"df7087c5_c6daece7","updated":"2018-03-22 08:52:28.000000000","message":"it\u0027s primary key, I think you made a good suggestion, we can check before take action","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5dac8c0b2015f491e71c0e7be080be4ee187a35d","unresolved":false,"context_lines":[{"line_number":191,"context_line":""},{"line_number":192,"context_line":"            self._reqh.call(\u0027guest_start\u0027, instance[\u0027name\u0027])"},{"line_number":193,"context_line":"            spawn_time \u003d time.time() - spawn_start"},{"line_number":194,"context_line":"            LOG.info(_(\"Instance spawned succeeded in %s seconds\"),"},{"line_number":195,"context_line":"                     spawn_time, instance\u003dinstance)"},{"line_number":196,"context_line":"        except Exception as err:"},{"line_number":197,"context_line":"            with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_46633c1b","line":194,"range":{"start_line":194,"start_character":33,"end_line":194,"end_character":50},"updated":"2018-03-21 16:00:11.000000000","message":"\"spawn succeeded\" or \"spawned successfully\"","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"0b6f6ed2045277d15d370961cb361ddca33bc9d3","unresolved":false,"context_lines":[{"line_number":191,"context_line":""},{"line_number":192,"context_line":"            self._reqh.call(\u0027guest_start\u0027, instance[\u0027name\u0027])"},{"line_number":193,"context_line":"            spawn_time \u003d time.time() - spawn_start"},{"line_number":194,"context_line":"            LOG.info(_(\"Instance spawned succeeded in %s seconds\"),"},{"line_number":195,"context_line":"                     spawn_time, instance\u003dinstance)"},{"line_number":196,"context_line":"        except Exception as err:"},{"line_number":197,"context_line":"            with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_57fd15af","line":194,"range":{"start_line":194,"start_character":33,"end_line":194,"end_character":50},"in_reply_to":"df7087c5_46633c1b","updated":"2018-03-22 08:52:28.000000000","message":"Done","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5dac8c0b2015f491e71c0e7be080be4ee187a35d","unresolved":false,"context_lines":[{"line_number":199,"context_line":"                            \"failed with reason: %(err)s\"),"},{"line_number":200,"context_line":"                          {\u0027instance\u0027: instance[\u0027name\u0027], \u0027err\u0027: err},"},{"line_number":201,"context_line":"                          instance\u003dinstance)"},{"line_number":202,"context_line":"                self.destroy(context, instance, network_info,"},{"line_number":203,"context_line":"                             block_device_info)"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"    def _get_image_info(self, context, image_meta_id, os_distro):"},{"line_number":206,"context_line":"        spawn_image_exist \u003d False"}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_914af052","line":203,"range":{"start_line":202,"start_character":16,"end_line":203,"end_character":47},"updated":"2018-03-21 16:00:11.000000000","message":"If destroy raises, that exception will override the original.  Consider try: destroy; except: log and ignore","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"0b6f6ed2045277d15d370961cb361ddca33bc9d3","unresolved":false,"context_lines":[{"line_number":199,"context_line":"                            \"failed with reason: %(err)s\"),"},{"line_number":200,"context_line":"                          {\u0027instance\u0027: instance[\u0027name\u0027], \u0027err\u0027: err},"},{"line_number":201,"context_line":"                          instance\u003dinstance)"},{"line_number":202,"context_line":"                self.destroy(context, instance, network_info,"},{"line_number":203,"context_line":"                             block_device_info)"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"    def _get_image_info(self, context, image_meta_id, os_distro):"},{"line_number":206,"context_line":"        spawn_image_exist \u003d False"}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_97e16dff","line":203,"range":{"start_line":202,"start_character":16,"end_line":203,"end_character":47},"in_reply_to":"df7087c5_914af052","updated":"2018-03-22 08:52:28.000000000","message":"good point","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5dac8c0b2015f491e71c0e7be080be4ee187a35d","unresolved":false,"context_lines":[{"line_number":202,"context_line":"                self.destroy(context, instance, network_info,"},{"line_number":203,"context_line":"                             block_device_info)"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"    def _get_image_info(self, context, image_meta_id, os_distro):"},{"line_number":206,"context_line":"        spawn_image_exist \u003d False"},{"line_number":207,"context_line":"        try:"},{"line_number":208,"context_line":"            spawn_image_exist \u003d self._reqh.call(\u0027image_query\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_8ce65344","line":205,"updated":"2018-03-21 16:00:11.000000000","message":"Synthesizing all the comments below, I would write this method as:\n\n @lockutils.synchronized(\u0027IMAGE_INFO_SEMAPHORE\u0027)\n def _get_image_info(self, context, image_meta_id, os_distro):\n     try:\n         return self._reqh.call(\u0027image_query\u0027, imagename\u003dimage_meta_id)\n     except exception.NovaException as err:\n         with save_and_reraise_exception() as sare:\n             if err.kwargs[\u0027results\u0027][\u0027overallRC\u0027] \u003d\u003d 404:\n                 sare.reraise \u003d False\n                 self._import_spawn_image(context, image_meta_id, os_distro)\n                 return self._reqh.call(\u0027image_query\u0027, imagename\u003dimage_meta_id)","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5dac8c0b2015f491e71c0e7be080be4ee187a35d","unresolved":false,"context_lines":[{"line_number":208,"context_line":"            spawn_image_exist \u003d self._reqh.call(\u0027image_query\u0027,"},{"line_number":209,"context_line":"                                                imagename\u003dimage_meta_id)"},{"line_number":210,"context_line":"        except exception.NovaException as err:"},{"line_number":211,"context_line":"            if err.kwargs[\u0027results\u0027][\u0027overallRC\u0027] \u003d\u003d 404:"},{"line_number":212,"context_line":"                # image not exist, nothing to do"},{"line_number":213,"context_line":"                pass"},{"line_number":214,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_71315ca2","line":211,"updated":"2018-03-21 16:00:11.000000000","message":"Annoyingly, since it\u0027s technically possible that the conditional could itself raise, this would probably be better as:\n\n with save_and_reraise_exception() as sar:\n     if err.kwargs[\u0027results\u0027][\u0027overallRC\u0027] \u003d\u003d 404:\n         # Image does not exist - nothing to do\n         sar.reraise \u003d False","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5dac8c0b2015f491e71c0e7be080be4ee187a35d","unresolved":false,"context_lines":[{"line_number":209,"context_line":"                                                imagename\u003dimage_meta_id)"},{"line_number":210,"context_line":"        except exception.NovaException as err:"},{"line_number":211,"context_line":"            if err.kwargs[\u0027results\u0027][\u0027overallRC\u0027] \u003d\u003d 404:"},{"line_number":212,"context_line":"                # image not exist, nothing to do"},{"line_number":213,"context_line":"                pass"},{"line_number":214,"context_line":"            else:"},{"line_number":215,"context_line":"                raise err"}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_519bf8c7","line":212,"range":{"start_line":212,"start_character":24,"end_line":212,"end_character":27},"updated":"2018-03-21 16:00:11.000000000","message":"does not","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5dac8c0b2015f491e71c0e7be080be4ee187a35d","unresolved":false,"context_lines":[{"line_number":212,"context_line":"                # image not exist, nothing to do"},{"line_number":213,"context_line":"                pass"},{"line_number":214,"context_line":"            else:"},{"line_number":215,"context_line":"                raise err"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"        if not spawn_image_exist:"},{"line_number":218,"context_line":"            with self._imageop_semaphore:"}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_31a8c4d9","line":215,"range":{"start_line":215,"start_character":16,"end_line":215,"end_character":25},"updated":"2018-03-21 16:00:11.000000000","message":"just \u0027raise\u0027 to preserve the original context.","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5dac8c0b2015f491e71c0e7be080be4ee187a35d","unresolved":false,"context_lines":[{"line_number":215,"context_line":"                raise err"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"        if not spawn_image_exist:"},{"line_number":218,"context_line":"            with self._imageop_semaphore:"},{"line_number":219,"context_line":"                self._import_spawn_image(context, image_meta_id, os_distro)"},{"line_number":220,"context_line":"            return self._reqh.call(\u0027image_query\u0027, imagename\u003dimage_meta_id)"},{"line_number":221,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_f1e1ecfd","line":218,"range":{"start_line":218,"start_character":17,"end_line":218,"end_character":40},"updated":"2018-03-21 16:00:11.000000000","message":"Shouldn\u0027t you hold this semaphore while you\u0027re checking for the existence of the image?  Else you\u0027re open to a race.\n\nOtherwise, it kinda makes more sense to put the semaphore context manager inside _import_spawn_image itself.","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5dac8c0b2015f491e71c0e7be080be4ee187a35d","unresolved":false,"context_lines":[{"line_number":218,"context_line":"            with self._imageop_semaphore:"},{"line_number":219,"context_line":"                self._import_spawn_image(context, image_meta_id, os_distro)"},{"line_number":220,"context_line":"            return self._reqh.call(\u0027image_query\u0027, imagename\u003dimage_meta_id)"},{"line_number":221,"context_line":"        else:"},{"line_number":222,"context_line":"            return spawn_image_exist"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    def _set_disk_list(self, instance, image_name, block_device_info):"},{"line_number":225,"context_line":"        if instance[\u0027root_gb\u0027] \u003d\u003d 0:"}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_91abd01b","line":222,"range":{"start_line":221,"start_character":0,"end_line":222,"end_character":36},"updated":"2018-03-21 16:00:11.000000000","message":"This `else` clause would read better on the try/except above.  Or even just fold the return into the try.","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5dac8c0b2015f491e71c0e7be080be4ee187a35d","unresolved":false,"context_lines":[{"line_number":240,"context_line":"                        \u0027format\u0027: (eph[\u0027guest_format\u0027] or"},{"line_number":241,"context_line":"                                   CONF.default_ephemeral_format or"},{"line_number":242,"context_line":"                                   DEFAULT_EPH_DISK_FMT)}"},{"line_number":243,"context_line":"            eph_list.append(eph_dict)"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"        if eph_list:"},{"line_number":246,"context_line":"            disk_list.extend(eph_list)"}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_0c0ec38c","line":243,"range":{"start_line":243,"start_character":12,"end_line":243,"end_character":20},"updated":"2018-03-21 16:00:11.000000000","message":"Or disk_list.  Then you don\u0027t need eph_list at all, or the .extend below.","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"0b6f6ed2045277d15d370961cb361ddca33bc9d3","unresolved":false,"context_lines":[{"line_number":240,"context_line":"                        \u0027format\u0027: (eph[\u0027guest_format\u0027] or"},{"line_number":241,"context_line":"                                   CONF.default_ephemeral_format or"},{"line_number":242,"context_line":"                                   DEFAULT_EPH_DISK_FMT)}"},{"line_number":243,"context_line":"            eph_list.append(eph_dict)"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"        if eph_list:"},{"line_number":246,"context_line":"            disk_list.extend(eph_list)"}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_f72a29e5","line":243,"range":{"start_line":243,"start_character":12,"end_line":243,"end_character":20},"in_reply_to":"df7087c5_0c0ec38c","updated":"2018-03-22 08:52:28.000000000","message":"we need this eph_list because line 247 returned it","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5dac8c0b2015f491e71c0e7be080be4ee187a35d","unresolved":false,"context_lines":[{"line_number":242,"context_line":"                                   DEFAULT_EPH_DISK_FMT)}"},{"line_number":243,"context_line":"            eph_list.append(eph_dict)"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"        if eph_list:"},{"line_number":246,"context_line":"            disk_list.extend(eph_list)"},{"line_number":247,"context_line":"        return disk_list, eph_list"},{"line_number":248,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_ec390f3f","line":245,"range":{"start_line":245,"start_character":8,"end_line":245,"end_character":20},"updated":"2018-03-21 16:00:11.000000000","message":"meh, redundant.","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5dac8c0b2015f491e71c0e7be080be4ee187a35d","unresolved":false,"context_lines":[{"line_number":263,"context_line":"                            vm_name, os_distro, inst_nets)"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"    def _wait_network_ready(self, instance):"},{"line_number":266,"context_line":"        \"\"\"Wait until neutron zvm-agent add all NICs to vm\"\"\""},{"line_number":267,"context_line":"        inst_name \u003d instance[\u0027name\u0027]"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"        def _wait_for_nics_add_in_vm(inst_name, expiration):"}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_ccda0be8","line":266,"range":{"start_line":266,"start_character":40,"end_line":266,"end_character":43},"updated":"2018-03-21 16:00:11.000000000","message":"adds","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"0b6f6ed2045277d15d370961cb361ddca33bc9d3","unresolved":false,"context_lines":[{"line_number":263,"context_line":"                            vm_name, os_distro, inst_nets)"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"    def _wait_network_ready(self, instance):"},{"line_number":266,"context_line":"        \"\"\"Wait until neutron zvm-agent add all NICs to vm\"\"\""},{"line_number":267,"context_line":"        inst_name \u003d instance[\u0027name\u0027]"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"        def _wait_for_nics_add_in_vm(inst_name, expiration):"}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_773e192a","line":266,"range":{"start_line":266,"start_character":40,"end_line":266,"end_character":43},"in_reply_to":"df7087c5_ccda0be8","updated":"2018-03-22 08:52:28.000000000","message":"Done","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5dac8c0b2015f491e71c0e7be080be4ee187a35d","unresolved":false,"context_lines":[{"line_number":270,"context_line":"            if (CONF.zvm.reachable_timeout and"},{"line_number":271,"context_line":"                    timeutils.utcnow() \u003e expiration):"},{"line_number":272,"context_line":"                msg \u003d _(\"NIC update check failed \""},{"line_number":273,"context_line":"                        \"on instance:%s\") % instance.uuid"},{"line_number":274,"context_line":"                raise exception.NovaException(message\u003dmsg)"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_0c9fa303","line":273,"updated":"2018-03-21 16:00:11.000000000","message":"nit: space.","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"0b6f6ed2045277d15d370961cb361ddca33bc9d3","unresolved":false,"context_lines":[{"line_number":270,"context_line":"            if (CONF.zvm.reachable_timeout and"},{"line_number":271,"context_line":"                    timeutils.utcnow() \u003e expiration):"},{"line_number":272,"context_line":"                msg \u003d _(\"NIC update check failed \""},{"line_number":273,"context_line":"                        \"on instance:%s\") % instance.uuid"},{"line_number":274,"context_line":"                raise exception.NovaException(message\u003dmsg)"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_d737e54c","line":273,"in_reply_to":"df7087c5_0c9fa303","updated":"2018-03-22 08:52:28.000000000","message":"Done","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5dac8c0b2015f491e71c0e7be080be4ee187a35d","unresolved":false,"context_lines":[{"line_number":278,"context_line":"                                              inst_name)"},{"line_number":279,"context_line":"                if switch_dict and None not in switch_dict.values():"},{"line_number":280,"context_line":"                    for key, value in switch_dict.items():"},{"line_number":281,"context_line":"                        user_direct \u003d self._reqh.call("},{"line_number":282,"context_line":"                                            \u0027guest_get_definition_info\u0027,"},{"line_number":283,"context_line":"                                            inst_name)"},{"line_number":284,"context_line":"                        if not self._nic_coupled(user_direct, key, value):"},{"line_number":285,"context_line":"                            return"},{"line_number":286,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_f70d5c35","line":283,"range":{"start_line":281,"start_character":24,"end_line":283,"end_character":54},"updated":"2018-03-21 16:00:11.000000000","message":"Do this outside the loop","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"0b6f6ed2045277d15d370961cb361ddca33bc9d3","unresolved":false,"context_lines":[{"line_number":278,"context_line":"                                              inst_name)"},{"line_number":279,"context_line":"                if switch_dict and None not in switch_dict.values():"},{"line_number":280,"context_line":"                    for key, value in switch_dict.items():"},{"line_number":281,"context_line":"                        user_direct \u003d self._reqh.call("},{"line_number":282,"context_line":"                                            \u0027guest_get_definition_info\u0027,"},{"line_number":283,"context_line":"                                            inst_name)"},{"line_number":284,"context_line":"                        if not self._nic_coupled(user_direct, key, value):"},{"line_number":285,"context_line":"                            return"},{"line_number":286,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_4a3008e9","line":283,"range":{"start_line":281,"start_character":24,"end_line":283,"end_character":54},"in_reply_to":"df7087c5_f70d5c35","updated":"2018-03-22 08:52:28.000000000","message":"Done","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5dac8c0b2015f491e71c0e7be080be4ee187a35d","unresolved":false,"context_lines":[{"line_number":290,"context_line":""},{"line_number":291,"context_line":"            except Exception as e:"},{"line_number":292,"context_line":"                # Ignore any zvm driver exceptions"},{"line_number":293,"context_line":"                LOG.info(_(\u0027encounter error %s during get vswitch info\u0027),"},{"line_number":294,"context_line":"                         e.format_message(), instance\u003dinstance)"},{"line_number":295,"context_line":"                return"},{"line_number":296,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_3773d4b3","line":293,"range":{"start_line":293,"start_character":44,"end_line":293,"end_character":46},"updated":"2018-03-21 16:00:11.000000000","message":"put this at the end","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"0b6f6ed2045277d15d370961cb361ddca33bc9d3","unresolved":false,"context_lines":[{"line_number":290,"context_line":""},{"line_number":291,"context_line":"            except Exception as e:"},{"line_number":292,"context_line":"                # Ignore any zvm driver exceptions"},{"line_number":293,"context_line":"                LOG.info(_(\u0027encounter error %s during get vswitch info\u0027),"},{"line_number":294,"context_line":"                         e.format_message(), instance\u003dinstance)"},{"line_number":295,"context_line":"                return"},{"line_number":296,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_8a3b80c6","line":293,"range":{"start_line":293,"start_character":44,"end_line":293,"end_character":46},"in_reply_to":"df7087c5_3773d4b3","updated":"2018-03-22 08:52:28.000000000","message":"Done","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5dac8c0b2015f491e71c0e7be080be4ee187a35d","unresolved":false,"context_lines":[{"line_number":296,"context_line":""},{"line_number":297,"context_line":"            # Enter here means all NIC granted"},{"line_number":298,"context_line":"            LOG.info(_(\"All NICs are added in user direct for \""},{"line_number":299,"context_line":"                         \"instance %s.\"), inst_name, instance\u003dinstance)"},{"line_number":300,"context_line":"            raise loopingcall.LoopingCallDone()"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"        expiration \u003d timeutils.utcnow() + datetime.timedelta("}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_9763c0dc","line":299,"range":{"start_line":299,"start_character":23,"end_line":299,"end_character":25},"updated":"2018-03-21 16:00:11.000000000","message":"nit: indent","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5dac8c0b2015f491e71c0e7be080be4ee187a35d","unresolved":false,"context_lines":[{"line_number":301,"context_line":""},{"line_number":302,"context_line":"        expiration \u003d timeutils.utcnow() + datetime.timedelta("},{"line_number":303,"context_line":"                             seconds\u003dCONF.zvm.reachable_timeout)"},{"line_number":304,"context_line":"        LOG.info(_(\"Wait neturon-zvm-agent to add NICs to %s user direct.\"),"},{"line_number":305,"context_line":"                 inst_name, instance\u003dinstance)"},{"line_number":306,"context_line":"        timer \u003d loopingcall.FixedIntervalLoopingCall("},{"line_number":307,"context_line":"                    _wait_for_nics_add_in_vm, inst_name, expiration)"}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_574d2870","line":304,"range":{"start_line":304,"start_character":20,"end_line":304,"end_character":25},"updated":"2018-03-21 16:00:11.000000000","message":"Wait for","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"0b6f6ed2045277d15d370961cb361ddca33bc9d3","unresolved":false,"context_lines":[{"line_number":301,"context_line":""},{"line_number":302,"context_line":"        expiration \u003d timeutils.utcnow() + datetime.timedelta("},{"line_number":303,"context_line":"                             seconds\u003dCONF.zvm.reachable_timeout)"},{"line_number":304,"context_line":"        LOG.info(_(\"Wait neturon-zvm-agent to add NICs to %s user direct.\"),"},{"line_number":305,"context_line":"                 inst_name, instance\u003dinstance)"},{"line_number":306,"context_line":"        timer \u003d loopingcall.FixedIntervalLoopingCall("},{"line_number":307,"context_line":"                    _wait_for_nics_add_in_vm, inst_name, expiration)"}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_4ab3284e","line":304,"range":{"start_line":304,"start_character":20,"end_line":304,"end_character":25},"in_reply_to":"df7087c5_574d2870","updated":"2018-03-22 08:52:28.000000000","message":"Done","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5dac8c0b2015f491e71c0e7be080be4ee187a35d","unresolved":false,"context_lines":[{"line_number":307,"context_line":"                    _wait_for_nics_add_in_vm, inst_name, expiration)"},{"line_number":308,"context_line":"        timer.start(interval\u003d10).wait()"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"    def _nic_coupled(self, user_direct, vdev, vswitch):"},{"line_number":311,"context_line":"        if vswitch is None:"},{"line_number":312,"context_line":"            return False"},{"line_number":313,"context_line":"        direct_info \u003d user_direct[\u0027user_direct\u0027]"},{"line_number":314,"context_line":"        nic_str \u003d (\"NICDEF %s TYPE QDIO LAN SYSTEM %s\" %"},{"line_number":315,"context_line":"                                (vdev.upper(), vswitch.upper()))"},{"line_number":316,"context_line":"        for info in direct_info:"},{"line_number":317,"context_line":"            if nic_str in info:"},{"line_number":318,"context_line":"                return True"},{"line_number":319,"context_line":"        return False"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"    def _get_host(self):"},{"line_number":322,"context_line":"        return \u0027\u0027.join([pwd.getpwuid(os.geteuid()).pw_name, \u0027@\u0027, CONF.my_ip])"}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_cc0d2b3f","line":319,"range":{"start_line":310,"start_character":0,"end_line":319,"end_character":20},"updated":"2018-03-21 16:00:11.000000000","message":"weird that this is an instance method instead of an internal method in _wait_network_ready like _wait_for_nics_add_in_vm.\n\n...or a staticmethod; or a module method (here or in utils).","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"0b6f6ed2045277d15d370961cb361ddca33bc9d3","unresolved":false,"context_lines":[{"line_number":307,"context_line":"                    _wait_for_nics_add_in_vm, inst_name, expiration)"},{"line_number":308,"context_line":"        timer.start(interval\u003d10).wait()"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"    def _nic_coupled(self, user_direct, vdev, vswitch):"},{"line_number":311,"context_line":"        if vswitch is None:"},{"line_number":312,"context_line":"            return False"},{"line_number":313,"context_line":"        direct_info \u003d user_direct[\u0027user_direct\u0027]"},{"line_number":314,"context_line":"        nic_str \u003d (\"NICDEF %s TYPE QDIO LAN SYSTEM %s\" %"},{"line_number":315,"context_line":"                                (vdev.upper(), vswitch.upper()))"},{"line_number":316,"context_line":"        for info in direct_info:"},{"line_number":317,"context_line":"            if nic_str in info:"},{"line_number":318,"context_line":"                return True"},{"line_number":319,"context_line":"        return False"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"    def _get_host(self):"},{"line_number":322,"context_line":"        return \u0027\u0027.join([pwd.getpwuid(os.geteuid()).pw_name, \u0027@\u0027, CONF.my_ip])"}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_ea9a3cc3","line":319,"range":{"start_line":310,"start_character":0,"end_line":319,"end_character":20},"in_reply_to":"df7087c5_cc0d2b3f","updated":"2018-03-22 08:52:28.000000000","message":"it\u0027s for test purpose ...","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5dac8c0b2015f491e71c0e7be080be4ee187a35d","unresolved":false,"context_lines":[{"line_number":319,"context_line":"        return False"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"    def _get_host(self):"},{"line_number":322,"context_line":"        return \u0027\u0027.join([pwd.getpwuid(os.geteuid()).pw_name, \u0027@\u0027, CONF.my_ip])"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"    def _import_spawn_image(self, context, image_href, image_os_version):"},{"line_number":325,"context_line":"        LOG.debug(\"Downloading the image %s from glance to nova compute \""}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_3781944b","line":322,"updated":"2018-03-21 16:00:11.000000000","message":"Why not cache this?  (Or set it as an instance attribute in __init__.)  It won\u0027t change for a given process, right?","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"0b6f6ed2045277d15d370961cb361ddca33bc9d3","unresolved":false,"context_lines":[{"line_number":319,"context_line":"        return False"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"    def _get_host(self):"},{"line_number":322,"context_line":"        return \u0027\u0027.join([pwd.getpwuid(os.geteuid()).pw_name, \u0027@\u0027, CONF.my_ip])"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"    def _import_spawn_image(self, context, image_href, image_os_version):"},{"line_number":325,"context_line":"        LOG.debug(\"Downloading the image %s from glance to nova compute \""}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_0a3a1097","line":322,"in_reply_to":"df7087c5_3781944b","updated":"2018-03-22 08:52:28.000000000","message":"correct, I will do modification","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5dac8c0b2015f491e71c0e7be080be4ee187a35d","unresolved":false,"context_lines":[{"line_number":340,"context_line":"        if self._instance_exists(inst_name):"},{"line_number":341,"context_line":"            LOG.info(_(\"Destroying instance %s\"), inst_name,"},{"line_number":342,"context_line":"                     instance\u003dinstance)"},{"line_number":343,"context_line":"            self._reqh.call(\u0027guest_delete\u0027, inst_name)"},{"line_number":344,"context_line":"        else:"},{"line_number":345,"context_line":"            LOG.warning(_(\u0027Instance %s does not exist\u0027), inst_name,"},{"line_number":346,"context_line":"                        instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_37cf54b1","line":343,"range":{"start_line":343,"start_character":0,"end_line":343,"end_character":54},"updated":"2018-03-21 16:00:11.000000000","message":"potential race where the instance gets deleted between L340 and here - trap and ignore 404?","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5dac8c0b2015f491e71c0e7be080be4ee187a35d","unresolved":false,"context_lines":[{"line_number":346,"context_line":"                        instance\u003dinstance)"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"    def get_host_uptime(self):"},{"line_number":349,"context_line":"        return self._ipl_time"}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_975420cc","line":349,"range":{"start_line":349,"start_character":15,"end_line":349,"end_character":29},"updated":"2018-03-21 16:00:11.000000000","message":"Shouldn\u0027t this be some form of\n\n now() - self._ipl_time\n\n?","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ffe1b2668700b3083970f010bbcf84073f879d67","unresolved":false,"context_lines":[{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        self._reqh \u003d zvmutils.zVMConnectorRequestHandler()"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"\u003c\u003c\u003c\u003c\u003c\u003c\u003c HEAD"},{"line_number":63,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":64,"context_line":"        # get hypervisor host name"},{"line_number":65,"context_line":"        res \u003d self._reqh.call(\u0027host_get_info\u0027)"},{"line_number":66,"context_line":"        self._hypervisor_hostname \u003d res[\u0027hypervisor_hostname\u0027]"}],"source_content_type":"text/x-python","patch_set":17,"id":"bf659307_584b7d86","line":63,"range":{"start_line":62,"start_character":0,"end_line":63,"end_character":7},"updated":"2018-03-23 16:31:33.000000000","message":"merge conflict leftovers","commit_id":"f1d806643673a41628939970bfb27aa431f0ba04"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"7db31eb88d1790222755205b0ff52db2b25c7cf3","unresolved":false,"context_lines":[{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        self._reqh \u003d zvmutils.zVMConnectorRequestHandler()"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"\u003c\u003c\u003c\u003c\u003c\u003c\u003c HEAD"},{"line_number":63,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":64,"context_line":"        # get hypervisor host name"},{"line_number":65,"context_line":"        res \u003d self._reqh.call(\u0027host_get_info\u0027)"},{"line_number":66,"context_line":"        self._hypervisor_hostname \u003d res[\u0027hypervisor_hostname\u0027]"}],"source_content_type":"text/x-python","patch_set":17,"id":"bf659307_4f65b1e0","line":63,"range":{"start_line":62,"start_character":0,"end_line":63,"end_character":7},"in_reply_to":"bf659307_584b7d86","updated":"2018-03-27 06:10:17.000000000","message":"Done","commit_id":"f1d806643673a41628939970bfb27aa431f0ba04"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ffe1b2668700b3083970f010bbcf84073f879d67","unresolved":false,"context_lines":[{"line_number":209,"context_line":"                    self.destroy(context, instance, network_info,"},{"line_number":210,"context_line":"                                 block_device_info)"},{"line_number":211,"context_line":"                except Exception as err:"},{"line_number":212,"context_line":"                    LOG.warning(\"Failed to destroy instance\","},{"line_number":213,"context_line":"                                instance\u003dinstance)"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    @lockutils.synchronized(\u0027IMAGE_INFO_SEMAPHORE\u0027)"}],"source_content_type":"text/x-python","patch_set":17,"id":"bf659307_db11c755","line":212,"range":{"start_line":212,"start_character":24,"end_line":212,"end_character":31},"updated":"2018-03-23 16:31:33.000000000","message":"or LOG.exception if you want it to have the stack trace.","commit_id":"f1d806643673a41628939970bfb27aa431f0ba04"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"7db31eb88d1790222755205b0ff52db2b25c7cf3","unresolved":false,"context_lines":[{"line_number":209,"context_line":"                    self.destroy(context, instance, network_info,"},{"line_number":210,"context_line":"                                 block_device_info)"},{"line_number":211,"context_line":"                except Exception as err:"},{"line_number":212,"context_line":"                    LOG.warning(\"Failed to destroy instance\","},{"line_number":213,"context_line":"                                instance\u003dinstance)"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    @lockutils.synchronized(\u0027IMAGE_INFO_SEMAPHORE\u0027)"}],"source_content_type":"text/x-python","patch_set":17,"id":"bf659307_af9b2dc7","line":212,"range":{"start_line":212,"start_character":24,"end_line":212,"end_character":31},"in_reply_to":"bf659307_db11c755","updated":"2018-03-27 06:10:17.000000000","message":"good suggestion","commit_id":"f1d806643673a41628939970bfb27aa431f0ba04"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ffe1b2668700b3083970f010bbcf84073f879d67","unresolved":false,"context_lines":[{"line_number":292,"context_line":""},{"line_number":293,"context_line":"            except Exception as e:"},{"line_number":294,"context_line":"                # Ignore any zvm driver exceptions"},{"line_number":295,"context_line":"                LOG.info(\"Get vswitch info meet error: %s\","},{"line_number":296,"context_line":"                         e.format_message(), instance\u003dinstance)"},{"line_number":297,"context_line":"                return"},{"line_number":298,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"bf659307_7b519b0e","line":295,"range":{"start_line":295,"start_character":43,"end_line":295,"end_character":47},"updated":"2018-03-23 16:31:33.000000000","message":"strike","commit_id":"f1d806643673a41628939970bfb27aa431f0ba04"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"7db31eb88d1790222755205b0ff52db2b25c7cf3","unresolved":false,"context_lines":[{"line_number":292,"context_line":""},{"line_number":293,"context_line":"            except Exception as e:"},{"line_number":294,"context_line":"                # Ignore any zvm driver exceptions"},{"line_number":295,"context_line":"                LOG.info(\"Get vswitch info meet error: %s\","},{"line_number":296,"context_line":"                         e.format_message(), instance\u003dinstance)"},{"line_number":297,"context_line":"                return"},{"line_number":298,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"bf659307_6fa51504","line":295,"range":{"start_line":295,"start_character":43,"end_line":295,"end_character":47},"in_reply_to":"bf659307_7b519b0e","updated":"2018-03-27 06:10:17.000000000","message":"Done","commit_id":"f1d806643673a41628939970bfb27aa431f0ba04"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ffe1b2668700b3083970f010bbcf84073f879d67","unresolved":false,"context_lines":[{"line_number":340,"context_line":"                self._reqh.call(\u0027guest_delete\u0027, instance.name)"},{"line_number":341,"context_line":"            except exception.NovaException as err:"},{"line_number":342,"context_line":"                if err.kwargs[\u0027results\u0027][\u0027overallRC\u0027] \u003d\u003d 404:"},{"line_number":343,"context_line":"                    LOG.info(\"guest disappear during destory\","},{"line_number":344,"context_line":"                             instance\u003dinstance)"},{"line_number":345,"context_line":"                else:"},{"line_number":346,"context_line":"                    raise"}],"source_content_type":"text/x-python","patch_set":17,"id":"bf659307_5b75b797","line":343,"range":{"start_line":343,"start_character":53,"end_line":343,"end_character":60},"updated":"2018-03-23 16:31:33.000000000","message":"destroy","commit_id":"f1d806643673a41628939970bfb27aa431f0ba04"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"7db31eb88d1790222755205b0ff52db2b25c7cf3","unresolved":false,"context_lines":[{"line_number":340,"context_line":"                self._reqh.call(\u0027guest_delete\u0027, instance.name)"},{"line_number":341,"context_line":"            except exception.NovaException as err:"},{"line_number":342,"context_line":"                if err.kwargs[\u0027results\u0027][\u0027overallRC\u0027] \u003d\u003d 404:"},{"line_number":343,"context_line":"                    LOG.info(\"guest disappear during destory\","},{"line_number":344,"context_line":"                             instance\u003dinstance)"},{"line_number":345,"context_line":"                else:"},{"line_number":346,"context_line":"                    raise"}],"source_content_type":"text/x-python","patch_set":17,"id":"bf659307_8fa8a9db","line":343,"range":{"start_line":343,"start_character":53,"end_line":343,"end_character":60},"in_reply_to":"bf659307_5b75b797","updated":"2018-03-27 06:10:17.000000000","message":"Done","commit_id":"f1d806643673a41628939970bfb27aa431f0ba04"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ffe1b2668700b3083970f010bbcf84073f879d67","unresolved":false,"context_lines":[{"line_number":348,"context_line":"            LOG.warning(\"Instance does not exist\", instance\u003dinstance)"},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"    def get_host_uptime(self):"},{"line_number":351,"context_line":"        return self._ipl_time"},{"line_number":352,"context_line":"\u003e\u003e\u003e\u003e\u003e\u003e\u003e 005926a... z/VM Driver: Spawn and destroy function of z/VM driver"}],"source_content_type":"text/x-python","patch_set":17,"id":"bf659307_7b7afb88","line":351,"range":{"start_line":351,"start_character":20,"end_line":351,"end_character":29},"updated":"2018-03-23 16:31:33.000000000","message":"see PS13 comment","commit_id":"f1d806643673a41628939970bfb27aa431f0ba04"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"1ca2e3c033955ac56cfb3bda8c2061d95d2fc5e2","unresolved":false,"context_lines":[{"line_number":348,"context_line":"            LOG.warning(\"Instance does not exist\", instance\u003dinstance)"},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"    def get_host_uptime(self):"},{"line_number":351,"context_line":"        return self._ipl_time"},{"line_number":352,"context_line":"\u003e\u003e\u003e\u003e\u003e\u003e\u003e 005926a... z/VM Driver: Spawn and destroy function of z/VM driver"}],"source_content_type":"text/x-python","patch_set":17,"id":"bf659307_4f1db10d","line":351,"range":{"start_line":351,"start_character":20,"end_line":351,"end_character":29},"in_reply_to":"bf659307_0fb49934","updated":"2018-03-27 06:22:31.000000000","message":"ok, I might argue this, because as you can see, we allow nova compute to be running NOT on the host that it manage, for example, run nova-compute in one x86 and manage the other x86, also, vmware driver don\u0027t suport this as well, \nso maybe current time - _ipl_time is not a good way ?\njust provide virt specified time with some prefix might be acceptable?\n\nour return value is already this:\n\nIPL at 03/26/18 12:32:36 EDT","commit_id":"f1d806643673a41628939970bfb27aa431f0ba04"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"6d42d63b9480b020755bc965cf6383ec827f21a7","unresolved":false,"context_lines":[{"line_number":348,"context_line":"            LOG.warning(\"Instance does not exist\", instance\u003dinstance)"},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"    def get_host_uptime(self):"},{"line_number":351,"context_line":"        return self._ipl_time"},{"line_number":352,"context_line":"\u003e\u003e\u003e\u003e\u003e\u003e\u003e 005926a... z/VM Driver: Spawn and destroy function of z/VM driver"}],"source_content_type":"text/x-python","patch_set":17,"id":"bf659307_9ab8ac76","line":351,"range":{"start_line":351,"start_character":20,"end_line":351,"end_character":29},"in_reply_to":"bf659307_4f1db10d","updated":"2018-03-28 18:58:25.000000000","message":"Maybe I don\u0027t understand what this value is supposed to look like.  I\u0027ll leave it for other reviewers to vet.  But the term \u0027uptime\u0027 - at least in Linux-speak - means \u0027how long has it been up\u0027, not \u0027when did it come up\u0027.","commit_id":"f1d806643673a41628939970bfb27aa431f0ba04"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"7db31eb88d1790222755205b0ff52db2b25c7cf3","unresolved":false,"context_lines":[{"line_number":348,"context_line":"            LOG.warning(\"Instance does not exist\", instance\u003dinstance)"},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"    def get_host_uptime(self):"},{"line_number":351,"context_line":"        return self._ipl_time"},{"line_number":352,"context_line":"\u003e\u003e\u003e\u003e\u003e\u003e\u003e 005926a... z/VM Driver: Spawn and destroy function of z/VM driver"}],"source_content_type":"text/x-python","patch_set":17,"id":"bf659307_0fb49934","line":351,"range":{"start_line":351,"start_character":20,"end_line":351,"end_character":29},"in_reply_to":"bf659307_7b7afb88","updated":"2018-03-27 06:10:17.000000000","message":"right, forget this","commit_id":"f1d806643673a41628939970bfb27aa431f0ba04"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"6ca85f0053e3e77a5a2b18976b2625f203ebac1d","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        return self._hypervisor.get_available_nodes(refresh\u003drefresh)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def get_info(self, instance):"},{"line_number":86,"context_line":"        _guest \u003d guest.Guest(self._hypervisor, instance)"},{"line_number":87,"context_line":"        return _guest.get_info()"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    def instance_exists(self, instance):"}],"source_content_type":"text/x-python","patch_set":25,"id":"bf659307_8d9a4311","line":86,"updated":"2018-04-04 07:40:07.000000000","message":"The guest concept you have introduced confusing me. We are no in the same logic of libvirt.\n\nIt\u0027s the hypervisor who is grabing information of the guest not the guest itself.\n\nThat should be something like:\n\n  return self._hypervisor.get_info(instance)","commit_id":"1a9cefdd0f8869d3dda9415f65c7064ddc7c70b5"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"bc2c0b643d6ce0397a5ba7f90284c504d77867b1","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        return self._hypervisor.get_available_nodes(refresh\u003drefresh)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def get_info(self, instance):"},{"line_number":86,"context_line":"        _guest \u003d guest.Guest(self._hypervisor, instance)"},{"line_number":87,"context_line":"        return _guest.get_info()"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    def instance_exists(self, instance):"}],"source_content_type":"text/x-python","patch_set":25,"id":"bf659307_5815c747","line":86,"in_reply_to":"bf659307_8d9a4311","updated":"2018-04-04 08:09:35.000000000","message":"ok, we are in the public holiday tomorrow so I will update here with more detail/patches on the suggestion you made below \nearly next week\n\noriginally , I thought Guest is a class that will have functions and called by upper layer, which means , only 1 Guest class instance in the driver class and it\u0027s used by driver to interact with guest concept functions, and this is actually our out of tree design and implementation\n\nI then given another thought is maybe we can abstract the Guest concept into something that whenever we want to interact with guest, we will create a guest instance from guest calss and use it , at least at that time it\u0027s more clear logic to me \n\nso this functions means:\nyou need info for a guest, then you init a guest instance from guest class then call the get_info of the classmethod, it knows where to get the info \n\n\nlibvirt implementation seems have similar thoughts here\n\n5389\n5390     def get_info(self, instance):\n5391         \"\"\"Retrieve information from libvirt for a specific instance.\n5392\n5393         If a libvirt error is encountered during lookup, we might raise a\n5394         NotFound exception or Error exception depending on how severe the\n5395         libvirt error is.\n5396\n5397         :param instance: nova.objects.instance.Instance object\n5398         :returns: An InstanceInfo object\n5399         \"\"\"\n5400         guest \u003d self._host.get_guest(instance)\n5401         # Kind of ugly but we need to pass host to get_info as for a\n5402         # workaround, see libvirt/compat.py\n5403         return guest.get_info(self._host)","commit_id":"1a9cefdd0f8869d3dda9415f65c7064ddc7c70b5"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"6ca85f0053e3e77a5a2b18976b2625f203ebac1d","unresolved":false,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    def instance_exists(self, instance):"},{"line_number":90,"context_line":"        \"\"\"Overwrite this to using instance name as input parameter.\"\"\""},{"line_number":91,"context_line":"        _guest \u003d guest.Guest(self._hypervisor, instance)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        return _guest.guest_exists()"},{"line_number":94,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"bf659307_ad9067ee","line":91,"updated":"2018-04-04 07:40:07.000000000","message":"Same story here.","commit_id":"1a9cefdd0f8869d3dda9415f65c7064ddc7c70b5"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"6ca85f0053e3e77a5a2b18976b2625f203ebac1d","unresolved":false,"context_lines":[{"line_number":97,"context_line":"              block_device_info\u003dNone, flavor\u003dNone):"},{"line_number":98,"context_line":"        _guest \u003d guest.Guest(self._hypervisor, instance)"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        _guest.spawn(context, image_meta, injected_files,"},{"line_number":101,"context_line":"                     admin_password, allocations,"},{"line_number":102,"context_line":"                     network_info\u003dnetwork_info,"},{"line_number":103,"context_line":"                     block_device_info\u003dblock_device_info, flavor\u003dflavor)"}],"source_content_type":"text/x-python","patch_set":25,"id":"bf659307_6d656f1d","line":100,"updated":"2018-04-04 07:40:07.000000000","message":"Same here, that does not look right. At least if you really want that Guest concept - You should have something like:\n\n  guest \u003d self.hypervisor.create(instance, disks)\n  guest.deploy(image, remote_host)\n  guest.configure_networks(networks)\n  guest.configure_ephemerals(ephs)\n  guest.start()\n\nAlso the logic around building network, disks, admin_password should remain in the driver that because you will probably have to reuse that same logic in other functions of the API.\n\nBut all the functions in Guest should use Hypervisor anyway, since it\u0027s the only way to interact with zvm.\n\nBasically you have:\n\n       Hypervisor\n\n  Guest          Host\n\nBut not sure you need of all that.","commit_id":"1a9cefdd0f8869d3dda9415f65c7064ddc7c70b5"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f6bed38e2927805bad2e74ab89a5547a6d36aea7","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            raise exception.ZVMDriverException(error\u003derror)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        # Try a test to ensure length of give guest is smaller than 8"},{"line_number":51,"context_line":"        _test_instance \u003d CONF.instance_name_template % 0"},{"line_number":52,"context_line":"        # For zVM instance, limit the maximum length of instance name to 8"},{"line_number":53,"context_line":"        if len(_test_instance) \u003e 8:"},{"line_number":54,"context_line":"            msg \u003d _(\"Can\u0027t spawn instance with template \u0027%s\u0027, \""}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_a82a2e7b","line":51,"range":{"start_line":51,"start_character":25,"end_line":51,"end_character":56},"updated":"2018-04-09 20:34:04.000000000","message":"This assumes that the instance_name_template is only ever going to use the %d form.  Is there some reason e.g. the following would be invalid:\n\n instance_name_template \u003d \"%(uuid).8s\"\n\n(i.e. use the first 8 characters of the instance UUID)","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"706b05bab8a6be87cea6322cf740131d68569efc","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            raise exception.ZVMDriverException(error\u003derror)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        # Try a test to ensure length of give guest is smaller than 8"},{"line_number":51,"context_line":"        _test_instance \u003d CONF.instance_name_template % 0"},{"line_number":52,"context_line":"        # For zVM instance, limit the maximum length of instance name to 8"},{"line_number":53,"context_line":"        if len(_test_instance) \u003e 8:"},{"line_number":54,"context_line":"            msg \u003d _(\"Can\u0027t spawn instance with template \u0027%s\u0027, \""}],"source_content_type":"text/x-python","patch_set":31,"id":"5f7c97a3_c56106ab","line":51,"range":{"start_line":51,"start_character":25,"end_line":51,"end_character":56},"in_reply_to":"bf659307_a0cc506a","updated":"2018-06-01 05:03:41.000000000","message":"yes, you are right, that will be a limitation and that\u0027s why we have to document the restriction here about the limit and recommend to use something like abc%5x which should be enough for a cloud because 2^20 or ab%6x to be even bigger","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"b3b16a6f5a4a12b678867f1e65b402ec8521eea4","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            raise exception.ZVMDriverException(error\u003derror)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        # Try a test to ensure length of give guest is smaller than 8"},{"line_number":51,"context_line":"        _test_instance \u003d CONF.instance_name_template % 0"},{"line_number":52,"context_line":"        # For zVM instance, limit the maximum length of instance name to 8"},{"line_number":53,"context_line":"        if len(_test_instance) \u003e 8:"},{"line_number":54,"context_line":"            msg \u003d _(\"Can\u0027t spawn instance with template \u0027%s\u0027, \""}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_b75d827a","line":51,"range":{"start_line":51,"start_character":25,"end_line":51,"end_character":56},"in_reply_to":"bf659307_a82a2e7b","updated":"2018-04-11 03:31:52.000000000","message":"because there are 8 chars limitation, we can\u0027t \nsupport that template, so %x/%d is enough for us to go","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ce2e26742f932c69c4bb3c0deae732394df8d3b7","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            raise exception.ZVMDriverException(error\u003derror)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        # Try a test to ensure length of give guest is smaller than 8"},{"line_number":51,"context_line":"        _test_instance \u003d CONF.instance_name_template % 0"},{"line_number":52,"context_line":"        # For zVM instance, limit the maximum length of instance name to 8"},{"line_number":53,"context_line":"        if len(_test_instance) \u003e 8:"},{"line_number":54,"context_line":"            msg \u003d _(\"Can\u0027t spawn instance with template \u0027%s\u0027, \""}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_a0cc506a","line":51,"range":{"start_line":51,"start_character":25,"end_line":51,"end_character":56},"in_reply_to":"bf659307_b75d827a","updated":"2018-04-11 12:30:37.000000000","message":"Ah, and this check will raise TypeError if the template uses the dict form.  So you should catch that and raise an exception explaining that you only support the simpler format.  Otherwise the user will get e.g. \"KeyError: uuid\" at deploy time, which isn\u0027t very useful.\n\nAlso it occurs to me that this check is only going to help you so far.  A template like \"zvminst%d\" will pass the above check... and break as soon as we get a two-digit instance ID.\n\nI\u0027m sure I\u0027m overthinking this at this point.  I would never have noticed if you hadn\u0027t had this method in the first place.","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f6bed38e2927805bad2e74ab89a5547a6d36aea7","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        return _guest.get_info()"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def instance_exists(self, instance):"},{"line_number":103,"context_line":"        \"\"\"Overwrite this to using instance name as input parameter.\"\"\""},{"line_number":104,"context_line":"        _guest \u003d guest.Guest(self._hypervisor, instance)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        return _guest.guest_exists()"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_08d0faf6","line":103,"range":{"start_line":103,"start_character":8,"end_line":103,"end_character":71},"updated":"2018-04-09 20:34:04.000000000","message":"Eh?  Nothing here is using the instance name.\n\nAlso, is there a reason you need to override the default implementation?  Seems like that would work for you:\n\n    def instance_exists(self, instance):\n        \"\"\"Checks existence of an instance on the host.\n\n        :param instance: The instance to lookup\n\n        Returns True if an instance with the supplied ID exists on\n        the host, False otherwise.\n\n        .. note::\n\n            This implementation works for all drivers, but it is\n            not particularly efficient. Maintainers of the virt drivers are\n            encouraged to override this method with something more\n            efficient.\n        \"\"\"\n        try:\n            return instance.uuid in self.list_instance_uuids()\n        except NotImplementedError:\n            return instance.name in self.list_instances()","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"b3b16a6f5a4a12b678867f1e65b402ec8521eea4","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        return _guest.get_info()"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def instance_exists(self, instance):"},{"line_number":103,"context_line":"        \"\"\"Overwrite this to using instance name as input parameter.\"\"\""},{"line_number":104,"context_line":"        _guest \u003d guest.Guest(self._hypervisor, instance)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        return _guest.guest_exists()"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_37709208","line":103,"range":{"start_line":103,"start_character":8,"end_line":103,"end_character":71},"in_reply_to":"bf659307_08d0faf6","updated":"2018-04-11 03:31:52.000000000","message":"ok, use default might be better :)\nI don\u0027t even kown the default implementation at all.. thanks","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f6bed38e2927805bad2e74ab89a5547a6d36aea7","unresolved":false,"context_lines":[{"line_number":95,"context_line":"    def get_available_nodes(self, refresh\u003dFalse):"},{"line_number":96,"context_line":"        return self._hypervisor.get_available_nodes(refresh\u003drefresh)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def get_info(self, instance):"},{"line_number":99,"context_line":"        _guest \u003d guest.Guest(self._hypervisor, instance)"},{"line_number":100,"context_line":"        return _guest.get_info()"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def instance_exists(self, instance):"},{"line_number":103,"context_line":"        \"\"\"Overwrite this to using instance name as input parameter.\"\"\""},{"line_number":104,"context_line":"        _guest \u003d guest.Guest(self._hypervisor, instance)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        return _guest.guest_exists()"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    def spawn(self, context, instance, image_meta, injected_files,"},{"line_number":109,"context_line":"              admin_password, allocations, network_info\u003dNone,"},{"line_number":110,"context_line":"              block_device_info\u003dNone, flavor\u003dNone):"},{"line_number":111,"context_line":"        _guest \u003d guest.Guest(self._hypervisor, instance)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        _guest.spawn(context, image_meta, injected_files,"},{"line_number":114,"context_line":"                     admin_password, allocations,"},{"line_number":115,"context_line":"                     network_info\u003dnetwork_info,"},{"line_number":116,"context_line":"                     block_device_info\u003dblock_device_info, flavor\u003dflavor)"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def destroy(self, context, instance, network_info\u003dNone,"},{"line_number":119,"context_line":"                block_device_info\u003dNone, destroy_disks\u003dFalse):"},{"line_number":120,"context_line":"        _guest \u003d guest.Guest(self._hypervisor, instance)"},{"line_number":121,"context_line":"        _guest.destroy(context, network_info\u003dnetwork_info,"},{"line_number":122,"context_line":"                       block_device_info\u003dblock_device_info,"},{"line_number":123,"context_line":"                       destroy_disks\u003ddestroy_disks)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    def get_host_uptime(self):"},{"line_number":126,"context_line":"        return self._hypervisor.get_host_uptime()"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_a878ee8e","line":126,"range":{"start_line":98,"start_character":0,"end_line":126,"end_character":49},"updated":"2018-04-09 20:34:04.000000000","message":"Where\u0027s the UT for these?  I\u0027ll grant you they\u0027re pretty trivial, but still...","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8e123d66dbc98dc18a26633888ed2753d0e830f2","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        LOG.info(\"The zVM compute driver has been initialized.\")"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def _validate_options(self):"},{"line_number":59,"context_line":"        if not CONF.zvm.cloud_connector_url:"},{"line_number":60,"context_line":"            error \u003d _(\u0027Must specify cloud_connector_url in zvm config \u0027"},{"line_number":61,"context_line":"                      \u0027group to use compute_driver\u003dzvm.driver.ZVMDriver\u0027)"}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_f1188c1e","line":58,"range":{"start_line":58,"start_character":8,"end_line":58,"end_character":25},"updated":"2018-05-31 22:05:07.000000000","message":"can be @staticmethod","commit_id":"96a49f21703d9605759dfecde23a94a3b7fbc094"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"706b05bab8a6be87cea6322cf740131d68569efc","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        LOG.info(\"The zVM compute driver has been initialized.\")"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def _validate_options(self):"},{"line_number":59,"context_line":"        if not CONF.zvm.cloud_connector_url:"},{"line_number":60,"context_line":"            error \u003d _(\u0027Must specify cloud_connector_url in zvm config \u0027"},{"line_number":61,"context_line":"                      \u0027group to use compute_driver\u003dzvm.driver.ZVMDriver\u0027)"}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_65c27287","line":58,"range":{"start_line":58,"start_character":8,"end_line":58,"end_character":25},"in_reply_to":"5f7c97a3_f1188c1e","updated":"2018-06-01 05:03:41.000000000","message":"Done","commit_id":"96a49f21703d9605759dfecde23a94a3b7fbc094"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8e123d66dbc98dc18a26633888ed2753d0e830f2","unresolved":false,"context_lines":[{"line_number":62,"context_line":"            raise exception.ZVMDriverException(error\u003derror)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        # Try a test to ensure length of give guest is smaller than 8"},{"line_number":65,"context_line":"        _test_instance \u003d CONF.instance_name_template % 0"},{"line_number":66,"context_line":"        # For zVM instance, limit the maximum length of instance name to 8"},{"line_number":67,"context_line":"        if len(_test_instance) \u003e 8:"},{"line_number":68,"context_line":"            msg \u003d _(\"Can\u0027t spawn instance with template \u0027%s\u0027, \""}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_2ed8e01b","line":65,"range":{"start_line":65,"start_character":25,"end_line":65,"end_character":56},"updated":"2018-05-31 22:05:07.000000000","message":"See PS31 comments here.","commit_id":"96a49f21703d9605759dfecde23a94a3b7fbc094"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"706b05bab8a6be87cea6322cf740131d68569efc","unresolved":false,"context_lines":[{"line_number":62,"context_line":"            raise exception.ZVMDriverException(error\u003derror)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        # Try a test to ensure length of give guest is smaller than 8"},{"line_number":65,"context_line":"        _test_instance \u003d CONF.instance_name_template % 0"},{"line_number":66,"context_line":"        # For zVM instance, limit the maximum length of instance name to 8"},{"line_number":67,"context_line":"        if len(_test_instance) \u003e 8:"},{"line_number":68,"context_line":"            msg \u003d _(\"Can\u0027t spawn instance with template \u0027%s\u0027, \""}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_e509a2dc","line":65,"range":{"start_line":65,"start_character":25,"end_line":65,"end_character":56},"in_reply_to":"5f7c97a3_2ed8e01b","updated":"2018-06-01 05:03:41.000000000","message":"replied in PS31 and modified here","commit_id":"96a49f21703d9605759dfecde23a94a3b7fbc094"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ff70b6e8ede2bcbed793dc710996956b1be8128b","unresolved":false,"context_lines":[{"line_number":62,"context_line":"            raise exception.ZVMDriverException(error\u003derror)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        # Try a test to ensure length of give guest is smaller than 8"},{"line_number":65,"context_line":"        _test_instance \u003d CONF.instance_name_template % 0"},{"line_number":66,"context_line":"        # For zVM instance, limit the maximum length of instance name to 8"},{"line_number":67,"context_line":"        if len(_test_instance) \u003e 8:"},{"line_number":68,"context_line":"            msg \u003d _(\"Can\u0027t spawn instance with template \u0027%s\u0027, \""}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_df6ea92a","line":65,"range":{"start_line":65,"start_character":25,"end_line":65,"end_character":56},"in_reply_to":"5f7c97a3_e509a2dc","updated":"2018-06-01 16:26:09.000000000","message":"Yes, this is much better to convert to ZVMDriverException, thanks.","commit_id":"96a49f21703d9605759dfecde23a94a3b7fbc094"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8e123d66dbc98dc18a26633888ed2753d0e830f2","unresolved":false,"context_lines":[{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    def spawn(self, context, instance, image_meta, injected_files,"},{"line_number":117,"context_line":"              admin_password, allocations, network_info\u003dNone,"},{"line_number":118,"context_line":"              block_device_info\u003dNone, flavor\u003dNone):"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        LOG.info(\"Spawning new instance %s on zVM hypervisor\","},{"line_number":121,"context_line":"                 instance.name, instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_eef1886c","line":118,"range":{"start_line":118,"start_character":36,"end_line":118,"end_character":49},"updated":"2018-05-31 22:05:07.000000000","message":"This kwarg was removed \u003e3y ago via I90b55b066d4b7df8c36793621e298cee97c94f7a\n\nUse instance.flavor if you need it.","commit_id":"96a49f21703d9605759dfecde23a94a3b7fbc094"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"706b05bab8a6be87cea6322cf740131d68569efc","unresolved":false,"context_lines":[{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    def spawn(self, context, instance, image_meta, injected_files,"},{"line_number":117,"context_line":"              admin_password, allocations, network_info\u003dNone,"},{"line_number":118,"context_line":"              block_device_info\u003dNone, flavor\u003dNone):"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        LOG.info(\"Spawning new instance %s on zVM hypervisor\","},{"line_number":121,"context_line":"                 instance.name, instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_659fd24f","line":118,"range":{"start_line":118,"start_character":36,"end_line":118,"end_character":49},"in_reply_to":"5f7c97a3_eef1886c","updated":"2018-06-01 05:03:41.000000000","message":"Done","commit_id":"96a49f21703d9605759dfecde23a94a3b7fbc094"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8e123d66dbc98dc18a26633888ed2753d0e830f2","unresolved":false,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        try:"},{"line_number":127,"context_line":"            spawn_start \u003d time.time()"},{"line_number":128,"context_line":"            os_distro \u003d image_meta.properties.os_distro"},{"line_number":129,"context_line":"            transportfiles \u003d zvmutils.generate_configdrive(context,"},{"line_number":130,"context_line":"                instance, injected_files, network_info,"},{"line_number":131,"context_line":"                admin_password)"}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_ceb84c76","line":128,"range":{"start_line":128,"start_character":24,"end_line":128,"end_character":55},"updated":"2018-05-31 22:05:07.000000000","message":"Can this ever be empty/missing/unset?","commit_id":"96a49f21703d9605759dfecde23a94a3b7fbc094"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"abe49b91d560af9a016036c5fbee8a2d9ee4798a","unresolved":false,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        try:"},{"line_number":127,"context_line":"            spawn_start \u003d time.time()"},{"line_number":128,"context_line":"            os_distro \u003d image_meta.properties.os_distro"},{"line_number":129,"context_line":"            transportfiles \u003d zvmutils.generate_configdrive(context,"},{"line_number":130,"context_line":"                instance, injected_files, network_info,"},{"line_number":131,"context_line":"                admin_password)"}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_1a42f83e","line":128,"range":{"start_line":128,"start_character":24,"end_line":128,"end_character":55},"in_reply_to":"5f7c97a3_ceb84c76","updated":"2018-06-01 08:20:43.000000000","message":"added a test and check for this attribute and 2 unit test cases for this situation","commit_id":"96a49f21703d9605759dfecde23a94a3b7fbc094"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8e123d66dbc98dc18a26633888ed2753d0e830f2","unresolved":false,"context_lines":[{"line_number":131,"context_line":"                admin_password)"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"            resp \u003d self._get_image_info(context, image_meta.id, os_distro)"},{"line_number":134,"context_line":"            spawn_image_name \u003d resp[0][\u0027imagename\u0027]"},{"line_number":135,"context_line":"            disk_list, eph_list \u003d self._set_disk_list(instance,"},{"line_number":136,"context_line":"                                                      spawn_image_name,"},{"line_number":137,"context_line":"                                                      block_device_info)"}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_6961f204","line":134,"range":{"start_line":134,"start_character":31,"end_line":134,"end_character":51},"updated":"2018-05-31 22:05:07.000000000","message":"This weirdness (at least the [0]) ought to be hidden by _get_image_info and/or _hypervisor.image_query.","commit_id":"96a49f21703d9605759dfecde23a94a3b7fbc094"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"706b05bab8a6be87cea6322cf740131d68569efc","unresolved":false,"context_lines":[{"line_number":131,"context_line":"                admin_password)"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"            resp \u003d self._get_image_info(context, image_meta.id, os_distro)"},{"line_number":134,"context_line":"            spawn_image_name \u003d resp[0][\u0027imagename\u0027]"},{"line_number":135,"context_line":"            disk_list, eph_list \u003d self._set_disk_list(instance,"},{"line_number":136,"context_line":"                                                      spawn_image_name,"},{"line_number":137,"context_line":"                                                      block_device_info)"}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_a50f2ade","line":134,"range":{"start_line":134,"start_character":31,"end_line":134,"end_character":51},"in_reply_to":"5f7c97a3_6961f204","updated":"2018-06-01 05:03:41.000000000","message":"ok, will do","commit_id":"96a49f21703d9605759dfecde23a94a3b7fbc094"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8e123d66dbc98dc18a26633888ed2753d0e830f2","unresolved":false,"context_lines":[{"line_number":174,"context_line":"    def _get_image_info(self, context, image_meta_id, os_distro):"},{"line_number":175,"context_line":"        try:"},{"line_number":176,"context_line":"            return self._hypervisor.image_query(imagename\u003dimage_meta_id)"},{"line_number":177,"context_line":"        except exception.NovaException as err:"},{"line_number":178,"context_line":"            with excutils.save_and_reraise_exception() as sare:"},{"line_number":179,"context_line":"                if err.kwargs[\u0027results\u0027][\u0027overallRC\u0027] \u003d\u003d 404:"},{"line_number":180,"context_line":"                    sare.reraise \u003d False"}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_8947ae1d","line":177,"range":{"start_line":177,"start_character":25,"end_line":177,"end_character":38},"updated":"2018-05-31 22:05:07.000000000","message":"This should be a more specific exception (sub)class.  One where .kwargs[\u0027results\u0027][\u0027overallRC\u0027] is explicitly set, or better yet, with real attributes.  E.g.\n\n class ZVMConnectorError(ZVMDriverException):\n     msg_fmt \u003d _(\"zVM Cloud Connector request failed with error %s\")\n\n     def __init__(self, results, **kwargs):\n         \"\"\"Exception for zVM ConnectorClient calls.\n\n         :param results: The object returned from ZVMConnector.send_request.\n         \"\"\"\n         super(self, ZVMConnectorError).__init__(**kwargs)\n         # HTTP status code\n         self.overallRC \u003d results[\u0027overallRC\u0027]\n         # Thingy gizmo widget doodle\n         self.whatever \u003d results[\u0027whatever\u0027]\n         # etc.\n         ...","commit_id":"96a49f21703d9605759dfecde23a94a3b7fbc094"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"706b05bab8a6be87cea6322cf740131d68569efc","unresolved":false,"context_lines":[{"line_number":174,"context_line":"    def _get_image_info(self, context, image_meta_id, os_distro):"},{"line_number":175,"context_line":"        try:"},{"line_number":176,"context_line":"            return self._hypervisor.image_query(imagename\u003dimage_meta_id)"},{"line_number":177,"context_line":"        except exception.NovaException as err:"},{"line_number":178,"context_line":"            with excutils.save_and_reraise_exception() as sare:"},{"line_number":179,"context_line":"                if err.kwargs[\u0027results\u0027][\u0027overallRC\u0027] \u003d\u003d 404:"},{"line_number":180,"context_line":"                    sare.reraise \u003d False"}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_65f6f291","line":177,"range":{"start_line":177,"start_character":25,"end_line":177,"end_character":38},"in_reply_to":"5f7c97a3_8947ae1d","updated":"2018-06-01 05:03:41.000000000","message":"ok, will do","commit_id":"96a49f21703d9605759dfecde23a94a3b7fbc094"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8e123d66dbc98dc18a26633888ed2753d0e830f2","unresolved":false,"context_lines":[{"line_number":195,"context_line":"                     \u0027is_boot_disk\u0027: True"},{"line_number":196,"context_line":"                    }"},{"line_number":197,"context_line":"        disk_list.append(root_disk)"},{"line_number":198,"context_line":"        ephemeral_disks_info \u003d block_device_info.get(\u0027ephemerals\u0027, [])"},{"line_number":199,"context_line":"        eph_list \u003d []"},{"line_number":200,"context_line":"        for eph in ephemeral_disks_info:"},{"line_number":201,"context_line":"            eph_dict \u003d {\u0027size\u0027: \u0027%ig\u0027 % eph[\u0027size\u0027],"}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_d1d6b04f","line":198,"range":{"start_line":198,"start_character":8,"end_line":198,"end_character":70},"updated":"2018-05-31 22:05:07.000000000","message":"Not sure what value it really brings to the table, but you should use nova.virt.driver.block_device_info_get_ephemerals here.","commit_id":"96a49f21703d9605759dfecde23a94a3b7fbc094"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"706b05bab8a6be87cea6322cf740131d68569efc","unresolved":false,"context_lines":[{"line_number":195,"context_line":"                     \u0027is_boot_disk\u0027: True"},{"line_number":196,"context_line":"                    }"},{"line_number":197,"context_line":"        disk_list.append(root_disk)"},{"line_number":198,"context_line":"        ephemeral_disks_info \u003d block_device_info.get(\u0027ephemerals\u0027, [])"},{"line_number":199,"context_line":"        eph_list \u003d []"},{"line_number":200,"context_line":"        for eph in ephemeral_disks_info:"},{"line_number":201,"context_line":"            eph_dict \u003d {\u0027size\u0027: \u0027%ig\u0027 % eph[\u0027size\u0027],"}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_a5008a67","line":198,"range":{"start_line":198,"start_character":8,"end_line":198,"end_character":70},"in_reply_to":"5f7c97a3_d1d6b04f","updated":"2018-06-01 05:03:41.000000000","message":"Done","commit_id":"96a49f21703d9605759dfecde23a94a3b7fbc094"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8e123d66dbc98dc18a26633888ed2753d0e830f2","unresolved":false,"context_lines":[{"line_number":203,"context_line":"                                   DEFAULT_EPH_DISK_FMT)}"},{"line_number":204,"context_line":"            eph_list.append(eph_dict)"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        if eph_list:"},{"line_number":207,"context_line":"            disk_list.extend(eph_list)"},{"line_number":208,"context_line":"        return disk_list, eph_list"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"    def _setup_network(self, vm_name, os_distro, network_info, instance):"},{"line_number":211,"context_line":"        LOG.debug(\"Creating NICs for vm %s\", vm_name)"}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_d13b1099","line":208,"range":{"start_line":206,"start_character":0,"end_line":208,"end_character":34},"updated":"2018-05-31 22:05:07.000000000","message":"This seems like weird and unnecessary duplication.  Why not return root_disk, eph_list ?  Or just disk_list and have the caller assume the first is the root_disk?","commit_id":"96a49f21703d9605759dfecde23a94a3b7fbc094"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ff70b6e8ede2bcbed793dc710996956b1be8128b","unresolved":false,"context_lines":[{"line_number":203,"context_line":"                                   DEFAULT_EPH_DISK_FMT)}"},{"line_number":204,"context_line":"            eph_list.append(eph_dict)"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        if eph_list:"},{"line_number":207,"context_line":"            disk_list.extend(eph_list)"},{"line_number":208,"context_line":"        return disk_list, eph_list"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"    def _setup_network(self, vm_name, os_distro, network_info, instance):"},{"line_number":211,"context_line":"        LOG.debug(\"Creating NICs for vm %s\", vm_name)"}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_1fd741c1","line":208,"range":{"start_line":206,"start_character":0,"end_line":208,"end_character":34},"in_reply_to":"5f7c97a3_3a66d4ee","updated":"2018-06-01 16:26:09.000000000","message":"I wasn\u0027t suggesting changing the cloud connector API.  I was suggesting that you either return root_disk, eph_list and then the caller creates\n\n disk_list \u003d [root_disk] + eph_list\n\nor you return disk_list and the caller pulls out\n\n root_disk \u003d disk_list[0]\n\nNot a big deal, change or leave as you wish.","commit_id":"96a49f21703d9605759dfecde23a94a3b7fbc094"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"abe49b91d560af9a016036c5fbee8a2d9ee4798a","unresolved":false,"context_lines":[{"line_number":203,"context_line":"                                   DEFAULT_EPH_DISK_FMT)}"},{"line_number":204,"context_line":"            eph_list.append(eph_dict)"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        if eph_list:"},{"line_number":207,"context_line":"            disk_list.extend(eph_list)"},{"line_number":208,"context_line":"        return disk_list, eph_list"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"    def _setup_network(self, vm_name, os_distro, network_info, instance):"},{"line_number":211,"context_line":"        LOG.debug(\"Creating NICs for vm %s\", vm_name)"}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_3a66d4ee","line":208,"range":{"start_line":206,"start_character":0,"end_line":208,"end_character":34},"in_reply_to":"5f7c97a3_d13b1099","updated":"2018-06-01 08:20:43.000000000","message":"disk_list contains all the disks (root+epemeral) that will be created in create vm stage, the underlying zVM cloud connector will create a vm with all disks  in one guest_create api. So we put them together.  For eph_list,  since we need to do some steps to configure the ephemeral disk later, so it is required to distinguish them.\n\nlater we can adjust the format and API of z/VM cloud connector to see whether we can fit for this use case to make it simpler","commit_id":"96a49f21703d9605759dfecde23a94a3b7fbc094"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8e123d66dbc98dc18a26633888ed2753d0e830f2","unresolved":false,"context_lines":[{"line_number":223,"context_line":"            self._hypervisor.guest_create_network_interface(vm_name,"},{"line_number":224,"context_line":"                os_distro, inst_nets)"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"    def _get_neutron_event(self, instance, network_info):"},{"line_number":227,"context_line":"        if utils.is_neutron() and CONF.vif_plugging_timeout:"},{"line_number":228,"context_line":"            return [(\u0027network-vif-plugged\u0027, vif[\u0027id\u0027])"},{"line_number":229,"context_line":"                    for vif in network_info if vif.get(\u0027active\u0027) is False]"}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_d109d0dc","line":226,"range":{"start_line":226,"start_character":8,"end_line":226,"end_character":26},"updated":"2018-05-31 22:05:07.000000000","message":"can be @staticmethod","commit_id":"96a49f21703d9605759dfecde23a94a3b7fbc094"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8e123d66dbc98dc18a26633888ed2753d0e830f2","unresolved":false,"context_lines":[{"line_number":223,"context_line":"            self._hypervisor.guest_create_network_interface(vm_name,"},{"line_number":224,"context_line":"                os_distro, inst_nets)"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"    def _get_neutron_event(self, instance, network_info):"},{"line_number":227,"context_line":"        if utils.is_neutron() and CONF.vif_plugging_timeout:"},{"line_number":228,"context_line":"            return [(\u0027network-vif-plugged\u0027, vif[\u0027id\u0027])"},{"line_number":229,"context_line":"                    for vif in network_info if vif.get(\u0027active\u0027) is False]"}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_b10694cd","line":226,"range":{"start_line":226,"start_character":33,"end_line":226,"end_character":41},"updated":"2018-05-31 22:05:07.000000000","message":"unused","commit_id":"96a49f21703d9605759dfecde23a94a3b7fbc094"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"706b05bab8a6be87cea6322cf740131d68569efc","unresolved":false,"context_lines":[{"line_number":223,"context_line":"            self._hypervisor.guest_create_network_interface(vm_name,"},{"line_number":224,"context_line":"                os_distro, inst_nets)"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"    def _get_neutron_event(self, instance, network_info):"},{"line_number":227,"context_line":"        if utils.is_neutron() and CONF.vif_plugging_timeout:"},{"line_number":228,"context_line":"            return [(\u0027network-vif-plugged\u0027, vif[\u0027id\u0027])"},{"line_number":229,"context_line":"                    for vif in network_info if vif.get(\u0027active\u0027) is False]"}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_a5ddea41","line":226,"range":{"start_line":226,"start_character":8,"end_line":226,"end_character":26},"in_reply_to":"5f7c97a3_d109d0dc","updated":"2018-06-01 05:03:41.000000000","message":"Done","commit_id":"96a49f21703d9605759dfecde23a94a3b7fbc094"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8e123d66dbc98dc18a26633888ed2753d0e830f2","unresolved":false,"context_lines":[{"line_number":230,"context_line":"        else:"},{"line_number":231,"context_line":"            return []"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"    def _neutron_failed_callback(self, event_name, instance):"},{"line_number":234,"context_line":"        LOG.error(\"Neutron Reported failure on event %s for instance\","},{"line_number":235,"context_line":"                  event_name, instance\u003dinstance)"},{"line_number":236,"context_line":"        if CONF.vif_plugging_is_fatal:"}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_d13230a7","line":233,"range":{"start_line":233,"start_character":8,"end_line":233,"end_character":32},"updated":"2018-05-31 22:05:07.000000000","message":"can be @staticmethod (maybe?)","commit_id":"96a49f21703d9605759dfecde23a94a3b7fbc094"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"706b05bab8a6be87cea6322cf740131d68569efc","unresolved":false,"context_lines":[{"line_number":230,"context_line":"        else:"},{"line_number":231,"context_line":"            return []"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"    def _neutron_failed_callback(self, event_name, instance):"},{"line_number":234,"context_line":"        LOG.error(\"Neutron Reported failure on event %s for instance\","},{"line_number":235,"context_line":"                  event_name, instance\u003dinstance)"},{"line_number":236,"context_line":"        if CONF.vif_plugging_is_fatal:"}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_85da2e48","line":233,"range":{"start_line":233,"start_character":8,"end_line":233,"end_character":32},"in_reply_to":"5f7c97a3_d13230a7","updated":"2018-06-01 05:03:41.000000000","message":"Done","commit_id":"96a49f21703d9605759dfecde23a94a3b7fbc094"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8e123d66dbc98dc18a26633888ed2753d0e830f2","unresolved":false,"context_lines":[{"line_number":251,"context_line":"            if CONF.vif_plugging_is_fatal:"},{"line_number":252,"context_line":"                raise exception.VirtualInterfaceCreateException()"},{"line_number":253,"context_line":"        except Exception as err:"},{"line_number":254,"context_line":"            LOG.error(\"Failed for vif plugging: %s\", six.text_type(err),"},{"line_number":255,"context_line":"                       instance\u003dinstance)"},{"line_number":256,"context_line":"            raise"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"    def _import_spawn_image(self, context, image_meta_id, image_os_version):"}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_51cce087","line":255,"range":{"start_line":254,"start_character":12,"end_line":255,"end_character":41},"updated":"2018-05-31 22:05:07.000000000","message":"Should use save_and_reraise_exception here","commit_id":"96a49f21703d9605759dfecde23a94a3b7fbc094"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8e123d66dbc98dc18a26633888ed2753d0e830f2","unresolved":false,"context_lines":[{"line_number":266,"context_line":"        image_meta \u003d {\u0027os_version\u0027: image_os_version}"},{"line_number":267,"context_line":"        self._hypervisor.image_import(image_meta_id, image_url, image_meta)"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"    def _exists_in_hypervisor(self, instance):"},{"line_number":270,"context_line":"        return self._hypervisor.guest_exists(instance)"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    def destroy(self, context, instance, network_info\u003dNone,"},{"line_number":273,"context_line":"                block_device_info\u003dNone, destroy_disks\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_aeb5d07f","line":270,"range":{"start_line":269,"start_character":0,"end_line":270,"end_character":54},"updated":"2018-05-31 22:05:07.000000000","message":"Don\u0027t really see the point in having a method for this rather than inlining in the two places you use it.","commit_id":"96a49f21703d9605759dfecde23a94a3b7fbc094"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"706b05bab8a6be87cea6322cf740131d68569efc","unresolved":false,"context_lines":[{"line_number":266,"context_line":"        image_meta \u003d {\u0027os_version\u0027: image_os_version}"},{"line_number":267,"context_line":"        self._hypervisor.image_import(image_meta_id, image_url, image_meta)"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"    def _exists_in_hypervisor(self, instance):"},{"line_number":270,"context_line":"        return self._hypervisor.guest_exists(instance)"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    def destroy(self, context, instance, network_info\u003dNone,"},{"line_number":273,"context_line":"                block_device_info\u003dNone, destroy_disks\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_454096a5","line":270,"range":{"start_line":269,"start_character":0,"end_line":270,"end_character":54},"in_reply_to":"5f7c97a3_aeb5d07f","updated":"2018-06-01 05:03:41.000000000","message":"Done","commit_id":"96a49f21703d9605759dfecde23a94a3b7fbc094"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8e123d66dbc98dc18a26633888ed2753d0e830f2","unresolved":false,"context_lines":[{"line_number":275,"context_line":"            LOG.info(\"Destroying instance\", instance\u003dinstance)"},{"line_number":276,"context_line":"            try:"},{"line_number":277,"context_line":"                self._hypervisor.guest_delete(instance.name)"},{"line_number":278,"context_line":"            except exception.NovaException as err:"},{"line_number":279,"context_line":"                if err.kwargs[\u0027results\u0027][\u0027overallRC\u0027] \u003d\u003d 404:"},{"line_number":280,"context_line":"                    LOG.info(\"instance disappear during destroying\","},{"line_number":281,"context_line":"                             instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_49a5169e","line":278,"range":{"start_line":278,"start_character":29,"end_line":278,"end_character":42},"updated":"2018-05-31 22:05:07.000000000","message":"see above","commit_id":"96a49f21703d9605759dfecde23a94a3b7fbc094"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"706b05bab8a6be87cea6322cf740131d68569efc","unresolved":false,"context_lines":[{"line_number":275,"context_line":"            LOG.info(\"Destroying instance\", instance\u003dinstance)"},{"line_number":276,"context_line":"            try:"},{"line_number":277,"context_line":"                self._hypervisor.guest_delete(instance.name)"},{"line_number":278,"context_line":"            except exception.NovaException as err:"},{"line_number":279,"context_line":"                if err.kwargs[\u0027results\u0027][\u0027overallRC\u0027] \u003d\u003d 404:"},{"line_number":280,"context_line":"                    LOG.info(\"instance disappear during destroying\","},{"line_number":281,"context_line":"                             instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_05461ec1","line":278,"range":{"start_line":278,"start_character":29,"end_line":278,"end_character":42},"in_reply_to":"5f7c97a3_49a5169e","updated":"2018-06-01 05:03:41.000000000","message":"ok","commit_id":"96a49f21703d9605759dfecde23a94a3b7fbc094"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ff70b6e8ede2bcbed793dc710996956b1be8128b","unresolved":false,"context_lines":[{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        os_distro \u003d image_meta.properties.get(\u0027os_distro\u0027)"},{"line_number":134,"context_line":"        if os_distro is None or len(os_distro) \u003d\u003d 0:"},{"line_number":135,"context_line":"            reason \u003d _(\"distro of Image can be empty\")"},{"line_number":136,"context_line":"            raise exception.InvalidInput(reason\u003dreason)"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":50,"id":"5f7c97a3_ff56055c","line":135,"range":{"start_line":135,"start_character":40,"end_line":135,"end_character":46},"updated":"2018-06-01 16:26:09.000000000","message":"can not be\n\nBut perhaps this message needs to be more specific: \"The `os_distro` image metadata property is required.\"","commit_id":"dcfe3aa98363db7ffa0b2f322f08310a0b17c0b1"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"2d7dfb4639edf8c7ce7a7af869e341eb62a4a353","unresolved":false,"context_lines":[{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        os_distro \u003d image_meta.properties.get(\u0027os_distro\u0027)"},{"line_number":134,"context_line":"        if os_distro is None or len(os_distro) \u003d\u003d 0:"},{"line_number":135,"context_line":"            reason \u003d _(\"distro of Image can be empty\")"},{"line_number":136,"context_line":"            raise exception.InvalidInput(reason\u003dreason)"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":50,"id":"5f7c97a3_b6288bee","line":135,"range":{"start_line":135,"start_character":40,"end_line":135,"end_character":46},"in_reply_to":"5f7c97a3_ff56055c","updated":"2018-06-05 06:52:05.000000000","message":"right, I totally forgot this...sorry, will update it soon","commit_id":"dcfe3aa98363db7ffa0b2f322f08310a0b17c0b1"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"cee27323d66147e39e3e15cc56f635c38420030a","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    def __init__(self, virtapi):"},{"line_number":48,"context_line":"        super(ZVMDriver, self).__init__(virtapi)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        self._virtapi \u003d virtapi"},{"line_number":51,"context_line":"        self._validate_options()"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        self._hypervisor \u003d hypervisor.Hypervisor("}],"source_content_type":"text/x-python","patch_set":57,"id":"5f7c97a3_eeb55ed1","line":50,"range":{"start_line":50,"start_character":8,"end_line":50,"end_character":31},"updated":"2018-07-04 07:47:47.000000000","message":"why you need this? since the base class has self.virtapi","commit_id":"4cff3cadb7d7b4ccd3946b4efa2e3606e3aeb776"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"a1f6b1afc1c970f6ea15e84a1069df564ad27fea","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    def __init__(self, virtapi):"},{"line_number":48,"context_line":"        super(ZVMDriver, self).__init__(virtapi)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        self._virtapi \u003d virtapi"},{"line_number":51,"context_line":"        self._validate_options()"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        self._hypervisor \u003d hypervisor.Hypervisor("}],"source_content_type":"text/x-python","patch_set":57,"id":"5f7c97a3_907717d2","line":50,"range":{"start_line":50,"start_character":8,"end_line":50,"end_character":31},"in_reply_to":"5f7c97a3_eeb55ed1","updated":"2018-07-05 06:12:51.000000000","message":"yes, it can be removed","commit_id":"4cff3cadb7d7b4ccd3946b4efa2e3606e3aeb776"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"f249402791e11531aad9a7c6f04457335f02ba58","unresolved":false,"context_lines":[{"line_number":238,"context_line":"                os_distro, inst_nets)"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"    @staticmethod"},{"line_number":241,"context_line":"    def _get_neutron_event(network_info):"},{"line_number":242,"context_line":"        if utils.is_neutron() and CONF.vif_plugging_timeout:"},{"line_number":243,"context_line":"            return [(\u0027network-vif-plugged\u0027, vif[\u0027id\u0027])"},{"line_number":244,"context_line":"                    for vif in network_info if vif.get(\u0027active\u0027) is False]"}],"source_content_type":"text/x-python","patch_set":60,"id":"5f7c97a3_b204c41a","line":241,"range":{"start_line":241,"start_character":8,"end_line":241,"end_character":26},"updated":"2018-07-16 13:26:36.000000000","message":"nit. _get_neutron_events","commit_id":"3e1692b9662ddbba94b7f40ec32c330593c00cc2"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"f249402791e11531aad9a7c6f04457335f02ba58","unresolved":false,"context_lines":[{"line_number":256,"context_line":"                              instance):"},{"line_number":257,"context_line":"        timeout \u003d CONF.vif_plugging_timeout"},{"line_number":258,"context_line":"        try:"},{"line_number":259,"context_line":"            event \u003d self._get_neutron_event(network_info)"},{"line_number":260,"context_line":"            with self.virtapi.wait_for_instance_event("},{"line_number":261,"context_line":"                    instance, event, deadline\u003dtimeout,"},{"line_number":262,"context_line":"                    error_callback\u003dself._neutron_failed_callback):"}],"source_content_type":"text/x-python","patch_set":60,"id":"5f7c97a3_72fe2c07","line":259,"range":{"start_line":259,"start_character":12,"end_line":259,"end_character":17},"updated":"2018-07-16 13:26:36.000000000","message":"nit, s/event/events/","commit_id":"3e1692b9662ddbba94b7f40ec32c330593c00cc2"}],"nova/virt/zvm/guest.py":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"5f4daf78b600d9c3bd4838c9ddd40618d563c752","unresolved":false,"context_lines":[{"line_number":47,"context_line":"class Guest(object):"},{"line_number":48,"context_line":"    \"\"\"z/VM implementation of ComputeDriver.\"\"\""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def __init__(self, zcc_url):"},{"line_number":51,"context_line":"        super(Guest, self).__init__()"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        self._reqh \u003d zvmutils.get_conn(zcc_url)"}],"source_content_type":"text/x-python","patch_set":22,"id":"bf659307_fdad119b","line":50,"updated":"2018-03-29 09:26:44.000000000","message":"My Point is that, the constructor should take an instance of Hypervisor.\n\nIt\u0027s the hypervisor which is going to construct the Guest objects:\n\n   def __init_(self, hypervisor, opaque):\n     pass\n\n  Where opaque is the result from calling zvm (I don\u0027t know what it  will be returned)","commit_id":"f7e22eeaea566f978fc6d472e21e86621ed91f1e"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"db18d890d78f232360961690d8a36d55985a0618","unresolved":false,"context_lines":[{"line_number":47,"context_line":"class Guest(object):"},{"line_number":48,"context_line":"    \"\"\"z/VM implementation of ComputeDriver.\"\"\""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def __init__(self, zcc_url):"},{"line_number":51,"context_line":"        super(Guest, self).__init__()"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        self._reqh \u003d zvmutils.get_conn(zcc_url)"}],"source_content_type":"text/x-python","patch_set":22,"id":"bf659307_73383e9f","line":50,"in_reply_to":"bf659307_fdad119b","updated":"2018-03-30 01:45:08.000000000","message":"ok, that make sense, thanks~","commit_id":"f7e22eeaea566f978fc6d472e21e86621ed91f1e"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"5f4daf78b600d9c3bd4838c9ddd40618d563c752","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        \"\"\"Translate power state to OpenStack defined constants.\"\"\""},{"line_number":61,"context_line":"        return ZVM_POWER_STATE.get(power_state, compute_power_state.NOSTATE)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def get_info(self, instance):"},{"line_number":64,"context_line":"        \"\"\"Get the current status of an instance.\"\"\""},{"line_number":65,"context_line":"        power_state \u003d \u0027\u0027"},{"line_number":66,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":22,"id":"bf659307_ddafed7a","line":63,"updated":"2018-03-29 09:26:44.000000000","message":"The prototype of this method should be something like:\n\n  def get_info(self):\n    ...\n    power_state \u003d self._hypervisor.get_guest_power_state(self.opaque.name)\n    ...","commit_id":"f7e22eeaea566f978fc6d472e21e86621ed91f1e"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"db18d890d78f232360961690d8a36d55985a0618","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        \"\"\"Translate power state to OpenStack defined constants.\"\"\""},{"line_number":61,"context_line":"        return ZVM_POWER_STATE.get(power_state, compute_power_state.NOSTATE)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def get_info(self, instance):"},{"line_number":64,"context_line":"        \"\"\"Get the current status of an instance.\"\"\""},{"line_number":65,"context_line":"        power_state \u003d \u0027\u0027"},{"line_number":66,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":22,"id":"bf659307_93c2b258","line":63,"in_reply_to":"bf659307_ddafed7a","updated":"2018-03-30 01:45:08.000000000","message":"ok, will do ,this is very helpful","commit_id":"f7e22eeaea566f978fc6d472e21e86621ed91f1e"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"5566331b7cafcc96aa6fed548a393c3beab0ab96","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        \"\"\"Translate power state to OpenStack defined constants.\"\"\""},{"line_number":56,"context_line":"        return ZVM_POWER_STATE.get(power_state, compute_power_state.NOSTATE)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def get_info(self):"},{"line_number":59,"context_line":"        \"\"\"Get the current status of an instance.\"\"\""},{"line_number":60,"context_line":"        power_state \u003d self._mapping_power_state("},{"line_number":61,"context_line":"            self._hypervisor.guest_get_power_state("}],"source_content_type":"text/x-python","patch_set":25,"id":"bf659307_e13c7530","line":58,"updated":"2018-03-30 08:03:06.000000000","message":"I used this function to demonstract how we should use Hpyervisor.","commit_id":"1a9cefdd0f8869d3dda9415f65c7064ddc7c70b5"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"8b354f3f554a13f56987cb388423051d1edf55b7","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        \"\"\"Translate power state to OpenStack defined constants.\"\"\""},{"line_number":56,"context_line":"        return ZVM_POWER_STATE.get(power_state, compute_power_state.NOSTATE)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def get_info(self):"},{"line_number":59,"context_line":"        \"\"\"Get the current status of an instance.\"\"\""},{"line_number":60,"context_line":"        power_state \u003d self._mapping_power_state("},{"line_number":61,"context_line":"            self._hypervisor.guest_get_power_state("}],"source_content_type":"text/x-python","patch_set":25,"id":"bf659307_5f2f0a87","line":58,"in_reply_to":"bf659307_e13c7530","updated":"2018-04-03 09:12:58.000000000","message":"ok, I followed this for remaining functions. thanks","commit_id":"1a9cefdd0f8869d3dda9415f65c7064ddc7c70b5"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"5566331b7cafcc96aa6fed548a393c3beab0ab96","unresolved":false,"context_lines":[{"line_number":62,"context_line":"                self._instance.name))"},{"line_number":63,"context_line":"        return hardware.InstanceInfo(power_state)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def spawn(self, context, image_meta, injected_files,"},{"line_number":66,"context_line":"              admin_password, allocations, network_info\u003dNone,"},{"line_number":67,"context_line":"              block_device_info\u003dNone, flavor\u003dNone):"},{"line_number":68,"context_line":"        LOG.info(\"Spawning new instance %s on zVM hypervisor\","}],"source_content_type":"text/x-python","patch_set":25,"id":"bf659307_215eed75","line":65,"updated":"2018-03-30 08:03:06.000000000","message":"That is not good at all, you are introduction too many concepts.\n\nPlease for this patch, just make the code to create the virtual machine, no need of network, configdrive of things like that, they will come next patches.\n\nI would have renamed this function \"create\" and used that prototype:\n\n  def create(self, vcpus, memory, disk_list\u003d[]):\n    pass\n\nBut please for this first impl, consider only vcpus and memory.\n\nIt\u0027s the driver which will be responsible to coordinate the whole VM deployment, \u0027create\u0027, \u0027network\u0027, \u0027disk\u0027, \u0027deploy\u0027...\n\nMakes sense?","commit_id":"1a9cefdd0f8869d3dda9415f65c7064ddc7c70b5"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"8b354f3f554a13f56987cb388423051d1edf55b7","unresolved":false,"context_lines":[{"line_number":62,"context_line":"                self._instance.name))"},{"line_number":63,"context_line":"        return hardware.InstanceInfo(power_state)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def spawn(self, context, image_meta, injected_files,"},{"line_number":66,"context_line":"              admin_password, allocations, network_info\u003dNone,"},{"line_number":67,"context_line":"              block_device_info\u003dNone, flavor\u003dNone):"},{"line_number":68,"context_line":"        LOG.info(\"Spawning new instance %s on zVM hypervisor\","}],"source_content_type":"text/x-python","patch_set":25,"id":"bf659307_8c27c2ca","line":65,"in_reply_to":"bf659307_215eed75","updated":"2018-04-03 09:12:58.000000000","message":"hyperv , xen and vmware seems are similar to what we proposed, to use vmops to handle instead driver to orchestration\nI think conceptually it should be fine to keep logic inside vmops (guest.py) ?\n\nand I was told we need submit spawn in one patch and without network/config drive it will have impact to the functions we provided, I udnerstood it\u0027s a pain to look at bigger code, so I will wait for more people to advice on whether it\u0027s a good idea to submit part of the functions :)\n\nreally appreciate your support and help","commit_id":"1a9cefdd0f8869d3dda9415f65c7064ddc7c70b5"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"5566331b7cafcc96aa6fed548a393c3beab0ab96","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        LOG.info(\"Spawning new instance %s on zVM hypervisor\","},{"line_number":69,"context_line":"                 self._instance.name, instance\u003dself._instance)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        if self._hypervisor.guest_exists(self._instance):"},{"line_number":72,"context_line":"            raise exception.InstanceExists(name\u003dself._instance.name)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        # For zVM instance, limit the maximum length of instance name to 8"}],"source_content_type":"text/x-python","patch_set":25,"id":"bf659307_61cdc52f","line":71,"updated":"2018-03-30 08:03:06.000000000","message":"What about introducing a function like\n\n  def exists(self):\n    \"\"\"Returns whether guest is well defined in zVM\"\"\"\n    return self._hypervisor.guest_exists(self._instance)","commit_id":"1a9cefdd0f8869d3dda9415f65c7064ddc7c70b5"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"34cf654f2904a8d93a89d813e3702a899404e22f","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        LOG.info(\"Spawning new instance %s on zVM hypervisor\","},{"line_number":69,"context_line":"                 self._instance.name, instance\u003dself._instance)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        if self._exists_in_hypervisors():"},{"line_number":72,"context_line":"            raise exception.InstanceExists(name\u003dself._instance.name)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        # For zVM instance, limit the maximum length of instance name to 8"}],"source_content_type":"text/x-python","patch_set":30,"id":"bf659307_217c5471","line":71,"updated":"2018-04-04 17:32:58.000000000","message":"How does this make sense? None of our other drivers have this, because we only call driver.spawn() once per instance.","commit_id":"0608ecda29f3276e152ddbd28b97dff4b3035754"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"71c2b98d2250fe8f0fc6420b8ce97367ff645998","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        LOG.info(\"Spawning new instance %s on zVM hypervisor\","},{"line_number":69,"context_line":"                 self._instance.name, instance\u003dself._instance)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        if self._exists_in_hypervisors():"},{"line_number":72,"context_line":"            raise exception.InstanceExists(name\u003dself._instance.name)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        # For zVM instance, limit the maximum length of instance name to 8"}],"source_content_type":"text/x-python","patch_set":30,"id":"bf659307_8a2174a2","line":71,"in_reply_to":"bf659307_217c5471","updated":"2018-04-09 05:58:27.000000000","message":"yes, we add this because we want to avoid some existing instance with same name on the hypervisor already \nbecause currently we are using name to decide\n\nand because when we first design our driver, we found hyperv has similar concept to us and we referred to them, they have this check here:\n\nhttps://github.com/openstack/nova/blob/master/nova/virt/hyperv/vmops.py#L269","commit_id":"0608ecda29f3276e152ddbd28b97dff4b3035754"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"34cf654f2904a8d93a89d813e3702a899404e22f","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                    \"The zVM hypervisor does not support instance names \""},{"line_number":78,"context_line":"                    \"longer than 8 characters. Please change your config of \""},{"line_number":79,"context_line":"                    \"instance_name_template.\") % self._instance.name"},{"line_number":80,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        try:"},{"line_number":83,"context_line":"            spawn_start \u003d time.time()"}],"source_content_type":"text/x-python","patch_set":30,"id":"bf659307_21f1b402","line":80,"updated":"2018-04-04 17:32:58.000000000","message":"This is a really terrible place to fail because they configured things incorrectly. Also, this means that the default name template won\u0027t work for zvm.","commit_id":"0608ecda29f3276e152ddbd28b97dff4b3035754"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"71c2b98d2250fe8f0fc6420b8ce97367ff645998","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                    \"The zVM hypervisor does not support instance names \""},{"line_number":78,"context_line":"                    \"longer than 8 characters. Please change your config of \""},{"line_number":79,"context_line":"                    \"instance_name_template.\") % self._instance.name"},{"line_number":80,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        try:"},{"line_number":83,"context_line":"            spawn_start \u003d time.time()"}],"source_content_type":"text/x-python","patch_set":30,"id":"bf659307_2a170848","line":80,"in_reply_to":"bf659307_21f1b402","updated":"2018-04-09 05:58:27.000000000","message":"yes, the default template won\u0027t work for us, that\u0027s why our CI and our doc configuration will guide user to handle the name to a acceptable template","commit_id":"0608ecda29f3276e152ddbd28b97dff4b3035754"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"34cf654f2904a8d93a89d813e3702a899404e22f","unresolved":false,"context_lines":[{"line_number":97,"context_line":"                disk_list)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"            # Deploy image to the guest vm"},{"line_number":100,"context_line":"            self._hypervisor.guest_deploy(self._instance.name,"},{"line_number":101,"context_line":"                spawn_image_name, transportfiles\u003dtransportfiles)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"            # Setup network for z/VM instance"}],"source_content_type":"text/x-python","patch_set":30,"id":"bf659307_e1017c3b","line":100,"updated":"2018-04-04 17:32:58.000000000","message":"It looks to me like this refers to the instance by name and not uuid. I know that\u0027s how it works in the libvirt driver, and that you have an eight character limit on the name/identifier. However, I would really encourage you to *not* use the instance.name as the handle for the instance if at all possible. It means that if the operator later changes the name template config, you\u0027re completely broken.","commit_id":"0608ecda29f3276e152ddbd28b97dff4b3035754"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"71c2b98d2250fe8f0fc6420b8ce97367ff645998","unresolved":false,"context_lines":[{"line_number":97,"context_line":"                disk_list)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"            # Deploy image to the guest vm"},{"line_number":100,"context_line":"            self._hypervisor.guest_deploy(self._instance.name,"},{"line_number":101,"context_line":"                spawn_image_name, transportfiles\u003dtransportfiles)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"            # Setup network for z/VM instance"}],"source_content_type":"text/x-python","patch_set":30,"id":"bf659307_2ab3884f","line":100,"in_reply_to":"bf659307_e1017c3b","updated":"2018-04-09 05:58:27.000000000","message":"ok, we will consider whether it\u0027s possible to switch to uuid model, BTW, I guess if some template changed in xen \n\nhttps://github.com/openstack/nova/blob/master/nova/virt/xenapi/driver.py#L127\nhttps://github.com/openstack/nova/blob/master/nova/virt/xenapi/vmops.py#L171\n\nand seems hyperv also\n\nhttps://github.com/openstack/nova/blob/master/nova/virt/hyperv/vmops.py#L354","commit_id":"0608ecda29f3276e152ddbd28b97dff4b3035754"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"34cf654f2904a8d93a89d813e3702a899404e22f","unresolved":false,"context_lines":[{"line_number":181,"context_line":"            self._hypervisor.guest_create_network_interface(vm_name,"},{"line_number":182,"context_line":"                os_distro, inst_nets)"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    def _wait_network_ready(self, instance):"},{"line_number":185,"context_line":"        \"\"\"Wait until neutron zvm-agent adds all NICs to vm\"\"\""},{"line_number":186,"context_line":"        inst_name \u003d instance.name"},{"line_number":187,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"bf659307_41b948e7","line":184,"updated":"2018-04-04 17:32:58.000000000","message":"IMHO, new drivers (especially with their own neutron drivers) should be using the external event mechanism to be notified by neutron when networking is plumbed instead of polling like this.\n\nhttps://github.com/openstack/nova/blob/dd65cad17d7cebd6f9389d3f6b653ed22bbf90d9/nova/compute/manager.py#L423","commit_id":"0608ecda29f3276e152ddbd28b97dff4b3035754"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"71c2b98d2250fe8f0fc6420b8ce97367ff645998","unresolved":false,"context_lines":[{"line_number":181,"context_line":"            self._hypervisor.guest_create_network_interface(vm_name,"},{"line_number":182,"context_line":"                os_distro, inst_nets)"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    def _wait_network_ready(self, instance):"},{"line_number":185,"context_line":"        \"\"\"Wait until neutron zvm-agent adds all NICs to vm\"\"\""},{"line_number":186,"context_line":"        inst_name \u003d instance.name"},{"line_number":187,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"bf659307_6ad74051","line":184,"in_reply_to":"bf659307_41b948e7","updated":"2018-04-09 05:58:27.000000000","message":"ok, I will do some research on this area, thanks for pointing this out","commit_id":"0608ecda29f3276e152ddbd28b97dff4b3035754"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f6bed38e2927805bad2e74ab89a5547a6d36aea7","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        return hardware.InstanceInfo(power_state)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def spawn(self, context, image_meta, injected_files,"},{"line_number":66,"context_line":"              admin_password, allocations, network_info\u003dNone,"},{"line_number":67,"context_line":"              block_device_info\u003dNone, flavor\u003dNone):"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        LOG.info(\"Spawning new instance %s on zVM hypervisor\","},{"line_number":70,"context_line":"                 self._instance.name, instance\u003dself._instance)"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_6837364f","line":67,"range":{"start_line":66,"start_character":43,"end_line":67,"end_character":49},"updated":"2018-04-09 20:34:04.000000000","message":"Given how this is called, not sure there\u0027s a reason to make these kwargs.","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"b3b16a6f5a4a12b678867f1e65b402ec8521eea4","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        return hardware.InstanceInfo(power_state)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def spawn(self, context, image_meta, injected_files,"},{"line_number":66,"context_line":"              admin_password, allocations, network_info\u003dNone,"},{"line_number":67,"context_line":"              block_device_info\u003dNone, flavor\u003dNone):"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        LOG.info(\"Spawning new instance %s on zVM hypervisor\","},{"line_number":70,"context_line":"                 self._instance.name, instance\u003dself._instance)"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_77f7ea8c","line":67,"range":{"start_line":66,"start_character":43,"end_line":67,"end_character":49},"in_reply_to":"bf659307_6837364f","updated":"2018-04-11 03:31:52.000000000","message":"I guess follow other drivers will be consistent?","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ce2e26742f932c69c4bb3c0deae732394df8d3b7","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        return hardware.InstanceInfo(power_state)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def spawn(self, context, image_meta, injected_files,"},{"line_number":66,"context_line":"              admin_password, allocations, network_info\u003dNone,"},{"line_number":67,"context_line":"              block_device_info\u003dNone, flavor\u003dNone):"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        LOG.info(\"Spawning new instance %s on zVM hypervisor\","},{"line_number":70,"context_line":"                 self._instance.name, instance\u003dself._instance)"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_00373c4f","line":67,"range":{"start_line":66,"start_character":43,"end_line":67,"end_character":49},"in_reply_to":"bf659307_77f7ea8c","updated":"2018-04-11 12:30:37.000000000","message":"shrug","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f6bed38e2927805bad2e74ab89a5547a6d36aea7","unresolved":false,"context_lines":[{"line_number":110,"context_line":"                     spawn_time, instance\u003dself._instance)"},{"line_number":111,"context_line":"        except Exception as err:"},{"line_number":112,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":113,"context_line":"                LOG.error(\"Deploy image to instance %(instance)s \""},{"line_number":114,"context_line":"                          \"failed with reason: %(err)s\","},{"line_number":115,"context_line":"                          {\u0027instance\u0027: self._instance.name, \u0027err\u0027: err},"},{"line_number":116,"context_line":"                          instance\u003dself._instance)"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_28505e5e","line":113,"range":{"start_line":113,"start_character":34,"end_line":113,"end_character":42},"updated":"2018-04-09 20:34:04.000000000","message":"strike","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"b3b16a6f5a4a12b678867f1e65b402ec8521eea4","unresolved":false,"context_lines":[{"line_number":110,"context_line":"                     spawn_time, instance\u003dself._instance)"},{"line_number":111,"context_line":"        except Exception as err:"},{"line_number":112,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":113,"context_line":"                LOG.error(\"Deploy image to instance %(instance)s \""},{"line_number":114,"context_line":"                          \"failed with reason: %(err)s\","},{"line_number":115,"context_line":"                          {\u0027instance\u0027: self._instance.name, \u0027err\u0027: err},"},{"line_number":116,"context_line":"                          instance\u003dself._instance)"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_17f0ee90","line":113,"range":{"start_line":113,"start_character":34,"end_line":113,"end_character":42},"in_reply_to":"bf659307_28505e5e","updated":"2018-04-11 03:31:52.000000000","message":"Done","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f6bed38e2927805bad2e74ab89a5547a6d36aea7","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        def _wait_for_nics_add_in_vm(inst_name, expiration):"},{"line_number":182,"context_line":"            if (CONF.zvm.reachable_timeout and"},{"line_number":183,"context_line":"                    timeutils.utcnow() \u003e expiration):"},{"line_number":184,"context_line":"                msg \u003d _(\"NIC update check failed \""},{"line_number":185,"context_line":"                        \"on instance: %s\") % instance.uuid"},{"line_number":186,"context_line":"                raise exception.NovaException(message\u003dmsg)"},{"line_number":187,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_a3300fa0","line":184,"range":{"start_line":184,"start_character":42,"end_line":184,"end_character":48},"updated":"2018-04-09 20:34:04.000000000","message":"timed out?","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"b3b16a6f5a4a12b678867f1e65b402ec8521eea4","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        def _wait_for_nics_add_in_vm(inst_name, expiration):"},{"line_number":182,"context_line":"            if (CONF.zvm.reachable_timeout and"},{"line_number":183,"context_line":"                    timeutils.utcnow() \u003e expiration):"},{"line_number":184,"context_line":"                msg \u003d _(\"NIC update check failed \""},{"line_number":185,"context_line":"                        \"on instance: %s\") % instance.uuid"},{"line_number":186,"context_line":"                raise exception.NovaException(message\u003dmsg)"},{"line_number":187,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_d72b56e8","line":184,"range":{"start_line":184,"start_character":42,"end_line":184,"end_character":48},"in_reply_to":"bf659307_a3300fa0","updated":"2018-04-11 03:31:52.000000000","message":"Done","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"4792340d634ac205028e090a0a07450c849e4614","unresolved":false,"context_lines":[{"line_number":186,"context_line":"                raise exception.NovaException(message\u003dmsg)"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"            try:"},{"line_number":189,"context_line":"                # TODO(jichen): nova zvm driver is using loop call to check"},{"line_number":190,"context_line":"                # the NIC status of the guest, it will be updated soon through"},{"line_number":191,"context_line":"                # neutron agent event mechanism to avoid this kind of loop"},{"line_number":192,"context_line":"                switch_dict \u003d self._hypervisor.guest_get_nic_vswitch_info("},{"line_number":193,"context_line":"                    inst_name)"},{"line_number":194,"context_line":"                if switch_dict and None not in switch_dict.values():"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_fbba40be","line":191,"range":{"start_line":189,"start_character":16,"end_line":191,"end_character":73},"updated":"2018-04-09 08:49:26.000000000","message":"I added a todo here as the neutron agent event might need more time to proceed, as this loop functional works, can we start to work on it now and back to this TODO later when the neutron side is ready?","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f6bed38e2927805bad2e74ab89a5547a6d36aea7","unresolved":false,"context_lines":[{"line_number":232,"context_line":"                return True"},{"line_number":233,"context_line":"        return False"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"    def _import_spawn_image(self, context, image_href, image_os_version):"},{"line_number":236,"context_line":"        LOG.debug(\"Downloading the image %s from glance to nova compute \""},{"line_number":237,"context_line":"                  \"server\", image_href)"},{"line_number":238,"context_line":"        image_path \u003d os.path.join(os.path.normpath(CONF.zvm.image_tmp_path),"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_03e69b17","line":235,"range":{"start_line":235,"start_character":43,"end_line":235,"end_character":53},"updated":"2018-04-09 20:34:04.000000000","message":"This is really an ID, right?  Naming it \u0027href\u0027 is confusing...","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"b3b16a6f5a4a12b678867f1e65b402ec8521eea4","unresolved":false,"context_lines":[{"line_number":232,"context_line":"                return True"},{"line_number":233,"context_line":"        return False"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"    def _import_spawn_image(self, context, image_href, image_os_version):"},{"line_number":236,"context_line":"        LOG.debug(\"Downloading the image %s from glance to nova compute \""},{"line_number":237,"context_line":"                  \"server\", image_href)"},{"line_number":238,"context_line":"        image_path \u003d os.path.join(os.path.normpath(CONF.zvm.image_tmp_path),"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_f719bad6","line":235,"range":{"start_line":235,"start_character":43,"end_line":235,"end_character":53},"in_reply_to":"bf659307_03e69b17","updated":"2018-04-11 03:31:52.000000000","message":"Done","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f6bed38e2927805bad2e74ab89a5547a6d36aea7","unresolved":false,"context_lines":[{"line_number":236,"context_line":"        LOG.debug(\"Downloading the image %s from glance to nova compute \""},{"line_number":237,"context_line":"                  \"server\", image_href)"},{"line_number":238,"context_line":"        image_path \u003d os.path.join(os.path.normpath(CONF.zvm.image_tmp_path),"},{"line_number":239,"context_line":"                                  image_href)"},{"line_number":240,"context_line":"        if not os.path.exists(image_path):"},{"line_number":241,"context_line":"            images.fetch(context, image_href, image_path)"},{"line_number":242,"context_line":"        image_url \u003d \"file://\" + image_path"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_c3c8a375","line":239,"range":{"start_line":239,"start_character":34,"end_line":239,"end_character":44},"updated":"2018-04-09 20:34:04.000000000","message":"...here, because it makes me think you\u0027re going to end up with an image_path like \n\n /var/tmp/nova/http://localhost:1234/glance/v2/images/XXXX","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"b3b16a6f5a4a12b678867f1e65b402ec8521eea4","unresolved":false,"context_lines":[{"line_number":236,"context_line":"        LOG.debug(\"Downloading the image %s from glance to nova compute \""},{"line_number":237,"context_line":"                  \"server\", image_href)"},{"line_number":238,"context_line":"        image_path \u003d os.path.join(os.path.normpath(CONF.zvm.image_tmp_path),"},{"line_number":239,"context_line":"                                  image_href)"},{"line_number":240,"context_line":"        if not os.path.exists(image_path):"},{"line_number":241,"context_line":"            images.fetch(context, image_href, image_path)"},{"line_number":242,"context_line":"        image_url \u003d \"file://\" + image_path"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_970abe76","line":239,"range":{"start_line":239,"start_character":34,"end_line":239,"end_character":44},"in_reply_to":"bf659307_c3c8a375","updated":"2018-04-11 03:31:52.000000000","message":"right, we will modify","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f6bed38e2927805bad2e74ab89a5547a6d36aea7","unresolved":false,"context_lines":[{"line_number":243,"context_line":"        image_meta \u003d {\u0027os_version\u0027: image_os_version}"},{"line_number":244,"context_line":"        self._hypervisor.image_import(image_href, image_url, image_meta)"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"    def _exists_in_hypervisors(self):"},{"line_number":247,"context_line":"        return self._hypervisor.guest_exists(self._instance)"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"    def destroy(self, context, network_info\u003dNone,"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_28229e02","line":246,"range":{"start_line":246,"start_character":29,"end_line":246,"end_character":30},"updated":"2018-04-09 20:34:04.000000000","message":"why is this plural?","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"b3b16a6f5a4a12b678867f1e65b402ec8521eea4","unresolved":false,"context_lines":[{"line_number":243,"context_line":"        image_meta \u003d {\u0027os_version\u0027: image_os_version}"},{"line_number":244,"context_line":"        self._hypervisor.image_import(image_href, image_url, image_meta)"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"    def _exists_in_hypervisors(self):"},{"line_number":247,"context_line":"        return self._hypervisor.guest_exists(self._instance)"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"    def destroy(self, context, network_info\u003dNone,"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_b70fc286","line":246,"range":{"start_line":246,"start_character":29,"end_line":246,"end_character":30},"in_reply_to":"bf659307_28229e02","updated":"2018-04-11 03:31:52.000000000","message":"typo :(","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ce2e26742f932c69c4bb3c0deae732394df8d3b7","unresolved":false,"context_lines":[{"line_number":107,"context_line":"                     spawn_time, instance\u003dself._instance)"},{"line_number":108,"context_line":"        except Exception as err:"},{"line_number":109,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":110,"context_line":"                LOG.error(\"Deploy  instance %(instance)s \""},{"line_number":111,"context_line":"                          \"failed with reason: %(err)s\","},{"line_number":112,"context_line":"                          {\u0027instance\u0027: self._instance.name, \u0027err\u0027: err},"},{"line_number":113,"context_line":"                          instance\u003dself._instance)"}],"source_content_type":"text/x-python","patch_set":32,"id":"bf659307_80426caa","line":110,"range":{"start_line":110,"start_character":34,"end_line":110,"end_character":35},"updated":"2018-04-11 12:30:37.000000000","message":"extra space","commit_id":"fcc5702c1f576d48a1b02aa9e9883fa1d12f3799"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ce2e26742f932c69c4bb3c0deae732394df8d3b7","unresolved":false,"context_lines":[{"line_number":189,"context_line":"        timeout \u003d CONF.vif_plugging_timeout"},{"line_number":190,"context_line":"        try:"},{"line_number":191,"context_line":"            event \u003d self._get_neutron_event(instance, network_info)"},{"line_number":192,"context_line":"            with self.virtapi.wait_for_instance_event("},{"line_number":193,"context_line":"                    instance, event, deadline\u003dtimeout,"},{"line_number":194,"context_line":"                    error_callback\u003dself._neutron_failed_callback):"},{"line_number":195,"context_line":"                self._setup_network(vm_name, os_distro, network_info, instance)"}],"source_content_type":"text/x-python","patch_set":32,"id":"bf659307_407f74df","line":192,"range":{"start_line":192,"start_character":12,"end_line":192,"end_character":54},"updated":"2018-04-11 12:30:37.000000000","message":"oh, much nicer.","commit_id":"fcc5702c1f576d48a1b02aa9e9883fa1d12f3799"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ce2e26742f932c69c4bb3c0deae732394df8d3b7","unresolved":false,"context_lines":[{"line_number":199,"context_line":"            if CONF.vif_plugging_is_fatal:"},{"line_number":200,"context_line":"                raise exception.VirtualInterfaceCreateException()"},{"line_number":201,"context_line":"        except Exception as err:"},{"line_number":202,"context_line":"            LOG.error(\"Failed for vif plugging: %s\", six.text_type(err),"},{"line_number":203,"context_line":"                       instance\u003dinstance)"},{"line_number":204,"context_line":"            raise"},{"line_number":205,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"bf659307_c053846a","line":202,"updated":"2018-04-11 12:30:37.000000000","message":"consider using save_and_reraise here","commit_id":"fcc5702c1f576d48a1b02aa9e9883fa1d12f3799"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"ed1d66ba46a989d89efb7106391b4a36bd0a5b05","unresolved":false,"context_lines":[{"line_number":199,"context_line":"            if CONF.vif_plugging_is_fatal:"},{"line_number":200,"context_line":"                raise exception.VirtualInterfaceCreateException()"},{"line_number":201,"context_line":"        except Exception as err:"},{"line_number":202,"context_line":"            LOG.error(\"Failed for vif plugging: %s\", six.text_type(err),"},{"line_number":203,"context_line":"                       instance\u003dinstance)"},{"line_number":204,"context_line":"            raise"},{"line_number":205,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"bf659307_8731f70d","line":202,"in_reply_to":"bf659307_c053846a","updated":"2018-04-12 19:11:27.000000000","message":"I think they actually have to because the LOG statement can cause a context switch and after switching back here, the original exception state will be lost.","commit_id":"fcc5702c1f576d48a1b02aa9e9883fa1d12f3799"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"799fbe70850477180af89162365be9122b7ba6dd","unresolved":false,"context_lines":[{"line_number":225,"context_line":"                self._hypervisor.guest_delete(self._instance.name)"},{"line_number":226,"context_line":"            except exception.NovaException as err:"},{"line_number":227,"context_line":"                if err.kwargs[\u0027results\u0027][\u0027overallRC\u0027] \u003d\u003d 404:"},{"line_number":228,"context_line":"                    LOG.info(\"guest disappear during destroy\","},{"line_number":229,"context_line":"                             instance\u003dself._instance)"},{"line_number":230,"context_line":"                else:"},{"line_number":231,"context_line":"                    raise"}],"source_content_type":"text/x-python","patch_set":40,"id":"9f6a8fd7_50a5c0a0","line":228,"range":{"start_line":228,"start_character":53,"end_line":228,"end_character":60},"updated":"2018-04-24 17:39:53.000000000","message":"nit: s/destroy/destroying/","commit_id":"5807c45d6d2955fbb619ea86b19470e714d9f564"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"799fbe70850477180af89162365be9122b7ba6dd","unresolved":false,"context_lines":[{"line_number":225,"context_line":"                self._hypervisor.guest_delete(self._instance.name)"},{"line_number":226,"context_line":"            except exception.NovaException as err:"},{"line_number":227,"context_line":"                if err.kwargs[\u0027results\u0027][\u0027overallRC\u0027] \u003d\u003d 404:"},{"line_number":228,"context_line":"                    LOG.info(\"guest disappear during destroy\","},{"line_number":229,"context_line":"                             instance\u003dself._instance)"},{"line_number":230,"context_line":"                else:"},{"line_number":231,"context_line":"                    raise"}],"source_content_type":"text/x-python","patch_set":40,"id":"9f6a8fd7_10abc874","line":228,"range":{"start_line":228,"start_character":30,"end_line":228,"end_character":35},"updated":"2018-04-24 17:39:53.000000000","message":"nit: s/guest/Instance/","commit_id":"5807c45d6d2955fbb619ea86b19470e714d9f564"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"7093ab97cdc5bb4c45b3710ef001c414c35166f9","unresolved":false,"context_lines":[{"line_number":225,"context_line":"                self._hypervisor.guest_delete(self._instance.name)"},{"line_number":226,"context_line":"            except exception.NovaException as err:"},{"line_number":227,"context_line":"                if err.kwargs[\u0027results\u0027][\u0027overallRC\u0027] \u003d\u003d 404:"},{"line_number":228,"context_line":"                    LOG.info(\"guest disappear during destroy\","},{"line_number":229,"context_line":"                             instance\u003dself._instance)"},{"line_number":230,"context_line":"                else:"},{"line_number":231,"context_line":"                    raise"}],"source_content_type":"text/x-python","patch_set":40,"id":"9f6a8fd7_243e44da","line":228,"range":{"start_line":228,"start_character":30,"end_line":228,"end_character":35},"in_reply_to":"9f6a8fd7_10abc874","updated":"2018-05-02 07:23:05.000000000","message":"Done","commit_id":"5807c45d6d2955fbb619ea86b19470e714d9f564"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"7093ab97cdc5bb4c45b3710ef001c414c35166f9","unresolved":false,"context_lines":[{"line_number":225,"context_line":"                self._hypervisor.guest_delete(self._instance.name)"},{"line_number":226,"context_line":"            except exception.NovaException as err:"},{"line_number":227,"context_line":"                if err.kwargs[\u0027results\u0027][\u0027overallRC\u0027] \u003d\u003d 404:"},{"line_number":228,"context_line":"                    LOG.info(\"guest disappear during destroy\","},{"line_number":229,"context_line":"                             instance\u003dself._instance)"},{"line_number":230,"context_line":"                else:"},{"line_number":231,"context_line":"                    raise"}],"source_content_type":"text/x-python","patch_set":40,"id":"9f6a8fd7_c42428c9","line":228,"range":{"start_line":228,"start_character":53,"end_line":228,"end_character":60},"in_reply_to":"9f6a8fd7_50a5c0a0","updated":"2018-05-02 07:23:05.000000000","message":"Done","commit_id":"5807c45d6d2955fbb619ea86b19470e714d9f564"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"d552745fcc726a9390ce6d3b4c0f6a762e1e4287","unresolved":false,"context_lines":[{"line_number":62,"context_line":"                self._instance.name))"},{"line_number":63,"context_line":"        return hardware.InstanceInfo(power_state)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def spawn(self, context, image_meta, injected_files,"},{"line_number":66,"context_line":"              admin_password, allocations, network_info\u003dNone,"},{"line_number":67,"context_line":"              block_device_info\u003dNone, flavor\u003dNone):"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":48,"id":"5f7c97a3_1bf34c75","line":65,"updated":"2018-05-24 11:42:55.000000000","message":"A bit like in the next patch with my request for snapshot I don\u0027t think all of that should be in guest.\n\nThat should be in the driver right?","commit_id":"25c512354323b01a9998e2eee2f13959e7f16a2c"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"2c16bf17cb6caf5f8f9df3d15e2c0e3e9cc42033","unresolved":false,"context_lines":[{"line_number":62,"context_line":"                self._instance.name))"},{"line_number":63,"context_line":"        return hardware.InstanceInfo(power_state)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def spawn(self, context, image_meta, injected_files,"},{"line_number":66,"context_line":"              admin_password, allocations, network_info\u003dNone,"},{"line_number":67,"context_line":"              block_device_info\u003dNone, flavor\u003dNone):"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":48,"id":"5f7c97a3_f933efa9","line":65,"in_reply_to":"5f7c97a3_1bf34c75","updated":"2018-05-25 01:53:50.000000000","message":"exactly, I will do some modifications","commit_id":"25c512354323b01a9998e2eee2f13959e7f16a2c"}],"nova/virt/zvm/hypervisor.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"34cf654f2904a8d93a89d813e3702a899404e22f","unresolved":false,"context_lines":[{"line_number":49,"context_line":"            host_stats \u003d self._reqh.call(\u0027host_get_info\u0027)"},{"line_number":50,"context_line":"        except exception.ZVMDriverException as e:"},{"line_number":51,"context_line":"            LOG.warning(\"Failed to get host stats: %s\", e)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        return host_stats"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def get_available_resource(self):"}],"source_content_type":"text/x-python","patch_set":30,"id":"bf659307_01235007","line":52,"updated":"2018-04-04 17:32:58.000000000","message":"Random whitespace damage","commit_id":"0608ecda29f3276e152ddbd28b97dff4b3035754"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"71c2b98d2250fe8f0fc6420b8ce97367ff645998","unresolved":false,"context_lines":[{"line_number":49,"context_line":"            host_stats \u003d self._reqh.call(\u0027host_get_info\u0027)"},{"line_number":50,"context_line":"        except exception.ZVMDriverException as e:"},{"line_number":51,"context_line":"            LOG.warning(\"Failed to get host stats: %s\", e)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        return host_stats"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def get_available_resource(self):"}],"source_content_type":"text/x-python","patch_set":30,"id":"bf659307_0ae6c445","line":52,"in_reply_to":"bf659307_01235007","updated":"2018-04-09 05:58:27.000000000","message":"will remove ,thanks","commit_id":"0608ecda29f3276e152ddbd28b97dff4b3035754"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f6bed38e2927805bad2e74ab89a5547a6d36aea7","unresolved":false,"context_lines":[{"line_number":37,"context_line":"                                                      ca_file\u003dca_file)"},{"line_number":38,"context_line":"        host_info \u003d self._get_host_info()"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        self._hypervisor_hostname \u003d host_info.get(\u0027hypervisor_hostname\u0027)"},{"line_number":41,"context_line":"        self._ipl_time \u003d host_info.get(\u0027ipl_time\u0027)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        self._rhost \u003d \u0027\u0027.join([pwd.getpwuid(os.geteuid()).pw_name, \u0027@\u0027,"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_fece9c81","line":40,"range":{"start_line":40,"start_character":36,"end_line":40,"end_character":72},"updated":"2018-04-09 20:34:04.000000000","message":"It may not make much sense if this turns out to be None; consider raising instead in that case.","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"b3b16a6f5a4a12b678867f1e65b402ec8521eea4","unresolved":false,"context_lines":[{"line_number":37,"context_line":"                                                      ca_file\u003dca_file)"},{"line_number":38,"context_line":"        host_info \u003d self._get_host_info()"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        self._hypervisor_hostname \u003d host_info.get(\u0027hypervisor_hostname\u0027)"},{"line_number":41,"context_line":"        self._ipl_time \u003d host_info.get(\u0027ipl_time\u0027)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        self._rhost \u003d \u0027\u0027.join([pwd.getpwuid(os.geteuid()).pw_name, \u0027@\u0027,"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_223292f3","line":40,"range":{"start_line":40,"start_character":36,"end_line":40,"end_character":72},"in_reply_to":"bf659307_fece9c81","updated":"2018-04-11 03:31:52.000000000","message":"ok, we are going to use host_info[\u0027xxx\u0027]","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f6bed38e2927805bad2e74ab89a5547a6d36aea7","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        host_info \u003d self._get_host_info()"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        self._hypervisor_hostname \u003d host_info.get(\u0027hypervisor_hostname\u0027)"},{"line_number":41,"context_line":"        self._ipl_time \u003d host_info.get(\u0027ipl_time\u0027)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        self._rhost \u003d \u0027\u0027.join([pwd.getpwuid(os.geteuid()).pw_name, \u0027@\u0027,"},{"line_number":44,"context_line":"                               CONF.my_ip])"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_1eca706d","line":41,"range":{"start_line":41,"start_character":25,"end_line":41,"end_character":50},"updated":"2018-04-09 20:34:04.000000000","message":"Likewise?","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f6bed38e2927805bad2e74ab89a5547a6d36aea7","unresolved":false,"context_lines":[{"line_number":49,"context_line":"            host_stats \u003d self._reqh.call(\u0027host_get_info\u0027)"},{"line_number":50,"context_line":"        except exception.ZVMDriverException as e:"},{"line_number":51,"context_line":"            LOG.warning(\"Failed to get host stats: %s\", e)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        return host_stats"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def get_available_resource(self):"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_1ee110fd","line":52,"updated":"2018-04-09 20:34:04.000000000","message":"unrelated","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"b3b16a6f5a4a12b678867f1e65b402ec8521eea4","unresolved":false,"context_lines":[{"line_number":49,"context_line":"            host_stats \u003d self._reqh.call(\u0027host_get_info\u0027)"},{"line_number":50,"context_line":"        except exception.ZVMDriverException as e:"},{"line_number":51,"context_line":"            LOG.warning(\"Failed to get host stats: %s\", e)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        return host_stats"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def get_available_resource(self):"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_e24d7a72","line":52,"in_reply_to":"bf659307_1ee110fd","updated":"2018-04-11 03:31:52.000000000","message":"Done, not sure why it\u0027s showing here, \nmy local didn\u0027t show it..","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f6bed38e2927805bad2e74ab89a5547a6d36aea7","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        return power_state"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def guest_create(self, name, vcpus, memory_mb, disk_list):"},{"line_number":88,"context_line":"        self._reqh.call(\u0027guest_create\u0027, name, vcpus, memory_mb,"},{"line_number":89,"context_line":"                        disk_list)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    def guest_deploy(self, name, image_name, transportfiles):"},{"line_number":92,"context_line":"        self._reqh.call(\u0027guest_deploy\u0027, name, image_name,"},{"line_number":93,"context_line":"                        transportfiles, self._rhost)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    def guest_delete(self, name):"},{"line_number":96,"context_line":"        self._reqh.call(\u0027guest_delete\u0027, name)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def guest_start(self, name):"},{"line_number":99,"context_line":"        self._reqh.call(\u0027guest_start\u0027, name)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def guest_create_network_interface(self, name, distro, nets):"},{"line_number":102,"context_line":"        self._reqh.call(\u0027guest_create_network_interface\u0027,"},{"line_number":103,"context_line":"                        name, distro, nets)"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def guest_get_definition_info(self, name):"},{"line_number":106,"context_line":"        return self._reqh.call(\u0027guest_get_definition_info\u0027, name)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    def guest_get_nic_vswitch_info(self, name):"},{"line_number":109,"context_line":"        return self._reqh.call(\u0027guest_get_nic_vswitch_info\u0027, name)"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def guest_config_minidisks(self, name, disk_list):"},{"line_number":112,"context_line":"        self._reqh.call(\u0027guest_config_minidisks\u0027, name, disk_list)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    def image_query(self, imagename):"},{"line_number":115,"context_line":"        return self._reqh.call(\u0027image_query\u0027, imagename\u003dimagename)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def image_get_root_disk_size(self, imagename):"},{"line_number":118,"context_line":"        return self._reqh.call(\u0027image_get_root_disk_size\u0027, imagename)"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    def image_import(self, image_href, image_url, image_meta):"},{"line_number":121,"context_line":"        self._reqh.call(\u0027image_import\u0027, image_href, image_url,"},{"line_number":122,"context_line":"                        image_meta, self._rhost)"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_de715846","line":122,"range":{"start_line":87,"start_character":0,"end_line":122,"end_character":48},"updated":"2018-04-09 20:34:04.000000000","message":"Note to reviewers: These seem to be getting tested through test_guestops.py","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"799fbe70850477180af89162365be9122b7ba6dd","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        except exception.NovaException as err:"},{"line_number":77,"context_line":"            if err.kwargs[\u0027results\u0027][\u0027overallRC\u0027] \u003d\u003d 404:"},{"line_number":78,"context_line":"                # instance does not exist"},{"line_number":79,"context_line":"                LOG.warning(\"Get power state of nonexistent instance: %s\","},{"line_number":80,"context_line":"                            name)"},{"line_number":81,"context_line":"                raise exception.InstanceNotFound(instance_id\u003dname)"},{"line_number":82,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":40,"id":"9f6a8fd7_30ea8cd7","line":79,"range":{"start_line":79,"start_character":29,"end_line":79,"end_character":72},"updated":"2018-04-24 17:39:53.000000000","message":"How about\n\n Failed to get power state due to nonexistent instance: %s\n\n?","commit_id":"5807c45d6d2955fbb619ea86b19470e714d9f564"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"7093ab97cdc5bb4c45b3710ef001c414c35166f9","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        except exception.NovaException as err:"},{"line_number":77,"context_line":"            if err.kwargs[\u0027results\u0027][\u0027overallRC\u0027] \u003d\u003d 404:"},{"line_number":78,"context_line":"                # instance does not exist"},{"line_number":79,"context_line":"                LOG.warning(\"Get power state of nonexistent instance: %s\","},{"line_number":80,"context_line":"                            name)"},{"line_number":81,"context_line":"                raise exception.InstanceNotFound(instance_id\u003dname)"},{"line_number":82,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":40,"id":"9f6a8fd7_441a587d","line":79,"range":{"start_line":79,"start_character":29,"end_line":79,"end_character":72},"in_reply_to":"9f6a8fd7_30ea8cd7","updated":"2018-05-02 07:23:05.000000000","message":"yes, that\u0027s better :)","commit_id":"5807c45d6d2955fbb619ea86b19470e714d9f564"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"7411dd21af05dd4ddbdac93bb39082d6f3086a5e","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        host_info \u003d self._get_host_info()"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        self._hypervisor_hostname \u003d host_info[\u0027hypervisor_hostname\u0027]"},{"line_number":41,"context_line":"        self._ipl_time \u003d host_info[\u0027ipl_time\u0027]"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        self._rhost \u003d \u0027\u0027.join([pwd.getpwuid(os.geteuid()).pw_name, \u0027@\u0027,"},{"line_number":44,"context_line":"                               CONF.my_ip])"}],"source_content_type":"text/x-python","patch_set":47,"id":"5f7c97a3_169fb603","line":41,"updated":"2018-05-23 08:12:50.000000000","message":"This is supposed to change over the time. I don\u0027t think you can do that.\n\nI would suggest to call get_host_info inside \u0027get_host_uptime\u0027","commit_id":"f135d16e34ed2ef84d76a957f1e4afad2357b4f0"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"f5a8a037362eb47805d5a021fce8be8db19e3ba7","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        host_info \u003d self._get_host_info()"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        self._hypervisor_hostname \u003d host_info[\u0027hypervisor_hostname\u0027]"},{"line_number":41,"context_line":"        self._ipl_time \u003d host_info[\u0027ipl_time\u0027]"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        self._rhost \u003d \u0027\u0027.join([pwd.getpwuid(os.geteuid()).pw_name, \u0027@\u0027,"},{"line_number":44,"context_line":"                               CONF.my_ip])"}],"source_content_type":"text/x-python","patch_set":47,"id":"5f7c97a3_23c144e5","line":41,"in_reply_to":"5f7c97a3_169fb603","updated":"2018-05-24 03:31:43.000000000","message":"you are right, will change here","commit_id":"f135d16e34ed2ef84d76a957f1e4afad2357b4f0"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"7411dd21af05dd4ddbdac93bb39082d6f3086a5e","unresolved":false,"context_lines":[{"line_number":49,"context_line":"            host_stats \u003d self._reqh.call(\u0027host_get_info\u0027)"},{"line_number":50,"context_line":"        except exception.ZVMDriverException as e:"},{"line_number":51,"context_line":"            LOG.warning(\"Failed to get host stats: %s\", e)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        return host_stats"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def get_available_resource(self):"}],"source_content_type":"text/x-python","patch_set":47,"id":"5f7c97a3_f6831aa8","line":52,"updated":"2018-05-23 08:12:50.000000000","message":"not: you can remove this","commit_id":"f135d16e34ed2ef84d76a957f1e4afad2357b4f0"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"f5a8a037362eb47805d5a021fce8be8db19e3ba7","unresolved":false,"context_lines":[{"line_number":49,"context_line":"            host_stats \u003d self._reqh.call(\u0027host_get_info\u0027)"},{"line_number":50,"context_line":"        except exception.ZVMDriverException as e:"},{"line_number":51,"context_line":"            LOG.warning(\"Failed to get host stats: %s\", e)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        return host_stats"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def get_available_resource(self):"}],"source_content_type":"text/x-python","patch_set":47,"id":"5f7c97a3_c3e97080","line":52,"in_reply_to":"5f7c97a3_f6831aa8","updated":"2018-05-24 03:31:43.000000000","message":"ok","commit_id":"f135d16e34ed2ef84d76a957f1e4afad2357b4f0"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"7411dd21af05dd4ddbdac93bb39082d6f3086a5e","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    def list_names(self):"},{"line_number":64,"context_line":"        return self._reqh.call(\u0027guest_list\u0027)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def get_host_uptime(self):"},{"line_number":67,"context_line":"        return self._ipl_time"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def guest_exists(self, instance):"}],"source_content_type":"text/x-python","patch_set":47,"id":"5f7c97a3_b67b62bc","line":66,"updated":"2018-05-23 08:12:50.000000000","message":"Do we really need this in this commit?","commit_id":"f135d16e34ed2ef84d76a957f1e4afad2357b4f0"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"f70e19387c9370ac96409fbbc35b5594f56b4268","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    def list_names(self):"},{"line_number":64,"context_line":"        return self._reqh.call(\u0027guest_list\u0027)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def get_host_uptime(self):"},{"line_number":67,"context_line":"        return self._ipl_time"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def guest_exists(self, instance):"}],"source_content_type":"text/x-python","patch_set":47,"id":"5f7c97a3_fb61b03a","line":66,"in_reply_to":"5f7c97a3_a3feb435","updated":"2018-05-24 11:35:28.000000000","message":"OK let do that so :)","commit_id":"f135d16e34ed2ef84d76a957f1e4afad2357b4f0"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"f5a8a037362eb47805d5a021fce8be8db19e3ba7","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    def list_names(self):"},{"line_number":64,"context_line":"        return self._reqh.call(\u0027guest_list\u0027)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def get_host_uptime(self):"},{"line_number":67,"context_line":"        return self._ipl_time"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def guest_exists(self, instance):"}],"source_content_type":"text/x-python","patch_set":47,"id":"5f7c97a3_a3feb435","line":66,"in_reply_to":"5f7c97a3_b67b62bc","updated":"2018-05-24 03:31:43.000000000","message":"no, I can add a commit message as it\u0027s really small","commit_id":"f135d16e34ed2ef84d76a957f1e4afad2357b4f0"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"7411dd21af05dd4ddbdac93bb39082d6f3086a5e","unresolved":false,"context_lines":[{"line_number":103,"context_line":"                        name, distro, nets)"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def guest_get_definition_info(self, name):"},{"line_number":106,"context_line":"        return self._reqh.call(\u0027guest_get_definition_info\u0027, name)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    def guest_get_nic_vswitch_info(self, name):"},{"line_number":109,"context_line":"        return self._reqh.call(\u0027guest_get_nic_vswitch_info\u0027, name)"}],"source_content_type":"text/x-python","patch_set":47,"id":"5f7c97a3_d6b13e91","line":106,"updated":"2018-05-23 08:12:50.000000000","message":"Each time we have a return I would suggest that you add docstring and an example of what is returned.","commit_id":"f135d16e34ed2ef84d76a957f1e4afad2357b4f0"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"f5a8a037362eb47805d5a021fce8be8db19e3ba7","unresolved":false,"context_lines":[{"line_number":103,"context_line":"                        name, distro, nets)"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def guest_get_definition_info(self, name):"},{"line_number":106,"context_line":"        return self._reqh.call(\u0027guest_get_definition_info\u0027, name)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    def guest_get_nic_vswitch_info(self, name):"},{"line_number":109,"context_line":"        return self._reqh.call(\u0027guest_get_nic_vswitch_info\u0027, name)"}],"source_content_type":"text/x-python","patch_set":47,"id":"5f7c97a3_23f38475","line":106,"in_reply_to":"5f7c97a3_d6b13e91","updated":"2018-05-24 03:31:43.000000000","message":"ok, will do","commit_id":"f135d16e34ed2ef84d76a957f1e4afad2357b4f0"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"f70e19387c9370ac96409fbbc35b5594f56b4268","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"        self._reqh \u003d zvmutils.ConnectorClient(zcc_url,"},{"line_number":37,"context_line":"                                              ca_file\u003dca_file)"},{"line_number":38,"context_line":"        host_info \u003d self._get_host_info()"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        self._hypervisor_hostname \u003d host_info[\u0027hypervisor_hostname\u0027]"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"        self._rhost \u003d \u0027\u0027.join([pwd.getpwuid(os.geteuid()).pw_name, \u0027@\u0027,"},{"line_number":43,"context_line":"                               CONF.my_ip])"}],"source_content_type":"text/x-python","patch_set":48,"id":"5f7c97a3_db5e3475","line":40,"range":{"start_line":38,"start_character":1,"end_line":40,"end_character":68},"updated":"2018-05-24 11:35:28.000000000","message":"This change is not clear. Perhaps you should consider what I do have suggested in the previous patch.","commit_id":"25c512354323b01a9998e2eee2f13959e7f16a2c"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"2c16bf17cb6caf5f8f9df3d15e2c0e3e9cc42033","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"        self._reqh \u003d zvmutils.ConnectorClient(zcc_url,"},{"line_number":37,"context_line":"                                              ca_file\u003dca_file)"},{"line_number":38,"context_line":"        host_info \u003d self._get_host_info()"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        self._hypervisor_hostname \u003d host_info[\u0027hypervisor_hostname\u0027]"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"        self._rhost \u003d \u0027\u0027.join([pwd.getpwuid(os.geteuid()).pw_name, \u0027@\u0027,"},{"line_number":43,"context_line":"                               CONF.my_ip])"}],"source_content_type":"text/x-python","patch_set":48,"id":"5f7c97a3_19ffcbab","line":40,"range":{"start_line":38,"start_character":1,"end_line":40,"end_character":68},"in_reply_to":"5f7c97a3_db5e3475","updated":"2018-05-25 01:53:50.000000000","message":"I changed previous patch with some comments there ,we can discuss there :)","commit_id":"25c512354323b01a9998e2eee2f13959e7f16a2c"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"b03c64bfad95f25a65bcffc76f83f18167147ca8","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        \"\"\"list names of the servers in the hypervisor\"\"\""},{"line_number":66,"context_line":"        return self._reqh.call(\u0027guest_list\u0027)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def get_host_uptime(self):"},{"line_number":69,"context_line":"        host_info \u003d self._get_host_info()"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        return host_info[\u0027ipl_time\u0027]"}],"source_content_type":"text/x-python","patch_set":53,"id":"5f7c97a3_a94ae9a9","line":68,"updated":"2018-06-11 10:09:34.000000000","message":"You forgot to add thatin hte commit message, you have added this method for free :)","commit_id":"93a536b5c4e5472644246c94e45ff4025b12dc3c"}],"nova/virt/zvm/utils.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"0d684327a68428ed661240780ae1ae87885c9590","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        return results[\u0027output\u0027]"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"class PathUtils(object):"},{"line_number":57,"context_line":"    def _get_instances_path(self):"},{"line_number":58,"context_line":"        return os.path.normpath(CONF.instances_path)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def get_instance_path(self, instance_uuid):"},{"line_number":61,"context_line":"        instance_folder \u003d os.path.join(self._get_instances_path(),"},{"line_number":62,"context_line":"                                       instance_uuid)"},{"line_number":63,"context_line":"        if not os.path.exists(instance_folder):"},{"line_number":64,"context_line":"            LOG.debug(\"Creating the instance path %s\", instance_folder)"},{"line_number":65,"context_line":"            os.makedirs(instance_folder)"},{"line_number":66,"context_line":"        return instance_folder"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"class VMUtils(object):"}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_95c41361","line":66,"range":{"start_line":56,"start_character":0,"end_line":66,"end_character":30},"updated":"2018-03-21 20:32:14.000000000","message":"Okay, this is weird, having a class to hold nothing but (what should be marked as) @staticmethods.  These methods should just be defined at the module level.","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"0b6f6ed2045277d15d370961cb361ddca33bc9d3","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        return results[\u0027output\u0027]"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"class PathUtils(object):"},{"line_number":57,"context_line":"    def _get_instances_path(self):"},{"line_number":58,"context_line":"        return os.path.normpath(CONF.instances_path)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def get_instance_path(self, instance_uuid):"},{"line_number":61,"context_line":"        instance_folder \u003d os.path.join(self._get_instances_path(),"},{"line_number":62,"context_line":"                                       instance_uuid)"},{"line_number":63,"context_line":"        if not os.path.exists(instance_folder):"},{"line_number":64,"context_line":"            LOG.debug(\"Creating the instance path %s\", instance_folder)"},{"line_number":65,"context_line":"            os.makedirs(instance_folder)"},{"line_number":66,"context_line":"        return instance_folder"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"class VMUtils(object):"}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_4db3424e","line":66,"range":{"start_line":56,"start_character":0,"end_line":66,"end_character":30},"in_reply_to":"df7087c5_95c41361","updated":"2018-03-22 08:52:28.000000000","message":"ok, make sense","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"0d684327a68428ed661240780ae1ae87885c9590","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        return instance_folder"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"class VMUtils(object):"},{"line_number":70,"context_line":"    def __init__(self):"},{"line_number":71,"context_line":"        self._pathutils \u003d PathUtils()"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_15aec397","line":69,"range":{"start_line":69,"start_character":6,"end_line":69,"end_character":13},"updated":"2018-03-21 20:32:14.000000000","message":"Same here.  This ain\u0027t Java.","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"0b6f6ed2045277d15d370961cb361ddca33bc9d3","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        return instance_folder"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"class VMUtils(object):"},{"line_number":70,"context_line":"    def __init__(self):"},{"line_number":71,"context_line":"        self._pathutils \u003d PathUtils()"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_ed833655","line":69,"range":{"start_line":69,"start_character":6,"end_line":69,"end_character":13},"in_reply_to":"df7087c5_15aec397","updated":"2018-03-22 08:52:28.000000000","message":"Done","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5dac8c0b2015f491e71c0e7be080be4ee187a35d","unresolved":false,"context_lines":[{"line_number":90,"context_line":"    def _create_config_drive(self, context, instance_path, instance,"},{"line_number":91,"context_line":"                             injected_files, admin_password):"},{"line_number":92,"context_line":"        if CONF.config_drive_format not in [\u0027tgz\u0027, \u0027iso9660\u0027]:"},{"line_number":93,"context_line":"            msg \u003d (_(\"Invalid config drive format %s\") %"},{"line_number":94,"context_line":"                   CONF.config_drive_format)"},{"line_number":95,"context_line":"            LOG.debug(msg)"},{"line_number":96,"context_line":"            raise exception.ConfigDriveUnsupportedFormat("}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_77086cd8","line":93,"range":{"start_line":93,"start_character":19,"end_line":93,"end_character":20},"updated":"2018-03-21 16:00:11.000000000","message":"Don\u0027t translate","commit_id":"4988ae617cba6417492898b97a732f5004021610"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f6bed38e2927805bad2e74ab89a5547a6d36aea7","unresolved":false,"context_lines":[{"line_number":29,"context_line":"CONF \u003d conf.CONF"},{"line_number":30,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"CONF.import_opt(\u0027instances_path\u0027, \u0027nova.compute.manager\u0027)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class ConnectorRequestHandler(object):"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_5eb468d1","line":32,"range":{"start_line":32,"start_character":0,"end_line":32,"end_character":57},"updated":"2018-04-09 20:34:04.000000000","message":"I don\u0027t get what this is doing.","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"b3b16a6f5a4a12b678867f1e65b402ec8521eea4","unresolved":false,"context_lines":[{"line_number":29,"context_line":"CONF \u003d conf.CONF"},{"line_number":30,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"CONF.import_opt(\u0027instances_path\u0027, \u0027nova.compute.manager\u0027)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class ConnectorRequestHandler(object):"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_62416a39","line":32,"range":{"start_line":32,"start_character":0,"end_line":32,"end_character":57},"in_reply_to":"bf659307_5eb468d1","updated":"2018-04-11 03:31:52.000000000","message":"removed... thanks for point out, this should be out-of-tree needed..","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f6bed38e2927805bad2e74ab89a5547a6d36aea7","unresolved":false,"context_lines":[{"line_number":103,"context_line":"    # being set correctly, so clean the value"},{"line_number":104,"context_line":"    inst_md.network_metadata \u003d None"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    configdrive_tgz \u003d os.path.join(instance_path, \u0027cfgdrive.tgz\u0027)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    LOG.debug(\u0027Creating config drive at %s\u0027, configdrive_tgz,"},{"line_number":109,"context_line":"              instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_ded4f8eb","line":106,"range":{"start_line":106,"start_character":59,"end_line":106,"end_character":63},"updated":"2018-04-09 20:34:04.000000000","message":"even if CONF.config_drive_format is iso9660?","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"b3b16a6f5a4a12b678867f1e65b402ec8521eea4","unresolved":false,"context_lines":[{"line_number":103,"context_line":"    # being set correctly, so clean the value"},{"line_number":104,"context_line":"    inst_md.network_metadata \u003d None"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    configdrive_tgz \u003d os.path.join(instance_path, \u0027cfgdrive.tgz\u0027)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    LOG.debug(\u0027Creating config drive at %s\u0027, configdrive_tgz,"},{"line_number":109,"context_line":"              instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_626acab3","line":106,"range":{"start_line":106,"start_character":59,"end_line":106,"end_character":63},"in_reply_to":"bf659307_ded4f8eb","updated":"2018-04-11 03:31:52.000000000","message":"as I replied to mike, tgz only named tgz but it\u0027s actually used as iso9660...","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f6bed38e2927805bad2e74ab89a5547a6d36aea7","unresolved":false,"context_lines":[{"line_number":118,"context_line":"                         admin_password):"},{"line_number":119,"context_line":"    # Create network configuration files"},{"line_number":120,"context_line":"    LOG.debug(\u0027Creating network configuration files \u0027"},{"line_number":121,"context_line":"              \u0027for instance: %s\u0027, instance[\u0027name\u0027], instance\u003dinstance)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    instance_path \u003d get_instance_path(instance[\u0027uuid\u0027])"},{"line_number":124,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_fef8dc7c","line":121,"range":{"start_line":121,"start_character":34,"end_line":121,"end_character":50},"updated":"2018-04-09 20:34:04.000000000","message":"Not sure if it\u0027s customary to address this as instance.name","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f6bed38e2927805bad2e74ab89a5547a6d36aea7","unresolved":false,"context_lines":[{"line_number":120,"context_line":"    LOG.debug(\u0027Creating network configuration files \u0027"},{"line_number":121,"context_line":"              \u0027for instance: %s\u0027, instance[\u0027name\u0027], instance\u003dinstance)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    instance_path \u003d get_instance_path(instance[\u0027uuid\u0027])"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    transportfiles \u003d None"},{"line_number":126,"context_line":"    if configdrive.required_by(instance):"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_bef26499","line":123,"range":{"start_line":123,"start_character":38,"end_line":123,"end_character":54},"updated":"2018-04-09 20:34:04.000000000","message":"likewise","commit_id":"b9ff638c3fed840beff76e61fe5dd93502f6a21a"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"799fbe70850477180af89162365be9122b7ba6dd","unresolved":false,"context_lines":[{"line_number":80,"context_line":"def _create_config_drive(context, instance_path, instance,"},{"line_number":81,"context_line":"                         injected_files, network_info, admin_password):"},{"line_number":82,"context_line":"    if CONF.config_drive_format not in [\u0027iso9660\u0027]:"},{"line_number":83,"context_line":"        msg \u003d (_(\"Invalid config drive format %s\") %"},{"line_number":84,"context_line":"               CONF.config_drive_format)"},{"line_number":85,"context_line":"        LOG.debug(msg)"},{"line_number":86,"context_line":"        raise exception.ConfigDriveUnsupportedFormat("},{"line_number":87,"context_line":"                        format\u003dCONF.config_drive_format)"},{"line_number":88,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"9f6a8fd7_b029bc37","line":85,"range":{"start_line":83,"start_character":0,"end_line":85,"end_character":22},"updated":"2018-04-24 17:39:53.000000000","message":"I feel it is not necessary to output debugging log here because the following exception explains it enough as \"Config drive format \u0027%(format)s\u0027 is not supported.\" in the message.","commit_id":"5807c45d6d2955fbb619ea86b19470e714d9f564"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"7093ab97cdc5bb4c45b3710ef001c414c35166f9","unresolved":false,"context_lines":[{"line_number":80,"context_line":"def _create_config_drive(context, instance_path, instance,"},{"line_number":81,"context_line":"                         injected_files, network_info, admin_password):"},{"line_number":82,"context_line":"    if CONF.config_drive_format not in [\u0027iso9660\u0027]:"},{"line_number":83,"context_line":"        msg \u003d (_(\"Invalid config drive format %s\") %"},{"line_number":84,"context_line":"               CONF.config_drive_format)"},{"line_number":85,"context_line":"        LOG.debug(msg)"},{"line_number":86,"context_line":"        raise exception.ConfigDriveUnsupportedFormat("},{"line_number":87,"context_line":"                        format\u003dCONF.config_drive_format)"},{"line_number":88,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"9f6a8fd7_641d1c72","line":85,"range":{"start_line":83,"start_character":0,"end_line":85,"end_character":22},"in_reply_to":"9f6a8fd7_b029bc37","updated":"2018-05-02 07:23:05.000000000","message":"ok, will do","commit_id":"5807c45d6d2955fbb619ea86b19470e714d9f564"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8e123d66dbc98dc18a26633888ed2753d0e830f2","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        return results[\u0027output\u0027]"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"def _get_instances_path():"},{"line_number":71,"context_line":"    return os.path.normpath(CONF.instances_path)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_491af6c5","line":70,"range":{"start_line":70,"start_character":4,"end_line":70,"end_character":23},"updated":"2018-05-31 22:05:07.000000000","message":"This is only used once, below, can be inlined.","commit_id":"96a49f21703d9605759dfecde23a94a3b7fbc094"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"706b05bab8a6be87cea6322cf740131d68569efc","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        return results[\u0027output\u0027]"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"def _get_instances_path():"},{"line_number":71,"context_line":"    return os.path.normpath(CONF.instances_path)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_e593e24d","line":70,"range":{"start_line":70,"start_character":4,"end_line":70,"end_character":23},"in_reply_to":"5f7c97a3_491af6c5","updated":"2018-06-01 05:03:41.000000000","message":"Done","commit_id":"96a49f21703d9605759dfecde23a94a3b7fbc094"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8e123d66dbc98dc18a26633888ed2753d0e830f2","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    return os.path.normpath(CONF.instances_path)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"def get_instance_path(instance_uuid):"},{"line_number":75,"context_line":"    instance_folder \u003d os.path.join(_get_instances_path(),"},{"line_number":76,"context_line":"                                   instance_uuid)"},{"line_number":77,"context_line":"    if not os.path.exists(instance_folder):"}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_89cd6e5e","line":74,"range":{"start_line":74,"start_character":4,"end_line":74,"end_character":21},"updated":"2018-05-31 22:05:07.000000000","message":"This can be private.","commit_id":"96a49f21703d9605759dfecde23a94a3b7fbc094"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"706b05bab8a6be87cea6322cf740131d68569efc","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    return os.path.normpath(CONF.instances_path)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"def get_instance_path(instance_uuid):"},{"line_number":75,"context_line":"    instance_folder \u003d os.path.join(_get_instances_path(),"},{"line_number":76,"context_line":"                                   instance_uuid)"},{"line_number":77,"context_line":"    if not os.path.exists(instance_folder):"}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_8596ae3d","line":74,"range":{"start_line":74,"start_character":4,"end_line":74,"end_character":21},"in_reply_to":"5f7c97a3_89cd6e5e","updated":"2018-06-01 05:03:41.000000000","message":"Done","commit_id":"96a49f21703d9605759dfecde23a94a3b7fbc094"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8e123d66dbc98dc18a26633888ed2753d0e830f2","unresolved":false,"context_lines":[{"line_number":74,"context_line":"def get_instance_path(instance_uuid):"},{"line_number":75,"context_line":"    instance_folder \u003d os.path.join(_get_instances_path(),"},{"line_number":76,"context_line":"                                   instance_uuid)"},{"line_number":77,"context_line":"    if not os.path.exists(instance_folder):"},{"line_number":78,"context_line":"        LOG.debug(\"Creating the instance path %s\", instance_folder)"},{"line_number":79,"context_line":"        os.makedirs(instance_folder)"},{"line_number":80,"context_line":"    return instance_folder"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":""}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_c99fe6ff","line":79,"range":{"start_line":77,"start_character":0,"end_line":79,"end_character":36},"updated":"2018-05-31 22:05:07.000000000","message":"Unless you especially care about this debug message being conditioned, you can use oslo_utils.fileutils.ensure_tree here instead.\n\nIs it proper to be creating this path under the uid running the compute service?  If not, you\u0027ll need to use nova.privsep.path.makedirs.\n\nEither way, this method winds up being small enough that it, too, can be inlined without losing anything.","commit_id":"96a49f21703d9605759dfecde23a94a3b7fbc094"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"706b05bab8a6be87cea6322cf740131d68569efc","unresolved":false,"context_lines":[{"line_number":74,"context_line":"def get_instance_path(instance_uuid):"},{"line_number":75,"context_line":"    instance_folder \u003d os.path.join(_get_instances_path(),"},{"line_number":76,"context_line":"                                   instance_uuid)"},{"line_number":77,"context_line":"    if not os.path.exists(instance_folder):"},{"line_number":78,"context_line":"        LOG.debug(\"Creating the instance path %s\", instance_folder)"},{"line_number":79,"context_line":"        os.makedirs(instance_folder)"},{"line_number":80,"context_line":"    return instance_folder"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":""}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_c5902646","line":79,"range":{"start_line":77,"start_character":0,"end_line":79,"end_character":36},"in_reply_to":"5f7c97a3_c99fe6ff","updated":"2018-06-01 05:03:41.000000000","message":"ok, I modified a little bit with ensure tree \nas it\u0027s using /var/lib/instances (by default) which is same to other virt driver and seems they are using ensure_tree as well","commit_id":"96a49f21703d9605759dfecde23a94a3b7fbc094"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8e123d66dbc98dc18a26633888ed2753d0e830f2","unresolved":false,"context_lines":[{"line_number":82,"context_line":""},{"line_number":83,"context_line":"def _create_config_drive(context, instance_path, instance,"},{"line_number":84,"context_line":"                         injected_files, network_info, admin_password):"},{"line_number":85,"context_line":"    if CONF.config_drive_format not in [\u0027iso9660\u0027]:"},{"line_number":86,"context_line":"        raise exception.ConfigDriveUnsupportedFormat("},{"line_number":87,"context_line":"                        format\u003dCONF.config_drive_format)"},{"line_number":88,"context_line":""}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_090b9e8d","line":85,"range":{"start_line":85,"start_character":32,"end_line":85,"end_character":50},"updated":"2018-05-31 22:05:07.000000000","message":"or\n\n !\u003d \u0027iso9660\u0027\n\nAny reason to use a list here?","commit_id":"96a49f21703d9605759dfecde23a94a3b7fbc094"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"706b05bab8a6be87cea6322cf740131d68569efc","unresolved":false,"context_lines":[{"line_number":82,"context_line":""},{"line_number":83,"context_line":"def _create_config_drive(context, instance_path, instance,"},{"line_number":84,"context_line":"                         injected_files, network_info, admin_password):"},{"line_number":85,"context_line":"    if CONF.config_drive_format not in [\u0027iso9660\u0027]:"},{"line_number":86,"context_line":"        raise exception.ConfigDriveUnsupportedFormat("},{"line_number":87,"context_line":"                        format\u003dCONF.config_drive_format)"},{"line_number":88,"context_line":""}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_65ccb288","line":85,"range":{"start_line":85,"start_character":32,"end_line":85,"end_character":50},"in_reply_to":"5f7c97a3_090b9e8d","updated":"2018-06-01 05:03:41.000000000","message":"because we used to have iso9660 and vfat here ...\nwill modify","commit_id":"96a49f21703d9605759dfecde23a94a3b7fbc094"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"cee27323d66147e39e3e15cc56f635c38420030a","unresolved":false,"context_lines":[{"line_number":77,"context_line":""},{"line_number":78,"context_line":"def _create_config_drive(context, instance_path, instance,"},{"line_number":79,"context_line":"                         injected_files, network_info, admin_password):"},{"line_number":80,"context_line":"    if CONF.config_drive_format !\u003d \u0027iso9660\u0027:"},{"line_number":81,"context_line":"        raise exception.ConfigDriveUnsupportedFormat("},{"line_number":82,"context_line":"                        format\u003dCONF.config_drive_format)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    LOG.debug(\u0027Using config drive\u0027, instance\u003dinstance)"},{"line_number":85,"context_line":""}],"source_content_type":"text/x-python","patch_set":57,"id":"5f7c97a3_9145ef17","line":82,"range":{"start_line":80,"start_character":4,"end_line":82,"end_character":56},"updated":"2018-07-04 07:47:47.000000000","message":"this is something can be tested when init the virt driver","commit_id":"4cff3cadb7d7b4ccd3946b4efa2e3606e3aeb776"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"a1f6b1afc1c970f6ea15e84a1069df564ad27fea","unresolved":false,"context_lines":[{"line_number":77,"context_line":""},{"line_number":78,"context_line":"def _create_config_drive(context, instance_path, instance,"},{"line_number":79,"context_line":"                         injected_files, network_info, admin_password):"},{"line_number":80,"context_line":"    if CONF.config_drive_format !\u003d \u0027iso9660\u0027:"},{"line_number":81,"context_line":"        raise exception.ConfigDriveUnsupportedFormat("},{"line_number":82,"context_line":"                        format\u003dCONF.config_drive_format)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    LOG.debug(\u0027Using config drive\u0027, instance\u003dinstance)"},{"line_number":85,"context_line":""}],"source_content_type":"text/x-python","patch_set":57,"id":"5f7c97a3_d05a6f4e","line":82,"range":{"start_line":80,"start_character":4,"end_line":82,"end_character":56},"in_reply_to":"5f7c97a3_9145ef17","updated":"2018-07-05 06:12:51.000000000","message":"raise, but we don\u0027t want to block driver init","commit_id":"4cff3cadb7d7b4ccd3946b4efa2e3606e3aeb776"}]}
