)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"8649b83cebc2ddbc193874418576093cf870b56d","unresolved":false,"context_lines":[{"line_number":11,"context_line":"Unit test coverage for extend method and create_from_snapshot case."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I617e7b25d61437e930e4e2606215043dc3e388dd"},{"line_number":14,"context_line":"Closes-Bug: #1562167"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"3aaa91ec_f620a69d","line":14,"updated":"2016-06-22 19:11:59.000000000","message":"Depends-on: I829c0e6f99fff0ec0bd5366c9d2e79b1b073f0a3\n\nTempest currently does not cover the path touched by this fix. So, we should run this extend test as dependency so we can assure they work for all backends after CIs runs.","commit_id":"23cc301d8c10e7a86b5ea459e82828b78d640a28"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"54db342ce4de76d93c7c168e415eb624415d26e5","unresolved":false,"context_lines":[{"line_number":11,"context_line":"Unit test coverage for extend method and create_from_snapshot case."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I617e7b25d61437e930e4e2606215043dc3e388dd"},{"line_number":14,"context_line":"Closes-Bug: #1562167"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"3aaa91ec_8f070717","line":14,"in_reply_to":"3aaa91ec_14fcd16e","updated":"2016-06-30 18:05:23.000000000","message":"The depends on will avoid that this change is merged before the tempest test. Also, if your CI is properly set, it will download the related tempest test and run it against this change.","commit_id":"23cc301d8c10e7a86b5ea459e82828b78d640a28"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"3950524b7159725679183ee557714759a61d1a05","unresolved":false,"context_lines":[{"line_number":11,"context_line":"Unit test coverage for extend method and create_from_snapshot case."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I617e7b25d61437e930e4e2606215043dc3e388dd"},{"line_number":14,"context_line":"Closes-Bug: #1562167"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"3aaa91ec_14fcd16e","line":14,"in_reply_to":"3aaa91ec_f175d7ca","updated":"2016-06-28 19:41:39.000000000","message":"But does it really \"depend\" on tempest test? I mean it will work with or without the test. Maybe I don\u0027t quite understand the usage of \"depends-on\" thing.","commit_id":"23cc301d8c10e7a86b5ea459e82828b78d640a28"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"431099505a4610122d622990e218b9d7348d4ff6","unresolved":false,"context_lines":[{"line_number":11,"context_line":"Unit test coverage for extend method and create_from_snapshot case."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I617e7b25d61437e930e4e2606215043dc3e388dd"},{"line_number":14,"context_line":"Closes-Bug: #1562167"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"3aaa91ec_fa7f7912","line":14,"in_reply_to":"3aaa91ec_f620a69d","updated":"2016-06-24 15:48:30.000000000","message":"I don\u0027t see how this is related to tests, here is what this bug says: \"NexentaStor5 NFS missing extend method\"","commit_id":"23cc301d8c10e7a86b5ea459e82828b78d640a28"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"e21ba0e8f7e4b2f6628323bb35a2b9ff5b491ab4","unresolved":false,"context_lines":[{"line_number":11,"context_line":"Unit test coverage for extend method and create_from_snapshot case."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I617e7b25d61437e930e4e2606215043dc3e388dd"},{"line_number":14,"context_line":"Closes-Bug: #1562167"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"3aaa91ec_f175d7ca","line":14,"in_reply_to":"3aaa91ec_fa7f7912","updated":"2016-06-24 18:49:20.000000000","message":"Bug Description: While fixing a \"driver does not honor clone volume size\" bug I have found out that NS5 NFS driver was missing the extend method.\n\nThe dependency on tempest is to test this \u0027honor\u0027 fixes, which your patch is doing.","commit_id":"23cc301d8c10e7a86b5ea459e82828b78d640a28"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"e9186748b1096e700f40730e53168a61e4b3ca5b","unresolved":false,"context_lines":[{"line_number":7,"context_line":"NexentaStor5: add extend method to NFS driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Adding extend method and support for extending the volume in"},{"line_number":10,"context_line":"create_from_snapshot if the clone size is larger than volume size."},{"line_number":11,"context_line":"Unit test coverage for extend method and create_from_snapshot case."},{"line_number":12,"context_line":"Replace / for %2F in get_share_datasets."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"1ac06dbe_4c416e39","line":10,"range":{"start_line":10,"start_character":21,"end_line":10,"end_character":65},"updated":"2016-08-19 12:13:59.000000000","message":"In the code, we call extend if the clone size is smaller than the user given volume size.","commit_id":"9a6c3f8799e9c97ad5b156005eaa994b44f681d1"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"6df404c94a38c96f4ca77a08acdc28c50df2e889","unresolved":false,"context_lines":[{"line_number":7,"context_line":"NexentaStor5: add extend method to NFS driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Adding extend method and support for extending the volume in"},{"line_number":10,"context_line":"create_from_snapshot if the clone size is larger than volume size."},{"line_number":11,"context_line":"Unit test coverage for extend method and create_from_snapshot case."},{"line_number":12,"context_line":"Replace / for %2F in get_share_datasets."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"1ac06dbe_ed0922df","line":10,"range":{"start_line":10,"start_character":21,"end_line":10,"end_character":65},"in_reply_to":"1ac06dbe_4c416e39","updated":"2016-08-19 17:02:34.000000000","message":"Not sure I understand you here. Clone is the new volume that is created from snapshot. I check if new size is larger than original size and extend the new volume in that case.","commit_id":"9a6c3f8799e9c97ad5b156005eaa994b44f681d1"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"bd74d3816764804240b1ee80e163c01deb12011e","unresolved":false,"context_lines":[{"line_number":7,"context_line":"NexentaStor5: add extend method to NFS driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Adding extend method and support for extending the volume in"},{"line_number":10,"context_line":"create_from_snapshot if the clone size is larger than volume size."},{"line_number":11,"context_line":"Unit test coverage for extend method and create_from_snapshot case."},{"line_number":12,"context_line":"Replace / for %2F in get_share_datasets."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":20,"id":"1ac06dbe_802f62a0","line":10,"range":{"start_line":10,"start_character":21,"end_line":10,"end_character":65},"updated":"2016-08-25 12:08:04.000000000","message":"larger-\u003e smaller?\n\nAssume that we are creating vol-1 from snap-1. We clone snap-1 and if the size of this clone is smaller than vol-1 size (user given size), we extend the clone.","commit_id":"a60e0514c1bca959b2cdaf822aa65d78d7001adb"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"95a0800285631220cbfc9c7d1daeaf7dc041096c","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Alexey Khodos \u003calexey.khodos@nexenta.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-08-26 01:31:55 +0300"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"NexentaStor5: add extend method to NFS driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Adding extend method and support for extending the volume in"},{"line_number":10,"context_line":"create_from_snapshot if the size of new volume is larger than"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":22,"id":"fa7ab95a_92284135","line":7,"updated":"2016-09-01 19:46:35.000000000","message":"A release note should be added for adding extend volume support for NexentaStor5 driver.","commit_id":"c98a908a662ac97424c5eb3880560b5733881b8b"}],"cinder/tests/unit/test_nexenta5_nfs.py":[{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"10dc0058309885af4c342f683462e4d2c378ec46","unresolved":false,"context_lines":[{"line_number":173,"context_line":""},{"line_number":174,"context_line":"    @patch(\u0027cinder.volume.drivers.nexenta.ns5.nfs.\u0027"},{"line_number":175,"context_line":"           \u0027NexentaNfsDriver.local_path\u0027)"},{"line_number":176,"context_line":"    @patch(\u0027oslo_concurrency.processutils.execute\u0027)"},{"line_number":177,"context_line":"    def test_extend_volume(self, _execute, path):"},{"line_number":178,"context_line":"        self._create_volume_db_entry()"},{"line_number":179,"context_line":"        path.return_value \u003d \u0027path\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba0121b8_799c585d","line":176,"updated":"2016-03-30 19:33:44.000000000","message":"Yeah, good idea.","commit_id":"3fa7a13cdf13a1a2cbda55fb15a57be2704633cb"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"d92c79e172776e183f0045f0558b718f78e9857e","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        self.nef_mock.post.assert_called_with(url)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        # make sure the volume get extended!"},{"line_number":172,"context_line":"        create.assert_has_calls(path, 2)"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"    @patch(\u0027cinder.volume.drivers.nexenta.ns5.nfs.\u0027"},{"line_number":175,"context_line":"           \u0027NexentaNfsDriver.local_path\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_a777e3d2","line":172,"updated":"2016-05-25 18:40:14.000000000","message":"I don\u0027t think this is doing what you think it is, changing \"2\" to \"60\" still lets the test pass.","commit_id":"750574dbb0c06ecbe743f52726d95078d856b50e"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"d92c79e172776e183f0045f0558b718f78e9857e","unresolved":false,"context_lines":[{"line_number":183,"context_line":"            \u0027path\u0027,"},{"line_number":184,"context_line":"            root_helper\u003d\u0027sudo cinder-rootwrap /etc/cinder/rootwrap.conf\u0027,"},{"line_number":185,"context_line":"            run_as_root\u003dTrue)"},{"line_number":186,"context_line":"        self.cfg.nexenta_sparsed_volumes \u003d False"},{"line_number":187,"context_line":"        self.drv.extend_volume(self.TEST_VOLUME, 2)"},{"line_number":188,"context_line":"        _execute.assert_called_with("},{"line_number":189,"context_line":"            \u0027dd\u0027, \u0027if\u003d/dev/zero\u0027, \u0027seek\u003d1073741824\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_c77ca7b7","line":186,"updated":"2016-05-25 18:40:14.000000000","message":"You need to mock the config rather than assigning directly to it, or other tests may be broken.","commit_id":"750574dbb0c06ecbe743f52726d95078d856b50e"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"c1a0c74c3ffc0f344281a8fabcd500ac797c39f6","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        self.nef_mock.post.assert_called_with(url)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        # make sure the volume get extended!"},{"line_number":172,"context_line":"        extend.assert_called_with(self.TEST_VOLUME2, 2)"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"    @patch(\u0027cinder.volume.drivers.nexenta.ns5.nfs.\u0027"},{"line_number":175,"context_line":"           \u0027NexentaNfsDriver.local_path\u0027)"}],"source_content_type":"text/x-python","patch_set":17,"id":"dada55a8_4c63c641","line":172,"range":{"start_line":172,"start_character":15,"end_line":172,"end_character":33},"updated":"2016-07-25 17:05:49.000000000","message":"assert_called_once_with","commit_id":"d8e1a4a121592673844f2d1c462eed839d8edf03"}],"cinder/tests/unit/volume/drivers/nexenta/test_nexenta5_nfs.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"2819ded53ec352601763bb116883158d8eb8f9aa","unresolved":false,"context_lines":[{"line_number":185,"context_line":"            \u0027path\u0027,"},{"line_number":186,"context_line":"            root_helper\u003d\u0027sudo cinder-rootwrap /etc/cinder/rootwrap.conf\u0027,"},{"line_number":187,"context_line":"            run_as_root\u003dTrue)"},{"line_number":188,"context_line":"        with mock.patch.object(self.drv,"},{"line_number":189,"context_line":"                               \u0027sparsed_volumes\u0027,"},{"line_number":190,"context_line":"                               False):"},{"line_number":191,"context_line":"            self.drv.extend_volume(self.TEST_VOLUME, 2)"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a89bdaa_75dc5573","line":188,"updated":"2016-09-07 19:17:33.000000000","message":"Please, split it into 2 tests","commit_id":"94cec0f8c97a4e39ce8a4f24ecfa3c09b44c5fba"}],"cinder/volume/drivers/nexenta/ns5/nfs.py":[{"author":{"_account_id":20140,"name":"Karthik Prabhu Vinod","email":"karthik.prabhu.vinod@intel.com","username":"kprabhuv"},"change_message_id":"76f1b15e8f294f515030c4fea3cdd194d4c67158","unresolved":false,"context_lines":[{"line_number":240,"context_line":"        \"\"\""},{"line_number":241,"context_line":"        LOG.info(_LI(\u0027Extending volume: %(id)s New size: %(size)s GB\u0027),"},{"line_number":242,"context_line":"                 {\u0027id\u0027: volume[\u0027id\u0027], \u0027size\u0027: new_size})"},{"line_number":243,"context_line":"        if getattr(self.configuration,"},{"line_number":244,"context_line":"                   self.driver_prefix + \u0027_sparsed_volumes\u0027):"},{"line_number":245,"context_line":"            self._create_sparsed_file(self.local_path(volume), new_size)"},{"line_number":246,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba0121b8_91678ee8","line":243,"range":{"start_line":243,"start_character":0,"end_line":243,"end_character":8},"updated":"2016-03-30 15:44:00.000000000","message":"I think it is good to try,catch the extend_volume code as well. It will easier to catch errors and add an extra line to the stack trace in case of any exceptions","commit_id":"8383c01f4f510d95fc8476a2181e2fbca42af20e"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"7f9f464e7dbc65ef693874adbfc653f850adeed0","unresolved":false,"context_lines":[{"line_number":240,"context_line":"        \"\"\""},{"line_number":241,"context_line":"        LOG.info(_LI(\u0027Extending volume: %(id)s New size: %(size)s GB\u0027),"},{"line_number":242,"context_line":"                 {\u0027id\u0027: volume[\u0027id\u0027], \u0027size\u0027: new_size})"},{"line_number":243,"context_line":"        if getattr(self.configuration,"},{"line_number":244,"context_line":"                   self.driver_prefix + \u0027_sparsed_volumes\u0027):"},{"line_number":245,"context_line":"            self._create_sparsed_file(self.local_path(volume), new_size)"},{"line_number":246,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba0121b8_430b658e","line":243,"range":{"start_line":243,"start_character":0,"end_line":243,"end_character":8},"in_reply_to":"ba0121b8_91678ee8","updated":"2016-03-30 18:44:34.000000000","message":"I\u0027m not sure what exactly should we catch here?","commit_id":"8383c01f4f510d95fc8476a2181e2fbca42af20e"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"62637d6d7eb12621a7963313f4d3dc789ea425c0","unresolved":false,"context_lines":[{"line_number":238,"context_line":"        :param volume: volume reference"},{"line_number":239,"context_line":"        :param new_size: volume new size in GB"},{"line_number":240,"context_line":"        \"\"\""},{"line_number":241,"context_line":"        LOG.info(_LI(\u0027Extending volume: %(id)s New size: %(size)s GB\u0027),"},{"line_number":242,"context_line":"                 {\u0027id\u0027: volume[\u0027id\u0027], \u0027size\u0027: new_size})"},{"line_number":243,"context_line":"        if getattr(self.configuration,"},{"line_number":244,"context_line":"                   self.driver_prefix + \u0027_sparsed_volumes\u0027):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a061dce_5850905d","line":241,"updated":"2016-04-05 21:44:41.000000000","message":"may be easier to read the message if it\u0027s\n\u0027Extending volume %(id)s to %(size)s GB\u0027","commit_id":"750574dbb0c06ecbe743f52726d95078d856b50e"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"2008daac12c766ee1b4aa4683e3c7041dadebaca","unresolved":false,"context_lines":[{"line_number":247,"context_line":"            block_size_mb \u003d 1"},{"line_number":248,"context_line":"            block_count \u003d ((new_size - volume[\u0027size\u0027]) * units.Gi /"},{"line_number":249,"context_line":"                           (block_size_mb * units.Mi))"},{"line_number":250,"context_line":"            self._execute("},{"line_number":251,"context_line":"                \u0027dd\u0027, \u0027if\u003d/dev/zero\u0027,"},{"line_number":252,"context_line":"                \u0027seek\u003d%d\u0027 % (volume[\u0027size\u0027] * units.Gi / block_size_mb),"},{"line_number":253,"context_line":"                \u0027of\u003d%s\u0027 % self.local_path(volume),"},{"line_number":254,"context_line":"                \u0027bs\u003d%dM\u0027 % block_size_mb,"},{"line_number":255,"context_line":"                \u0027count\u003d%d\u0027 % block_count,"},{"line_number":256,"context_line":"                run_as_root\u003dTrue)"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"    def create_snapshot(self, snapshot):"},{"line_number":259,"context_line":"        \"\"\"Creates a snapshot."}],"source_content_type":"text/x-python","patch_set":5,"id":"1a122d0e_223c94c7","line":256,"range":{"start_line":250,"start_character":11,"end_line":256,"end_character":33},"updated":"2016-04-18 18:32:45.000000000","message":"There should be a check here to make sure that this succeeds. Its possible there could be not enough space or no space left. This will also need some more unit tests to verify the behavior for when this will fail.","commit_id":"750574dbb0c06ecbe743f52726d95078d856b50e"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"0eaa099e1476730534490c206c908335cec4b69a","unresolved":false,"context_lines":[{"line_number":247,"context_line":"            block_size_mb \u003d 1"},{"line_number":248,"context_line":"            block_count \u003d ((new_size - volume[\u0027size\u0027]) * units.Gi /"},{"line_number":249,"context_line":"                           (block_size_mb * units.Mi))"},{"line_number":250,"context_line":"            self._execute("},{"line_number":251,"context_line":"                \u0027dd\u0027, \u0027if\u003d/dev/zero\u0027,"},{"line_number":252,"context_line":"                \u0027seek\u003d%d\u0027 % (volume[\u0027size\u0027] * units.Gi / block_size_mb),"},{"line_number":253,"context_line":"                \u0027of\u003d%s\u0027 % self.local_path(volume),"},{"line_number":254,"context_line":"                \u0027bs\u003d%dM\u0027 % block_size_mb,"},{"line_number":255,"context_line":"                \u0027count\u003d%d\u0027 % block_count,"},{"line_number":256,"context_line":"                run_as_root\u003dTrue)"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"    def create_snapshot(self, snapshot):"},{"line_number":259,"context_line":"        \"\"\"Creates a snapshot."}],"source_content_type":"text/x-python","patch_set":5,"id":"1a122d0e_5931bfeb","line":256,"range":{"start_line":250,"start_character":11,"end_line":256,"end_character":33},"in_reply_to":"1a122d0e_223c94c7","updated":"2016-04-18 20:58:52.000000000","message":"This behavior is copied from RemoteFS _create_regular_file method, if dd fails it will return an error, won\u0027t it?\nAnd free space is controlled by driver capabilities, free_capacity_gb in particular. \nAlso the extend method should not be called by the scheduler if there is not enough space, if I recall correctly. So making more checks here seems redundant to me, don\u0027t you think?","commit_id":"750574dbb0c06ecbe743f52726d95078d856b50e"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"d92c79e172776e183f0045f0558b718f78e9857e","unresolved":false,"context_lines":[{"line_number":247,"context_line":"            block_size_mb \u003d 1"},{"line_number":248,"context_line":"            block_count \u003d ((new_size - volume[\u0027size\u0027]) * units.Gi /"},{"line_number":249,"context_line":"                           (block_size_mb * units.Mi))"},{"line_number":250,"context_line":"            self._execute("},{"line_number":251,"context_line":"                \u0027dd\u0027, \u0027if\u003d/dev/zero\u0027,"},{"line_number":252,"context_line":"                \u0027seek\u003d%d\u0027 % (volume[\u0027size\u0027] * units.Gi / block_size_mb),"},{"line_number":253,"context_line":"                \u0027of\u003d%s\u0027 % self.local_path(volume),"},{"line_number":254,"context_line":"                \u0027bs\u003d%dM\u0027 % block_size_mb,"},{"line_number":255,"context_line":"                \u0027count\u003d%d\u0027 % block_count,"},{"line_number":256,"context_line":"                run_as_root\u003dTrue)"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"    def create_snapshot(self, snapshot):"},{"line_number":259,"context_line":"        \"\"\"Creates a snapshot."}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_e720cbf9","line":256,"range":{"start_line":250,"start_character":11,"end_line":256,"end_character":33},"in_reply_to":"1a122d0e_5931bfeb","updated":"2016-05-25 18:40:14.000000000","message":"Yes, an exception will be thrown if the command doesn\u0027t return 0.  An additional check is not needed.","commit_id":"750574dbb0c06ecbe743f52726d95078d856b50e"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"a82545b6f5d70738ae8473f1ac1868da57da3723","unresolved":false,"context_lines":[{"line_number":243,"context_line":"                 {\u0027id\u0027: volume[\u0027id\u0027], \u0027size\u0027: new_size})"},{"line_number":244,"context_line":"        if getattr(self.configuration,"},{"line_number":245,"context_line":"                   self.driver_prefix + \u0027_sparsed_volumes\u0027):"},{"line_number":246,"context_line":"            self._create_sparsed_file(self.local_path(volume), new_size)"},{"line_number":247,"context_line":"        else:"},{"line_number":248,"context_line":"            block_size_mb \u003d 1"},{"line_number":249,"context_line":"            block_count \u003d ((new_size - volume[\u0027size\u0027]) * units.Gi /"}],"source_content_type":"text/x-python","patch_set":6,"id":"9abb7d3a_72fc2db8","line":246,"updated":"2016-06-01 20:21:12.000000000","message":"IMO this shouldn\u0027t use _create_sparsed_file, as that method is really only intended to create new files and not modify existing files (even if it works) -- this is pretty dangerous if that method changes somehow later.  Just call truncate via _execute() here.","commit_id":"c3cf47b605b6cd59310923f8300876c3879759f7"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"8262d183d1a628d5bb441f97d2adf31bb9248152","unresolved":false,"context_lines":[{"line_number":243,"context_line":"                 {\u0027id\u0027: volume[\u0027id\u0027], \u0027size\u0027: new_size})"},{"line_number":244,"context_line":"        if getattr(self.configuration,"},{"line_number":245,"context_line":"                   self.driver_prefix + \u0027_sparsed_volumes\u0027):"},{"line_number":246,"context_line":"            self._create_sparsed_file(self.local_path(volume), new_size)"},{"line_number":247,"context_line":"        else:"},{"line_number":248,"context_line":"            block_size_mb \u003d 1"},{"line_number":249,"context_line":"            block_count \u003d ((new_size - volume[\u0027size\u0027]) * units.Gi /"}],"source_content_type":"text/x-python","patch_set":6,"id":"9abb7d3a_527ac924","line":246,"in_reply_to":"9abb7d3a_72fc2db8","updated":"2016-06-01 20:32:24.000000000","message":"Hmm, didn\u0027t think of the case when method is changed, fixed.","commit_id":"c3cf47b605b6cd59310923f8300876c3879759f7"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"fc62b8c1fdb66cfa2e49368cfbe1fddfba0eaad3","unresolved":false,"context_lines":[{"line_number":16,"context_line":":mod:`nexenta.nfs` -- Driver to store volumes on NexentaStor Appliance."},{"line_number":17,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":".. automodule:: nexenta.nfs"},{"line_number":20,"context_line":"\"\"\""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"import hashlib"}],"source_content_type":"text/x-python","patch_set":7,"id":"7aa08908_1f4c5341","line":19,"updated":"2016-06-10 21:15:11.000000000","message":"Is that what was intended? Why pull in parent docs?\n\nNot sure why we need these mod and automodule links pulled in. I think it would be better to just leave them out and let things be documented as normal.","commit_id":"ab4801deb08e0d7aabaa385bdbc2e944599da4b0"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"1ca783db11ec021bb7739ab4e60f981b3ae377f0","unresolved":false,"context_lines":[{"line_number":16,"context_line":":mod:`nexenta.nfs` -- Driver to store volumes on NexentaStor Appliance."},{"line_number":17,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":".. automodule:: nexenta.nfs"},{"line_number":20,"context_line":"\"\"\""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"import hashlib"}],"source_content_type":"text/x-python","patch_set":7,"id":"7aa08908_404c3370","line":19,"in_reply_to":"7aa08908_1f4c5341","updated":"2016-06-11 00:58:49.000000000","message":"you\u0027re right, that was an accident (","commit_id":"ab4801deb08e0d7aabaa385bdbc2e944599da4b0"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"1d4a42f3ced9b27722c4a4b96ed74a6eca14f2e7","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    \"\"\"Executes volume driver commands on Nexenta Appliance."},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    Version history:"},{"line_number":39,"context_line":"        1.1.0 - nas_ip option is renamed to nas_host."},{"line_number":40,"context_line":"        1.0.0 - Initial driver version."},{"line_number":41,"context_line":"    \"\"\""},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_36b06e43","line":39,"updated":"2016-06-22 19:15:10.000000000","message":"This does not seem related to this patch.","commit_id":"23cc301d8c10e7a86b5ea459e82828b78d640a28"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"431099505a4610122d622990e218b9d7348d4ff6","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    \"\"\"Executes volume driver commands on Nexenta Appliance."},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    Version history:"},{"line_number":39,"context_line":"        1.1.0 - nas_ip option is renamed to nas_host."},{"line_number":40,"context_line":"        1.0.0 - Initial driver version."},{"line_number":41,"context_line":"    \"\"\""},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_1a67e5b7","line":39,"in_reply_to":"3aaa91ec_36b06e43","updated":"2016-06-24 15:48:30.000000000","message":"correct,will remove","commit_id":"23cc301d8c10e7a86b5ea459e82828b78d640a28"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"889ee0fc240270e3ef74271bafcf47b9d74c8383","unresolved":false,"context_lines":[{"line_number":227,"context_line":"                    \u0027Volume %s does not exist on appliance\u0027, \u0027/\u0027.join("},{"line_number":228,"context_line":"                        [pool, fs]))"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    def extend_volume(self, volume, new_size):"},{"line_number":231,"context_line":"        \"\"\"Extend an existing volume."},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        :param volume: volume reference"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_7e742067","line":230,"range":{"start_line":230,"start_character":7,"end_line":230,"end_character":22},"updated":"2016-06-24 14:48:30.000000000","message":"This is implemented in the parent class!","commit_id":"23cc301d8c10e7a86b5ea459e82828b78d640a28"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"e21ba0e8f7e4b2f6628323bb35a2b9ff5b491ab4","unresolved":false,"context_lines":[{"line_number":227,"context_line":"                    \u0027Volume %s does not exist on appliance\u0027, \u0027/\u0027.join("},{"line_number":228,"context_line":"                        [pool, fs]))"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    def extend_volume(self, volume, new_size):"},{"line_number":231,"context_line":"        \"\"\"Extend an existing volume."},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        :param volume: volume reference"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_f16b171c","line":230,"range":{"start_line":230,"start_character":7,"end_line":230,"end_character":22},"in_reply_to":"3aaa91ec_7ad38960","updated":"2016-06-24 18:49:20.000000000","message":"They are different but do the same thing. It wasn\u0027t, the CI wouldn\u0027t be passing tempest the extend tests.","commit_id":"23cc301d8c10e7a86b5ea459e82828b78d640a28"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"756f789fdc546e8a6ab0274008e6aafa2b2c6328","unresolved":false,"context_lines":[{"line_number":227,"context_line":"                    \u0027Volume %s does not exist on appliance\u0027, \u0027/\u0027.join("},{"line_number":228,"context_line":"                        [pool, fs]))"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    def extend_volume(self, volume, new_size):"},{"line_number":231,"context_line":"        \"\"\"Extend an existing volume."},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        :param volume: volume reference"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_7ad38960","line":230,"range":{"start_line":230,"start_character":7,"end_line":230,"end_character":22},"in_reply_to":"3aaa91ec_7e742067","updated":"2016-06-24 15:43:46.000000000","message":"it is kind of different, isn\u0027t it ?","commit_id":"23cc301d8c10e7a86b5ea459e82828b78d640a28"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"54db342ce4de76d93c7c168e415eb624415d26e5","unresolved":false,"context_lines":[{"line_number":227,"context_line":"                    \u0027Volume %s does not exist on appliance\u0027, \u0027/\u0027.join("},{"line_number":228,"context_line":"                        [pool, fs]))"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    def extend_volume(self, volume, new_size):"},{"line_number":231,"context_line":"        \"\"\"Extend an existing volume."},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        :param volume: volume reference"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_8cb43582","line":230,"range":{"start_line":230,"start_character":7,"end_line":230,"end_character":22},"in_reply_to":"3aaa91ec_d4408909","updated":"2016-06-30 18:05:23.000000000","message":"Hmm, ok, in this case its fine.","commit_id":"23cc301d8c10e7a86b5ea459e82828b78d640a28"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"3950524b7159725679183ee557714759a61d1a05","unresolved":false,"context_lines":[{"line_number":227,"context_line":"                    \u0027Volume %s does not exist on appliance\u0027, \u0027/\u0027.join("},{"line_number":228,"context_line":"                        [pool, fs]))"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    def extend_volume(self, volume, new_size):"},{"line_number":231,"context_line":"        \"\"\"Extend an existing volume."},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        :param volume: volume reference"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_d4408909","line":230,"range":{"start_line":230,"start_character":7,"end_line":230,"end_character":22},"in_reply_to":"3aaa91ec_f16b171c","updated":"2016-06-28 19:41:39.000000000","message":"in the parent class it only uses qemu-img to resize, while we want to separate cases of thin/thick provisioning to use different tools.","commit_id":"23cc301d8c10e7a86b5ea459e82828b78d640a28"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"1d4a42f3ced9b27722c4a4b96ed74a6eca14f2e7","unresolved":false,"context_lines":[{"line_number":250,"context_line":"                \u0027of\u003d%s\u0027 % self.local_path(volume),"},{"line_number":251,"context_line":"                \u0027bs\u003d%dM\u0027 % block_size_mb,"},{"line_number":252,"context_line":"                \u0027count\u003d%d\u0027 % block_count,"},{"line_number":253,"context_line":"                run_as_root\u003dTrue)"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    def create_snapshot(self, snapshot):"},{"line_number":256,"context_line":"        \"\"\"Creates a snapshot."}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_1692929f","line":253,"updated":"2016-06-22 19:15:10.000000000","message":"Why is this always run as root rather than using the self._execute_as_root flag like the above command?","commit_id":"23cc301d8c10e7a86b5ea459e82828b78d640a28"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"756f789fdc546e8a6ab0274008e6aafa2b2c6328","unresolved":false,"context_lines":[{"line_number":250,"context_line":"                \u0027of\u003d%s\u0027 % self.local_path(volume),"},{"line_number":251,"context_line":"                \u0027bs\u003d%dM\u0027 % block_size_mb,"},{"line_number":252,"context_line":"                \u0027count\u003d%d\u0027 % block_count,"},{"line_number":253,"context_line":"                run_as_root\u003dTrue)"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    def create_snapshot(self, snapshot):"},{"line_number":256,"context_line":"        \"\"\"Creates a snapshot."}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_3ae74141","line":253,"in_reply_to":"3aaa91ec_1692929f","updated":"2016-06-24 15:43:46.000000000","message":"that is a good question...","commit_id":"23cc301d8c10e7a86b5ea459e82828b78d640a28"},{"author":{"_account_id":14305,"name":"Yuriy Nesenenko","email":"ynesenenko@mirantis.com","username":"yuriy_n"},"change_message_id":"c17f07cdefb56c54034172b2d37a5939be3aecae","unresolved":false,"context_lines":[{"line_number":234,"context_line":"        \"\"\""},{"line_number":235,"context_line":"        LOG.info(_LI(\u0027Extending volume: %(id)s New size: %(size)s GB\u0027),"},{"line_number":236,"context_line":"                 {\u0027id\u0027: volume[\u0027id\u0027], \u0027size\u0027: new_size})"},{"line_number":237,"context_line":"        if getattr(self.configuration,"},{"line_number":238,"context_line":"                   self.driver_prefix + \u0027_sparsed_volumes\u0027):"},{"line_number":239,"context_line":"            self._execute(\u0027truncate\u0027, \u0027-s\u0027, \u0027%sG\u0027 % new_size,"},{"line_number":240,"context_line":"                          self.local_path(volume),"}],"source_content_type":"text/x-python","patch_set":10,"id":"1aa78d24_daa98226","line":237,"range":{"start_line":237,"start_character":24,"end_line":237,"end_character":37},"updated":"2016-07-08 10:52:43.000000000","message":"It should be: \"if hasattr(self.configuration, ...):\" otherwise it\u0027will raise AttributeError if driver is not set correctly in config.","commit_id":"fa40b2eebad0d0e7143b8dd0d58e261260b32131"},{"author":{"_account_id":14305,"name":"Yuriy Nesenenko","email":"ynesenenko@mirantis.com","username":"yuriy_n"},"change_message_id":"ecf91f34cf3b72cfce3f46a8a57aeef3dcd8ba75","unresolved":false,"context_lines":[{"line_number":234,"context_line":"        \"\"\""},{"line_number":235,"context_line":"        LOG.info(_LI(\u0027Extending volume: %(id)s New size: %(size)s GB\u0027),"},{"line_number":236,"context_line":"                 {\u0027id\u0027: volume[\u0027id\u0027], \u0027size\u0027: new_size})"},{"line_number":237,"context_line":"        if getattr(self.configuration,"},{"line_number":238,"context_line":"                   self.driver_prefix + \u0027_sparsed_volumes\u0027):"},{"line_number":239,"context_line":"            self._execute(\u0027truncate\u0027, \u0027-s\u0027, \u0027%sG\u0027 % new_size,"},{"line_number":240,"context_line":"                          self.local_path(volume),"}],"source_content_type":"text/x-python","patch_set":10,"id":"1aa78d24_e36776e8","line":237,"range":{"start_line":237,"start_character":24,"end_line":237,"end_character":37},"in_reply_to":"1aa78d24_1862edd8","updated":"2016-07-08 13:12:51.000000000","message":"I don\u0027t think that\u0027s a good idea to copy a wrong aproach as on https://github.com/openstack/cinder/blob/master/cinder/volume/drivers/remotefs.py#L252 That\u0027s the same story.","commit_id":"fa40b2eebad0d0e7143b8dd0d58e261260b32131"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"3b16fe706f54b03e8b69fe4fb43efb053dbc4070","unresolved":false,"context_lines":[{"line_number":234,"context_line":"        \"\"\""},{"line_number":235,"context_line":"        LOG.info(_LI(\u0027Extending volume: %(id)s New size: %(size)s GB\u0027),"},{"line_number":236,"context_line":"                 {\u0027id\u0027: volume[\u0027id\u0027], \u0027size\u0027: new_size})"},{"line_number":237,"context_line":"        if getattr(self.configuration,"},{"line_number":238,"context_line":"                   self.driver_prefix + \u0027_sparsed_volumes\u0027):"},{"line_number":239,"context_line":"            self._execute(\u0027truncate\u0027, \u0027-s\u0027, \u0027%sG\u0027 % new_size,"},{"line_number":240,"context_line":"                          self.local_path(volume),"}],"source_content_type":"text/x-python","patch_set":10,"id":"1aa78d24_1862edd8","line":237,"range":{"start_line":237,"start_character":24,"end_line":237,"end_character":37},"in_reply_to":"1aa78d24_daa98226","updated":"2016-07-08 12:57:54.000000000","message":"this is the same as in RemoteFS _do_create method...","commit_id":"fa40b2eebad0d0e7143b8dd0d58e261260b32131"},{"author":{"_account_id":14305,"name":"Yuriy Nesenenko","email":"ynesenenko@mirantis.com","username":"yuriy_n"},"change_message_id":"c077b410aa6c545468c2770b10d4983017cd8f8b","unresolved":false,"context_lines":[{"line_number":234,"context_line":"        \"\"\""},{"line_number":235,"context_line":"        LOG.info(_LI(\u0027Extending volume: %(id)s New size: %(size)s GB\u0027),"},{"line_number":236,"context_line":"                 {\u0027id\u0027: volume[\u0027id\u0027], \u0027size\u0027: new_size})"},{"line_number":237,"context_line":"        if getattr(self.configuration,"},{"line_number":238,"context_line":"                   self.driver_prefix + \u0027_sparsed_volumes\u0027):"},{"line_number":239,"context_line":"            self._execute(\u0027truncate\u0027, \u0027-s\u0027, \u0027%sG\u0027 % new_size,"},{"line_number":240,"context_line":"                          self.local_path(volume),"}],"source_content_type":"text/x-python","patch_set":10,"id":"1aa78d24_7e167956","line":237,"range":{"start_line":237,"start_character":24,"end_line":237,"end_character":37},"in_reply_to":"1aa78d24_e36776e8","updated":"2016-07-08 13:49:29.000000000","message":"In this case it will be enough just: \"if self.sparsed_volumes:\" according to https://github.com/openstack/cinder/blob/master/cinder/volume/drivers/nexenta/ns5/nfs.py#L63","commit_id":"fa40b2eebad0d0e7143b8dd0d58e261260b32131"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"45ebffc81ee4fec4e0797e77a905804aa9c068af","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    \"\"\"Executes volume driver commands on Nexenta Appliance."},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    Version history:"},{"line_number":39,"context_line":"        1.1.0 - nas_ip option is renamed to nas_host."},{"line_number":40,"context_line":"        1.0.0 - Initial driver version."},{"line_number":41,"context_line":"    \"\"\""},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"dada55a8_39734982","line":39,"range":{"start_line":39,"start_character":8,"end_line":39,"end_character":53},"updated":"2016-07-19 12:02:47.000000000","message":"When/where was this done?","commit_id":"1c2eba152c9f152e5288b26b35b14670a97caaa1"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"c1a0c74c3ffc0f344281a8fabcd500ac797c39f6","unresolved":false,"context_lines":[{"line_number":328,"context_line":"            raise"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"        if volume[\u0027size\u0027] \u003e snapshot[\u0027volume_size\u0027]:"},{"line_number":331,"context_line":"            self.extend_volume(volume, volume[\u0027size\u0027])"},{"line_number":332,"context_line":"        return {\u0027provider_location\u0027: volume[\u0027provider_location\u0027]}"},{"line_number":333,"context_line":""},{"line_number":334,"context_line":"    def create_cloned_volume(self, volume, src_vref):"}],"source_content_type":"text/x-python","patch_set":17,"id":"dada55a8_2cdc9211","line":331,"updated":"2016-07-25 17:05:49.000000000","message":"Block count calculated in line 244 will be 0 in this case.\n\nYou may need to set the volume size to its current size in the backend before calling extend_volume.","commit_id":"d8e1a4a121592673844f2d1c462eed839d8edf03"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"e9186748b1096e700f40730e53168a61e4b3ca5b","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    \"\"\"Executes volume driver commands on Nexenta Appliance."},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    Version history:"},{"line_number":39,"context_line":"        1.1.0 - nas_ip option is renamed to nas_host."},{"line_number":40,"context_line":"        1.0.0 - Initial driver version."},{"line_number":41,"context_line":"    \"\"\""},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"1ac06dbe_9808c193","line":39,"updated":"2016-08-19 12:13:59.000000000","message":"You can also add \"support for extend volume\"","commit_id":"9a6c3f8799e9c97ad5b156005eaa994b44f681d1"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"e9186748b1096e700f40730e53168a61e4b3ca5b","unresolved":false,"context_lines":[{"line_number":241,"context_line":"                          run_as_root\u003dself._execute_as_root)"},{"line_number":242,"context_line":"        else:"},{"line_number":243,"context_line":"            block_size_mb \u003d 1"},{"line_number":244,"context_line":"            block_count \u003d ((new_size - volume[\u0027size\u0027]) * units.Gi /"},{"line_number":245,"context_line":"                           (block_size_mb * units.Mi))"},{"line_number":246,"context_line":"            self._execute("},{"line_number":247,"context_line":"                \u0027dd\u0027, \u0027if\u003d/dev/zero\u0027,"}],"source_content_type":"text/x-python","patch_set":18,"id":"1ac06dbe_18adf131","line":244,"updated":"2016-08-19 12:13:59.000000000","message":"This will be a float in python 3.","commit_id":"9a6c3f8799e9c97ad5b156005eaa994b44f681d1"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"bd74d3816764804240b1ee80e163c01deb12011e","unresolved":false,"context_lines":[{"line_number":240,"context_line":"        :param new_size: volume new size in GB"},{"line_number":241,"context_line":"        \"\"\""},{"line_number":242,"context_line":"        LOG.info(_LI(\u0027Extending volume: %(id)s New size: %(size)s GB\u0027),"},{"line_number":243,"context_line":"                 {\u0027id\u0027: volume[\u0027id\u0027], \u0027size\u0027: new_size})"},{"line_number":244,"context_line":"        if self.sparsed_volumes:"},{"line_number":245,"context_line":"            self._execute(\u0027truncate\u0027, \u0027-s\u0027, \u0027%sG\u0027 % new_size,"},{"line_number":246,"context_line":"                          self.local_path(volume),"}],"source_content_type":"text/x-python","patch_set":20,"id":"1ac06dbe_63187076","line":243,"range":{"start_line":243,"start_character":24,"end_line":243,"end_character":36},"updated":"2016-08-25 12:08:04.000000000","message":"I think for new code we should attribute notation.\n\nvolume.id","commit_id":"a60e0514c1bca959b2cdaf822aa65d78d7001adb"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"bd74d3816764804240b1ee80e163c01deb12011e","unresolved":false,"context_lines":[{"line_number":251,"context_line":"                           (block_size_mb * units.Mi))"},{"line_number":252,"context_line":"            self._execute("},{"line_number":253,"context_line":"                \u0027dd\u0027, \u0027if\u003d/dev/zero\u0027,"},{"line_number":254,"context_line":"                \u0027seek\u003d%d\u0027 % (volume[\u0027size\u0027] * units.Gi / block_size_mb),"},{"line_number":255,"context_line":"                \u0027of\u003d%s\u0027 % self.local_path(volume),"},{"line_number":256,"context_line":"                \u0027bs\u003d%dM\u0027 % block_size_mb,"},{"line_number":257,"context_line":"                \u0027count\u003d%d\u0027 % block_count,"}],"source_content_type":"text/x-python","patch_set":20,"id":"1ac06dbe_c3b5e4d0","line":254,"range":{"start_line":254,"start_character":55,"end_line":254,"end_character":70},"updated":"2016-08-25 12:08:04.000000000","message":"what should be the value of seek? Is it number of bytes or block count?","commit_id":"a60e0514c1bca959b2cdaf822aa65d78d7001adb"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"62c509fd79a5ddad03f7570002b663b717668847","unresolved":false,"context_lines":[{"line_number":251,"context_line":"                           (block_size_mb * units.Mi))"},{"line_number":252,"context_line":"            self._execute("},{"line_number":253,"context_line":"                \u0027dd\u0027, \u0027if\u003d/dev/zero\u0027,"},{"line_number":254,"context_line":"                \u0027seek\u003d%d\u0027 % (volume[\u0027size\u0027] * units.Gi / block_size_mb),"},{"line_number":255,"context_line":"                \u0027of\u003d%s\u0027 % self.local_path(volume),"},{"line_number":256,"context_line":"                \u0027bs\u003d%dM\u0027 % block_size_mb,"},{"line_number":257,"context_line":"                \u0027count\u003d%d\u0027 % block_count,"}],"source_content_type":"text/x-python","patch_set":20,"id":"1ac06dbe_72b9542e","line":254,"range":{"start_line":254,"start_character":55,"end_line":254,"end_character":70},"in_reply_to":"1ac06dbe_c3b5e4d0","updated":"2016-08-25 13:18:41.000000000","message":"number of blocks","commit_id":"a60e0514c1bca959b2cdaf822aa65d78d7001adb"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"aecc9ce9563151ec286df651d57bb178166c0d77","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from cinder import db"},{"line_number":23,"context_line":"from cinder import exception"},{"line_number":24,"context_line":"from cinder.i18n import _, _LE, _LI, _LW"},{"line_number":25,"context_line":"from cinder import interface"},{"line_number":26,"context_line":"from cinder.volume.drivers.nexenta.ns5 import jsonrpc"},{"line_number":27,"context_line":"from cinder.volume.drivers.nexenta import options"},{"line_number":28,"context_line":"from cinder.volume.drivers.nexenta import utils"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa7ab95a_0f496ab7","side":"PARENT","line":25,"updated":"2016-09-01 19:34:44.000000000","message":"Don\u0027t remove this.","commit_id":"ca9038628e172ae9e6686277206a13b0009fb436"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"aecc9ce9563151ec286df651d57bb178166c0d77","unresolved":false,"context_lines":[{"line_number":32,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"@interface.volumedriver"},{"line_number":36,"context_line":"class NexentaNfsDriver(nfs.NfsDriver):  # pylint: disable\u003dR0921"},{"line_number":37,"context_line":"    \"\"\"Executes volume driver commands on Nexenta Appliance."},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"fa7ab95a_cf522267","side":"PARENT","line":35,"updated":"2016-09-01 19:34:44.000000000","message":"Don\u0027t remove this.","commit_id":"ca9038628e172ae9e6686277206a13b0009fb436"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"aecc9ce9563151ec286df651d57bb178166c0d77","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    VERSION \u003d VERSION"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    # ThirdPartySystems wiki page"},{"line_number":48,"context_line":"    CI_WIKI_NAME \u003d \"Nexenta_CI\""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":51,"context_line":"        super(NexentaNfsDriver, self).__init__(*args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa7ab95a_6f57565a","side":"PARENT","line":48,"updated":"2016-09-01 19:34:44.000000000","message":"Don\u0027t remove this.  This is needed to generate driver list.","commit_id":"ca9038628e172ae9e6686277206a13b0009fb436"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"aecc9ce9563151ec286df651d57bb178166c0d77","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    \"\"\"Executes volume driver commands on Nexenta Appliance."},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    Version history:"},{"line_number":39,"context_line":"        1.1.0 - nas_ip option is renamed to nas_host,"},{"line_number":40,"context_line":"                support for extend volume."},{"line_number":41,"context_line":"        1.0.0 - Initial driver version."},{"line_number":42,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":22,"id":"fa7ab95a_af031e41","line":39,"updated":"2016-09-01 19:34:44.000000000","message":"I don\u0027t see nas_ip renamed to nas_host in this patch?","commit_id":"c98a908a662ac97424c5eb3880560b5733881b8b"}]}
