)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"b3a1df328be2596cb1a8fdcf4625aa21bed18866","unresolved":false,"context_lines":[{"line_number":12,"context_line":"paused firstly, then if detaching volume for the other VM instance"},{"line_number":13,"context_line":"B on the same compute node, which maybe lead to umount the share"},{"line_number":14,"context_line":"file, after that an error like \"No such file or directory\" will"},{"line_number":15,"context_line":"occur while resume the A."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Closes-Bug: #1421550"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"da9b358b_008d1b31","line":15,"updated":"2015-03-28 13:11:41.000000000","message":"This commit message is a little bit hard to understand. I think a little more work is needed here.","commit_id":"13a8e1be564c5e9c6bc8ac061b3466e1efdee405"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"0dd60f8bb85752a206e1663a4efa106144fd0a0f","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Zhengguang Ou \u003czhengguangou@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-05-13 14:47:07 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix the race condition between detaching volume and creating image"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The Cinder backend is NFS, there are two \u0027ACTIVE\u0027 VM on the same"},{"line_number":10,"context_line":"compute node, instance \"A\" and \"B\", and attaching a volume"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"9a0c5dc1_e7bd50d8","line":7,"updated":"2015-05-13 15:59:25.000000000","message":"please prefix this with libvirt","commit_id":"3ef04d13ac23c5f9685f66efdfcf768572f0c9a3"},{"author":{"_account_id":7653,"name":"Zhengguang Ou","email":"zhengguangou@gmail.com","username":"Zhengguang"},"change_message_id":"0b4dcf8f70ec40572d47b7f5688e065ea63c8da9","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Zhengguang Ou \u003czhengguangou@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-05-13 14:47:07 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix the race condition between detaching volume and creating image"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The Cinder backend is NFS, there are two \u0027ACTIVE\u0027 VM on the same"},{"line_number":10,"context_line":"compute node, instance \"A\" and \"B\", and attaching a volume"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"7a016987_c0b9df16","line":7,"in_reply_to":"9a0c5dc1_e7bd50d8","updated":"2015-05-19 11:39:02.000000000","message":"Done","commit_id":"3ef04d13ac23c5f9685f66efdfcf768572f0c9a3"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"6770964b70f2b271a465e4b06da408044074b4b3","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Zhengguang \u003czhengguangou@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-08-17 05:31:05 -0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"libvirt: fix the race condition between detaching volume and"},{"line_number":8,"context_line":"creating image"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"The Cinder backend is NFS, there are two \u0027ACTIVE\u0027 VM on the same"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":20,"id":"da20952f_08423cae","line":7,"updated":"2015-09-07 06:53:49.000000000","message":"please see https://wiki.openstack.org/wiki/GitCommitMessages\n\nthe title should be on the same line","commit_id":"2624fd7d875921522b475832675653bb28756cce"}],"nova/tests/unit/virt/libvirt/test_driver.py":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"b3a1df328be2596cb1a8fdcf4625aa21bed18866","unresolved":false,"context_lines":[{"line_number":4303,"context_line":"        mock_list.assert_called_with()"},{"line_number":4304,"context_line":""},{"line_number":4305,"context_line":"        devices \u003d drvr._get_devices_by_source_type(\u0027file\u0027)"},{"line_number":4306,"context_line":"        self.assertEqual(devices, [\u0027filename1\u0027, \u0027filename2\u0027, \u0027filename3\u0027])"},{"line_number":4307,"context_line":"        mock_list.assert_called_with()"},{"line_number":4308,"context_line":""},{"line_number":4309,"context_line":"    @mock.patch.object(host.Host, \"has_min_version\", return_value\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":5,"id":"da9b358b_c0af3393","line":4306,"updated":"2015-03-28 13:11:41.000000000","message":"expected values first, then the result.","commit_id":"13a8e1be564c5e9c6bc8ac061b3466e1efdee405"}],"nova/tests/unit/virt/libvirt/test_volume.py":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"b3a1df328be2596cb1a8fdcf4625aa21bed18866","unresolved":false,"context_lines":[{"line_number":427,"context_line":"                           lambda x: True)"},{"line_number":428,"context_line":"        devs \u003d [self.generate_device(transport, 2, False)]"},{"line_number":429,"context_line":"        self.stubs.Set(self.fake_conn, \u0027_get_devices_by_source_type\u0027,"},{"line_number":430,"context_line":"                                                     lambda x: devs)"},{"line_number":431,"context_line":"        vol \u003d {\u0027id\u0027: 1, \u0027name\u0027: self.name}"},{"line_number":432,"context_line":"        connection_info \u003d self.iscsi_connection(vol, self.location, self.iqn)"},{"line_number":433,"context_line":"        libvirt_driver.connect_volume(connection_info, self.disk_info)"}],"source_content_type":"text/x-python","patch_set":5,"id":"da9b358b_e0dc7748","line":430,"updated":"2015-03-28 13:11:41.000000000","message":"unindent to match self.fake_conn","commit_id":"13a8e1be564c5e9c6bc8ac061b3466e1efdee405"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"b3a1df328be2596cb1a8fdcf4625aa21bed18866","unresolved":false,"context_lines":[{"line_number":1083,"context_line":"                utils.get_hash_str(export_string))"},{"line_number":1084,"context_line":""},{"line_number":1085,"context_line":"        self.stubs.Set(self.fake_conn, \u0027_get_devices_by_source_type\u0027,"},{"line_number":1086,"context_line":"                             lambda x: [])"},{"line_number":1087,"context_line":""},{"line_number":1088,"context_line":"        connection_info \u003d {\u0027data\u0027: {\u0027export\u0027: export_string,"},{"line_number":1089,"context_line":"                                    \u0027name\u0027: self.name}}"}],"source_content_type":"text/x-python","patch_set":5,"id":"da9b358b_c0e17300","line":1086,"updated":"2015-03-28 13:11:41.000000000","message":"unindent to match self.fake_conn","commit_id":"13a8e1be564c5e9c6bc8ac061b3466e1efdee405"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"b3a1df328be2596cb1a8fdcf4625aa21bed18866","unresolved":false,"context_lines":[{"line_number":1110,"context_line":"        libvirt_driver \u003d volume.LibvirtNFSVolumeDriver(self.fake_conn)"},{"line_number":1111,"context_line":""},{"line_number":1112,"context_line":"        self.stubs.Set(self.fake_conn, \u0027_get_devices_by_source_type\u0027,"},{"line_number":1113,"context_line":"                             lambda x: [])"},{"line_number":1114,"context_line":""},{"line_number":1115,"context_line":"        mock_utils_exe.side_effect \u003d processutils.ProcessExecutionError("},{"line_number":1116,"context_line":"            None, None, None, \u0027umount\u0027, \u0027umount: device is busy.\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"da9b358b_60f187cd","line":1113,"updated":"2015-03-28 13:11:41.000000000","message":"same.","commit_id":"13a8e1be564c5e9c6bc8ac061b3466e1efdee405"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"b3a1df328be2596cb1a8fdcf4625aa21bed18866","unresolved":false,"context_lines":[{"line_number":1154,"context_line":"                utils.get_hash_str(export_string))"},{"line_number":1155,"context_line":""},{"line_number":1156,"context_line":"        self.stubs.Set(self.fake_conn, \u0027_get_devices_by_source_type\u0027,"},{"line_number":1157,"context_line":"                             lambda x: [])"},{"line_number":1158,"context_line":""},{"line_number":1159,"context_line":"        connection_info \u003d {\u0027data\u0027: {\u0027export\u0027: export_string,"},{"line_number":1160,"context_line":"                                    \u0027name\u0027: self.name}}"}],"source_content_type":"text/x-python","patch_set":5,"id":"da9b358b_20ba5fe2","line":1157,"updated":"2015-03-28 13:11:41.000000000","message":"same","commit_id":"13a8e1be564c5e9c6bc8ac061b3466e1efdee405"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"b3a1df328be2596cb1a8fdcf4625aa21bed18866","unresolved":false,"context_lines":[{"line_number":1179,"context_line":"                utils.get_hash_str(export_string))"},{"line_number":1180,"context_line":""},{"line_number":1181,"context_line":"        self.stubs.Set(self.fake_conn, \u0027_get_devices_by_source_type\u0027,"},{"line_number":1182,"context_line":"                             lambda x: [])"},{"line_number":1183,"context_line":""},{"line_number":1184,"context_line":"        connection_info \u003d {\u0027data\u0027: {\u0027export\u0027: export_string,"},{"line_number":1185,"context_line":"                                    \u0027name\u0027: self.name,"}],"source_content_type":"text/x-python","patch_set":5,"id":"da9b358b_00bf5bd1","line":1182,"updated":"2015-03-28 13:11:41.000000000","message":"same","commit_id":"13a8e1be564c5e9c6bc8ac061b3466e1efdee405"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"b3a1df328be2596cb1a8fdcf4625aa21bed18866","unresolved":false,"context_lines":[{"line_number":1204,"context_line":""},{"line_number":1205,"context_line":"        export_string \u003d \u0027192.168.1.1:/nfs/share1\u0027"},{"line_number":1206,"context_line":"        export_mnt_base \u003d os.path.join(mnt_base,"},{"line_number":1207,"context_line":"                utils.get_hash_str(export_string))"},{"line_number":1208,"context_line":""},{"line_number":1209,"context_line":"        devices \u003d [export_mnt_base + \u0027/filename\u0027]"},{"line_number":1210,"context_line":"        self.stubs.Set(self.fake_conn, \u0027_get_devices_by_source_type\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"da9b358b_20a13faa","line":1207,"updated":"2015-03-28 13:11:41.000000000","message":"indent this to match mnt_base","commit_id":"13a8e1be564c5e9c6bc8ac061b3466e1efdee405"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"b3a1df328be2596cb1a8fdcf4625aa21bed18866","unresolved":false,"context_lines":[{"line_number":1208,"context_line":""},{"line_number":1209,"context_line":"        devices \u003d [export_mnt_base + \u0027/filename\u0027]"},{"line_number":1210,"context_line":"        self.stubs.Set(self.fake_conn, \u0027_get_devices_by_source_type\u0027,"},{"line_number":1211,"context_line":"                             lambda x: devices)"},{"line_number":1212,"context_line":""},{"line_number":1213,"context_line":"        connection_info \u003d {\u0027data\u0027: {\u0027export\u0027: export_string,"},{"line_number":1214,"context_line":"                                    \u0027name\u0027: self.name}}"}],"source_content_type":"text/x-python","patch_set":5,"id":"da9b358b_e0b35709","line":1211,"updated":"2015-03-28 13:11:41.000000000","message":"unindent to match self.fake_conn","commit_id":"13a8e1be564c5e9c6bc8ac061b3466e1efdee405"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"eb150a8bcaa80e90da0e509912655138541b9b25","unresolved":false,"context_lines":[{"line_number":1195,"context_line":"        ]"},{"line_number":1196,"context_line":"        self.assertEqual(expected_commands, self.executes)"},{"line_number":1197,"context_line":""},{"line_number":1198,"context_line":"    def test_libvirt_nfs_driver_unexecuted_umount(self):"},{"line_number":1199,"context_line":"        mnt_base \u003d \u0027/mnt\u0027"},{"line_number":1200,"context_line":"        self.flags(nfs_mount_point_base\u003dmnt_base, group\u003d\u0027libvirt\u0027)"},{"line_number":1201,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9aa53dc9_08aa8770","line":1198,"updated":"2015-04-08 14:15:49.000000000","message":"Please for all new test-cases use `mock` library, instead `mox` and `stubs`.","commit_id":"3e32f2823954d68541fcc5817569b3822fef9418"},{"author":{"_account_id":7653,"name":"Zhengguang Ou","email":"zhengguangou@gmail.com","username":"Zhengguang"},"change_message_id":"d61ee28f2ca3020aff279c80ce19500de0e5a725","unresolved":false,"context_lines":[{"line_number":1195,"context_line":"        ]"},{"line_number":1196,"context_line":"        self.assertEqual(expected_commands, self.executes)"},{"line_number":1197,"context_line":""},{"line_number":1198,"context_line":"    def test_libvirt_nfs_driver_unexecuted_umount(self):"},{"line_number":1199,"context_line":"        mnt_base \u003d \u0027/mnt\u0027"},{"line_number":1200,"context_line":"        self.flags(nfs_mount_point_base\u003dmnt_base, group\u003d\u0027libvirt\u0027)"},{"line_number":1201,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"7aaa499b_f90e70e4","line":1198,"in_reply_to":"9aa53dc9_08aa8770","updated":"2015-04-11 00:46:14.000000000","message":"Done","commit_id":"3e32f2823954d68541fcc5817569b3822fef9418"}],"nova/tests/unit/virt/libvirt/volume/test_nfs.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"6770964b70f2b271a465e4b06da408044074b4b3","unresolved":false,"context_lines":[{"line_number":65,"context_line":"                                    \u0027name\u0027: self.name}}"},{"line_number":66,"context_line":"        libvirt_driver \u003d nfs.LibvirtNFSVolumeDriver(self.fake_conn)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        self.stubs.Set(self.fake_conn, \u0027get_devices_by_source_type\u0027,"},{"line_number":69,"context_line":"                       lambda x: [])"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        mock_utils_exe.side_effect \u003d processutils.ProcessExecutionError("}],"source_content_type":"text/x-python","patch_set":20,"id":"da20952f_887bacf4","line":68,"updated":"2015-09-07 06:53:49.000000000","message":"can we use mock here to be consistent with the tests.","commit_id":"2624fd7d875921522b475832675653bb28756cce"}],"nova/virt/driver.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"606b221236d47227fb55e15630d2b8628af9e80d","unresolved":false,"context_lines":[{"line_number":1425,"context_line":"        \"\"\""},{"line_number":1426,"context_line":"        raise NotImplementedError()"},{"line_number":1427,"context_line":""},{"line_number":1428,"context_line":"    def get_devices_by_source_type(self, source_type):"},{"line_number":1429,"context_line":"        \"\"\"Return all devices in use on this node by source type."},{"line_number":1430,"context_line":""},{"line_number":1431,"context_line":"          :param source_type: disk source type which want to look for"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_ceaeb1e5","line":1428,"updated":"2015-08-20 13:14:26.000000000","message":"It seems odd to add this to the virt interface here.","commit_id":"2624fd7d875921522b475832675653bb28756cce"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"6770964b70f2b271a465e4b06da408044074b4b3","unresolved":false,"context_lines":[{"line_number":1425,"context_line":"        \"\"\""},{"line_number":1426,"context_line":"        raise NotImplementedError()"},{"line_number":1427,"context_line":""},{"line_number":1428,"context_line":"    def get_devices_by_source_type(self, source_type):"},{"line_number":1429,"context_line":"        \"\"\"Return all devices in use on this node by source type."},{"line_number":1430,"context_line":""},{"line_number":1431,"context_line":"          :param source_type: disk source type which want to look for"}],"source_content_type":"text/x-python","patch_set":20,"id":"da20952f_e8a34841","line":1428,"in_reply_to":"fa1b9901_ceaeb1e5","updated":"2015-09-07 06:53:49.000000000","message":"agree. this is not called in the compute manager and it should be a libvirt only method.","commit_id":"2624fd7d875921522b475832675653bb28756cce"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"b3a1df328be2596cb1a8fdcf4625aa21bed18866","unresolved":false,"context_lines":[{"line_number":4418,"context_line":"            device_info.parse_dom(doc)"},{"line_number":4419,"context_line":"            for guest_disk in device_info.devices:"},{"line_number":4420,"context_line":"                if guest_disk.source_type \u003d\u003d source_type:"},{"line_number":4421,"context_line":"                    devices.append(guest_disk.source_path)"},{"line_number":4422,"context_line":"        return devices"},{"line_number":4423,"context_line":""},{"line_number":4424,"context_line":"    def _get_interfaces(self, xml):"}],"source_content_type":"text/x-python","patch_set":5,"id":"da9b358b_601aa719","line":4421,"updated":"2015-03-28 13:11:41.000000000","message":"how about:\n\n    devices.append([guest_disk.source_path for guest_disk in device_info.devices \n                    if guest_disk.source_type \u003d\u003d source_type])\n\nof course, this is optional. both versions are fine.","commit_id":"13a8e1be564c5e9c6bc8ac061b3466e1efdee405"},{"author":{"_account_id":7653,"name":"Zhengguang Ou","email":"zhengguangou@gmail.com","username":"Zhengguang"},"change_message_id":"b238f928b7c4185bc9082dc1e38ad773caf4bce4","unresolved":false,"context_lines":[{"line_number":4418,"context_line":"            device_info.parse_dom(doc)"},{"line_number":4419,"context_line":"            for guest_disk in device_info.devices:"},{"line_number":4420,"context_line":"                if guest_disk.source_type \u003d\u003d source_type:"},{"line_number":4421,"context_line":"                    devices.append(guest_disk.source_path)"},{"line_number":4422,"context_line":"        return devices"},{"line_number":4423,"context_line":""},{"line_number":4424,"context_line":"    def _get_interfaces(self, xml):"}],"source_content_type":"text/x-python","patch_set":5,"id":"baa041b7_8369238e","line":4421,"in_reply_to":"da9b358b_601aa719","updated":"2015-04-02 07:56:13.000000000","message":"Hi, Claudiu, If as you said, unit test got error:\nreference \u003d [\u0027/path/to/dev/1\u0027, \u0027/path/to/dev/3\u0027]\nactual    \u003d [[\u0027/path/to/dev/1\u0027], [], [\u0027/path/to/dev/3\u0027]]\n\n[[\u0027/path/to/dev/1\u0027], [], [\u0027/path/to/dev/3\u0027]] is not we want.\n\nthanks","commit_id":"13a8e1be564c5e9c6bc8ac061b3466e1efdee405"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"70d8df4780bbfe502848b50d30736212234f8016","unresolved":false,"context_lines":[{"line_number":4453,"context_line":"            domain.resume()"},{"line_number":4454,"context_line":"        return domain"},{"line_number":4455,"context_line":""},{"line_number":4456,"context_line":"    def _get_devices_by_source_type(self, source_type):"},{"line_number":4457,"context_line":"        \"\"\"Return all devices in use on this node by source type.\"\"\""},{"line_number":4458,"context_line":"        devices \u003d []"},{"line_number":4459,"context_line":"        for dom in self._host.list_instance_domains():"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a016987_8cbe3d63","line":4456,"updated":"2015-06-01 07:54:41.000000000","message":"suggestion: you can probably make it public and document param, return type.","commit_id":"888dbb758d4c93e7e45a062786e49dcc1dc16c49"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"606b221236d47227fb55e15630d2b8628af9e80d","unresolved":false,"context_lines":[{"line_number":4621,"context_line":"            guest.resume()"},{"line_number":4622,"context_line":"        return guest"},{"line_number":4623,"context_line":""},{"line_number":4624,"context_line":"    def get_devices_by_source_type(self, source_type):"},{"line_number":4625,"context_line":"        \"\"\"Return all devices in use on this node by source type.\"\"\""},{"line_number":4626,"context_line":""},{"line_number":4627,"context_line":"        devices \u003d []"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_ee793583","line":4624,"updated":"2015-08-20 13:14:26.000000000","message":"should we not really move this to utils.py as its only used by nfs.py?","commit_id":"2624fd7d875921522b475832675653bb28756cce"},{"author":{"_account_id":7653,"name":"Zhengguang Ou","email":"zhengguangou@gmail.com","username":"Zhengguang"},"change_message_id":"859b709d98556bc08f6e9eca5d4a41aaf654dac2","unresolved":false,"context_lines":[{"line_number":4621,"context_line":"            guest.resume()"},{"line_number":4622,"context_line":"        return guest"},{"line_number":4623,"context_line":""},{"line_number":4624,"context_line":"    def get_devices_by_source_type(self, source_type):"},{"line_number":4625,"context_line":"        \"\"\"Return all devices in use on this node by source type.\"\"\""},{"line_number":4626,"context_line":""},{"line_number":4627,"context_line":"        devices \u003d []"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_7d760f07","line":4624,"in_reply_to":"fa1b9901_ee793583","updated":"2015-08-21 07:55:46.000000000","message":"Not really, iscsi.py  also used it, thanks","commit_id":"2624fd7d875921522b475832675653bb28756cce"}],"nova/virt/libvirt/volume.py":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"b3a1df328be2596cb1a8fdcf4625aa21bed18866","unresolved":false,"context_lines":[{"line_number":911,"context_line":"        mount_path \u003d os.path.join(CONF.libvirt.nfs_mount_point_base,"},{"line_number":912,"context_line":"                                  utils.get_hash_str(export))"},{"line_number":913,"context_line":""},{"line_number":914,"context_line":"        # NOTE(ugvddm): just only umount the share file when no instance"},{"line_number":915,"context_line":"        # use it on the same host node, please refer to Bug1421550."},{"line_number":916,"context_line":"        devices \u003d self.connection._get_devices_by_source_type(\u0027file\u0027)"},{"line_number":917,"context_line":"        devices \u003d [dev for dev in devices if dev.startswith(mount_path)]"}],"source_content_type":"text/x-python","patch_set":5,"id":"da9b358b_6003c7b9","line":914,"updated":"2015-03-28 13:11:41.000000000","message":"replace \"just only\" with \"only\"","commit_id":"13a8e1be564c5e9c6bc8ac061b3466e1efdee405"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"b3a1df328be2596cb1a8fdcf4625aa21bed18866","unresolved":false,"context_lines":[{"line_number":925,"context_line":"                    LOG.debug(\"The NFS share %s is still in use.\", export)"},{"line_number":926,"context_line":"                else:"},{"line_number":927,"context_line":"                    LOG.exception(_LE(\"Couldn\u0027t unmount the NFS share %s\"),"},{"line_number":928,"context_line":"                                       export)"},{"line_number":929,"context_line":""},{"line_number":930,"context_line":"    def _ensure_mounted(self, nfs_export, options\u003dNone):"},{"line_number":931,"context_line":"        \"\"\"@type nfs_export: string"}],"source_content_type":"text/x-python","patch_set":5,"id":"da9b358b_c02a932c","line":928,"updated":"2015-03-28 13:11:41.000000000","message":"unindent, to match _LE","commit_id":"13a8e1be564c5e9c6bc8ac061b3466e1efdee405"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"0dd60f8bb85752a206e1663a4efa106144fd0a0f","unresolved":false,"context_lines":[{"line_number":923,"context_line":"                    \u0027target is busy\u0027 in exc.message):"},{"line_number":924,"context_line":"                    LOG.debug(\"The NFS share %s is still in use.\", export)"},{"line_number":925,"context_line":"                else:"},{"line_number":926,"context_line":"                    LOG.exception(_LE(\"Couldn\u0027t unmount the NFS share %s\"),"},{"line_number":927,"context_line":"                                  export)"},{"line_number":928,"context_line":""},{"line_number":929,"context_line":"    def _ensure_mounted(self, nfs_export, options\u003dNone):"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a0c5dc1_87cb3453","line":926,"updated":"2015-05-13 15:59:25.000000000","message":"why do we need the log exception here. can we just suffice with log.error? why do we need the stack trace?","commit_id":"3ef04d13ac23c5f9685f66efdfcf768572f0c9a3"},{"author":{"_account_id":7653,"name":"Zhengguang Ou","email":"zhengguangou@gmail.com","username":"Zhengguang"},"change_message_id":"0b4dcf8f70ec40572d47b7f5688e065ea63c8da9","unresolved":false,"context_lines":[{"line_number":923,"context_line":"                    \u0027target is busy\u0027 in exc.message):"},{"line_number":924,"context_line":"                    LOG.debug(\"The NFS share %s is still in use.\", export)"},{"line_number":925,"context_line":"                else:"},{"line_number":926,"context_line":"                    LOG.exception(_LE(\"Couldn\u0027t unmount the NFS share %s\"),"},{"line_number":927,"context_line":"                                  export)"},{"line_number":928,"context_line":""},{"line_number":929,"context_line":"    def _ensure_mounted(self, nfs_export, options\u003dNone):"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a016987_60a90b90","line":926,"in_reply_to":"9a0c5dc1_87cb3453","updated":"2015-05-19 11:39:02.000000000","message":"Hi garyk, Thanks for your review, Actually, I don\u0027t know why use the log exception, I just copy this line, but I think it\u0027ll be better use log.error.","commit_id":"3ef04d13ac23c5f9685f66efdfcf768572f0c9a3"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"70d8df4780bbfe502848b50d30736212234f8016","unresolved":false,"context_lines":[{"line_number":910,"context_line":"        mount_path \u003d os.path.join(CONF.libvirt.nfs_mount_point_base,"},{"line_number":911,"context_line":"                                  utils.get_hash_str(export))"},{"line_number":912,"context_line":""},{"line_number":913,"context_line":"        # NOTE(zhengguang): Only umount the share file when no instance"},{"line_number":914,"context_line":"        # use it on the same host node, please refer to Bug1421550."},{"line_number":915,"context_line":"        devices \u003d self.connection._get_devices_by_source_type(\u0027file\u0027)"},{"line_number":916,"context_line":"        devices \u003d [dev for dev in devices if dev.startswith(mount_path)]"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a016987_4c104559","line":913,"updated":"2015-06-01 07:54:41.000000000","message":"This is a comment not a note. Please remove the bug reference and the tag. If you want to comment the code something like should be enough:\n\n  # Verify whether no instances are still using the volume\n  devices \u003d ...","commit_id":"888dbb758d4c93e7e45a062786e49dcc1dc16c49"}]}
