)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9c2eccf1b627f59cb993d2911a445653e9b4355b","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Nexenta: Added ZFS cleanup in NexentaStor4 iSCSI driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"ZFS clone from snapshot operation creates a dependency between the clone and"},{"line_number":10,"context_line":"original dataset. Therefore cleanup operation cannot delete volumes that have"},{"line_number":11,"context_line":"dependencies. Those will be automatically cleaned up when dependencies no"},{"line_number":12,"context_line":"longer exist."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"1a6eadb0_4b7760d4","line":9,"updated":"2016-12-12 19:51:33.000000000","message":"Please wrap each line at 72 characters.","commit_id":"fcf4fbe93e7cabe5648eae7a834e6ef11053e91c"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9c2eccf1b627f59cb993d2911a445653e9b4355b","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Nexenta: Added ZFS cleanup in NexentaStor4 iSCSI driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"ZFS clone from snapshot operation creates a dependency between the clone and"},{"line_number":10,"context_line":"original dataset. Therefore cleanup operation cannot delete volumes that have"},{"line_number":11,"context_line":"dependencies. Those will be automatically cleaned up when dependencies no"},{"line_number":12,"context_line":"longer exist."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"1a6eadb0_6b741ccf","line":10,"updated":"2016-12-12 19:51:33.000000000","message":"Same","commit_id":"fcf4fbe93e7cabe5648eae7a834e6ef11053e91c"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9c2eccf1b627f59cb993d2911a445653e9b4355b","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"ZFS clone from snapshot operation creates a dependency between the clone and"},{"line_number":10,"context_line":"original dataset. Therefore cleanup operation cannot delete volumes that have"},{"line_number":11,"context_line":"dependencies. Those will be automatically cleaned up when dependencies no"},{"line_number":12,"context_line":"longer exist."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: If3279e6f62ba7c43f3821ccf3b126fd1b8b91a88"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"1a6eadb0_ab7e34ac","line":11,"updated":"2016-12-12 19:51:33.000000000","message":"Same","commit_id":"fcf4fbe93e7cabe5648eae7a834e6ef11053e91c"}],"cinder/volume/drivers/nexenta/iscsi.py":[{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"0b7d64289783bd8ae99ff65277364c1ad758716c","unresolved":false,"context_lines":[{"line_number":688,"context_line":"    def _collect_garbage(self, name):"},{"line_number":689,"context_line":"        # clear name of pool and volume group if exists"},{"line_number":690,"context_line":"        if name:"},{"line_number":691,"context_line":"            name \u003d name.split(\u0027{}/\u0027.format("},{"line_number":692,"context_line":"                self.configuration.nexenta_volume))[-1]"},{"line_number":693,"context_line":"            if name in self.deleted_volumes:"},{"line_number":694,"context_line":"                object_to_destroy \u003d self._get_zvol_name(name)"},{"line_number":695,"context_line":"                if \u0027@\u0027 in name:  # it\u0027s a snapshot:"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a95cdbc_94606837","line":692,"range":{"start_line":691,"start_character":12,"end_line":692,"end_character":55},"updated":"2016-10-06 02:14:46.000000000","message":"This logic here is implicit and hard to review.  Looks like a internal knowledge(naming convention) to your driver.  Can you make a helper function out of it?","commit_id":"af8a9fc33360c978f4da102f9e9059dd2d3f9b3d"},{"author":{"_account_id":23602,"name":"Michael Dovgal","email":"dovgalmichael@gmail.com","username":"mdovgal"},"change_message_id":"7530022fa46d4ce0581a2bcd977b7ba314977be1","unresolved":false,"context_lines":[{"line_number":692,"context_line":"        :param zfs_object: full path to a volume or a snapshot"},{"line_number":693,"context_line":"        \"\"\""},{"line_number":694,"context_line":"        if zfs_object and zfs_object in self._needless_objects:"},{"line_number":695,"context_line":"            sp \u003d zfs_object.split(\u0027/\u0027)"},{"line_number":696,"context_line":"            path \u003d \u0027/\u0027.join(sp[:-1])"},{"line_number":697,"context_line":"            name \u003d sp[-1]"},{"line_number":698,"context_line":"            if \u0027@\u0027 in name:  # it\u0027s a snapshot:"},{"line_number":699,"context_line":"                volume, snap \u003d name.split(\u0027@\u0027)"},{"line_number":700,"context_line":"                parent \u003d \u0027/\u0027.join((path, volume))"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a71b18c_99078d17","line":697,"range":{"start_line":695,"start_character":0,"end_line":697,"end_character":25},"updated":"2016-12-05 10:37:29.000000000","message":"-1\nwhy don\u0027t we use os.path library here? It will be clearer","commit_id":"fcf4fbe93e7cabe5648eae7a834e6ef11053e91c"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9c2eccf1b627f59cb993d2911a445653e9b4355b","unresolved":false,"context_lines":[{"line_number":702,"context_line":"                    self.nms.snapshot.destroy(zfs_object, \u0027\u0027)"},{"line_number":703,"context_line":"                except exception.NexentaException as exc:"},{"line_number":704,"context_line":"                    LOG.debug(\u0027Error occurred while trying to delete a \u0027"},{"line_number":705,"context_line":"                              \u0027snapshot: {}\u0027.format(exc))"},{"line_number":706,"context_line":"                    return"},{"line_number":707,"context_line":"            else:"},{"line_number":708,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a6eadb0_abf9d44f","line":705,"updated":"2016-12-12 19:51:33.000000000","message":"Please use the %s style format here.","commit_id":"fcf4fbe93e7cabe5648eae7a834e6ef11053e91c"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9c2eccf1b627f59cb993d2911a445653e9b4355b","unresolved":false,"context_lines":[{"line_number":716,"context_line":"                    self.nms.zvol.destroy(zfs_object, \u0027\u0027)"},{"line_number":717,"context_line":"                except exception.NexentaException as exc:"},{"line_number":718,"context_line":"                    LOG.debug(\u0027Error occurred while trying to delete a \u0027"},{"line_number":719,"context_line":"                              \u0027volume: {}\u0027.format(exc))"},{"line_number":720,"context_line":"                    return"},{"line_number":721,"context_line":"            self._needless_objects.remove(zfs_object)"},{"line_number":722,"context_line":"            self._collect_garbage(parent)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a6eadb0_eb990c21","line":719,"updated":"2016-12-12 19:51:33.000000000","message":"Same","commit_id":"fcf4fbe93e7cabe5648eae7a834e6ef11053e91c"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bd693780a3aece1eb055e27e14cc957a6e9cfc9e","unresolved":false,"context_lines":[{"line_number":684,"context_line":"        }"},{"line_number":685,"context_line":""},{"line_number":686,"context_line":"    def _collect_garbage(self, zfs_object):"},{"line_number":687,"context_line":"        \"\"\"Destroys ZFS parent objects"},{"line_number":688,"context_line":""},{"line_number":689,"context_line":"        Recursively destroys ZFS parent volumes and snapshots if they are"},{"line_number":690,"context_line":"        marked as garbage"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a6eadb0_86cce136","line":687,"updated":"2016-12-13 17:30:35.000000000","message":"nit: Add a period at the end if you need to do another update.","commit_id":"b224ae8b8665e2302731c565a50eb6e56be367dc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bd693780a3aece1eb055e27e14cc957a6e9cfc9e","unresolved":false,"context_lines":[{"line_number":722,"context_line":"            self._collect_garbage(parent)"},{"line_number":723,"context_line":""},{"line_number":724,"context_line":"    def _mark_as_garbage(self, zfs_object):"},{"line_number":725,"context_line":"        \"\"\"Puts ZFS object into list for further removal"},{"line_number":726,"context_line":""},{"line_number":727,"context_line":"        :param zfs_object: full path to a volume or a snapshot"},{"line_number":728,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"1a6eadb0_06d9b1f3","line":725,"updated":"2016-12-13 17:30:35.000000000","message":"Same.","commit_id":"b224ae8b8665e2302731c565a50eb6e56be367dc"}]}
