)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"f6f5dabbd2dfae33e572c9bb2c39f7b4fd3bbf81","unresolved":false,"context_lines":[{"line_number":7,"context_line":"NFS snapshots"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch adds support for snapshots to the NFS driver."},{"line_number":10,"context_line":"Rearranged the base class inheritance order in required drivers"},{"line_number":11,"context_line":"in order to define a consistent MRO to resolve the MRO issue"},{"line_number":12,"context_line":"after updating the NfsDriver."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"fa0719c6_99443b75","line":10,"updated":"2016-03-21 14:01:19.000000000","message":"This isn\u0027t really relevant for the commit message.","commit_id":"a69874617dea0f73d922b5af6467a74f4f05bcc8"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"a4784e909bd24e82c3011e69ff98ee5973727fb7","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"If secure mode is enabled (nas_secure_file_operations\u003dTrue),"},{"line_number":24,"context_line":"the compute nodes must run QEMU processes as the same user/group"},{"line_number":25,"context_line":"ID used by cinder-volume[2]."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"[1] https://bugzilla.redhat.com/show_bug.cgi?id\u003d1361592"},{"line_number":28,"context_line":"[2] http://paste.openstack.org/show/570296/"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":38,"id":"7a8ec9b2_9623ce57","line":25,"updated":"2016-09-21 14:50:07.000000000","message":"This is not a viable requirement.  This will affect ALL instances running on that compute node regardless of what Cinder driver is being used, and may introduce more serious security concerns than just leaving nas_secure_file_operations\u003dFalse.  Deployments should not have to reconfigure libvirt permissions/security details for this to work.\n\nI think this is dodging the root issue here, which is that the nas_secure code needs to be updated/tweaked a bit to work correctly.","commit_id":"ff49489cbf3796ae5f877dc1325c94e67819283a"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"c5f47e5b106a98811e6f3a05ba44481c95cee4f0","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"If secure mode is enabled (nas_secure_file_operations\u003dTrue),"},{"line_number":24,"context_line":"the compute nodes must run QEMU processes as the same user/group"},{"line_number":25,"context_line":"ID used by cinder-volume[2]."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"[1] https://bugzilla.redhat.com/show_bug.cgi?id\u003d1361592"},{"line_number":28,"context_line":"[2] http://paste.openstack.org/show/570296/"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":38,"id":"7a8ec9b2_724ba787","line":25,"in_reply_to":"7a8ec9b2_9623ce57","updated":"2016-09-21 18:56:04.000000000","message":"If this is not viable (which I think it is), the we need to re-consider and balance if is really worth to have NFS working in nas_secure mode.\n\nNAS secure mode is pointless if the admin can\u0027t set the server to run in root_squash. The ideal secure configuration is the export configured as root_squash and no commands executed as root in the driver. If the NFS server is configured to root_squash, then you can\u0027t also chown files, and this libvirt needs this in order to work. So, no matter what tweaks you do in Cinder, you will always hit this problem.\n\nOpenStack distros run QEMU instances as libvirt-qemu:kvm user as usually cinder-* services as cinder:cinder. As you are changing the instance user from a unprivileged user to another, I don\u0027t see how this can pose a security risk. Can you give examples if you find?","commit_id":"ff49489cbf3796ae5f877dc1325c94e67819283a"},{"author":{"_account_id":6962,"name":"Kashyap Chamarthy","email":"kchamart@redhat.com","username":"kashyapc"},"change_message_id":"cfd1210b3d033163ab71e0f6723d221ccd96f44c","unresolved":false,"context_lines":[{"line_number":25,"context_line":"ID used by cinder-volume[2]."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"This patch depends on the change in nova [4] that changes"},{"line_number":28,"context_line":"the way the wait_for_job function is called for block"},{"line_number":29,"context_line":"jobs.  Without the dependency tempest will fail the in-use"},{"line_number":30,"context_line":"snapshot test cases as a timeout is encountered when deleting"},{"line_number":31,"context_line":"the snapshot."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":40,"id":"3a98d1f4_5b1e0d64","line":28,"updated":"2016-09-29 17:03:50.000000000","message":"The change pointed out by Matt Riedemann below (correctly) renames the \u0027wait_for_job\u0027 function (in nova/virt/libvirt/guest.py) to is_job_complete(), and is reworked a bit to make it clearer.\n\nhttps://review.openstack.org/#/c/378746/ -- libvirt: Fix BlockDevice.wait_for_job when qemu reports no job","commit_id":"5a0c8ade649c89f5ff147be7cfd6885d8fd36c6c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"859ccfff25caed1c4e69a908f35e967bbc1ef387","unresolved":false,"context_lines":[{"line_number":40,"context_line":"Co-Authored-By: Erlon R. Cruz \u003cerlon.cruz@fit-tecnologia.org.br\u003e"},{"line_number":41,"context_line":"Implements: blueprint nfs-snapshots"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"Depends-On: Idd6c8df1f0d861d162c8350b4554717d13fbe82f"},{"line_number":44,"context_line":"Depends-On: I34be2f311adddbb8faa3dace9e8b6bc05b4d93f2"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"Change-Id: Iae35c722eb4b6b7d02a95690abbc07a63da77ce7"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":40,"id":"3a98d1f4_20f91081","line":43,"range":{"start_line":43,"start_character":12,"end_line":43,"end_character":53},"updated":"2016-09-29 16:57:17.000000000","message":"FWIW, this has been superseded by I2d0daa32b1d37fa60412ad7a374ee38cebdeb579 now.","commit_id":"5a0c8ade649c89f5ff147be7cfd6885d8fd36c6c"}],"cinder/volume/drivers/ibm/gpfs.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e34aa3b53263e0ea0d55c02f4198e6ec58924311","unresolved":false,"context_lines":[{"line_number":108,"context_line":"class GPFSDriver(driver.ConsistencyGroupVD, driver.LocalVD,"},{"line_number":109,"context_line":"                 driver.TransferVD, driver.CloneableImageVD,"},{"line_number":110,"context_line":"                 driver.MigrateVD, driver.BaseVD,"},{"line_number":111,"context_line":"                 driver.SnapshotVD, driver.ExtendVD):"},{"line_number":112,"context_line":"    \"\"\"Implements volume functions using GPFS primitives."},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    Version history:"}],"source_content_type":"text/x-python","patch_set":12,"id":"bae84128_7c09522c","line":111,"updated":"2016-02-19 21:43:30.000000000","message":"You only changed the order of inherited classes here.  Is there a reason for this change?","commit_id":"68b26d907d896bf91ebd3f4250e72ed619ae0d29"},{"author":{"_account_id":10485,"name":"Ankit Agrawal","email":"ankitagrawal8188@gmail.com","username":"ankitagrawal"},"change_message_id":"a67aab90d4451154e2c05b589cac55b6a59f8391","unresolved":false,"context_lines":[{"line_number":108,"context_line":"class GPFSDriver(driver.ConsistencyGroupVD, driver.LocalVD,"},{"line_number":109,"context_line":"                 driver.TransferVD, driver.CloneableImageVD,"},{"line_number":110,"context_line":"                 driver.MigrateVD, driver.BaseVD,"},{"line_number":111,"context_line":"                 driver.SnapshotVD, driver.ExtendVD):"},{"line_number":112,"context_line":"    \"\"\"Implements volume functions using GPFS primitives."},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    Version history:"}],"source_content_type":"text/x-python","patch_set":12,"id":"bae84128_00d509b8","line":111,"in_reply_to":"bae84128_7c09522c","updated":"2016-02-22 07:32:12.000000000","message":"I rearranged the order of inheritance to fix the MRO issue occurred after patch [1] is merged to support abc-driver-update task.\n[1] https://review.openstack.org/#/c/160688/\n\n\nIf we do not make this change, unit test fails with the following error:\n\n--- import errors ---\nFailed to import test module: cinder.tests.unit.test_gpfs\nTraceback (most recent call last):\n  File \"/opt/stack/cinder/.tox/py27/local/lib/python2.7/site-packages/unittest2/loader.py\", line 456, in _find_test_path\n    module \u003d self._get_module_from_name(name)\n  File \"/opt/stack/cinder/.tox/py27/local/lib/python2.7/site-packages/unittest2/loader.py\", line 395, in _get_module_from_name\n    __import__(name)\n  File \"cinder/tests/unit/test_gpfs.py\", line 30, in \u003cmodule\u003e\n    from cinder.volume.drivers.ibm import gpfs\n  File \"cinder/volume/drivers/ibm/gpfs.py\", line 1232, in \u003cmodule\u003e\n    class GPFSNFSDriver(GPFSDriver, nfs.NfsDriver, san.SanDriver):\n  File \"/opt/stack/cinder/.tox/py27/lib/python2.7/abc.py\", line 87, in __new__\n    cls \u003d super(ABCMeta, mcls).__new__(mcls, name, bases, namespace)\nTypeError: Error when calling the metaclass bases\n    Cannot create a consistent method resolution\norder (MRO) for bases BaseVD, ExtendVD, LocalVD\nThe test run didn\u0027t actually run any tests\n\n\nThe same issue has been pointed out by Eric on PS #7. I have already mentioned this change into commit message.","commit_id":"68b26d907d896bf91ebd3f4250e72ed619ae0d29"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"d511408ef72529bdbacd4bf0d5620579c9c7e5f8","unresolved":false,"context_lines":[{"line_number":108,"context_line":"class GPFSDriver(driver.ConsistencyGroupVD, driver.LocalVD,"},{"line_number":109,"context_line":"                 driver.TransferVD, driver.CloneableImageVD,"},{"line_number":110,"context_line":"                 driver.MigrateVD, driver.BaseVD,"},{"line_number":111,"context_line":"                 driver.SnapshotVD, driver.ExtendVD):"},{"line_number":112,"context_line":"    \"\"\"Implements volume functions using GPFS primitives."},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    Version history:"}],"source_content_type":"text/x-python","patch_set":20,"id":"1a122d0e_5081b2fa","line":111,"updated":"2016-05-03 17:29:22.000000000","message":"You replied earlier saying you added comments on why you need to re-arrange the order of the abstract classes, but I don\u0027t see the comments. Can you please tell me where are the comments for this?  Thanks.","commit_id":"59ee41b27cf17413a9d19870ead0385ed39dfcfa"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"7e556fae93fbcbaf806a6056b4b1256d98a0aba2","unresolved":false,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"@interface.volumedriver"},{"line_number":110,"context_line":"class GPFSDriver(driver.ConsistencyGroupVD, driver.LocalVD,"},{"line_number":111,"context_line":"                 driver.TransferVD, driver.CloneableImageVD,"},{"line_number":112,"context_line":"                 driver.MigrateVD, driver.BaseVD,"},{"line_number":113,"context_line":"                 driver.SnapshotVD, driver.ExtendVD):"}],"source_content_type":"text/x-python","patch_set":49,"id":"3a461143_a1f1dacf","line":110,"updated":"2017-01-25 18:35:28.000000000","message":"Merge issue. These were cleaned up in https://github.com/openstack/cinder/commit/6458931789503b52d6f00267c81b0587e5cd87ef","commit_id":"4f1346c294c46ad529af772cec2d9d363d5f19d8"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"21813def1ff15cea9938125ebddfa46a44641250","unresolved":false,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"@interface.volumedriver"},{"line_number":110,"context_line":"class GPFSDriver(driver.ConsistencyGroupVD, driver.LocalVD,"},{"line_number":111,"context_line":"                 driver.TransferVD, driver.CloneableImageVD,"},{"line_number":112,"context_line":"                 driver.MigrateVD, driver.BaseVD,"},{"line_number":113,"context_line":"                 driver.SnapshotVD, driver.ExtendVD):"}],"source_content_type":"text/x-python","patch_set":49,"id":"3a461143_87ceae58","line":110,"in_reply_to":"3a461143_a1f1dacf","updated":"2017-01-25 19:12:03.000000000","message":"Done","commit_id":"4f1346c294c46ad529af772cec2d9d363d5f19d8"}],"cinder/volume/drivers/netapp/dataontap/nfs_base.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e34aa3b53263e0ea0d55c02f4198e6ec58924311","unresolved":false,"context_lines":[{"line_number":54,"context_line":"class NetAppNfsDriver(driver.ManageableVD,"},{"line_number":55,"context_line":"                      driver.CloneableImageVD,"},{"line_number":56,"context_line":"                      nfs.NfsDriver,"},{"line_number":57,"context_line":"                      driver.SnapshotVD):"},{"line_number":58,"context_line":"    \"\"\"Base class for NetApp NFS driver for Data ONTAP.\"\"\""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    # do not increment this as it may be used in volume type definitions"}],"source_content_type":"text/x-python","patch_set":12,"id":"bae84128_d97eb0ad","line":57,"updated":"2016-02-19 21:43:30.000000000","message":"class RemoteFSDriver(driver.LocalVD, driver.TransferVD, driver.BaseVD):\nclass RemoteFSSnapDriver(RemoteFSDriver, driver.SnapshotVD):\nclass NfsDriver(remotefs.RemoteFSSnapDriver, driver.ExtendVD):\n\ndriver.SnapshotVD is already inherited.  It does need to be added again here.","commit_id":"68b26d907d896bf91ebd3f4250e72ed619ae0d29"},{"author":{"_account_id":10485,"name":"Ankit Agrawal","email":"ankitagrawal8188@gmail.com","username":"ankitagrawal"},"change_message_id":"a67aab90d4451154e2c05b589cac55b6a59f8391","unresolved":false,"context_lines":[{"line_number":54,"context_line":"class NetAppNfsDriver(driver.ManageableVD,"},{"line_number":55,"context_line":"                      driver.CloneableImageVD,"},{"line_number":56,"context_line":"                      nfs.NfsDriver,"},{"line_number":57,"context_line":"                      driver.SnapshotVD):"},{"line_number":58,"context_line":"    \"\"\"Base class for NetApp NFS driver for Data ONTAP.\"\"\""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    # do not increment this as it may be used in volume type definitions"}],"source_content_type":"text/x-python","patch_set":12,"id":"bae84128_16cb8fa6","line":57,"in_reply_to":"bae84128_d97eb0ad","updated":"2016-02-22 07:32:12.000000000","message":"Done","commit_id":"68b26d907d896bf91ebd3f4250e72ed619ae0d29"}],"cinder/volume/drivers/nfs.py":[{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"fd50de716ab49f87c6df33a4c914aca6fb1c9ac8","unresolved":false,"context_lines":[{"line_number":401,"context_line":"            info_path \u003d self._local_path_volume_info(volume)"},{"line_number":402,"context_line":"            fileutils.delete_if_exists(info_path)"},{"line_number":403,"context_line":""},{"line_number":404,"context_line":"    def _qemu_img_info(self, path, volume_name):"},{"line_number":405,"context_line":"        return super(NfsDriver, self)._qemu_img_info_base("},{"line_number":406,"context_line":"            path, volume_name, self.configuration.nfs_mount_point_base)"},{"line_number":407,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1aca2d91_bc4d4a74","line":404,"updated":"2015-05-07 08:57:52.000000000","message":"This method looks the same for NFS, glusterfs, and SMBFS. It should be move into the base class.","commit_id":"2d2fc8d5ef6f1ac31e5dc1758e15789a5b5dc842"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f4ad6bbe4c3a070b4034fec22c5174c18b5ed08f","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        info \u003d self._qemu_img_info(path_to_vol, volume[\u0027name\u0027])"},{"line_number":115,"context_line":"        if info.file_format not in [\u0027raw\u0027, \u0027qcow2\u0027]:"},{"line_number":116,"context_line":"            msg \u003d _(\u0027nfs volume must be a valid raw or qcow2 image.\u0027)"},{"line_number":117,"context_line":"            raise exception.InvalidVolume(msg)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        res[\u0027data\u0027][\u0027format\u0027] \u003d info.file_format"},{"line_number":120,"context_line":"        return res"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a5ae5dd_449003ed","line":117,"updated":"2016-02-03 05:40:16.000000000","message":"exception.InvalidVolume(reason\u003dmsg)","commit_id":"a447f6b32d20c5cc4c3727490707edd2b03b7501"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"4dd3e45aff8f67d8f319a84efb4a879ac9f08ae6","unresolved":false,"context_lines":[{"line_number":474,"context_line":""},{"line_number":475,"context_line":"        super(NfsDriver, self).delete_volume(volume)"},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"        # If an exception (e.g. timeout) occurred during delete_snapshot, the"},{"line_number":478,"context_line":"        # base volume may linger around, so just delete it if it exists"},{"line_number":479,"context_line":"        if volume[\u0027provider_location\u0027] is not None:"},{"line_number":480,"context_line":"            base_volume_path \u003d self._local_path_volume(volume)"}],"source_content_type":"text/x-python","patch_set":19,"id":"5a18252c_f45a4d4f","line":477,"range":{"start_line":477,"start_character":57,"end_line":477,"end_character":72},"updated":"2016-04-13 17:23:22.000000000","message":"Can you explain how the delete snapshot is related to the delete_volume()? This is not clear to me.","commit_id":"873417b9de8a388a06546ccf1af922917f03a1b6"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"c69e48187043c7c705717a12a4bea0917363432f","unresolved":false,"context_lines":[{"line_number":476,"context_line":""},{"line_number":477,"context_line":"    @locked_volume_id_operation"},{"line_number":478,"context_line":"    def delete_volume(self, volume):"},{"line_number":479,"context_line":"        \"\"\"Deletes a logical volume.\"\"\""},{"line_number":480,"context_line":""},{"line_number":481,"context_line":"        super(NfsDriver, self).delete_volume(volume)"},{"line_number":482,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"1a122d0e_b30646cb","line":479,"range":{"start_line":479,"start_character":21,"end_line":479,"end_character":28},"updated":"2016-05-03 23:57:00.000000000","message":"Apply locking to the delete volume operation.","commit_id":"59ee41b27cf17413a9d19870ead0385ed39dfcfa"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"c69e48187043c7c705717a12a4bea0917363432f","unresolved":false,"context_lines":[{"line_number":481,"context_line":"        super(NfsDriver, self).delete_volume(volume)"},{"line_number":482,"context_line":""},{"line_number":483,"context_line":"        # If an exception (e.g. timeout) occurred during delete_snapshot, the"},{"line_number":484,"context_line":"        # base volume may linger around, so just delete it if it exists"},{"line_number":485,"context_line":"        if volume[\u0027provider_location\u0027] is not None:"},{"line_number":486,"context_line":"            base_volume_path \u003d self._local_path_volume(volume)"},{"line_number":487,"context_line":"            fileutils.delete_if_exists(base_volume_path)"}],"source_content_type":"text/x-python","patch_set":20,"id":"1a122d0e_13345a48","line":484,"range":{"start_line":484,"start_character":0,"end_line":484,"end_character":71},"updated":"2016-05-03 23:57:00.000000000","message":"Seems comments and logics are unrelated.","commit_id":"59ee41b27cf17413a9d19870ead0385ed39dfcfa"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"3dbb0a57a2d7928866fd29c34ed8fd46c172baaf","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"@interface.volumedriver"},{"line_number":79,"context_line":"class NfsDriver(remotefs.RemoteFSSnapDriver, remotefs.RemoteFSDriver,"},{"line_number":80,"context_line":"                driver.ExtendVD):"},{"line_number":81,"context_line":"    \"\"\"NFS-based Cinder driver."},{"line_number":82,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"fa7ab95a_50fbb578","line":79,"updated":"2016-08-30 16:19:29.000000000","message":"RemoteFSSnapDriver already inherits from  RemoteFSDriver, so I am not sure we need tolist RemoteFSDriver again here.","commit_id":"028e472fbfd7c04d563563643f517712493a3c86"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"60b4fb6d70c05c0f039d45a0560ca0d02c46c9c8","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"@interface.volumedriver"},{"line_number":79,"context_line":"class NfsDriver(remotefs.RemoteFSSnapDriver, remotefs.RemoteFSDriver,"},{"line_number":80,"context_line":"                driver.ExtendVD):"},{"line_number":81,"context_line":"    \"\"\"NFS-based Cinder driver."},{"line_number":82,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"fa7ab95a_435cc24a","line":79,"in_reply_to":"fa7ab95a_50fbb578","updated":"2016-08-30 19:22:24.000000000","message":"Done","commit_id":"028e472fbfd7c04d563563643f517712493a3c86"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"3dbb0a57a2d7928866fd29c34ed8fd46c172baaf","unresolved":false,"context_lines":[{"line_number":479,"context_line":""},{"line_number":480,"context_line":"        return super(NfsDriver, self).create_volume(volume)"},{"line_number":481,"context_line":""},{"line_number":482,"context_line":"    @locked_volume_id_operation"},{"line_number":483,"context_line":"    def create_volume_from_snapshot(self, volume, snapshot):"},{"line_number":484,"context_line":"        return self._create_volume_from_snapshot(volume, snapshot)"},{"line_number":485,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"fa7ab95a_d0c98527","line":482,"updated":"2016-08-30 16:19:29.000000000","message":"This is already defined, as is, in RemoteFSSnapDriver. Why override this method ?","commit_id":"028e472fbfd7c04d563563643f517712493a3c86"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"60b4fb6d70c05c0f039d45a0560ca0d02c46c9c8","unresolved":false,"context_lines":[{"line_number":479,"context_line":""},{"line_number":480,"context_line":"        return super(NfsDriver, self).create_volume(volume)"},{"line_number":481,"context_line":""},{"line_number":482,"context_line":"    @locked_volume_id_operation"},{"line_number":483,"context_line":"    def create_volume_from_snapshot(self, volume, snapshot):"},{"line_number":484,"context_line":"        return self._create_volume_from_snapshot(volume, snapshot)"},{"line_number":485,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"fa7ab95a_83524a33","line":482,"in_reply_to":"fa7ab95a_d0c98527","updated":"2016-08-30 19:22:24.000000000","message":"Done","commit_id":"028e472fbfd7c04d563563643f517712493a3c86"}],"cinder/volume/drivers/remotefs.py":[{"author":{"_account_id":13915,"name":"Silvan Kaiser","email":"silvan@quobyte.com","username":"kaisers"},"change_message_id":"6a78b8b8ec04b1fddf2c0aab025915cb52682ea3","unresolved":false,"context_lines":[{"line_number":1119,"context_line":"        # qemu-img create must run as root, because it reads from the"},{"line_number":1120,"context_line":"        # backing file, which will be owned by qemu:qemu if attached to an"},{"line_number":1121,"context_line":"        # instance.   (TODO(eharney): sanity check this)"},{"line_number":1122,"context_line":"        self._execute(*command, run_as_root\u003dTrue)"},{"line_number":1123,"context_line":""},{"line_number":1124,"context_line":"        info \u003d self._qemu_img_info(backing_path_full_path,"},{"line_number":1125,"context_line":"                                   snapshot[\u0027volume\u0027][\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":13,"id":"5aef4532_69917552","line":1122,"updated":"2016-03-09 21:28:31.000000000","message":"I think this will conflict with nas_secure_file_operations\u003dTrue settings. If a driver is running in secure mode with a non privileged user but the image is created with root ownership follow up operations might fail on this, especially if combined with nas_secure_file_permissions\u003dTrue. Not?","commit_id":"a69874617dea0f73d922b5af6467a74f4f05bcc8"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"f6f5dabbd2dfae33e572c9bb2c39f7b4fd3bbf81","unresolved":false,"context_lines":[{"line_number":1119,"context_line":"        # qemu-img create must run as root, because it reads from the"},{"line_number":1120,"context_line":"        # backing file, which will be owned by qemu:qemu if attached to an"},{"line_number":1121,"context_line":"        # instance.   (TODO(eharney): sanity check this)"},{"line_number":1122,"context_line":"        self._execute(*command, run_as_root\u003dTrue)"},{"line_number":1123,"context_line":""},{"line_number":1124,"context_line":"        info \u003d self._qemu_img_info(backing_path_full_path,"},{"line_number":1125,"context_line":"                                   snapshot[\u0027volume\u0027][\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa0719c6_7c0e7535","line":1122,"in_reply_to":"5aef4532_69917552","updated":"2016-03-21 14:01:19.000000000","message":"This does look like a bug to me, it should run unprivileged if possible.","commit_id":"a69874617dea0f73d922b5af6467a74f4f05bcc8"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"ca35e6e6eb6086ae220250e7f399d687bff5ab34","unresolved":false,"context_lines":[{"line_number":1119,"context_line":"        # qemu-img create must run as root, because it reads from the"},{"line_number":1120,"context_line":"        # backing file, which will be owned by qemu:qemu if attached to an"},{"line_number":1121,"context_line":"        # instance.   (TODO(eharney): sanity check this)"},{"line_number":1122,"context_line":"        self._execute(*command, run_as_root\u003dTrue)"},{"line_number":1123,"context_line":""},{"line_number":1124,"context_line":"        info \u003d self._qemu_img_info(backing_path_full_path,"},{"line_number":1125,"context_line":"                                   snapshot[\u0027volume\u0027][\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa0719c6_36b6d1dc","line":1122,"in_reply_to":"fa0719c6_7c0e7535","updated":"2016-03-21 16:16:20.000000000","message":"Well, reading the comment -- it has to run as root.  I think this means we need to manually set the file privileges after the operation.","commit_id":"a69874617dea0f73d922b5af6467a74f4f05bcc8"},{"author":{"_account_id":13915,"name":"Silvan Kaiser","email":"silvan@quobyte.com","username":"kaisers"},"change_message_id":"6a78b8b8ec04b1fddf2c0aab025915cb52682ea3","unresolved":false,"context_lines":[{"line_number":1131,"context_line":"                   new_snap_path]"},{"line_number":1132,"context_line":""},{"line_number":1133,"context_line":"        # qemu-img rebase must run as root for the same reasons as above"},{"line_number":1134,"context_line":"        self._execute(*command, run_as_root\u003dTrue)"},{"line_number":1135,"context_line":""},{"line_number":1136,"context_line":"        self._set_rw_permissions(new_snap_path)"},{"line_number":1137,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"5aef4532_e89d1167","line":1134,"range":{"start_line":1134,"start_character":44,"end_line":1134,"end_character":48},"updated":"2016-03-09 21:28:31.000000000","message":"Not sure if this hit\u0027s the same issue as above. I think rebase -u should not change ownership but if it does this end\u0027s up with an ownership conflict, too.","commit_id":"a69874617dea0f73d922b5af6467a74f4f05bcc8"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"48b67e56987da36bf207362d2840ee43092048a9","unresolved":false,"context_lines":[{"line_number":333,"context_line":"        pass"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"    def _delete(self, path, run_as_root\u003dNone):"},{"line_number":336,"context_line":"        if not run_as_root:"},{"line_number":337,"context_line":"            run_as_root \u003d self._execute_as_root"},{"line_number":338,"context_line":"        # Note(lpetrut): this method is needed in order to provide"},{"line_number":339,"context_line":"        # interoperability with Windows as it will be overridden."}],"source_content_type":"text/x-python","patch_set":30,"id":"9a89bdaa_aeda9ee7","line":336,"updated":"2016-09-09 14:17:33.000000000","message":"This should be \u0027if run_as_root is None\u0027\nOtherwise there\u0027s no way to call \u0027_delete(..., False)\u0027","commit_id":"d5e841bf650964e539b1efb7f809c95982b553ea"}],"cinder/volume/drivers/tintri.py":[{"author":{"_account_id":14377,"name":"Apoorva","email":"apps.desh@gmail.com","username":"apoorvad"},"change_message_id":"cc628e6681a5c023764ecd3c59bd9b142e29a137","unresolved":false,"context_lines":[{"line_number":61,"context_line":"class TintriDriver(driver.ManageableVD,"},{"line_number":62,"context_line":"                   driver.CloneableImageVD,"},{"line_number":63,"context_line":"                   nfs.NfsDriver,"},{"line_number":64,"context_line":"                   driver.SnapshotVD):"},{"line_number":65,"context_line":"    \"\"\"Base class for Tintri driver.\"\"\""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    VENDOR \u003d \u0027Tintri\u0027"}],"source_content_type":"text/x-python","patch_set":12,"id":"dae33548_841ce86b","line":64,"updated":"2016-02-18 23:48:34.000000000","message":"We don\u0027t need this anymore, since NfsDriver has snapshot functionality.","commit_id":"68b26d907d896bf91ebd3f4250e72ed619ae0d29"},{"author":{"_account_id":10485,"name":"Ankit Agrawal","email":"ankitagrawal8188@gmail.com","username":"ankitagrawal"},"change_message_id":"a67aab90d4451154e2c05b589cac55b6a59f8391","unresolved":false,"context_lines":[{"line_number":61,"context_line":"class TintriDriver(driver.ManageableVD,"},{"line_number":62,"context_line":"                   driver.CloneableImageVD,"},{"line_number":63,"context_line":"                   nfs.NfsDriver,"},{"line_number":64,"context_line":"                   driver.SnapshotVD):"},{"line_number":65,"context_line":"    \"\"\"Base class for Tintri driver.\"\"\""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    VENDOR \u003d \u0027Tintri\u0027"}],"source_content_type":"text/x-python","patch_set":12,"id":"bae84128_96bf9ffa","line":64,"in_reply_to":"bae84128_39951ce4","updated":"2016-02-22 07:32:12.000000000","message":"Done","commit_id":"68b26d907d896bf91ebd3f4250e72ed619ae0d29"},{"author":{"_account_id":10485,"name":"Ankit Agrawal","email":"ankitagrawal8188@gmail.com","username":"ankitagrawal"},"change_message_id":"673aecb559f5d87643ee0cdee039b39acfc09d41","unresolved":false,"context_lines":[{"line_number":61,"context_line":"class TintriDriver(driver.ManageableVD,"},{"line_number":62,"context_line":"                   driver.CloneableImageVD,"},{"line_number":63,"context_line":"                   nfs.NfsDriver,"},{"line_number":64,"context_line":"                   driver.SnapshotVD):"},{"line_number":65,"context_line":"    \"\"\"Base class for Tintri driver.\"\"\""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    VENDOR \u003d \u0027Tintri\u0027"}],"source_content_type":"text/x-python","patch_set":12,"id":"dae33548_99c44660","line":64,"in_reply_to":"dae33548_841ce86b","updated":"2016-02-19 06:48:48.000000000","message":"Are you suggesting to remove SnapshotVD from this inheritance. This patch is to implement snapshot for nfs driver and as I don\u0027t have expertise in tintri driver, So IMO the author of this tintri driver can remove this part once NFS snapshot get merged.","commit_id":"68b26d907d896bf91ebd3f4250e72ed619ae0d29"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e34aa3b53263e0ea0d55c02f4198e6ec58924311","unresolved":false,"context_lines":[{"line_number":61,"context_line":"class TintriDriver(driver.ManageableVD,"},{"line_number":62,"context_line":"                   driver.CloneableImageVD,"},{"line_number":63,"context_line":"                   nfs.NfsDriver,"},{"line_number":64,"context_line":"                   driver.SnapshotVD):"},{"line_number":65,"context_line":"    \"\"\"Base class for Tintri driver.\"\"\""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    VENDOR \u003d \u0027Tintri\u0027"}],"source_content_type":"text/x-python","patch_set":12,"id":"bae84128_39951ce4","line":64,"in_reply_to":"dae33548_99c44660","updated":"2016-02-19 21:43:30.000000000","message":"class RemoteFSDriver(driver.LocalVD, driver.TransferVD, driver.BaseVD):\nclass RemoteFSSnapDriver(RemoteFSDriver, driver.SnapshotVD):\nclass NfsDriver(remotefs.RemoteFSSnapDriver, driver.ExtendVD):\n\nSo driver.SnapshotVD is already inherited.  No need to add it here.\n\nWe should check CI\u0027s for all the drivers that got affected by this patch too.","commit_id":"68b26d907d896bf91ebd3f4250e72ed619ae0d29"}],"releasenotes/notes/nfs-snapshots-21b641300341cba1.yaml":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"632f85ee0edc9830a422803e08b3f00d790e7dcb","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Added support to snapshots in NFS driver. This functionality is only"},{"line_number":4,"context_line":"    enabled if \"nfs_snapshot_support\" is set to True in cinder.conf."}],"source_content_type":"text/x-yaml","patch_set":41,"id":"3a98d1f4_70ab9c75","line":4,"range":{"start_line":3,"start_character":46,"end_line":4,"end_character":68},"updated":"2016-09-30 19:31:43.000000000","message":"You should probably also point out the limitations with the minimum version of libvirt required for this (1.2.7).","commit_id":"5530ebe945b67ec970d705da480e2b0351b69608"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1b65f84dbb60e28efce4b3df47e4a98a14192105","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Added support to snapshots in NFS driver. This functionality is only"},{"line_number":4,"context_line":"    enabled if \"nfs_snapshot_support\" is set to True in cinder.conf."}],"source_content_type":"text/x-yaml","patch_set":41,"id":"3a98d1f4_f0e40ce1","line":4,"range":{"start_line":3,"start_character":46,"end_line":4,"end_character":68},"in_reply_to":"3a98d1f4_70ab9c75","updated":"2016-09-30 19:32:56.000000000","message":"Nevermind I guess that\u0027s clear enough in the help text for the nfs_snapshot_support config option.","commit_id":"5530ebe945b67ec970d705da480e2b0351b69608"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"7e556fae93fbcbaf806a6056b4b1256d98a0aba2","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Added support to snapshots in NFS driver. This functionality is only"},{"line_number":4,"context_line":"    enabled if \"nfs_snapshot_support\" is set to True in cinder.conf. Clonning"},{"line_number":5,"context_line":"    volumes is only supported if the source volume is not attached."}],"source_content_type":"text/x-yaml","patch_set":49,"id":"3a461143_e1a042a8","line":4,"range":{"start_line":4,"start_character":69,"end_line":4,"end_character":77},"updated":"2017-01-25 18:35:28.000000000","message":"s/Clonning/Cloning/","commit_id":"4f1346c294c46ad529af772cec2d9d363d5f19d8"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"21813def1ff15cea9938125ebddfa46a44641250","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Added support to snapshots in NFS driver. This functionality is only"},{"line_number":4,"context_line":"    enabled if \"nfs_snapshot_support\" is set to True in cinder.conf. Clonning"},{"line_number":5,"context_line":"    volumes is only supported if the source volume is not attached."}],"source_content_type":"text/x-yaml","patch_set":49,"id":"3a461143_c7c19630","line":4,"range":{"start_line":4,"start_character":69,"end_line":4,"end_character":77},"in_reply_to":"3a461143_e1a042a8","updated":"2017-01-25 19:12:03.000000000","message":"Done","commit_id":"4f1346c294c46ad529af772cec2d9d363d5f19d8"}]}
