)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"25579e22817b14c8a3633fa9ed04934c4a2075ec","unresolved":false,"context_lines":[{"line_number":13,"context_line":"The NFS export created on GPFS cluster will be locally mounted"},{"line_number":14,"context_line":"on a node running cinder service. And the cinder volume service"},{"line_number":15,"context_line":"will communicate with GPFS nodes over SSH to execute CLIs remotely."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Implements : blueprint ibm-gpfs-nfs-support"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id: I40e5098482d48552170c34e74be0c9e2f544fef5"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"ba3cc151_a27c17b6","line":16,"updated":"2015-07-07 02:40:02.000000000","message":"Add \u0027DocImpact\u0027 since this needs GPFS driver documentation update.","commit_id":"f73d2d156bea9388b311d7a1fccf7342e5071d55"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"90fed2a9aaf5f208abe3bc1b81d3d59861e6e4e4","unresolved":false,"context_lines":[{"line_number":13,"context_line":"The NFS export created on GPFS cluster will be locally mounted"},{"line_number":14,"context_line":"on a node running cinder service. And the cinder volume service"},{"line_number":15,"context_line":"will communicate with GPFS nodes over SSH to execute CLIs remotely."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Implements : blueprint ibm-gpfs-nfs-support"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id: I40e5098482d48552170c34e74be0c9e2f544fef5"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"9a41bdd9_3771750c","line":16,"in_reply_to":"ba3cc151_a27c17b6","updated":"2015-07-16 13:01:31.000000000","message":"Done","commit_id":"f73d2d156bea9388b311d7a1fccf7342e5071d55"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"03bffeb8844faaf731a748bc62cdd5d86a4d3c81","unresolved":false,"context_lines":[{"line_number":11,"context_line":"the GPFS nodes."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"The NFS export created on GPFS cluster will be locally mounted"},{"line_number":14,"context_line":"on a node running cinder service. And the cinder volume service"},{"line_number":15,"context_line":"will communicate with GPFS nodes over SSH to execute CLIs remotely."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Implements : blueprint ibm-gpfs-nfs-support"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9a41bdd9_524d15c3","line":14,"updated":"2015-07-16 18:10:04.000000000","message":"Lets reword this line for clarity:\n\non a node running the cinder service. The cinder volume service","commit_id":"a11ab3623d3abb46341a237c892660c5a4af2be3"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"d6ea4515889b9f0a4bf962ef9c6ea663282b716e","unresolved":false,"context_lines":[{"line_number":11,"context_line":"the GPFS nodes."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"The NFS export created on GPFS cluster will be locally mounted"},{"line_number":14,"context_line":"on a node running cinder service. And the cinder volume service"},{"line_number":15,"context_line":"will communicate with GPFS nodes over SSH to execute CLIs remotely."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Implements : blueprint ibm-gpfs-nfs-support"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9a41bdd9_149d3859","line":14,"in_reply_to":"9a41bdd9_524d15c3","updated":"2015-07-16 19:26:06.000000000","message":"Thanks. I have updated the message.","commit_id":"a11ab3623d3abb46341a237c892660c5a4af2be3"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"03bffeb8844faaf731a748bc62cdd5d86a4d3c81","unresolved":false,"context_lines":[{"line_number":19,"context_line":"DocImpact"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Needs an update in gpfs driver documentation, as this patch"},{"line_number":22,"context_line":"adds a NFS based access for GPFS cinder driver."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Change-Id: I40e5098482d48552170c34e74be0c9e2f544fef5"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9a41bdd9_b2226100","line":22,"updated":"2015-07-16 18:10:04.000000000","message":"typo \u0027add a NFS\u0027 should be \u0027add an NFS\u0027","commit_id":"a11ab3623d3abb46341a237c892660c5a4af2be3"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"d6ea4515889b9f0a4bf962ef9c6ea663282b716e","unresolved":false,"context_lines":[{"line_number":19,"context_line":"DocImpact"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Needs an update in gpfs driver documentation, as this patch"},{"line_number":22,"context_line":"adds a NFS based access for GPFS cinder driver."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Change-Id: I40e5098482d48552170c34e74be0c9e2f544fef5"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9a41bdd9_34b5dccf","line":22,"in_reply_to":"9a41bdd9_b2226100","updated":"2015-07-16 19:26:06.000000000","message":"Thanks. Corrected.","commit_id":"a11ab3623d3abb46341a237c892660c5a4af2be3"}],"cinder/tests/unit/test_gpfs.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"86ea7ea31a163f48b05a05f8ea97cc8d28951789","unresolved":false,"context_lines":[{"line_number":99,"context_line":"    @mock.patch(\u0027cinder.utils.execute\u0027)"},{"line_number":100,"context_line":"    def test_gpfs_local_execute(self, mock_exec):"},{"line_number":101,"context_line":"        mock_exec.return_value \u003d \u0027test\u0027"},{"line_number":102,"context_line":"        self.assertEqual(self.driver._gpfs_local_execute(\u0027test\u0027),"},{"line_number":103,"context_line":"                         \u0027test\u0027)"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    @mock.patch(\u0027cinder.utils.execute\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_fce1e92a","line":102,"updated":"2015-07-02 14:04:18.000000000","message":"This unit test is just testing that mock returns what you expect it to. Marginal value add, but if you add an assert that run_as_root is included then at least it\u0027s checking some functionality of that call.","commit_id":"f73d2d156bea9388b311d7a1fccf7342e5071d55"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"90fed2a9aaf5f208abe3bc1b81d3d59861e6e4e4","unresolved":false,"context_lines":[{"line_number":99,"context_line":"    @mock.patch(\u0027cinder.utils.execute\u0027)"},{"line_number":100,"context_line":"    def test_gpfs_local_execute(self, mock_exec):"},{"line_number":101,"context_line":"        mock_exec.return_value \u003d \u0027test\u0027"},{"line_number":102,"context_line":"        self.assertEqual(self.driver._gpfs_local_execute(\u0027test\u0027),"},{"line_number":103,"context_line":"                         \u0027test\u0027)"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    @mock.patch(\u0027cinder.utils.execute\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a41bdd9_978081f8","line":102,"in_reply_to":"ba3cc151_fce1e92a","updated":"2015-07-16 13:01:31.000000000","message":"Done","commit_id":"f73d2d156bea9388b311d7a1fccf7342e5071d55"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"86ea7ea31a163f48b05a05f8ea97cc8d28951789","unresolved":false,"context_lines":[{"line_number":1892,"context_line":"                        \u0027_get_capacity_info\u0027,"},{"line_number":1893,"context_line":"                        return_value\u003d(fake_avail, fake_size, fake_used)):"},{"line_number":1894,"context_line":"            stats \u003d self.driver.get_volume_stats()"},{"line_number":1895,"context_line":"            self.assertEqual(stats[\u0027volume_backend_name\u0027], \u0027GPFSNFS\u0027)"},{"line_number":1896,"context_line":"            self.assertEqual(stats[\u0027storage_protocol\u0027], \u0027file\u0027)"},{"line_number":1897,"context_line":"            stats \u003d self.driver.get_volume_stats(True)"},{"line_number":1898,"context_line":"            self.assertEqual(stats[\u0027volume_backend_name\u0027], \u0027GPFSNFS\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_3c1f5109","line":1895,"updated":"2015-07-02 14:04:18.000000000","message":"assertEqual argument order should be (expected, actual). Please update all instances.","commit_id":"f73d2d156bea9388b311d7a1fccf7342e5071d55"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"90fed2a9aaf5f208abe3bc1b81d3d59861e6e4e4","unresolved":false,"context_lines":[{"line_number":1892,"context_line":"                        \u0027_get_capacity_info\u0027,"},{"line_number":1893,"context_line":"                        return_value\u003d(fake_avail, fake_size, fake_used)):"},{"line_number":1894,"context_line":"            stats \u003d self.driver.get_volume_stats()"},{"line_number":1895,"context_line":"            self.assertEqual(stats[\u0027volume_backend_name\u0027], \u0027GPFSNFS\u0027)"},{"line_number":1896,"context_line":"            self.assertEqual(stats[\u0027storage_protocol\u0027], \u0027file\u0027)"},{"line_number":1897,"context_line":"            stats \u003d self.driver.get_volume_stats(True)"},{"line_number":1898,"context_line":"            self.assertEqual(stats[\u0027volume_backend_name\u0027], \u0027GPFSNFS\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a41bdd9_97972139","line":1895,"in_reply_to":"ba3cc151_3c1f5109","updated":"2015-07-16 13:01:31.000000000","message":"Done","commit_id":"f73d2d156bea9388b311d7a1fccf7342e5071d55"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"86ea7ea31a163f48b05a05f8ea97cc8d28951789","unresolved":false,"context_lines":[{"line_number":1899,"context_line":"            self.assertEqual(stats[\u0027storage_protocol\u0027], \u0027file\u0027)"},{"line_number":1900,"context_line":""},{"line_number":1901,"context_line":"    def test_get_volume_path(self):"},{"line_number":1902,"context_line":"        self.driver.configuration.gpfs_mount_point_base \u003d\\"},{"line_number":1903,"context_line":"            self.TEST_GPFS_MNT_POINT_BASE"},{"line_number":1904,"context_line":"        volume \u003d self._fake_volume()"},{"line_number":1905,"context_line":"        self.assertEqual(\u0027/export/consisgroup-cg-1234/test\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_dcc74562","line":1902,"updated":"2015-07-02 14:04:18.000000000","message":"We\u0027ve been giving things in the tests directory a pass on this, but the preference is to avoid using \\ for line continuation. Please update to wrap the assignment in () to allow it to span lines.","commit_id":"f73d2d156bea9388b311d7a1fccf7342e5071d55"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"90fed2a9aaf5f208abe3bc1b81d3d59861e6e4e4","unresolved":false,"context_lines":[{"line_number":1899,"context_line":"            self.assertEqual(stats[\u0027storage_protocol\u0027], \u0027file\u0027)"},{"line_number":1900,"context_line":""},{"line_number":1901,"context_line":"    def test_get_volume_path(self):"},{"line_number":1902,"context_line":"        self.driver.configuration.gpfs_mount_point_base \u003d\\"},{"line_number":1903,"context_line":"            self.TEST_GPFS_MNT_POINT_BASE"},{"line_number":1904,"context_line":"        volume \u003d self._fake_volume()"},{"line_number":1905,"context_line":"        self.assertEqual(\u0027/export/consisgroup-cg-1234/test\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a41bdd9_77a13d93","line":1902,"in_reply_to":"ba3cc151_dcc74562","updated":"2015-07-16 13:01:31.000000000","message":"Done","commit_id":"f73d2d156bea9388b311d7a1fccf7342e5071d55"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"9ae70e27d64d7eae67dd0f79713db926ac62b22f","unresolved":false,"context_lines":[{"line_number":1876,"context_line":"                \u0027_run_ssh\u0027)"},{"line_number":1877,"context_line":"    def test_gpfs_remote_execute(self, mock_run_ssh):"},{"line_number":1878,"context_line":"        mock_run_ssh.return_value \u003d \u0027test\u0027"},{"line_number":1879,"context_line":"        self.assertEqual(self.driver._gpfs_remote_execute(\u0027test\u0027),"},{"line_number":1880,"context_line":"                         \u0027test\u0027)"},{"line_number":1881,"context_line":""},{"line_number":1882,"context_line":"    @mock.patch(\u0027cinder.volume.drivers.ibm.gpfs.GPFSNFSDriver.\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a41bdd9_767b437c","line":1879,"updated":"2015-07-17 13:19:15.000000000","message":"Change assertEqual argument order to be (expected_value, actual_value)","commit_id":"dbf1c9226957a7725d670a65419036b4c9943ddd"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"40a73118540f5e6ed8ef7ae9867b07e0a75b8509","unresolved":false,"context_lines":[{"line_number":1876,"context_line":"                \u0027_run_ssh\u0027)"},{"line_number":1877,"context_line":"    def test_gpfs_remote_execute(self, mock_run_ssh):"},{"line_number":1878,"context_line":"        mock_run_ssh.return_value \u003d \u0027test\u0027"},{"line_number":1879,"context_line":"        self.assertEqual(self.driver._gpfs_remote_execute(\u0027test\u0027),"},{"line_number":1880,"context_line":"                         \u0027test\u0027)"},{"line_number":1881,"context_line":""},{"line_number":1882,"context_line":"    @mock.patch(\u0027cinder.volume.drivers.ibm.gpfs.GPFSNFSDriver.\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a41bdd9_83078c1c","line":1879,"in_reply_to":"9a41bdd9_767b437c","updated":"2015-07-18 02:24:08.000000000","message":"Thanks Sean. Corrected it with some addition.","commit_id":"dbf1c9226957a7725d670a65419036b4c9943ddd"}],"cinder/volume/drivers/ibm/gpfs.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"d22fb6a8e3b0e123497377fae9244a1af4ccb43d","unresolved":false,"context_lines":[{"line_number":1202,"context_line":"        super(GPFSNFSDriver, self).__init__(*args, **kwargs)"},{"line_number":1203,"context_line":"        self.gpfs_execute \u003d self._gpfs_remote_execute"},{"line_number":1204,"context_line":"        self.configuration.append_config_values(remotefs.nas_opts)"},{"line_number":1205,"context_line":"        self.configuration.san_ip \u003d self.configuration.nas_ip"},{"line_number":1206,"context_line":"        self.configuration.san_login \u003d self.configuration.nas_login"},{"line_number":1207,"context_line":"        self.configuration.san_password \u003d self.configuration.nas_password"},{"line_number":1208,"context_line":"        self.configuration.san_private_key \u003d \\"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_d81cbc79","line":1205,"updated":"2015-07-06 18:09:57.000000000","message":"This seems odd.  Should it accept either san_ip or nas_ip, preferring nas_ip?  Other NFS drivers use nas_ip, so could be confusing.","commit_id":"f73d2d156bea9388b311d7a1fccf7342e5071d55"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"90fed2a9aaf5f208abe3bc1b81d3d59861e6e4e4","unresolved":false,"context_lines":[{"line_number":1202,"context_line":"        super(GPFSNFSDriver, self).__init__(*args, **kwargs)"},{"line_number":1203,"context_line":"        self.gpfs_execute \u003d self._gpfs_remote_execute"},{"line_number":1204,"context_line":"        self.configuration.append_config_values(remotefs.nas_opts)"},{"line_number":1205,"context_line":"        self.configuration.san_ip \u003d self.configuration.nas_ip"},{"line_number":1206,"context_line":"        self.configuration.san_login \u003d self.configuration.nas_login"},{"line_number":1207,"context_line":"        self.configuration.san_password \u003d self.configuration.nas_password"},{"line_number":1208,"context_line":"        self.configuration.san_private_key \u003d \\"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a41bdd9_978161c5","line":1205,"in_reply_to":"ba3cc151_d81cbc79","updated":"2015-07-16 13:01:31.000000000","message":"Hi Eric, I am using the ssh functionality from SanDriver, hence some nas parameters are to be converted into the san configuration format.","commit_id":"f73d2d156bea9388b311d7a1fccf7342e5071d55"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"86ea7ea31a163f48b05a05f8ea97cc8d28951789","unresolved":false,"context_lines":[{"line_number":1205,"context_line":"        self.configuration.san_ip \u003d self.configuration.nas_ip"},{"line_number":1206,"context_line":"        self.configuration.san_login \u003d self.configuration.nas_login"},{"line_number":1207,"context_line":"        self.configuration.san_password \u003d self.configuration.nas_password"},{"line_number":1208,"context_line":"        self.configuration.san_private_key \u003d \\"},{"line_number":1209,"context_line":"            self.configuration.nas_private_key"},{"line_number":1210,"context_line":"        self.configuration.san_ssh_port \u003d self.configuration.nas_ssh_port"},{"line_number":1211,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_dcf18596","line":1208,"updated":"2015-07-02 14:04:18.000000000","message":"Please use () instead of \\.","commit_id":"f73d2d156bea9388b311d7a1fccf7342e5071d55"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"90fed2a9aaf5f208abe3bc1b81d3d59861e6e4e4","unresolved":false,"context_lines":[{"line_number":1205,"context_line":"        self.configuration.san_ip \u003d self.configuration.nas_ip"},{"line_number":1206,"context_line":"        self.configuration.san_login \u003d self.configuration.nas_login"},{"line_number":1207,"context_line":"        self.configuration.san_password \u003d self.configuration.nas_password"},{"line_number":1208,"context_line":"        self.configuration.san_private_key \u003d \\"},{"line_number":1209,"context_line":"            self.configuration.nas_private_key"},{"line_number":1210,"context_line":"        self.configuration.san_ssh_port \u003d self.configuration.nas_ssh_port"},{"line_number":1211,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a41bdd9_d7dfe90a","line":1208,"in_reply_to":"ba3cc151_dcf18596","updated":"2015-07-16 13:01:31.000000000","message":"Done","commit_id":"f73d2d156bea9388b311d7a1fccf7342e5071d55"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"09114ca7ccebcf5ec7c1e30ecd45edc8709954b4","unresolved":false,"context_lines":[{"line_number":1231,"context_line":"    def _update_volume_stats(self):"},{"line_number":1232,"context_line":"        \"\"\"Retrieve stats info from volume group.\"\"\""},{"line_number":1233,"context_line":""},{"line_number":1234,"context_line":"        LOG.debug(\"Enter _update_volume_stats\")"},{"line_number":1235,"context_line":"        gpfs_base \u003d self.configuration.gpfs_mount_point_base"},{"line_number":1236,"context_line":"        data \u003d {}"},{"line_number":1237,"context_line":"        backend_name \u003d self.configuration.safe_get(\u0027volume_backend_name\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_82400809","line":1234,"updated":"2015-07-06 16:31:44.000000000","message":"Please add a \u0027.\u0027 at EOL.","commit_id":"f73d2d156bea9388b311d7a1fccf7342e5071d55"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"90fed2a9aaf5f208abe3bc1b81d3d59861e6e4e4","unresolved":false,"context_lines":[{"line_number":1231,"context_line":"    def _update_volume_stats(self):"},{"line_number":1232,"context_line":"        \"\"\"Retrieve stats info from volume group.\"\"\""},{"line_number":1233,"context_line":""},{"line_number":1234,"context_line":"        LOG.debug(\"Enter _update_volume_stats\")"},{"line_number":1235,"context_line":"        gpfs_base \u003d self.configuration.gpfs_mount_point_base"},{"line_number":1236,"context_line":"        data \u003d {}"},{"line_number":1237,"context_line":"        backend_name \u003d self.configuration.safe_get(\u0027volume_backend_name\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a41bdd9_773dbd29","line":1234,"in_reply_to":"ba3cc151_82400809","updated":"2015-07-16 13:01:31.000000000","message":"Done","commit_id":"f73d2d156bea9388b311d7a1fccf7342e5071d55"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"09114ca7ccebcf5ec7c1e30ecd45edc8709954b4","unresolved":false,"context_lines":[{"line_number":1260,"context_line":""},{"line_number":1261,"context_line":"        data[\u0027consistencygroup_support\u0027] \u003d \u0027True\u0027"},{"line_number":1262,"context_line":"        self._stats \u003d data"},{"line_number":1263,"context_line":"        LOG.debug(\"Exit _update_volume_stats\")"},{"line_number":1264,"context_line":""},{"line_number":1265,"context_line":"    def _get_volume_path(self, volume):"},{"line_number":1266,"context_line":"        \"\"\"Returns remote GPFS path for the given volume.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_82aa4884","line":1263,"updated":"2015-07-06 16:31:44.000000000","message":"Please add \u0027.\u0027 at EOL.","commit_id":"f73d2d156bea9388b311d7a1fccf7342e5071d55"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"90fed2a9aaf5f208abe3bc1b81d3d59861e6e4e4","unresolved":false,"context_lines":[{"line_number":1260,"context_line":""},{"line_number":1261,"context_line":"        data[\u0027consistencygroup_support\u0027] \u003d \u0027True\u0027"},{"line_number":1262,"context_line":"        self._stats \u003d data"},{"line_number":1263,"context_line":"        LOG.debug(\"Exit _update_volume_stats\")"},{"line_number":1264,"context_line":""},{"line_number":1265,"context_line":"    def _get_volume_path(self, volume):"},{"line_number":1266,"context_line":"        \"\"\"Returns remote GPFS path for the given volume.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a41bdd9_5742f9ae","line":1263,"in_reply_to":"ba3cc151_82aa4884","updated":"2015-07-16 13:01:31.000000000","message":"Done","commit_id":"f73d2d156bea9388b311d7a1fccf7342e5071d55"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"d22fb6a8e3b0e123497377fae9244a1af4ccb43d","unresolved":false,"context_lines":[{"line_number":1273,"context_line":"        return volume_path"},{"line_number":1274,"context_line":""},{"line_number":1275,"context_line":"    def extend_volume(self, volume, new_size):"},{"line_number":1276,"context_line":"        GPFSDriver.extend_volume(self, volume, new_size)"},{"line_number":1277,"context_line":""},{"line_number":1278,"context_line":"    def local_path(self, volume):"},{"line_number":1279,"context_line":"        \"\"\"Returns the local path for the specified volume.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_d8c03ce3","line":1276,"updated":"2015-07-06 18:09:57.000000000","message":"This should call via super().\n\nCan this method be removed from this class?  I think you get the desired behavior w/ no method here and the correct order of base classes for this class (GPFSDriver first).","commit_id":"f73d2d156bea9388b311d7a1fccf7342e5071d55"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"90fed2a9aaf5f208abe3bc1b81d3d59861e6e4e4","unresolved":false,"context_lines":[{"line_number":1273,"context_line":"        return volume_path"},{"line_number":1274,"context_line":""},{"line_number":1275,"context_line":"    def extend_volume(self, volume, new_size):"},{"line_number":1276,"context_line":"        GPFSDriver.extend_volume(self, volume, new_size)"},{"line_number":1277,"context_line":""},{"line_number":1278,"context_line":"    def local_path(self, volume):"},{"line_number":1279,"context_line":"        \"\"\"Returns the local path for the specified volume.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a41bdd9_9733a161","line":1276,"in_reply_to":"ba3cc151_d8c03ce3","updated":"2015-07-16 13:01:31.000000000","message":"Thanks. Removed the method.","commit_id":"f73d2d156bea9388b311d7a1fccf7342e5071d55"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"d22fb6a8e3b0e123497377fae9244a1af4ccb43d","unresolved":false,"context_lines":[{"line_number":1300,"context_line":""},{"line_number":1301,"context_line":"    def create_volume(self, volume):"},{"line_number":1302,"context_line":"        \"\"\"Creates a GPFS volume\"\"\""},{"line_number":1303,"context_line":"        GPFSDriver.create_volume(self, volume)"},{"line_number":1304,"context_line":"        volume[\u0027provider_location\u0027] \u003d self._find_share(volume[\u0027size\u0027])"},{"line_number":1305,"context_line":"        return {\u0027provider_location\u0027: volume[\u0027provider_location\u0027]}"},{"line_number":1306,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_38b0488b","line":1303,"updated":"2015-07-06 18:09:57.000000000","message":"This should call via super().","commit_id":"f73d2d156bea9388b311d7a1fccf7342e5071d55"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"90fed2a9aaf5f208abe3bc1b81d3d59861e6e4e4","unresolved":false,"context_lines":[{"line_number":1300,"context_line":""},{"line_number":1301,"context_line":"    def create_volume(self, volume):"},{"line_number":1302,"context_line":"        \"\"\"Creates a GPFS volume\"\"\""},{"line_number":1303,"context_line":"        GPFSDriver.create_volume(self, volume)"},{"line_number":1304,"context_line":"        volume[\u0027provider_location\u0027] \u003d self._find_share(volume[\u0027size\u0027])"},{"line_number":1305,"context_line":"        return {\u0027provider_location\u0027: volume[\u0027provider_location\u0027]}"},{"line_number":1306,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a41bdd9_17f1d194","line":1303,"in_reply_to":"ba3cc151_38b0488b","updated":"2015-07-16 13:01:31.000000000","message":"Done","commit_id":"f73d2d156bea9388b311d7a1fccf7342e5071d55"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"d22fb6a8e3b0e123497377fae9244a1af4ccb43d","unresolved":false,"context_lines":[{"line_number":1317,"context_line":""},{"line_number":1318,"context_line":"    def delete_snapshot(self, snapshot):"},{"line_number":1319,"context_line":"        \"\"\"Deletes a GPFS snapshot\"\"\""},{"line_number":1320,"context_line":"        GPFSDriver.delete_snapshot(self, snapshot)"},{"line_number":1321,"context_line":""},{"line_number":1322,"context_line":"    def create_volume_from_snapshot(self, volume, snapshot):"},{"line_number":1323,"context_line":"        \"\"\"Creates a GPFS volume from a snapshot.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_18a78450","line":1320,"updated":"2015-07-06 18:09:57.000000000","message":"Ditto: super() and/or try to remove method.","commit_id":"f73d2d156bea9388b311d7a1fccf7342e5071d55"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"90fed2a9aaf5f208abe3bc1b81d3d59861e6e4e4","unresolved":false,"context_lines":[{"line_number":1317,"context_line":""},{"line_number":1318,"context_line":"    def delete_snapshot(self, snapshot):"},{"line_number":1319,"context_line":"        \"\"\"Deletes a GPFS snapshot\"\"\""},{"line_number":1320,"context_line":"        GPFSDriver.delete_snapshot(self, snapshot)"},{"line_number":1321,"context_line":""},{"line_number":1322,"context_line":"    def create_volume_from_snapshot(self, volume, snapshot):"},{"line_number":1323,"context_line":"        \"\"\"Creates a GPFS volume from a snapshot.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a41bdd9_77f61d90","line":1320,"in_reply_to":"ba3cc151_18a78450","updated":"2015-07-16 13:01:31.000000000","message":"Thanks. Removed the method.","commit_id":"f73d2d156bea9388b311d7a1fccf7342e5071d55"},{"author":{"_account_id":14377,"name":"Apoorva","email":"apps.desh@gmail.com","username":"apoorvad"},"change_message_id":"d2be8809a22d6961fe64e6e7567f1ff0613014ee","unresolved":false,"context_lines":[{"line_number":106,"context_line":"    return \u0027%sG\u0027 % size_in_g"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"class GPFSDriver(driver.ConsistencyGroupVD, driver.ExtendVD,"},{"line_number":110,"context_line":"                 driver.LocalVD, driver.TransferVD, driver.CloneableVD,"},{"line_number":111,"context_line":"                 driver.CloneableImageVD, driver.SnapshotVD,"},{"line_number":112,"context_line":"                 driver.RetypeVD, driver.MigrateVD,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a41bdd9_a451ac10","line":109,"updated":"2015-07-17 04:59:14.000000000","message":"Commit message should indicate that you are porting the driver to ABC driver model","commit_id":"3c540731e2ed1ca26c5e5d22d20a322a185f8d3e"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"ebea887f2ba3a1c7ddf3d2f86c84ce630b6eb923","unresolved":false,"context_lines":[{"line_number":106,"context_line":"    return \u0027%sG\u0027 % size_in_g"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"class GPFSDriver(driver.ConsistencyGroupVD, driver.ExtendVD,"},{"line_number":110,"context_line":"                 driver.LocalVD, driver.TransferVD, driver.CloneableVD,"},{"line_number":111,"context_line":"                 driver.CloneableImageVD, driver.SnapshotVD,"},{"line_number":112,"context_line":"                 driver.RetypeVD, driver.MigrateVD,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a41bdd9_2a9323a5","line":109,"in_reply_to":"9a41bdd9_a451ac10","updated":"2015-07-17 06:17:53.000000000","message":"Thanks. Added a line in commit message.","commit_id":"3c540731e2ed1ca26c5e5d22d20a322a185f8d3e"},{"author":{"_account_id":14377,"name":"Apoorva","email":"apps.desh@gmail.com","username":"apoorvad"},"change_message_id":"d2be8809a22d6961fe64e6e7567f1ff0613014ee","unresolved":false,"context_lines":[{"line_number":1287,"context_line":"        return volume_path"},{"line_number":1288,"context_line":""},{"line_number":1289,"context_line":"    def _get_snapshot_path(self, snapshot):"},{"line_number":1290,"context_line":"        \"\"\"Returns remote GPFS path for the given snapshot\"\"\""},{"line_number":1291,"context_line":"        snap_parent_vol \u003d self.db.volume_get(self._context,"},{"line_number":1292,"context_line":"                                             snapshot[\u0027volume_id\u0027])"},{"line_number":1293,"context_line":"        snap_parent_vol_path \u003d self._get_volume_path(snap_parent_vol)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a41bdd9_a49f6cb3","line":1290,"updated":"2015-07-17 04:59:14.000000000","message":"docstring to end with  \".\" for consistency","commit_id":"3c540731e2ed1ca26c5e5d22d20a322a185f8d3e"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"ebea887f2ba3a1c7ddf3d2f86c84ce630b6eb923","unresolved":false,"context_lines":[{"line_number":1287,"context_line":"        return volume_path"},{"line_number":1288,"context_line":""},{"line_number":1289,"context_line":"    def _get_snapshot_path(self, snapshot):"},{"line_number":1290,"context_line":"        \"\"\"Returns remote GPFS path for the given snapshot\"\"\""},{"line_number":1291,"context_line":"        snap_parent_vol \u003d self.db.volume_get(self._context,"},{"line_number":1292,"context_line":"                                             snapshot[\u0027volume_id\u0027])"},{"line_number":1293,"context_line":"        snap_parent_vol_path \u003d self._get_volume_path(snap_parent_vol)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a41bdd9_8ae82f18","line":1290,"in_reply_to":"9a41bdd9_a49f6cb3","updated":"2015-07-17 06:17:53.000000000","message":"Done","commit_id":"3c540731e2ed1ca26c5e5d22d20a322a185f8d3e"},{"author":{"_account_id":14377,"name":"Apoorva","email":"apps.desh@gmail.com","username":"apoorvad"},"change_message_id":"d2be8809a22d6961fe64e6e7567f1ff0613014ee","unresolved":false,"context_lines":[{"line_number":1296,"context_line":"        return snapshot_path"},{"line_number":1297,"context_line":""},{"line_number":1298,"context_line":"    def create_volume(self, volume):"},{"line_number":1299,"context_line":"        \"\"\"Creates a GPFS volume\"\"\""},{"line_number":1300,"context_line":"        super(GPFSNFSDriver, self).create_volume(volume)"},{"line_number":1301,"context_line":"        volume[\u0027provider_location\u0027] \u003d self._find_share(volume[\u0027size\u0027])"},{"line_number":1302,"context_line":"        return {\u0027provider_location\u0027: volume[\u0027provider_location\u0027]}"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a41bdd9_64a964df","line":1299,"updated":"2015-07-17 04:59:14.000000000","message":"docstring to end with  \".\" for consistency","commit_id":"3c540731e2ed1ca26c5e5d22d20a322a185f8d3e"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"ebea887f2ba3a1c7ddf3d2f86c84ce630b6eb923","unresolved":false,"context_lines":[{"line_number":1296,"context_line":"        return snapshot_path"},{"line_number":1297,"context_line":""},{"line_number":1298,"context_line":"    def create_volume(self, volume):"},{"line_number":1299,"context_line":"        \"\"\"Creates a GPFS volume\"\"\""},{"line_number":1300,"context_line":"        super(GPFSNFSDriver, self).create_volume(volume)"},{"line_number":1301,"context_line":"        volume[\u0027provider_location\u0027] \u003d self._find_share(volume[\u0027size\u0027])"},{"line_number":1302,"context_line":"        return {\u0027provider_location\u0027: volume[\u0027provider_location\u0027]}"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a41bdd9_6af7ebf5","line":1299,"in_reply_to":"9a41bdd9_64a964df","updated":"2015-07-17 06:17:53.000000000","message":"Done","commit_id":"3c540731e2ed1ca26c5e5d22d20a322a185f8d3e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"765a4b0c0b10e6817fb71b0737ddec47badac1e2","unresolved":false,"context_lines":[{"line_number":119,"context_line":"    1.2.0 - Add consistency group support"},{"line_number":120,"context_line":"    \"\"\""},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    VERSION \u003d \"1.2.0\""},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":125,"context_line":"        super(GPFSDriver, self).__init__(*args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_3bfe0c6c","line":122,"updated":"2015-07-20 15:21:55.000000000","message":"Don\u0027t you need to bump version for this change?","commit_id":"b5a89e96b1ff482a9927b2c503eff2abc864e8d3"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"0c3e4eb75d71e4e51a4663584973afffc044fdff","unresolved":false,"context_lines":[{"line_number":119,"context_line":"    1.2.0 - Add consistency group support"},{"line_number":120,"context_line":"    \"\"\""},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    VERSION \u003d \"1.2.0\""},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":125,"context_line":"        super(GPFSDriver, self).__init__(*args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_0925aebf","line":122,"in_reply_to":"3a50d1a3_3bfe0c6c","updated":"2015-07-22 03:37:18.000000000","message":"Done","commit_id":"b5a89e96b1ff482a9927b2c503eff2abc864e8d3"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"169091bad60a4998829c718ec80d031bd2caf153","unresolved":false,"context_lines":[{"line_number":125,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":126,"context_line":"        super(GPFSDriver, self).__init__(*args, **kwargs)"},{"line_number":127,"context_line":"        self.configuration.append_config_values(gpfs_opts)"},{"line_number":128,"context_line":"        self.gpfs_execute \u003d self._gpfs_local_execute"},{"line_number":129,"context_line":"        self._execute \u003d utils.execute"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    def _gpfs_local_execute(self, *cmd, **kwargs):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a50d1a3_cb98cf7a","line":128,"updated":"2015-07-23 08:34:17.000000000","message":"Why do we need it? IMO, it\u0027s enough to have gpfs_execute method","commit_id":"174c3910e48ce5774f9eda1546e7f8efcdef80ca"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"1730630e2b8d3089d4d4d10ca540253e010fa75c","unresolved":false,"context_lines":[{"line_number":125,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":126,"context_line":"        super(GPFSDriver, self).__init__(*args, **kwargs)"},{"line_number":127,"context_line":"        self.configuration.append_config_values(gpfs_opts)"},{"line_number":128,"context_line":"        self.gpfs_execute \u003d self._gpfs_local_execute"},{"line_number":129,"context_line":"        self._execute \u003d utils.execute"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    def _gpfs_local_execute(self, *cmd, **kwargs):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a50d1a3_a64e8e94","line":128,"in_reply_to":"3a50d1a3_9ddc0d76","updated":"2015-07-24 12:32:43.000000000","message":"It makes sense. I won\u0027t block this patch for it. Let wait for the feedback from the community.","commit_id":"174c3910e48ce5774f9eda1546e7f8efcdef80ca"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"5c03f2a7e791776566b4f0fdc677bb04ac06ebbe","unresolved":false,"context_lines":[{"line_number":125,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":126,"context_line":"        super(GPFSDriver, self).__init__(*args, **kwargs)"},{"line_number":127,"context_line":"        self.configuration.append_config_values(gpfs_opts)"},{"line_number":128,"context_line":"        self.gpfs_execute \u003d self._gpfs_local_execute"},{"line_number":129,"context_line":"        self._execute \u003d utils.execute"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    def _gpfs_local_execute(self, *cmd, **kwargs):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a50d1a3_9ddc0d76","line":128,"in_reply_to":"3a50d1a3_cb98cf7a","updated":"2015-07-24 07:21:51.000000000","message":"Thanks. But this is done to clearly indicate that gpfs commands are executed locally (gpfs_execute if set to _gpfs_local_execute) for base GPFSDriver and the same commands will be executed remotely for GPFSNFSDriver (gpfs_execute if set to _gpfs_remote_execute in GPFSNFSDriver).","commit_id":"174c3910e48ce5774f9eda1546e7f8efcdef80ca"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"169091bad60a4998829c718ec80d031bd2caf153","unresolved":false,"context_lines":[{"line_number":320,"context_line":"                      \u0027cannot migrate locally: %s.\u0027, info)"},{"line_number":321,"context_line":"            return None"},{"line_number":322,"context_line":"        if (dest_id !\u003d self._cluster_id) or (dest_type !\u003d \u0027GPFSDriver\u0027 and"},{"line_number":323,"context_line":"                                             dest_type !\u003d \u0027GPFSNFSDriver\u0027):"},{"line_number":324,"context_line":"            LOG.debug(\u0027Evaluate migration: different destination driver or \u0027"},{"line_number":325,"context_line":"                      \u0027cluster id in location info: %s.\u0027, info)"},{"line_number":326,"context_line":"            return None"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a50d1a3_0b11d75c","line":323,"updated":"2015-07-23 08:34:17.000000000","message":"Parent class shouldn\u0027t know anything about child classes.","commit_id":"174c3910e48ce5774f9eda1546e7f8efcdef80ca"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"5c03f2a7e791776566b4f0fdc677bb04ac06ebbe","unresolved":false,"context_lines":[{"line_number":320,"context_line":"                      \u0027cannot migrate locally: %s.\u0027, info)"},{"line_number":321,"context_line":"            return None"},{"line_number":322,"context_line":"        if (dest_id !\u003d self._cluster_id) or (dest_type !\u003d \u0027GPFSDriver\u0027 and"},{"line_number":323,"context_line":"                                             dest_type !\u003d \u0027GPFSNFSDriver\u0027):"},{"line_number":324,"context_line":"            LOG.debug(\u0027Evaluate migration: different destination driver or \u0027"},{"line_number":325,"context_line":"                      \u0027cluster id in location info: %s.\u0027, info)"},{"line_number":326,"context_line":"            return None"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a50d1a3_9d4acd26","line":323,"in_reply_to":"3a50d1a3_0b11d75c","updated":"2015-07-24 07:21:51.000000000","message":"Thanks. But this is for migration scenario. We want to enable migration between volume types even if one if of GPFSDriver type and other is GPFSNFSDriver type and both belong to same GPFS cluster.","commit_id":"174c3910e48ce5774f9eda1546e7f8efcdef80ca"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"27262b9006e6c1c8cd66d07cbc5505549652023e","unresolved":false,"context_lines":[{"line_number":320,"context_line":"                      \u0027cannot migrate locally: %s.\u0027, info)"},{"line_number":321,"context_line":"            return None"},{"line_number":322,"context_line":"        if (dest_id !\u003d self._cluster_id) or (dest_type !\u003d \u0027GPFSDriver\u0027 and"},{"line_number":323,"context_line":"                                             dest_type !\u003d \u0027GPFSNFSDriver\u0027):"},{"line_number":324,"context_line":"            LOG.debug(\u0027Evaluate migration: different destination driver or \u0027"},{"line_number":325,"context_line":"                      \u0027cluster id in location info: %s.\u0027, info)"},{"line_number":326,"context_line":"            return None"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a50d1a3_58d96982","line":323,"in_reply_to":"3a50d1a3_8987e511","updated":"2015-07-27 08:54:19.000000000","message":"Done","commit_id":"174c3910e48ce5774f9eda1546e7f8efcdef80ca"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"1730630e2b8d3089d4d4d10ca540253e010fa75c","unresolved":false,"context_lines":[{"line_number":320,"context_line":"                      \u0027cannot migrate locally: %s.\u0027, info)"},{"line_number":321,"context_line":"            return None"},{"line_number":322,"context_line":"        if (dest_id !\u003d self._cluster_id) or (dest_type !\u003d \u0027GPFSDriver\u0027 and"},{"line_number":323,"context_line":"                                             dest_type !\u003d \u0027GPFSNFSDriver\u0027):"},{"line_number":324,"context_line":"            LOG.debug(\u0027Evaluate migration: different destination driver or \u0027"},{"line_number":325,"context_line":"                      \u0027cluster id in location info: %s.\u0027, info)"},{"line_number":326,"context_line":"            return None"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a50d1a3_8987e511","line":323,"in_reply_to":"3a50d1a3_9d4acd26","updated":"2015-07-24 12:32:43.000000000","message":"We could move it to constant out of class and check it:\nALLOWED_DESTINATION_TYPES \u003d [\u0027GPFSDriver\u0027, \u0027GPFSNFSDriver\u0027]\n\nand then use it like:\nif (dest_id !\u003d self._cluster_id) or (dest_type not in ALLOWED_DESTINATION_TYPES):\n\n\nI believe we can find other architecture solutions for this case too. But if Parent class knows something about child is\u0027t a bad design.","commit_id":"174c3910e48ce5774f9eda1546e7f8efcdef80ca"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"169091bad60a4998829c718ec80d031bd2caf153","unresolved":false,"context_lines":[{"line_number":916,"context_line":""},{"line_number":917,"context_line":"    def _create_backup_source(self, volume, backup):"},{"line_number":918,"context_line":"        src_path \u003d self._get_volume_path(volume)"},{"line_number":919,"context_line":"        dest_path \u003d \u0027%s_%s\u0027 % (src_path, backup[\u0027id\u0027])"},{"line_number":920,"context_line":"        self._create_gpfs_clone(src_path, dest_path)"},{"line_number":921,"context_line":"        self._gpfs_redirect(src_path)"},{"line_number":922,"context_line":"        return dest_path"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a50d1a3_0b8237c8","line":919,"updated":"2015-07-23 08:34:17.000000000","message":"Could we use os.path.join here?","commit_id":"174c3910e48ce5774f9eda1546e7f8efcdef80ca"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"5c03f2a7e791776566b4f0fdc677bb04ac06ebbe","unresolved":false,"context_lines":[{"line_number":916,"context_line":""},{"line_number":917,"context_line":"    def _create_backup_source(self, volume, backup):"},{"line_number":918,"context_line":"        src_path \u003d self._get_volume_path(volume)"},{"line_number":919,"context_line":"        dest_path \u003d \u0027%s_%s\u0027 % (src_path, backup[\u0027id\u0027])"},{"line_number":920,"context_line":"        self._create_gpfs_clone(src_path, dest_path)"},{"line_number":921,"context_line":"        self._gpfs_redirect(src_path)"},{"line_number":922,"context_line":"        return dest_path"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a50d1a3_dddb754e","line":919,"in_reply_to":"3a50d1a3_0b8237c8","updated":"2015-07-24 07:21:51.000000000","message":"os.path.join adds \u0027/\u0027 between the arguments. We don\u0027t want to add \u0027/\u0027 here as backup source file will be at the same path as that of source volume.","commit_id":"174c3910e48ce5774f9eda1546e7f8efcdef80ca"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"1730630e2b8d3089d4d4d10ca540253e010fa75c","unresolved":false,"context_lines":[{"line_number":916,"context_line":""},{"line_number":917,"context_line":"    def _create_backup_source(self, volume, backup):"},{"line_number":918,"context_line":"        src_path \u003d self._get_volume_path(volume)"},{"line_number":919,"context_line":"        dest_path \u003d \u0027%s_%s\u0027 % (src_path, backup[\u0027id\u0027])"},{"line_number":920,"context_line":"        self._create_gpfs_clone(src_path, dest_path)"},{"line_number":921,"context_line":"        self._gpfs_redirect(src_path)"},{"line_number":922,"context_line":"        return dest_path"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a50d1a3_86303209","line":919,"in_reply_to":"3a50d1a3_dddb754e","updated":"2015-07-24 12:32:43.000000000","message":"I\u0027ve got it, thanks.","commit_id":"174c3910e48ce5774f9eda1546e7f8efcdef80ca"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"169091bad60a4998829c718ec80d031bd2caf153","unresolved":false,"context_lines":[{"line_number":934,"context_line":"        # create a snapshot that will be used as the backup source"},{"line_number":935,"context_line":"        self._create_backup_source(volume, backup)"},{"line_number":936,"context_line":"        try:"},{"line_number":937,"context_line":"            LOG.debug(\u0027Begin backup of volume %s.\u0027, volume[\u0027name\u0027])"},{"line_number":938,"context_line":"            self._do_backup(backup_path, backup, backup_service)"},{"line_number":939,"context_line":"        finally:"},{"line_number":940,"context_line":"            # clean up snapshot file.  If it is a clone parent, delete"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a50d1a3_cb576f56","line":937,"updated":"2015-07-23 08:34:17.000000000","message":"Volume name is not unique, please use volume id instead.","commit_id":"174c3910e48ce5774f9eda1546e7f8efcdef80ca"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"1730630e2b8d3089d4d4d10ca540253e010fa75c","unresolved":false,"context_lines":[{"line_number":934,"context_line":"        # create a snapshot that will be used as the backup source"},{"line_number":935,"context_line":"        self._create_backup_source(volume, backup)"},{"line_number":936,"context_line":"        try:"},{"line_number":937,"context_line":"            LOG.debug(\u0027Begin backup of volume %s.\u0027, volume[\u0027name\u0027])"},{"line_number":938,"context_line":"            self._do_backup(backup_path, backup, backup_service)"},{"line_number":939,"context_line":"        finally:"},{"line_number":940,"context_line":"            # clean up snapshot file.  If it is a clone parent, delete"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a50d1a3_8925a5af","line":937,"in_reply_to":"3a50d1a3_1db55dcf","updated":"2015-07-24 12:32:43.000000000","message":"Is it something related only for you driver? What will be the volume name if I create it with the following command:\ncinder create --display-name some-volume 1\n?","commit_id":"174c3910e48ce5774f9eda1546e7f8efcdef80ca"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"27262b9006e6c1c8cd66d07cbc5505549652023e","unresolved":false,"context_lines":[{"line_number":934,"context_line":"        # create a snapshot that will be used as the backup source"},{"line_number":935,"context_line":"        self._create_backup_source(volume, backup)"},{"line_number":936,"context_line":"        try:"},{"line_number":937,"context_line":"            LOG.debug(\u0027Begin backup of volume %s.\u0027, volume[\u0027name\u0027])"},{"line_number":938,"context_line":"            self._do_backup(backup_path, backup, backup_service)"},{"line_number":939,"context_line":"        finally:"},{"line_number":940,"context_line":"            # clean up snapshot file.  If it is a clone parent, delete"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a50d1a3_980cd13c","line":937,"in_reply_to":"3a50d1a3_8925a5af","updated":"2015-07-27 08:54:19.000000000","message":"Hi Ivan, I checked this by printing volume[\u0027name\u0027] and the format is \n\"volume-\u003cvolume-id\u003e\".\n\ncinder create --display-name test2 1\n\n2015-07-27 04:45:32.134 DEBUG cinder.volume.drivers.ibm.gpfs [req-51f0b2a8-1b44-4ce9-8008-eec0020d9621 52dd713201ca47989cc0e89530dba1cb 9bf95c3f18544d8c840505962c252f6c] volume-3576ad6b-2618-433e-aa34-f9d022b57094","commit_id":"174c3910e48ce5774f9eda1546e7f8efcdef80ca"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"d19cc2ba5be4482fb796eb94734158f2d2c8e545","unresolved":false,"context_lines":[{"line_number":934,"context_line":"        # create a snapshot that will be used as the backup source"},{"line_number":935,"context_line":"        self._create_backup_source(volume, backup)"},{"line_number":936,"context_line":"        try:"},{"line_number":937,"context_line":"            LOG.debug(\u0027Begin backup of volume %s.\u0027, volume[\u0027name\u0027])"},{"line_number":938,"context_line":"            self._do_backup(backup_path, backup, backup_service)"},{"line_number":939,"context_line":"        finally:"},{"line_number":940,"context_line":"            # clean up snapshot file.  If it is a clone parent, delete"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a50d1a3_41c5f48b","line":937,"in_reply_to":"3a50d1a3_980cd13c","updated":"2015-07-27 09:46:19.000000000","message":"Gaurang, thanks you for clarification","commit_id":"174c3910e48ce5774f9eda1546e7f8efcdef80ca"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"5c03f2a7e791776566b4f0fdc677bb04ac06ebbe","unresolved":false,"context_lines":[{"line_number":934,"context_line":"        # create a snapshot that will be used as the backup source"},{"line_number":935,"context_line":"        self._create_backup_source(volume, backup)"},{"line_number":936,"context_line":"        try:"},{"line_number":937,"context_line":"            LOG.debug(\u0027Begin backup of volume %s.\u0027, volume[\u0027name\u0027])"},{"line_number":938,"context_line":"            self._do_backup(backup_path, backup, backup_service)"},{"line_number":939,"context_line":"        finally:"},{"line_number":940,"context_line":"            # clean up snapshot file.  If it is a clone parent, delete"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a50d1a3_1db55dcf","line":937,"in_reply_to":"3a50d1a3_cb576f56","updated":"2015-07-24 07:21:51.000000000","message":"volume[\u0027name\u0027] is unique. Please find below the log for the same statement.\n\n2015-07-23 23:17:16.759 DEBUG cinder.volume.drivers.ibm.gpfs [req-08e7966f-9d4e-41bc-a2a2-4384d5f14d00 52dd713201ca47989cc0e89530dba1cb 9bf95c3f18544d8c840505962c252f6c] Begin backup of volume volume-29be0d0d-c589-4c00-951f-3180fcb24a04. from (pid\u003d2486) backup_volume /opt/stack/cinder/cinder/volume/drivers/ibm/gpfs.py:937","commit_id":"174c3910e48ce5774f9eda1546e7f8efcdef80ca"}]}
