)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6043,"name":"Kurt Martin","email":"kurt.f.martin@hpe.com","username":"kurt-f-martin"},"change_message_id":"579c25417481e078ab24b07c6092504e839b9a19","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Cache volumes will be removed if it has no clone. Custom schemas"},{"line_number":14,"context_line":"and WebDAV properties are used to store cache volumes\u0027 properties."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I06b21a3f760abf540246971c00d923eda8fe57e3"},{"line_number":17,"context_line":"Implements: blueprint oracle-zfssa-local-cache"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"1a4dcd0f_a928ef97","line":15,"updated":"2015-08-12 22:43:40.000000000","message":"DocImpact flag should be added as you are adding new config options","commit_id":"69ab02f148d7ebf65f4716c772deaf62fedc7821"}],"cinder/tests/unit/test_zfssa.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"69497f4f9aaa89e4935181c6590bd14d0bb65500","unresolved":false,"context_lines":[{"line_number":349,"context_line":"                                              img_service))"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"        # Exception raised in _verify_cache_image"},{"line_number":352,"context_line":"        self.drv._verify_cache_volume.side_effect \u003d \\"},{"line_number":353,"context_line":"            exception.VolumeBackendAPIException(\u0027fakeerror\u0027)"},{"line_number":354,"context_line":"        self.assertEqual((None, False),"},{"line_number":355,"context_line":"                         self.drv.clone_image(mock.Mock(), self.test_vol,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_a8715779","line":352,"updated":"2015-08-14 21:04:09.000000000","message":"Use () instead of \\","commit_id":"2ee16a71d2e10111ced0dfc3bb71035058151465"},{"author":{"_account_id":13524,"name":"Diem Tran","email":"diem.tran@oracle.com","username":"dttran"},"change_message_id":"6611f08cdbe39c813de48bd316ca075bd6205621","unresolved":false,"context_lines":[{"line_number":349,"context_line":"                                              img_service))"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"        # Exception raised in _verify_cache_image"},{"line_number":352,"context_line":"        self.drv._verify_cache_volume.side_effect \u003d \\"},{"line_number":353,"context_line":"            exception.VolumeBackendAPIException(\u0027fakeerror\u0027)"},{"line_number":354,"context_line":"        self.assertEqual((None, False),"},{"line_number":355,"context_line":"                         self.drv.clone_image(mock.Mock(), self.test_vol,"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa1b9901_9c7dc5b3","line":352,"in_reply_to":"1a4dcd0f_a8715779","updated":"2015-08-18 19:35:09.000000000","message":"Done","commit_id":"2ee16a71d2e10111ced0dfc3bb71035058151465"},{"author":{"_account_id":11509,"name":"Juan Zuluaga","email":"juan.c.zuluaga@oracle.com","username":"juzuluag"},"change_message_id":"a080bdca86fcb79382f8fecc9303381a1a1c34eb","unresolved":false,"context_lines":[{"line_number":176,"context_line":"            lcfg.zfssa_target_group,"},{"line_number":177,"context_line":"            mock.ANY)"},{"line_number":178,"context_line":"        self.drv.delete_volume(self.test_vol)"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"        self.drv.zfssa.get_lun.assert_called_once_with(lcfg.zfssa_pool,"},{"line_number":181,"context_line":"                                                       lcfg.zfssa_project,"},{"line_number":182,"context_line":"                                                       self.test_vol[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_37d5fde3","line":179,"updated":"2015-08-21 14:58:10.000000000","message":"seems like you added an extra line","commit_id":"ac62a034b13091bbdc278c60c3380947552a9a03"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a06b51d99ca5c96ae4eb3d0bbc72fd161d23e5d6","unresolved":false,"context_lines":[{"line_number":421,"context_line":""},{"line_number":422,"context_line":"    def test_verify_cache_vol_no_cache_snap(self):"},{"line_number":423,"context_line":"        snap_name \u003d \u0027image-%s\u0027 % small_img[\u0027id\u0027]"},{"line_number":424,"context_line":"        self.drv.zfssa.get_lun_snapshot.side_effect \u003d \\"},{"line_number":425,"context_line":"            exception.SnapshotNotFound(snapshot_id\u003dsnap_name)"},{"line_number":426,"context_line":"        self.assertRaises(exception.VolumeBackendAPIException,"},{"line_number":427,"context_line":"                          self.drv._verify_cache_volume,"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa1b9901_23afdf95","line":424,"updated":"2015-08-22 13:44:27.000000000","message":"Please use () instead of \\","commit_id":"4da476a72dd57bd63b59d80a7efb8c1d1219de73"},{"author":{"_account_id":13524,"name":"Diem Tran","email":"diem.tran@oracle.com","username":"dttran"},"change_message_id":"b30524670dce06ad36464f6f43e46689f96019a4","unresolved":false,"context_lines":[{"line_number":421,"context_line":""},{"line_number":422,"context_line":"    def test_verify_cache_vol_no_cache_snap(self):"},{"line_number":423,"context_line":"        snap_name \u003d \u0027image-%s\u0027 % small_img[\u0027id\u0027]"},{"line_number":424,"context_line":"        self.drv.zfssa.get_lun_snapshot.side_effect \u003d \\"},{"line_number":425,"context_line":"            exception.SnapshotNotFound(snapshot_id\u003dsnap_name)"},{"line_number":426,"context_line":"        self.assertRaises(exception.VolumeBackendAPIException,"},{"line_number":427,"context_line":"                          self.drv._verify_cache_volume,"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa1b9901_0c442072","line":424,"in_reply_to":"fa1b9901_23afdf95","updated":"2015-08-24 15:34:58.000000000","message":"Done","commit_id":"4da476a72dd57bd63b59d80a7efb8c1d1219de73"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a06b51d99ca5c96ae4eb3d0bbc72fd161d23e5d6","unresolved":false,"context_lines":[{"line_number":678,"context_line":"                                              img_service))"},{"line_number":679,"context_line":""},{"line_number":680,"context_line":"        # Exception raised in _verify_cache_image"},{"line_number":681,"context_line":"        self.drv._verify_cache_volume.side_effect \u003d \\"},{"line_number":682,"context_line":"            exception.VolumeBackendAPIException(\u0027fakeerror\u0027)"},{"line_number":683,"context_line":"        self.assertEqual((None, False),"},{"line_number":684,"context_line":"                         self.drv.clone_image(mock.Mock(), self.test_vol,"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa1b9901_839eeb61","line":681,"updated":"2015-08-22 13:44:27.000000000","message":"Here too","commit_id":"4da476a72dd57bd63b59d80a7efb8c1d1219de73"},{"author":{"_account_id":13524,"name":"Diem Tran","email":"diem.tran@oracle.com","username":"dttran"},"change_message_id":"b30524670dce06ad36464f6f43e46689f96019a4","unresolved":false,"context_lines":[{"line_number":678,"context_line":"                                              img_service))"},{"line_number":679,"context_line":""},{"line_number":680,"context_line":"        # Exception raised in _verify_cache_image"},{"line_number":681,"context_line":"        self.drv._verify_cache_volume.side_effect \u003d \\"},{"line_number":682,"context_line":"            exception.VolumeBackendAPIException(\u0027fakeerror\u0027)"},{"line_number":683,"context_line":"        self.assertEqual((None, False),"},{"line_number":684,"context_line":"                         self.drv.clone_image(mock.Mock(), self.test_vol,"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa1b9901_cc5e2845","line":681,"in_reply_to":"fa1b9901_839eeb61","updated":"2015-08-24 15:34:58.000000000","message":"Done","commit_id":"4da476a72dd57bd63b59d80a7efb8c1d1219de73"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a06b51d99ca5c96ae4eb3d0bbc72fd161d23e5d6","unresolved":false,"context_lines":[{"line_number":776,"context_line":"                                            small_img[\u0027id\u0027])"},{"line_number":777,"context_line":""},{"line_number":778,"context_line":"    def test_create_cache_vol_negative(self):"},{"line_number":779,"context_line":"        self.drv.zfssa.get_lun.side_effect \u003d \\"},{"line_number":780,"context_line":"            exception.VolumeBackendAPIException"},{"line_number":781,"context_line":"        self.assertRaises(exception.VolumeBackendAPIException,"},{"line_number":782,"context_line":"                          self.drv._create_cache_volume,"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa1b9901_43877312","line":779,"updated":"2015-08-22 13:44:27.000000000","message":"Here","commit_id":"4da476a72dd57bd63b59d80a7efb8c1d1219de73"},{"author":{"_account_id":13524,"name":"Diem Tran","email":"diem.tran@oracle.com","username":"dttran"},"change_message_id":"b30524670dce06ad36464f6f43e46689f96019a4","unresolved":false,"context_lines":[{"line_number":776,"context_line":"                                            small_img[\u0027id\u0027])"},{"line_number":777,"context_line":""},{"line_number":778,"context_line":"    def test_create_cache_vol_negative(self):"},{"line_number":779,"context_line":"        self.drv.zfssa.get_lun.side_effect \u003d \\"},{"line_number":780,"context_line":"            exception.VolumeBackendAPIException"},{"line_number":781,"context_line":"        self.assertRaises(exception.VolumeBackendAPIException,"},{"line_number":782,"context_line":"                          self.drv._create_cache_volume,"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa1b9901_ec59ac5c","line":779,"in_reply_to":"fa1b9901_43877312","updated":"2015-08-24 15:34:58.000000000","message":"Done","commit_id":"4da476a72dd57bd63b59d80a7efb8c1d1219de73"}],"cinder/volume/drivers/zfssa/webdavclient.py":[{"author":{"_account_id":11509,"name":"Juan Zuluaga","email":"juan.c.zuluaga@oracle.com","username":"juzuluag"},"change_message_id":"ddfb621ef5b35a4592d30706b4814602818b92b3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"1a4dcd0f_798d67d2","updated":"2015-08-14 19:49:07.000000000","message":"need copyright changes","commit_id":"2ee16a71d2e10111ced0dfc3bb71035058151465"}],"cinder/volume/drivers/zfssa/zfssaiscsi.py":[{"author":{"_account_id":11509,"name":"Juan Zuluaga","email":"juan.c.zuluaga@oracle.com","username":"juzuluag"},"change_message_id":"35c1f5066800a9b6099b67444e67ffb86bc91cf1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"1a4dcd0f_e41dbe0f","updated":"2015-08-12 23:13:11.000000000","message":"update copyright","commit_id":"69ab02f148d7ebf65f4716c772deaf62fedc7821"},{"author":{"_account_id":6043,"name":"Kurt Martin","email":"kurt.f.martin@hpe.com","username":"kurt-f-martin"},"change_message_id":"579c25417481e078ab24b07c6092504e839b9a19","unresolved":false,"context_lines":[{"line_number":73,"context_line":"               help\u003d\u0027Network interfaces of iSCSI targets. (comma separated)\u0027),"},{"line_number":74,"context_line":"    cfg.IntOpt(\u0027zfssa_rest_timeout\u0027,"},{"line_number":75,"context_line":"               help\u003d\u0027REST connection timeout. (seconds)\u0027),"},{"line_number":76,"context_line":"    cfg.BoolOpt(\u0027zfssa_enable_local_cache\u0027, default\u003dTrue,"},{"line_number":77,"context_line":"                help\u003d\u0027Flag to enable local caching: True, False.\u0027),"},{"line_number":78,"context_line":"    cfg.StrOpt(\u0027zfssa_cache_project\u0027, default\u003d\u0027os-cinder-cache\u0027,"},{"line_number":79,"context_line":"               help\u003d\u0027Name of ZFSSA project where cache volumes are stored.\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_29e93f7f","line":76,"updated":"2015-08-12 22:43:40.000000000","message":"You are adding two new config options zfssa_enable_local_cache and zfssa_cache_project, so you should at least have a DocImpact flag in your commit message","commit_id":"69ab02f148d7ebf65f4716c772deaf62fedc7821"},{"author":{"_account_id":6043,"name":"Kurt Martin","email":"kurt.f.martin@hpe.com","username":"kurt-f-martin"},"change_message_id":"579c25417481e078ab24b07c6092504e839b9a19","unresolved":false,"context_lines":[{"line_number":96,"context_line":""},{"line_number":97,"context_line":"class ZFSSAISCSIDriver(driver.ISCSIDriver):"},{"line_number":98,"context_line":"    \"\"\"ZFSSA Cinder iSCSI volume driver.\"\"\""},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    VERSION \u003d \u00271.0.0\u0027"},{"line_number":101,"context_line":"    protocol \u003d \u0027iSCSI\u0027"},{"line_number":102,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_041eaa5e","line":99,"updated":"2015-08-12 22:43:40.000000000","message":"Did you want to increase the driver version since you made changes?","commit_id":"69ab02f148d7ebf65f4716c772deaf62fedc7821"},{"author":{"_account_id":11509,"name":"Juan Zuluaga","email":"juan.c.zuluaga@oracle.com","username":"juzuluag"},"change_message_id":"35c1f5066800a9b6099b67444e67ffb86bc91cf1","unresolved":false,"context_lines":[{"line_number":228,"context_line":"    def _get_provider_info(self, volume, lun\u003dNone):"},{"line_number":229,"context_line":"        \"\"\"Return provider information.\"\"\""},{"line_number":230,"context_line":"        lcfg \u003d self.configuration"},{"line_number":231,"context_line":"        project \u003d lcfg.zfssa_project"},{"line_number":232,"context_line":"        if ((lcfg.zfssa_enable_local_cache is True) and"},{"line_number":233,"context_line":"                (volume[\u0027name\u0027].startswith(\u0027os-cache-vol-\u0027))):"},{"line_number":234,"context_line":"            project \u003d lcfg.zfssa_cache_project"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_e4a05e92","line":231,"updated":"2015-08-12 23:13:11.000000000","message":"Don\u0027t understand why there is a need this on this method and not for instance in the delete","commit_id":"69ab02f148d7ebf65f4716c772deaf62fedc7821"},{"author":{"_account_id":13524,"name":"Diem Tran","email":"diem.tran@oracle.com","username":"dttran"},"change_message_id":"76c3b41d910abc6fa24d82b17f6450f1f388b50b","unresolved":false,"context_lines":[{"line_number":228,"context_line":"    def _get_provider_info(self, volume, lun\u003dNone):"},{"line_number":229,"context_line":"        \"\"\"Return provider information.\"\"\""},{"line_number":230,"context_line":"        lcfg \u003d self.configuration"},{"line_number":231,"context_line":"        project \u003d lcfg.zfssa_project"},{"line_number":232,"context_line":"        if ((lcfg.zfssa_enable_local_cache is True) and"},{"line_number":233,"context_line":"                (volume[\u0027name\u0027].startswith(\u0027os-cache-vol-\u0027))):"},{"line_number":234,"context_line":"            project \u003d lcfg.zfssa_cache_project"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_47156b3d","line":231,"in_reply_to":"1a4dcd0f_e4a05e92","updated":"2015-08-13 19:42:36.000000000","message":"_get_provider_info is needed by method initialize_connection, which in turns is needed by copy_image_volume.","commit_id":"69ab02f148d7ebf65f4716c772deaf62fedc7821"},{"author":{"_account_id":11509,"name":"Juan Zuluaga","email":"juan.c.zuluaga@oracle.com","username":"juzuluag"},"change_message_id":"35c1f5066800a9b6099b67444e67ffb86bc91cf1","unresolved":false,"context_lines":[{"line_number":275,"context_line":"        lcfg \u003d self.configuration"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"        try:"},{"line_number":278,"context_line":"            lun2del \u003d self.zfssa.get_lun(lcfg.zfssa_pool,"},{"line_number":279,"context_line":"                                         lcfg.zfssa_project,"},{"line_number":280,"context_line":"                                         volume[\u0027name\u0027])"},{"line_number":281,"context_line":"        except exception.VolumeBackendAPIException as ex:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_64bbeec4","line":278,"updated":"2015-08-12 23:13:11.000000000","message":"see comment \u0027_get_provider_info\u0027 comment","commit_id":"69ab02f148d7ebf65f4716c772deaf62fedc7821"},{"author":{"_account_id":11509,"name":"Juan Zuluaga","email":"juan.c.zuluaga@oracle.com","username":"juzuluag"},"change_message_id":"35c1f5066800a9b6099b67444e67ffb86bc91cf1","unresolved":false,"context_lines":[{"line_number":312,"context_line":"                lun2del[\u0027origin\u0027][\u0027project\u0027] \u003d\u003d lcfg.zfssa_cache_project):"},{"line_number":313,"context_line":"                self._check_origin(lun2del)"},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"    def _check_origin(self, lun):"},{"line_number":316,"context_line":"        lcfg \u003d self.configuration"},{"line_number":317,"context_line":"        cache \u003d lun[\u0027origin\u0027]"},{"line_number":318,"context_line":"        numclones \u003d -1"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_e4adbe31","line":315,"updated":"2015-08-12 23:13:11.000000000","message":"add comments about what the method does.\nAlso move this method either at the end (append).\nBasically don\u0027t insert new methods unless it follows alphabetical order.","commit_id":"69ab02f148d7ebf65f4716c772deaf62fedc7821"},{"author":{"_account_id":11509,"name":"Juan Zuluaga","email":"juan.c.zuluaga@oracle.com","username":"juzuluag"},"change_message_id":"35c1f5066800a9b6099b67444e67ffb86bc91cf1","unresolved":false,"context_lines":[{"line_number":340,"context_line":"                # The volume does exists, so return"},{"line_number":341,"context_line":"                return"},{"line_number":342,"context_line":"            except exception.VolumeNotFound as exc:"},{"line_number":343,"context_line":"                # The volume is already deleleted"},{"line_number":344,"context_line":"                num_lones \u003d 0"},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"        if numclones \u003d\u003d 0:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_8f32d3f0","line":343,"updated":"2015-08-12 23:13:11.000000000","message":"typo \u0027deleted\u0027","commit_id":"69ab02f148d7ebf65f4716c772deaf62fedc7821"},{"author":{"_account_id":17909,"name":"Pascal Ledru","email":"pascal.ledru@oracle.com","username":"PascalLedru"},"change_message_id":"47ab86659158530f07e030435cae377f5e9c2482","unresolved":false,"context_lines":[{"line_number":341,"context_line":"                return"},{"line_number":342,"context_line":"            except exception.VolumeNotFound as exc:"},{"line_number":343,"context_line":"                # The volume is already deleleted"},{"line_number":344,"context_line":"                num_lones \u003d 0"},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"        if numclones \u003d\u003d 0:"},{"line_number":347,"context_line":"            self.zfssa.delete_lun(lcfg.zfssa_pool,"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_85929355","line":344,"updated":"2015-08-13 14:19:17.000000000","message":"numclones ?","commit_id":"69ab02f148d7ebf65f4716c772deaf62fedc7821"},{"author":{"_account_id":11509,"name":"Juan Zuluaga","email":"juan.c.zuluaga@oracle.com","username":"juzuluag"},"change_message_id":"35c1f5066800a9b6099b67444e67ffb86bc91cf1","unresolved":false,"context_lines":[{"line_number":434,"context_line":"            self._update_volume_status()"},{"line_number":435,"context_line":"        return self._stats"},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"    def create_export(self, context, volume, connector):"},{"line_number":438,"context_line":"        pass"},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"    def remove_export(self, context, volume):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_cfb1bb48","line":437,"updated":"2015-08-12 23:13:11.000000000","message":"Why this change?","commit_id":"69ab02f148d7ebf65f4716c772deaf62fedc7821"},{"author":{"_account_id":13524,"name":"Diem Tran","email":"diem.tran@oracle.com","username":"dttran"},"change_message_id":"76c3b41d910abc6fa24d82b17f6450f1f388b50b","unresolved":false,"context_lines":[{"line_number":434,"context_line":"            self._update_volume_status()"},{"line_number":435,"context_line":"        return self._stats"},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"    def create_export(self, context, volume, connector):"},{"line_number":438,"context_line":"        pass"},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"    def remove_export(self, context, volume):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_e70917de","line":437,"in_reply_to":"1a4dcd0f_cfb1bb48","updated":"2015-08-13 19:42:36.000000000","message":"The change is not mine, it\u0027s from this:\nhttps://github.com/openstack/cinder/commit/ecab4005f08781581d3d9239e7145fca2a259b35\nI don\u0027t know why it pops up in my change.","commit_id":"69ab02f148d7ebf65f4716c772deaf62fedc7821"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"a51556b753310e7599f5a61dcf66eed4b09eb9dc","unresolved":false,"context_lines":[{"line_number":557,"context_line":"                                             specs)"},{"line_number":558,"context_line":"        except exception.SnapshotNotFound:"},{"line_number":559,"context_line":"            exception_msg \u003d (_(\u0027Cache volume %(cache_vol)s\u0027"},{"line_number":560,"context_line":"                               \u0027does not have snapshot %(cache_snap)s\u0027),"},{"line_number":561,"context_line":"                             {\u0027cache_vol\u0027: cachevol_name,"},{"line_number":562,"context_line":"                              \u0027cache_snap\u0027: cachesnap_name})"},{"line_number":563,"context_line":"            LOG.error(exception_msg)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_f87483cf","line":560,"updated":"2015-08-12 21:15:31.000000000","message":"\".\" at EOL","commit_id":"69ab02f148d7ebf65f4716c772deaf62fedc7821"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"a51556b753310e7599f5a61dcf66eed4b09eb9dc","unresolved":false,"context_lines":[{"line_number":612,"context_line":"            \u0027id\u0027: img_meta[\u0027id\u0027],"},{"line_number":613,"context_line":"            \u0027size\u0027: volsize,"},{"line_number":614,"context_line":"        }"},{"line_number":615,"context_line":"        LOG.debug(\u0027Creating cache volume %s\u0027, cache_vol[\u0027name\u0027])"},{"line_number":616,"context_line":""},{"line_number":617,"context_line":"        try:"},{"line_number":618,"context_line":"            LOG.debug(\u0027Creating lun %s:\u0027, str(lun_props))"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_5b4fb16a","line":615,"updated":"2015-08-12 21:15:31.000000000","message":"\".\" at EOL","commit_id":"69ab02f148d7ebf65f4716c772deaf62fedc7821"},{"author":{"_account_id":13524,"name":"Diem Tran","email":"diem.tran@oracle.com","username":"dttran"},"change_message_id":"76c3b41d910abc6fa24d82b17f6450f1f388b50b","unresolved":false,"context_lines":[{"line_number":612,"context_line":"            \u0027id\u0027: img_meta[\u0027id\u0027],"},{"line_number":613,"context_line":"            \u0027size\u0027: volsize,"},{"line_number":614,"context_line":"        }"},{"line_number":615,"context_line":"        LOG.debug(\u0027Creating cache volume %s\u0027, cache_vol[\u0027name\u0027])"},{"line_number":616,"context_line":""},{"line_number":617,"context_line":"        try:"},{"line_number":618,"context_line":"            LOG.debug(\u0027Creating lun %s:\u0027, str(lun_props))"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_87b13303","line":615,"in_reply_to":"1a4dcd0f_5b4fb16a","updated":"2015-08-13 19:42:36.000000000","message":"Done","commit_id":"69ab02f148d7ebf65f4716c772deaf62fedc7821"},{"author":{"_account_id":6043,"name":"Kurt Martin","email":"kurt.f.martin@hpe.com","username":"kurt-f-martin"},"change_message_id":"579c25417481e078ab24b07c6092504e839b9a19","unresolved":false,"context_lines":[{"line_number":627,"context_line":"                                                               cache_vol,"},{"line_number":628,"context_line":"                                                               img_service,"},{"line_number":629,"context_line":"                                                               img_meta[\u0027id\u0027])"},{"line_number":630,"context_line":"            LOG.debug(\u0027Creating snapshot:\u0027)"},{"line_number":631,"context_line":"            self.zfssa.create_snapshot(lcfg.zfssa_pool,"},{"line_number":632,"context_line":"                                       lcfg.zfssa_cache_project,"},{"line_number":633,"context_line":"                                       cache_vol[\u0027name\u0027],"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_0939e3f1","line":630,"updated":"2015-08-12 22:43:40.000000000","message":"same as above what value does this provide?","commit_id":"69ab02f148d7ebf65f4716c772deaf62fedc7821"},{"author":{"_account_id":13524,"name":"Diem Tran","email":"diem.tran@oracle.com","username":"dttran"},"change_message_id":"76c3b41d910abc6fa24d82b17f6450f1f388b50b","unresolved":false,"context_lines":[{"line_number":627,"context_line":"                                                               cache_vol,"},{"line_number":628,"context_line":"                                                               img_service,"},{"line_number":629,"context_line":"                                                               img_meta[\u0027id\u0027])"},{"line_number":630,"context_line":"            LOG.debug(\u0027Creating snapshot:\u0027)"},{"line_number":631,"context_line":"            self.zfssa.create_snapshot(lcfg.zfssa_pool,"},{"line_number":632,"context_line":"                                       lcfg.zfssa_cache_project,"},{"line_number":633,"context_line":"                                       cache_vol[\u0027name\u0027],"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_87a8538d","line":630,"in_reply_to":"1a4dcd0f_0939e3f1","updated":"2015-08-13 19:42:36.000000000","message":"Removed. It was for debug purposes.","commit_id":"69ab02f148d7ebf65f4716c772deaf62fedc7821"},{"author":{"_account_id":11509,"name":"Juan Zuluaga","email":"juan.c.zuluaga@oracle.com","username":"juzuluag"},"change_message_id":"35c1f5066800a9b6099b67444e67ffb86bc91cf1","unresolved":false,"context_lines":[{"line_number":666,"context_line":"        lcfg \u003d self.configuration"},{"line_number":667,"context_line":"        init_groups \u003d self.zfssa.get_initiator_initiatorgroup("},{"line_number":668,"context_line":"            connector[\u0027initiator\u0027])"},{"line_number":669,"context_line":"        if ((lcfg.zfssa_enable_local_cache is True) and"},{"line_number":670,"context_line":"                (volume[\u0027name\u0027].startswith(\u0027os-cache-vol-\u0027))):"},{"line_number":671,"context_line":"            project \u003d lcfg.zfssa_cache_project"},{"line_number":672,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_af5b0f21","line":669,"updated":"2015-08-12 23:13:11.000000000","message":"Why this has to happen at attach time?","commit_id":"69ab02f148d7ebf65f4716c772deaf62fedc7821"},{"author":{"_account_id":13524,"name":"Diem Tran","email":"diem.tran@oracle.com","username":"dttran"},"change_message_id":"76c3b41d910abc6fa24d82b17f6450f1f388b50b","unresolved":false,"context_lines":[{"line_number":666,"context_line":"        lcfg \u003d self.configuration"},{"line_number":667,"context_line":"        init_groups \u003d self.zfssa.get_initiator_initiatorgroup("},{"line_number":668,"context_line":"            connector[\u0027initiator\u0027])"},{"line_number":669,"context_line":"        if ((lcfg.zfssa_enable_local_cache is True) and"},{"line_number":670,"context_line":"                (volume[\u0027name\u0027].startswith(\u0027os-cache-vol-\u0027))):"},{"line_number":671,"context_line":"            project \u003d lcfg.zfssa_cache_project"},{"line_number":672,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_07744333","line":669,"in_reply_to":"1a4dcd0f_af5b0f21","updated":"2015-08-13 19:42:36.000000000","message":"Because the method copy_image_to_volume will attach the cache volume and copy image data to it.","commit_id":"69ab02f148d7ebf65f4716c772deaf62fedc7821"},{"author":{"_account_id":11509,"name":"Juan Zuluaga","email":"juan.c.zuluaga@oracle.com","username":"juzuluag"},"change_message_id":"35c1f5066800a9b6099b67444e67ffb86bc91cf1","unresolved":false,"context_lines":[{"line_number":703,"context_line":"        \"\"\"Driver entry point to terminate a connection for a volume.\"\"\""},{"line_number":704,"context_line":"        LOG.debug(\u0027terminate_connection: volume name: %s.\u0027, volume[\u0027name\u0027])"},{"line_number":705,"context_line":"        lcfg \u003d self.configuration"},{"line_number":706,"context_line":"        project \u003d lcfg.zfssa_project"},{"line_number":707,"context_line":"        if ((lcfg.zfssa_enable_local_cache is True) and"},{"line_number":708,"context_line":"                (volume[\u0027name\u0027].startswith(\u0027os-cache-vol-\u0027))):"},{"line_number":709,"context_line":"            project \u003d lcfg.zfssa_cache_project"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_6fa0a7f4","line":706,"updated":"2015-08-12 23:13:11.000000000","message":"Why this has to happen at detach time?","commit_id":"69ab02f148d7ebf65f4716c772deaf62fedc7821"},{"author":{"_account_id":13524,"name":"Diem Tran","email":"diem.tran@oracle.com","username":"dttran"},"change_message_id":"76c3b41d910abc6fa24d82b17f6450f1f388b50b","unresolved":false,"context_lines":[{"line_number":703,"context_line":"        \"\"\"Driver entry point to terminate a connection for a volume.\"\"\""},{"line_number":704,"context_line":"        LOG.debug(\u0027terminate_connection: volume name: %s.\u0027, volume[\u0027name\u0027])"},{"line_number":705,"context_line":"        lcfg \u003d self.configuration"},{"line_number":706,"context_line":"        project \u003d lcfg.zfssa_project"},{"line_number":707,"context_line":"        if ((lcfg.zfssa_enable_local_cache is True) and"},{"line_number":708,"context_line":"                (volume[\u0027name\u0027].startswith(\u0027os-cache-vol-\u0027))):"},{"line_number":709,"context_line":"            project \u003d lcfg.zfssa_cache_project"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_c7b73bd6","line":706,"in_reply_to":"1a4dcd0f_6fa0a7f4","updated":"2015-08-13 19:42:36.000000000","message":"The same as above. initialize_connection and terminate_connection is used by copy_image_volume.","commit_id":"69ab02f148d7ebf65f4716c772deaf62fedc7821"},{"author":{"_account_id":11509,"name":"Juan Zuluaga","email":"juan.c.zuluaga@oracle.com","username":"juzuluag"},"change_message_id":"2a2c820be31ef946e0b097e68f44f3077b93be7d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"1a4dcd0f_9a597c5e","updated":"2015-08-13 20:57:31.000000000","message":"need to change copyright","commit_id":"2f8ef5cb2180a5b79d6bc486874fbf91b51fb2aa"},{"author":{"_account_id":13524,"name":"Diem Tran","email":"diem.tran@oracle.com","username":"dttran"},"change_message_id":"4cb0feacddb95939ae6ed6b44cc3fc6db973637b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"1a4dcd0f_336060a4","in_reply_to":"1a4dcd0f_9a597c5e","updated":"2015-08-14 18:48:51.000000000","message":"Done","commit_id":"2f8ef5cb2180a5b79d6bc486874fbf91b51fb2aa"},{"author":{"_account_id":11509,"name":"Juan Zuluaga","email":"juan.c.zuluaga@oracle.com","username":"juzuluag"},"change_message_id":"d487f4ee22f4d3c1b4afd7179bde3772adc5e61e","unresolved":false,"context_lines":[{"line_number":270,"context_line":"                              lcfg.zfssa_target_group,"},{"line_number":271,"context_line":"                              specs)"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"    @utils.synchronized(\u0027zfssaiscsi\u0027, external\u003dTrue)"},{"line_number":274,"context_line":"    def delete_volume(self, volume):"},{"line_number":275,"context_line":"        \"\"\"Deletes a volume with the given volume[\u0027name\u0027].\"\"\""},{"line_number":276,"context_line":"        LOG.debug(\u0027zfssa.delete_volume: name\u003d%s\u0027, volume[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_690a7e7b","line":273,"updated":"2015-08-14 17:05:17.000000000","message":"I do see here this, but on zfssanfs.py is under _check_origin().\nWhy is that?","commit_id":"2f8ef5cb2180a5b79d6bc486874fbf91b51fb2aa"},{"author":{"_account_id":13524,"name":"Diem Tran","email":"diem.tran@oracle.com","username":"dttran"},"change_message_id":"4cb0feacddb95939ae6ed6b44cc3fc6db973637b","unresolved":false,"context_lines":[{"line_number":270,"context_line":"                              lcfg.zfssa_target_group,"},{"line_number":271,"context_line":"                              specs)"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"    @utils.synchronized(\u0027zfssaiscsi\u0027, external\u003dTrue)"},{"line_number":274,"context_line":"    def delete_volume(self, volume):"},{"line_number":275,"context_line":"        \"\"\"Deletes a volume with the given volume[\u0027name\u0027].\"\"\""},{"line_number":276,"context_line":"        LOG.debug(\u0027zfssa.delete_volume: name\u003d%s\u0027, volume[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_332e2043","line":273,"in_reply_to":"1a4dcd0f_690a7e7b","updated":"2015-08-14 18:48:51.000000000","message":"It\u0027s because delete_lun() is also asynchronous, which in turns unexpectedly affect the number of clones of a lun in a certain window of time. I\u0027ve seen the number clones of a cache volume reported as 1 (incorrect) in _check_origin, even after all clones have been deleted (should be 0).","commit_id":"2f8ef5cb2180a5b79d6bc486874fbf91b51fb2aa"},{"author":{"_account_id":11509,"name":"Juan Zuluaga","email":"juan.c.zuluaga@oracle.com","username":"juzuluag"},"change_message_id":"d487f4ee22f4d3c1b4afd7179bde3772adc5e61e","unresolved":false,"context_lines":[{"line_number":311,"context_line":"                              lun\u003dvolume[\u0027name\u0027])"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"        if (\u0027origin\u0027 in lun2del and"},{"line_number":314,"context_line":"                lun2del[\u0027origin\u0027][\u0027project\u0027] \u003d\u003d lcfg.zfssa_cache_project):"},{"line_number":315,"context_line":"                self._check_origin(lun2del, volume[\u0027name\u0027])"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"    def create_snapshot(self, snapshot):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_e9f0ce93","line":314,"updated":"2015-08-14 17:05:17.000000000","message":"indentation is ok here?","commit_id":"2f8ef5cb2180a5b79d6bc486874fbf91b51fb2aa"},{"author":{"_account_id":13524,"name":"Diem Tran","email":"diem.tran@oracle.com","username":"dttran"},"change_message_id":"4cb0feacddb95939ae6ed6b44cc3fc6db973637b","unresolved":false,"context_lines":[{"line_number":311,"context_line":"                              lun\u003dvolume[\u0027name\u0027])"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"        if (\u0027origin\u0027 in lun2del and"},{"line_number":314,"context_line":"                lun2del[\u0027origin\u0027][\u0027project\u0027] \u003d\u003d lcfg.zfssa_cache_project):"},{"line_number":315,"context_line":"                self._check_origin(lun2del, volume[\u0027name\u0027])"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"    def create_snapshot(self, snapshot):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_b31a3017","line":314,"in_reply_to":"1a4dcd0f_e9f0ce93","updated":"2015-08-14 18:48:51.000000000","message":"It\u0027s required by pep8.","commit_id":"2f8ef5cb2180a5b79d6bc486874fbf91b51fb2aa"},{"author":{"_account_id":11509,"name":"Juan Zuluaga","email":"juan.c.zuluaga@oracle.com","username":"juzuluag"},"change_message_id":"d487f4ee22f4d3c1b4afd7179bde3772adc5e61e","unresolved":false,"context_lines":[{"line_number":436,"context_line":""},{"line_number":437,"context_line":"    def clone_image(self, context, volume,"},{"line_number":438,"context_line":"                    image_location, image_meta,"},{"line_number":439,"context_line":"                    image_service):"},{"line_number":440,"context_line":"        \"\"\"Create a volume efficiently from an existing image."},{"line_number":441,"context_line":""},{"line_number":442,"context_line":"        Verify the image ID being used:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_09c09a29","line":439,"updated":"2015-08-14 17:05:17.000000000","message":"As general question. How does cinder knows that the cloned volume is the one to be used?","commit_id":"2f8ef5cb2180a5b79d6bc486874fbf91b51fb2aa"},{"author":{"_account_id":13524,"name":"Diem Tran","email":"diem.tran@oracle.com","username":"dttran"},"change_message_id":"4cb0feacddb95939ae6ed6b44cc3fc6db973637b","unresolved":false,"context_lines":[{"line_number":436,"context_line":""},{"line_number":437,"context_line":"    def clone_image(self, context, volume,"},{"line_number":438,"context_line":"                    image_location, image_meta,"},{"line_number":439,"context_line":"                    image_service):"},{"line_number":440,"context_line":"        \"\"\"Create a volume efficiently from an existing image."},{"line_number":441,"context_line":""},{"line_number":442,"context_line":"        Verify the image ID being used:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_33a380b3","line":439,"in_reply_to":"1a4dcd0f_09c09a29","updated":"2015-08-14 18:48:51.000000000","message":"clone_image() is only called when a bootable volume is created. The image is passed through image_meta[\u0027id\u0027]. The cache volume is created and the same id is stored there. That\u0027s how it gets recognized later on.","commit_id":"2f8ef5cb2180a5b79d6bc486874fbf91b51fb2aa"},{"author":{"_account_id":11509,"name":"Juan Zuluaga","email":"juan.c.zuluaga@oracle.com","username":"juzuluag"},"change_message_id":"d487f4ee22f4d3c1b4afd7179bde3772adc5e61e","unresolved":false,"context_lines":[{"line_number":502,"context_line":"        \"\"\""},{"line_number":503,"context_line":"        lcfg \u003d self.configuration"},{"line_number":504,"context_line":"        cachevol_name \u003d \u0027os-cache-vol-%s\u0027 % img_meta[\u0027id\u0027]"},{"line_number":505,"context_line":"        cachesnap_name \u003d \u0027image-%s\u0027 % img_meta[\u0027id\u0027]"},{"line_number":506,"context_line":"        cache_vol, cache_snap \u003d None, None"},{"line_number":507,"context_line":"        updated_at \u003d str(img_meta[\u0027updated_at\u0027].isoformat())"},{"line_number":508,"context_line":"        LOG.debug(\u0027Verifying cache volume %s:\u0027, cachevol_name)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_29cd5686","line":505,"updated":"2015-08-14 17:05:17.000000000","message":"these 2 vars  (cachevol_name and cachesnap_name) can be passed to _create_cache_volume.\n_create_cache_volume is doing the same naming but with different vars names. see line 568-569","commit_id":"2f8ef5cb2180a5b79d6bc486874fbf91b51fb2aa"},{"author":{"_account_id":13524,"name":"Diem Tran","email":"diem.tran@oracle.com","username":"dttran"},"change_message_id":"4cb0feacddb95939ae6ed6b44cc3fc6db973637b","unresolved":false,"context_lines":[{"line_number":502,"context_line":"        \"\"\""},{"line_number":503,"context_line":"        lcfg \u003d self.configuration"},{"line_number":504,"context_line":"        cachevol_name \u003d \u0027os-cache-vol-%s\u0027 % img_meta[\u0027id\u0027]"},{"line_number":505,"context_line":"        cachesnap_name \u003d \u0027image-%s\u0027 % img_meta[\u0027id\u0027]"},{"line_number":506,"context_line":"        cache_vol, cache_snap \u003d None, None"},{"line_number":507,"context_line":"        updated_at \u003d str(img_meta[\u0027updated_at\u0027].isoformat())"},{"line_number":508,"context_line":"        LOG.debug(\u0027Verifying cache volume %s:\u0027, cachevol_name)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_b3aa3019","line":505,"in_reply_to":"1a4dcd0f_29cd5686","updated":"2015-08-14 18:48:51.000000000","message":"I\u0027ve cleaned up the code. Thanks!","commit_id":"2f8ef5cb2180a5b79d6bc486874fbf91b51fb2aa"},{"author":{"_account_id":11509,"name":"Juan Zuluaga","email":"juan.c.zuluaga@oracle.com","username":"juzuluag"},"change_message_id":"ddfb621ef5b35a4592d30706b4814602818b92b3","unresolved":false,"context_lines":[{"line_number":143,"context_line":"                {\u0027property\u0027: \u0027updated_at\u0027,"},{"line_number":144,"context_line":"                 \u0027description\u0027: \u0027Most recent updated time of image\u0027,"},{"line_number":145,"context_line":"                 \u0027type\u0027: \u0027String\u0027}]"},{"line_number":146,"context_line":"            self.zfssa.create_schemas(schemas)"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        if (lcfg.zfssa_initiator_config !\u003d \u0027\u0027):"},{"line_number":149,"context_line":"            initiator_config \u003d ast.literal_eval(lcfg.zfssa_initiator_config)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_5c573926","line":146,"updated":"2015-08-14 19:49:07.000000000","message":"What is the purpose of the schema? Don\u0027t see it use anywhere else","commit_id":"2ee16a71d2e10111ced0dfc3bb71035058151465"},{"author":{"_account_id":13524,"name":"Diem Tran","email":"diem.tran@oracle.com","username":"dttran"},"change_message_id":"6611f08cdbe39c813de48bd316ca075bd6205621","unresolved":false,"context_lines":[{"line_number":143,"context_line":"                {\u0027property\u0027: \u0027updated_at\u0027,"},{"line_number":144,"context_line":"                 \u0027description\u0027: \u0027Most recent updated time of image\u0027,"},{"line_number":145,"context_line":"                 \u0027type\u0027: \u0027String\u0027}]"},{"line_number":146,"context_line":"            self.zfssa.create_schemas(schemas)"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        if (lcfg.zfssa_initiator_config !\u003d \u0027\u0027):"},{"line_number":149,"context_line":"            initiator_config \u003d ast.literal_eval(lcfg.zfssa_initiator_config)"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa1b9901_bc0d2940","line":146,"in_reply_to":"1a4dcd0f_5c573926","updated":"2015-08-18 19:35:09.000000000","message":"It is used to store the custom properties of the cache volumes. Please see line 573-576, 592.","commit_id":"2ee16a71d2e10111ced0dfc3bb71035058151465"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"69497f4f9aaa89e4935181c6590bd14d0bb65500","unresolved":false,"context_lines":[{"line_number":603,"context_line":"                         \u0027Error: %(err)s\u0027),"},{"line_number":604,"context_line":"                       {\u0027volume\u0027: cache_vol[\u0027name\u0027],"},{"line_number":605,"context_line":"                        \u0027err\u0027: six.text_type(exc)})"},{"line_number":606,"context_line":"            LOG.debug(exc_msg)"},{"line_number":607,"context_line":"            self.zfssa.delete_lun(lcfg.zfssa_pool,"},{"line_number":608,"context_line":"                                  lcfg.zfssa_cache_project,"},{"line_number":609,"context_line":"                                  cache_vol[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_0843ab14","line":606,"updated":"2015-08-14 21:04:09.000000000","message":"Change debug to error message.","commit_id":"2ee16a71d2e10111ced0dfc3bb71035058151465"},{"author":{"_account_id":13524,"name":"Diem Tran","email":"diem.tran@oracle.com","username":"dttran"},"change_message_id":"6611f08cdbe39c813de48bd316ca075bd6205621","unresolved":false,"context_lines":[{"line_number":603,"context_line":"                         \u0027Error: %(err)s\u0027),"},{"line_number":604,"context_line":"                       {\u0027volume\u0027: cache_vol[\u0027name\u0027],"},{"line_number":605,"context_line":"                        \u0027err\u0027: six.text_type(exc)})"},{"line_number":606,"context_line":"            LOG.debug(exc_msg)"},{"line_number":607,"context_line":"            self.zfssa.delete_lun(lcfg.zfssa_pool,"},{"line_number":608,"context_line":"                                  lcfg.zfssa_cache_project,"},{"line_number":609,"context_line":"                                  cache_vol[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa1b9901_374e1270","line":606,"in_reply_to":"1a4dcd0f_0843ab14","updated":"2015-08-18 19:35:09.000000000","message":"Done","commit_id":"2ee16a71d2e10111ced0dfc3bb71035058151465"},{"author":{"_account_id":11509,"name":"Juan Zuluaga","email":"juan.c.zuluaga@oracle.com","username":"juzuluag"},"change_message_id":"a080bdca86fcb79382f8fecc9303381a1a1c34eb","unresolved":false,"context_lines":[{"line_number":471,"context_line":"            LOG.error(exception_msg)"},{"line_number":472,"context_line":"            return None, False"},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"        specs \u003d self._get_voltype_specs(volume)"},{"line_number":475,"context_line":"        specs.update({\u0027cachevol_size\u0027: cachevol_size})"},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_b2b59bed","line":474,"updated":"2015-08-21 14:58:10.000000000","message":"Not sure if this is the right approach here, but it might be confusing, since specs are \u0027openstack/cinder\u0027 term specific.\nI know that you need to pass new properties, but maybe rename the var for something more generic would help to avoid error reading. (it happened to me)","commit_id":"ac62a034b13091bbdc278c60c3380947552a9a03"},{"author":{"_account_id":11509,"name":"Juan Zuluaga","email":"juan.c.zuluaga@oracle.com","username":"juzuluag"},"change_message_id":"164e9774e79066d55d6e17fb7ebba0377ce4985d","unresolved":false,"context_lines":[{"line_number":471,"context_line":"            LOG.error(exception_msg)"},{"line_number":472,"context_line":"            return None, False"},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"        specs \u003d self._get_voltype_specs(volume)"},{"line_number":475,"context_line":"        specs.update({\u0027cachevol_size\u0027: cachevol_size})"},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_4ea6d354","line":474,"in_reply_to":"fa1b9901_0d9ea862","updated":"2015-08-21 17:17:21.000000000","message":"These are not cinder \u0027extra-specs\u0027\nYou are using the argument for 2 different purposes.","commit_id":"ac62a034b13091bbdc278c60c3380947552a9a03"},{"author":{"_account_id":13524,"name":"Diem Tran","email":"diem.tran@oracle.com","username":"dttran"},"change_message_id":"e6bd806ef2c9c40176a6a55ce3db27f49a94c156","unresolved":false,"context_lines":[{"line_number":471,"context_line":"            LOG.error(exception_msg)"},{"line_number":472,"context_line":"            return None, False"},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"        specs \u003d self._get_voltype_specs(volume)"},{"line_number":475,"context_line":"        specs.update({\u0027cachevol_size\u0027: cachevol_size})"},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_0d9ea862","line":474,"in_reply_to":"fa1b9901_b2b59bed","updated":"2015-08-21 15:22:42.000000000","message":"It is actually specs, the same as the one being called in create_volume(). It\u0027s because cache volumes will have the same extra specs as regular volumes.","commit_id":"ac62a034b13091bbdc278c60c3380947552a9a03"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"fd172e55365d903ee7737aace5fed2faadd601a9","unresolved":false,"context_lines":[{"line_number":517,"context_line":"        }"},{"line_number":518,"context_line":"        img_meta.update(cachevol_meta)"},{"line_number":519,"context_line":"        cache_vol, cache_snap \u003d None, None"},{"line_number":520,"context_line":"        updated_at \u003d str(img_meta[\u0027updated_at\u0027].isoformat())"},{"line_number":521,"context_line":"        LOG.debug(\u0027Verifying cache volume %s:\u0027, cachevol_name)"},{"line_number":522,"context_line":""},{"line_number":523,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_4ae6eae8","line":520,"updated":"2015-08-21 02:31:51.000000000","message":"str -\u003e six.text_type","commit_id":"ac62a034b13091bbdc278c60c3380947552a9a03"},{"author":{"_account_id":13524,"name":"Diem Tran","email":"diem.tran@oracle.com","username":"dttran"},"change_message_id":"e6bd806ef2c9c40176a6a55ce3db27f49a94c156","unresolved":false,"context_lines":[{"line_number":517,"context_line":"        }"},{"line_number":518,"context_line":"        img_meta.update(cachevol_meta)"},{"line_number":519,"context_line":"        cache_vol, cache_snap \u003d None, None"},{"line_number":520,"context_line":"        updated_at \u003d str(img_meta[\u0027updated_at\u0027].isoformat())"},{"line_number":521,"context_line":"        LOG.debug(\u0027Verifying cache volume %s:\u0027, cachevol_name)"},{"line_number":522,"context_line":""},{"line_number":523,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_2d992c79","line":520,"in_reply_to":"fa1b9901_4ae6eae8","updated":"2015-08-21 15:22:42.000000000","message":"Done","commit_id":"ac62a034b13091bbdc278c60c3380947552a9a03"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"fd172e55365d903ee7737aace5fed2faadd601a9","unresolved":false,"context_lines":[{"line_number":535,"context_line":"                                             img_service,"},{"line_number":536,"context_line":"                                             specs)"},{"line_number":537,"context_line":"        except exception.SnapshotNotFound:"},{"line_number":538,"context_line":"            exception_msg \u003d (_LE(\u0027Cache volume %(cache_vol)s\u0027"},{"line_number":539,"context_line":"                                 \u0027does not have snapshot %(cache_snap)s.\u0027),"},{"line_number":540,"context_line":"                             {\u0027cache_vol\u0027: cachevol_name,"},{"line_number":541,"context_line":"                              \u0027cache_snap\u0027: cachesnap_name})"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_ead57ee4","line":538,"updated":"2015-08-21 02:31:51.000000000","message":"Should be _ instead of _LE","commit_id":"ac62a034b13091bbdc278c60c3380947552a9a03"},{"author":{"_account_id":13524,"name":"Diem Tran","email":"diem.tran@oracle.com","username":"dttran"},"change_message_id":"e6bd806ef2c9c40176a6a55ce3db27f49a94c156","unresolved":false,"context_lines":[{"line_number":535,"context_line":"                                             img_service,"},{"line_number":536,"context_line":"                                             specs)"},{"line_number":537,"context_line":"        except exception.SnapshotNotFound:"},{"line_number":538,"context_line":"            exception_msg \u003d (_LE(\u0027Cache volume %(cache_vol)s\u0027"},{"line_number":539,"context_line":"                                 \u0027does not have snapshot %(cache_snap)s.\u0027),"},{"line_number":540,"context_line":"                             {\u0027cache_vol\u0027: cachevol_name,"},{"line_number":541,"context_line":"                              \u0027cache_snap\u0027: cachesnap_name})"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_cd8af01a","line":538,"in_reply_to":"fa1b9901_ead57ee4","updated":"2015-08-21 15:22:42.000000000","message":"Done","commit_id":"ac62a034b13091bbdc278c60c3380947552a9a03"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"fd172e55365d903ee7737aace5fed2faadd601a9","unresolved":false,"context_lines":[{"line_number":547,"context_line":"                (cache_vol[\u0027image_id\u0027] !\u003d img_meta[\u0027id\u0027])):"},{"line_number":548,"context_line":"            # The cache volume is updated, but has clones:"},{"line_number":549,"context_line":"            if cache_snap[\u0027numclones\u0027] \u003e 0:"},{"line_number":550,"context_line":"                exception_msg \u003d (_LE(\u0027Cannot delete \u0027"},{"line_number":551,"context_line":"                                     \u0027cache volume: %(cachevol_name)s. \u0027"},{"line_number":552,"context_line":"                                     \u0027It was updated at %(updated_at)s \u0027"},{"line_number":553,"context_line":"                                     \u0027and currently has %(numclones)s \u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_8a072281","line":550,"updated":"2015-08-21 02:31:51.000000000","message":"Same","commit_id":"ac62a034b13091bbdc278c60c3380947552a9a03"},{"author":{"_account_id":13524,"name":"Diem Tran","email":"diem.tran@oracle.com","username":"dttran"},"change_message_id":"e6bd806ef2c9c40176a6a55ce3db27f49a94c156","unresolved":false,"context_lines":[{"line_number":547,"context_line":"                (cache_vol[\u0027image_id\u0027] !\u003d img_meta[\u0027id\u0027])):"},{"line_number":548,"context_line":"            # The cache volume is updated, but has clones:"},{"line_number":549,"context_line":"            if cache_snap[\u0027numclones\u0027] \u003e 0:"},{"line_number":550,"context_line":"                exception_msg \u003d (_LE(\u0027Cannot delete \u0027"},{"line_number":551,"context_line":"                                     \u0027cache volume: %(cachevol_name)s. \u0027"},{"line_number":552,"context_line":"                                     \u0027It was updated at %(updated_at)s \u0027"},{"line_number":553,"context_line":"                                     \u0027and currently has %(numclones)s \u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_ed8d7431","line":550,"in_reply_to":"fa1b9901_8a072281","updated":"2015-08-21 15:22:42.000000000","message":"Done","commit_id":"ac62a034b13091bbdc278c60c3380947552a9a03"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"fd172e55365d903ee7737aace5fed2faadd601a9","unresolved":false,"context_lines":[{"line_number":608,"context_line":"                                       cache_vol[\u0027name\u0027],"},{"line_number":609,"context_line":"                                       img_meta[\u0027snap_name\u0027])"},{"line_number":610,"context_line":"        except Exception as exc:"},{"line_number":611,"context_line":"            exc_msg \u003d (_LE(\u0027Fail to create cache volume %(volume)s. \u0027"},{"line_number":612,"context_line":"                           \u0027Error: %(err)s\u0027),"},{"line_number":613,"context_line":"                       {\u0027volume\u0027: cache_vol[\u0027name\u0027],"},{"line_number":614,"context_line":"                        \u0027err\u0027: six.text_type(exc)})"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_0afc726e","line":611,"updated":"2015-08-21 02:31:51.000000000","message":"Same","commit_id":"ac62a034b13091bbdc278c60c3380947552a9a03"},{"author":{"_account_id":13524,"name":"Diem Tran","email":"diem.tran@oracle.com","username":"dttran"},"change_message_id":"e6bd806ef2c9c40176a6a55ce3db27f49a94c156","unresolved":false,"context_lines":[{"line_number":608,"context_line":"                                       cache_vol[\u0027name\u0027],"},{"line_number":609,"context_line":"                                       img_meta[\u0027snap_name\u0027])"},{"line_number":610,"context_line":"        except Exception as exc:"},{"line_number":611,"context_line":"            exc_msg \u003d (_LE(\u0027Fail to create cache volume %(volume)s. \u0027"},{"line_number":612,"context_line":"                           \u0027Error: %(err)s\u0027),"},{"line_number":613,"context_line":"                       {\u0027volume\u0027: cache_vol[\u0027name\u0027],"},{"line_number":614,"context_line":"                        \u0027err\u0027: six.text_type(exc)})"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_ad83fc01","line":611,"in_reply_to":"fa1b9901_0afc726e","updated":"2015-08-21 15:22:42.000000000","message":"Done","commit_id":"ac62a034b13091bbdc278c60c3380947552a9a03"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a06b51d99ca5c96ae4eb3d0bbc72fd161d23e5d6","unresolved":false,"context_lines":[{"line_number":491,"context_line":"            if cachevol_size \u003c volume[\u0027size\u0027]:"},{"line_number":492,"context_line":"                self.extend_volume(volume, volume[\u0027size\u0027])"},{"line_number":493,"context_line":"        except exception.VolumeBackendAPIException as exc:"},{"line_number":494,"context_line":"            LOG.error(exc.message)"},{"line_number":495,"context_line":"            return None, False"},{"line_number":496,"context_line":""},{"line_number":497,"context_line":"        return None, True"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa1b9901_e3e32704","line":494,"updated":"2015-08-22 13:44:27.000000000","message":"Need _LE marker.\n\nThis message should have a little more information like the one on line 467 and have the _LE marker.","commit_id":"4da476a72dd57bd63b59d80a7efb8c1d1219de73"},{"author":{"_account_id":13524,"name":"Diem Tran","email":"diem.tran@oracle.com","username":"dttran"},"change_message_id":"b30524670dce06ad36464f6f43e46689f96019a4","unresolved":false,"context_lines":[{"line_number":491,"context_line":"            if cachevol_size \u003c volume[\u0027size\u0027]:"},{"line_number":492,"context_line":"                self.extend_volume(volume, volume[\u0027size\u0027])"},{"line_number":493,"context_line":"        except exception.VolumeBackendAPIException as exc:"},{"line_number":494,"context_line":"            LOG.error(exc.message)"},{"line_number":495,"context_line":"            return None, False"},{"line_number":496,"context_line":""},{"line_number":497,"context_line":"        return None, True"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa1b9901_ff08702a","line":494,"in_reply_to":"fa1b9901_e3e32704","updated":"2015-08-24 15:34:58.000000000","message":"Done","commit_id":"4da476a72dd57bd63b59d80a7efb8c1d1219de73"},{"author":{"_account_id":17909,"name":"Pascal Ledru","email":"pascal.ledru@oracle.com","username":"PascalLedru"},"change_message_id":"b2c2a7c999d4a3c07a32b0a0565eaf104c30ec1b","unresolved":false,"context_lines":[{"line_number":443,"context_line":"        (1) If there is no existing cache volume, create one and transfer"},{"line_number":444,"context_line":"        image data to it. Take a snapshot."},{"line_number":445,"context_line":""},{"line_number":446,"context_line":"        (2) If a cache volume already exists, verify if it either is alternated"},{"line_number":447,"context_line":"        or updated. If so try to remove it, raise exception if removal fails."},{"line_number":448,"context_line":"        Create a new cache volume as in (1)."},{"line_number":449,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"fa1b9901_1ac76413","line":446,"updated":"2015-08-24 20:34:04.000000000","message":"verify it is either alternated","commit_id":"317b1157882149a88df1058a582002b4e06707ec"},{"author":{"_account_id":13524,"name":"Diem Tran","email":"diem.tran@oracle.com","username":"dttran"},"change_message_id":"c5b58ccc227b5fd2d7d7c9de6e8e7b0755eaed3c","unresolved":false,"context_lines":[{"line_number":443,"context_line":"        (1) If there is no existing cache volume, create one and transfer"},{"line_number":444,"context_line":"        image data to it. Take a snapshot."},{"line_number":445,"context_line":""},{"line_number":446,"context_line":"        (2) If a cache volume already exists, verify if it either is alternated"},{"line_number":447,"context_line":"        or updated. If so try to remove it, raise exception if removal fails."},{"line_number":448,"context_line":"        Create a new cache volume as in (1)."},{"line_number":449,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"fa1b9901_cd11345f","line":446,"in_reply_to":"fa1b9901_1ac76413","updated":"2015-08-24 20:48:49.000000000","message":"Done","commit_id":"317b1157882149a88df1058a582002b4e06707ec"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"6760b6ce8a7881b094d20f66e83a64f22f3cccd1","unresolved":false,"context_lines":[{"line_number":501,"context_line":""},{"line_number":502,"context_line":"        return None, True"},{"line_number":503,"context_line":""},{"line_number":504,"context_line":"    @utils.synchronized(\u0027zfssaiscsi\u0027, external\u003dTrue)"},{"line_number":505,"context_line":"    def _verify_cache_volume(self, context, img_meta,"},{"line_number":506,"context_line":"                             img_service, specs, cachevol_props):"},{"line_number":507,"context_line":"        \"\"\"Verify if we have a cache volume that we want."}],"source_content_type":"text/x-python","patch_set":12,"id":"fa1b9901_f7a16947","line":504,"updated":"2015-08-24 19:53:22.000000000","message":"Do we really need the local file lock for this to work?","commit_id":"317b1157882149a88df1058a582002b4e06707ec"},{"author":{"_account_id":13524,"name":"Diem Tran","email":"diem.tran@oracle.com","username":"dttran"},"change_message_id":"4ae88cf1e35c31b7387a6288f7e35683ed39063a","unresolved":false,"context_lines":[{"line_number":501,"context_line":""},{"line_number":502,"context_line":"        return None, True"},{"line_number":503,"context_line":""},{"line_number":504,"context_line":"    @utils.synchronized(\u0027zfssaiscsi\u0027, external\u003dTrue)"},{"line_number":505,"context_line":"    def _verify_cache_volume(self, context, img_meta,"},{"line_number":506,"context_line":"                             img_service, specs, cachevol_props):"},{"line_number":507,"context_line":"        \"\"\"Verify if we have a cache volume that we want."}],"source_content_type":"text/x-python","patch_set":12,"id":"fa1b9901_5a907c95","line":504,"in_reply_to":"fa1b9901_f7a16947","updated":"2015-08-24 20:06:48.000000000","message":"Yes, there needs to be a file lock here, otherwise there is a race condition when multiple volumes are being created from the same images.\n\nIf there is no file lock and there is a request to create the 2nd volume, while the 1st volume\u0027s request is still pending, and the cache volume is still being created, the 2nd volume\u0027s request will fail.","commit_id":"317b1157882149a88df1058a582002b4e06707ec"},{"author":{"_account_id":17909,"name":"Pascal Ledru","email":"pascal.ledru@oracle.com","username":"PascalLedru"},"change_message_id":"b2c2a7c999d4a3c07a32b0a0565eaf104c30ec1b","unresolved":false,"context_lines":[{"line_number":550,"context_line":"            LOG.error(exception_msg)"},{"line_number":551,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dexception_msg)"},{"line_number":552,"context_line":""},{"line_number":553,"context_line":"        # A cache volume does exists, check if it\u0027s updated:"},{"line_number":554,"context_line":"        if ((cache_vol[\u0027updated_at\u0027] !\u003d updated_at) or"},{"line_number":555,"context_line":"                (cache_vol[\u0027image_id\u0027] !\u003d img_meta[\u0027id\u0027])):"},{"line_number":556,"context_line":"            # The cache volume is updated, but has clones:"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa1b9901_bad678c1","line":553,"updated":"2015-08-24 20:34:04.000000000","message":"does exist","commit_id":"317b1157882149a88df1058a582002b4e06707ec"},{"author":{"_account_id":13524,"name":"Diem Tran","email":"diem.tran@oracle.com","username":"dttran"},"change_message_id":"c5b58ccc227b5fd2d7d7c9de6e8e7b0755eaed3c","unresolved":false,"context_lines":[{"line_number":550,"context_line":"            LOG.error(exception_msg)"},{"line_number":551,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dexception_msg)"},{"line_number":552,"context_line":""},{"line_number":553,"context_line":"        # A cache volume does exists, check if it\u0027s updated:"},{"line_number":554,"context_line":"        if ((cache_vol[\u0027updated_at\u0027] !\u003d updated_at) or"},{"line_number":555,"context_line":"                (cache_vol[\u0027image_id\u0027] !\u003d img_meta[\u0027id\u0027])):"},{"line_number":556,"context_line":"            # The cache volume is updated, but has clones:"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa1b9901_ad07201c","line":553,"in_reply_to":"fa1b9901_bad678c1","updated":"2015-08-24 20:48:49.000000000","message":"Done","commit_id":"317b1157882149a88df1058a582002b4e06707ec"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"6760b6ce8a7881b094d20f66e83a64f22f3cccd1","unresolved":false,"context_lines":[{"line_number":727,"context_line":""},{"line_number":728,"context_line":"        return result"},{"line_number":729,"context_line":""},{"line_number":730,"context_line":"    @utils.synchronized(\u0027zfssaiscsi\u0027, external\u003dTrue)"},{"line_number":731,"context_line":"    def _check_origin(self, lun, volname):"},{"line_number":732,"context_line":"        \"\"\"Verify the cache volume of a bootable volume."},{"line_number":733,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"fa1b9901_d7e785aa","line":730,"updated":"2015-08-24 19:53:22.000000000","message":"Is there a reason for the local file lock here?","commit_id":"317b1157882149a88df1058a582002b4e06707ec"},{"author":{"_account_id":13524,"name":"Diem Tran","email":"diem.tran@oracle.com","username":"dttran"},"change_message_id":"4ae88cf1e35c31b7387a6288f7e35683ed39063a","unresolved":false,"context_lines":[{"line_number":727,"context_line":""},{"line_number":728,"context_line":"        return result"},{"line_number":729,"context_line":""},{"line_number":730,"context_line":"    @utils.synchronized(\u0027zfssaiscsi\u0027, external\u003dTrue)"},{"line_number":731,"context_line":"    def _check_origin(self, lun, volname):"},{"line_number":732,"context_line":"        \"\"\"Verify the cache volume of a bootable volume."},{"line_number":733,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"fa1b9901_5aaddc86","line":730,"in_reply_to":"fa1b9901_d7e785aa","updated":"2015-08-24 20:06:48.000000000","message":"A cache volume should be deleted if it has no clone anymore. To achieve this, its number of clones has to be reported accurately. \n\nThere is a small lag between the time a clone is deleted and the number of clones is updated accordingly. \n\nThere is also a race condition here when multiple volumes (clones of a cache volume) are deleted at once, leading to the number of clones reported incorrectly. \n\nThe file lock is here to avoid all that.","commit_id":"317b1157882149a88df1058a582002b4e06707ec"},{"author":{"_account_id":17909,"name":"Pascal Ledru","email":"pascal.ledru@oracle.com","username":"PascalLedru"},"change_message_id":"b2c2a7c999d4a3c07a32b0a0565eaf104c30ec1b","unresolved":false,"context_lines":[{"line_number":757,"context_line":"                self.zfssa.get_lun(lcfg.zfssa_pool,"},{"line_number":758,"context_line":"                                   lcfg.zfssa_project,"},{"line_number":759,"context_line":"                                   volname)"},{"line_number":760,"context_line":"                # The volume does exists, so return"},{"line_number":761,"context_line":"                return"},{"line_number":762,"context_line":"            except exception.VolumeNotFound:"},{"line_number":763,"context_line":"                # The volume is already deleted"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa1b9901_7aa54045","line":760,"updated":"2015-08-24 20:34:04.000000000","message":"does exist","commit_id":"317b1157882149a88df1058a582002b4e06707ec"},{"author":{"_account_id":13524,"name":"Diem Tran","email":"diem.tran@oracle.com","username":"dttran"},"change_message_id":"c5b58ccc227b5fd2d7d7c9de6e8e7b0755eaed3c","unresolved":false,"context_lines":[{"line_number":757,"context_line":"                self.zfssa.get_lun(lcfg.zfssa_pool,"},{"line_number":758,"context_line":"                                   lcfg.zfssa_project,"},{"line_number":759,"context_line":"                                   volname)"},{"line_number":760,"context_line":"                # The volume does exists, so return"},{"line_number":761,"context_line":"                return"},{"line_number":762,"context_line":"            except exception.VolumeNotFound:"},{"line_number":763,"context_line":"                # The volume is already deleted"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa1b9901_6d010806","line":760,"in_reply_to":"fa1b9901_7aa54045","updated":"2015-08-24 20:48:49.000000000","message":"Done","commit_id":"317b1157882149a88df1058a582002b4e06707ec"}],"cinder/volume/drivers/zfssa/zfssanfs.py":[{"author":{"_account_id":6043,"name":"Kurt Martin","email":"kurt.f.martin@hpe.com","username":"kurt-f-martin"},"change_message_id":"579c25417481e078ab24b07c6092504e839b9a19","unresolved":false,"context_lines":[{"line_number":53,"context_line":"               help\u003d\u0027Synchronous write bias-latency, throughput.\u0027),"},{"line_number":54,"context_line":"    cfg.IntOpt(\u0027zfssa_rest_timeout\u0027,"},{"line_number":55,"context_line":"               help\u003d\u0027REST connection timeout. (seconds)\u0027),"},{"line_number":56,"context_line":"    cfg.BoolOpt(\u0027zfssa_enable_local_cache\u0027, default\u003dTrue,"},{"line_number":57,"context_line":"                help\u003d\u0027Flag to enable local caching: True, False.\u0027),"},{"line_number":58,"context_line":"    cfg.StrOpt(\u0027zfssa_cache_directory\u0027, default\u003d\u0027os-cinder-cache\u0027,"},{"line_number":59,"context_line":"               help\u003d(\u0027Name of directory inside zfssa_nfs_share where cache \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_a9f54f51","line":56,"updated":"2015-08-12 22:43:40.000000000","message":"same as other driver","commit_id":"69ab02f148d7ebf65f4716c772deaf62fedc7821"},{"author":{"_account_id":13524,"name":"Diem Tran","email":"diem.tran@oracle.com","username":"dttran"},"change_message_id":"76c3b41d910abc6fa24d82b17f6450f1f388b50b","unresolved":false,"context_lines":[{"line_number":53,"context_line":"               help\u003d\u0027Synchronous write bias-latency, throughput.\u0027),"},{"line_number":54,"context_line":"    cfg.IntOpt(\u0027zfssa_rest_timeout\u0027,"},{"line_number":55,"context_line":"               help\u003d\u0027REST connection timeout. (seconds)\u0027),"},{"line_number":56,"context_line":"    cfg.BoolOpt(\u0027zfssa_enable_local_cache\u0027, default\u003dTrue,"},{"line_number":57,"context_line":"                help\u003d\u0027Flag to enable local caching: True, False.\u0027),"},{"line_number":58,"context_line":"    cfg.StrOpt(\u0027zfssa_cache_directory\u0027, default\u003d\u0027os-cinder-cache\u0027,"},{"line_number":59,"context_line":"               help\u003d(\u0027Name of directory inside zfssa_nfs_share where cache \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_67c74745","line":56,"in_reply_to":"1a4dcd0f_a9f54f51","updated":"2015-08-13 19:42:36.000000000","message":"Done","commit_id":"69ab02f148d7ebf65f4716c772deaf62fedc7821"},{"author":{"_account_id":6043,"name":"Kurt Martin","email":"kurt.f.martin@hpe.com","username":"kurt-f-martin"},"change_message_id":"579c25417481e078ab24b07c6092504e839b9a19","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    return zfssarest.ZFSSANfsApi()"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"class ZFSSANFSDriver(nfs.NfsDriver):"},{"line_number":74,"context_line":"    VERSION \u003d \u00271.0.0\u0027"},{"line_number":75,"context_line":"    volume_backend_name \u003d \u0027ZFSSA_NFS\u0027"},{"line_number":76,"context_line":"    protocol \u003d driver_prefix \u003d driver_volume_type \u003d \u0027nfs\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_64a0cef4","line":73,"updated":"2015-08-12 22:43:40.000000000","message":"Did you want to increase the driver version since changes were made?","commit_id":"69ab02f148d7ebf65f4716c772deaf62fedc7821"},{"author":{"_account_id":6043,"name":"Kurt Martin","email":"kurt.f.martin@hpe.com","username":"kurt-f-martin"},"change_message_id":"579c25417481e078ab24b07c6092504e839b9a19","unresolved":false,"context_lines":[{"line_number":286,"context_line":"        if vol_props[\u0027origin\u0027].startswith(lcfg.zfssa_cache_directory):"},{"line_number":287,"context_line":"            self._check_origin(volume[\u0027name\u0027], vol_props[\u0027origin\u0027])"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"    @utils.synchronized(\u0027zfssanfs\u0027, external\u003dTrue)"},{"line_number":290,"context_line":"    def _check_origin(self, volume, origin):"},{"line_number":291,"context_line":"        LOG.debug(\u0027Checking origin of volume %s.\u0027, volume)"},{"line_number":292,"context_line":"        cachevol_props \u003d self.zfssa.get_volume(origin)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_09b4837f","line":289,"updated":"2015-08-12 22:43:40.000000000","message":"we are trying to get rid of lock file locks, to provide Cinder active-active HA, are these really needed?","commit_id":"69ab02f148d7ebf65f4716c772deaf62fedc7821"},{"author":{"_account_id":13524,"name":"Diem Tran","email":"diem.tran@oracle.com","username":"dttran"},"change_message_id":"76c3b41d910abc6fa24d82b17f6450f1f388b50b","unresolved":false,"context_lines":[{"line_number":286,"context_line":"        if vol_props[\u0027origin\u0027].startswith(lcfg.zfssa_cache_directory):"},{"line_number":287,"context_line":"            self._check_origin(volume[\u0027name\u0027], vol_props[\u0027origin\u0027])"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"    @utils.synchronized(\u0027zfssanfs\u0027, external\u003dTrue)"},{"line_number":290,"context_line":"    def _check_origin(self, volume, origin):"},{"line_number":291,"context_line":"        LOG.debug(\u0027Checking origin of volume %s.\u0027, volume)"},{"line_number":292,"context_line":"        cachevol_props \u003d self.zfssa.get_volume(origin)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_87fb737a","line":289,"in_reply_to":"1a4dcd0f_09b4837f","updated":"2015-08-13 19:42:36.000000000","message":"Yes, because there is a race condition when accessing the cache volumes, so there needs to be a lock here to avoid that.","commit_id":"69ab02f148d7ebf65f4716c772deaf62fedc7821"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"a51556b753310e7599f5a61dcf66eed4b09eb9dc","unresolved":false,"context_lines":[{"line_number":310,"context_line":"        image data to it. Take a snapshot."},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"        (2) If a cache volume already exists, verify if it is alternated or"},{"line_number":313,"context_line":"        updated. If so try to remove it, raise exception if removal fails."},{"line_number":314,"context_line":"        Create a new cache volume as in (1)."},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"        Clone a volume from the cache volume and returns it to Cinder."}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_3bde653e","line":313,"updated":"2015-08-12 21:15:31.000000000","message":"If so? Do you mean if it is alternated remove it? or if it is updated remove it? If you could rephrase that sentence, that would be awesome.","commit_id":"69ab02f148d7ebf65f4716c772deaf62fedc7821"},{"author":{"_account_id":13524,"name":"Diem Tran","email":"diem.tran@oracle.com","username":"dttran"},"change_message_id":"76c3b41d910abc6fa24d82b17f6450f1f388b50b","unresolved":false,"context_lines":[{"line_number":310,"context_line":"        image data to it. Take a snapshot."},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"        (2) If a cache volume already exists, verify if it is alternated or"},{"line_number":313,"context_line":"        updated. If so try to remove it, raise exception if removal fails."},{"line_number":314,"context_line":"        Create a new cache volume as in (1)."},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"        Clone a volume from the cache volume and returns it to Cinder."}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_e7991720","line":313,"in_reply_to":"1a4dcd0f_3bde653e","updated":"2015-08-13 19:42:36.000000000","message":"Done","commit_id":"69ab02f148d7ebf65f4716c772deaf62fedc7821"},{"author":{"_account_id":6043,"name":"Kurt Martin","email":"kurt.f.martin@hpe.com","username":"kurt-f-martin"},"change_message_id":"579c25417481e078ab24b07c6092504e839b9a19","unresolved":false,"context_lines":[{"line_number":363,"context_line":""},{"line_number":364,"context_line":"        return clone_vol, True"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"    @utils.synchronized(\u0027zfssanfs\u0027, external\u003dTrue)"},{"line_number":367,"context_line":"    def _update_origin(self, vol_name, cachevol_name):"},{"line_number":368,"context_line":"        volume_origin \u003d {\u0027origin\u0027: cachevol_name}"},{"line_number":369,"context_line":"        self.zfssa.set_file_props(vol_name, volume_origin)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_096b23f2","line":366,"updated":"2015-08-12 22:43:40.000000000","message":"same as above, are the locks required?","commit_id":"69ab02f148d7ebf65f4716c772deaf62fedc7821"},{"author":{"_account_id":13524,"name":"Diem Tran","email":"diem.tran@oracle.com","username":"dttran"},"change_message_id":"76c3b41d910abc6fa24d82b17f6450f1f388b50b","unresolved":false,"context_lines":[{"line_number":363,"context_line":""},{"line_number":364,"context_line":"        return clone_vol, True"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"    @utils.synchronized(\u0027zfssanfs\u0027, external\u003dTrue)"},{"line_number":367,"context_line":"    def _update_origin(self, vol_name, cachevol_name):"},{"line_number":368,"context_line":"        volume_origin \u003d {\u0027origin\u0027: cachevol_name}"},{"line_number":369,"context_line":"        self.zfssa.set_file_props(vol_name, volume_origin)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_c7197b89","line":366,"in_reply_to":"1a4dcd0f_096b23f2","updated":"2015-08-13 19:42:36.000000000","message":"Yes, it\u0027s required for the same reason.","commit_id":"69ab02f148d7ebf65f4716c772deaf62fedc7821"},{"author":{"_account_id":17909,"name":"Pascal Ledru","email":"pascal.ledru@oracle.com","username":"PascalLedru"},"change_message_id":"f5a8d0f6076152c6a690a9d2f8c4edcd98204799","unresolved":false,"context_lines":[{"line_number":454,"context_line":""},{"line_number":455,"context_line":"        except Exception as exc:"},{"line_number":456,"context_line":"            LOG.debug(\u0027Fail to create cache volume %(volume)s. Error: %(err)s\u0027,"},{"line_number":457,"context_line":"                      {\u0027volume\u0027: cache_vol[\u0027name\u0027], \u0027err\u0027: six.text_type(exc)})"},{"line_number":458,"context_line":"            self.zfssa.delete_file(cache_vol[\u0027name\u0027]))"},{"line_number":459,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dexc_msg)"},{"line_number":460,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_9880b6c0","line":457,"updated":"2015-08-13 14:38:01.000000000","message":"Do you need to import the six library?","commit_id":"69ab02f148d7ebf65f4716c772deaf62fedc7821"},{"author":{"_account_id":11509,"name":"Juan Zuluaga","email":"juan.c.zuluaga@oracle.com","username":"juzuluag"},"change_message_id":"d487f4ee22f4d3c1b4afd7179bde3772adc5e61e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"1a4dcd0f_53cad16f","updated":"2015-08-14 17:05:17.000000000","message":"need copyright changes","commit_id":"2f8ef5cb2180a5b79d6bc486874fbf91b51fb2aa"},{"author":{"_account_id":13524,"name":"Diem Tran","email":"diem.tran@oracle.com","username":"dttran"},"change_message_id":"4cb0feacddb95939ae6ed6b44cc3fc6db973637b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"1a4dcd0f_d61eca5e","in_reply_to":"1a4dcd0f_53cad16f","updated":"2015-08-14 18:48:51.000000000","message":"Done","commit_id":"2f8ef5cb2180a5b79d6bc486874fbf91b51fb2aa"},{"author":{"_account_id":11509,"name":"Juan Zuluaga","email":"juan.c.zuluaga@oracle.com","username":"juzuluag"},"change_message_id":"ddfb621ef5b35a4592d30706b4814602818b92b3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_7c523537","line":1,"updated":"2015-08-14 19:49:07.000000000","message":"need copyright changes","commit_id":"2ee16a71d2e10111ced0dfc3bb71035058151465"},{"author":{"_account_id":13524,"name":"Diem Tran","email":"diem.tran@oracle.com","username":"dttran"},"change_message_id":"6611f08cdbe39c813de48bd316ca075bd6205621","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa1b9901_175bce2f","line":1,"in_reply_to":"1a4dcd0f_7c523537","updated":"2015-08-18 19:35:09.000000000","message":"Done","commit_id":"2ee16a71d2e10111ced0dfc3bb71035058151465"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"69497f4f9aaa89e4935181c6590bd14d0bb65500","unresolved":false,"context_lines":[{"line_number":58,"context_line":"                help\u003d\u0027Flag to enable local caching: True, False.\u0027),"},{"line_number":59,"context_line":"    cfg.StrOpt(\u0027zfssa_cache_directory\u0027, default\u003d\u0027os-cinder-cache\u0027,"},{"line_number":60,"context_line":"               help\u003d(\u0027Name of directory inside zfssa_nfs_share where cache \u0027"},{"line_number":61,"context_line":"                     \u0027volumes are stored.\u0027))"},{"line_number":62,"context_line":"]"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"LOG \u003d log.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_e8551ffa","line":61,"updated":"2015-08-14 21:04:09.000000000","message":"You probably don\u0027t need the inner () because you are using quotes.","commit_id":"2ee16a71d2e10111ced0dfc3bb71035058151465"},{"author":{"_account_id":13524,"name":"Diem Tran","email":"diem.tran@oracle.com","username":"dttran"},"change_message_id":"6611f08cdbe39c813de48bd316ca075bd6205621","unresolved":false,"context_lines":[{"line_number":58,"context_line":"                help\u003d\u0027Flag to enable local caching: True, False.\u0027),"},{"line_number":59,"context_line":"    cfg.StrOpt(\u0027zfssa_cache_directory\u0027, default\u003d\u0027os-cinder-cache\u0027,"},{"line_number":60,"context_line":"               help\u003d(\u0027Name of directory inside zfssa_nfs_share where cache \u0027"},{"line_number":61,"context_line":"                     \u0027volumes are stored.\u0027))"},{"line_number":62,"context_line":"]"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"LOG \u003d log.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa1b9901_579f06b4","line":61,"in_reply_to":"1a4dcd0f_e8551ffa","updated":"2015-08-18 19:35:09.000000000","message":"Done","commit_id":"2ee16a71d2e10111ced0dfc3bb71035058151465"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"69497f4f9aaa89e4935181c6590bd14d0bb65500","unresolved":false,"context_lines":[{"line_number":326,"context_line":"            return None, False"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"        cache_dir \u003d \u0027%s/\u0027 % lcfg.zfssa_cache_directory"},{"line_number":329,"context_line":"        updated_at \u003d str(image_meta[\u0027updated_at\u0027].isoformat())"},{"line_number":330,"context_line":"        meta \u003d {"},{"line_number":331,"context_line":"            \u0027cachevol_name\u0027: \u0027%sos-cache-vol-%s\u0027 % (cache_dir,"},{"line_number":332,"context_line":"                                                    image_meta[\u0027id\u0027]),"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_a8ae37e5","line":329,"updated":"2015-08-14 21:04:09.000000000","message":"str -\u003e six.text_type","commit_id":"2ee16a71d2e10111ced0dfc3bb71035058151465"},{"author":{"_account_id":13524,"name":"Diem Tran","email":"diem.tran@oracle.com","username":"dttran"},"change_message_id":"6611f08cdbe39c813de48bd316ca075bd6205621","unresolved":false,"context_lines":[{"line_number":326,"context_line":"            return None, False"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"        cache_dir \u003d \u0027%s/\u0027 % lcfg.zfssa_cache_directory"},{"line_number":329,"context_line":"        updated_at \u003d str(image_meta[\u0027updated_at\u0027].isoformat())"},{"line_number":330,"context_line":"        meta \u003d {"},{"line_number":331,"context_line":"            \u0027cachevol_name\u0027: \u0027%sos-cache-vol-%s\u0027 % (cache_dir,"},{"line_number":332,"context_line":"                                                    image_meta[\u0027id\u0027]),"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa1b9901_37ea9210","line":329,"in_reply_to":"1a4dcd0f_a8ae37e5","updated":"2015-08-18 19:35:09.000000000","message":"Done","commit_id":"2ee16a71d2e10111ced0dfc3bb71035058151465"},{"author":{"_account_id":11509,"name":"Juan Zuluaga","email":"juan.c.zuluaga@oracle.com","username":"juzuluag"},"change_message_id":"ddfb621ef5b35a4592d30706b4814602818b92b3","unresolved":false,"context_lines":[{"line_number":358,"context_line":""},{"line_number":359,"context_line":"        return clone_vol, True"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"    @utils.synchronized(\u0027zfssanfs\u0027, external\u003dTrue)"},{"line_number":362,"context_line":"    def _check_origin(self, origin):"},{"line_number":363,"context_line":"        \"\"\"Verify the cache volume of a bootable volume."},{"line_number":364,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_a712ea56","line":361,"updated":"2015-08-14 19:49:07.000000000","message":"Not sure why this is here only. It should be on both delete_volume methods (iscsi and nfs).\nIt\u0027s confusing to know why this lock is in one place and in the other driver in a different place.","commit_id":"2ee16a71d2e10111ced0dfc3bb71035058151465"},{"author":{"_account_id":13524,"name":"Diem Tran","email":"diem.tran@oracle.com","username":"dttran"},"change_message_id":"6611f08cdbe39c813de48bd316ca075bd6205621","unresolved":false,"context_lines":[{"line_number":358,"context_line":""},{"line_number":359,"context_line":"        return clone_vol, True"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"    @utils.synchronized(\u0027zfssanfs\u0027, external\u003dTrue)"},{"line_number":362,"context_line":"    def _check_origin(self, origin):"},{"line_number":363,"context_line":"        \"\"\"Verify the cache volume of a bootable volume."},{"line_number":364,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"fa1b9901_77e80a11","line":361,"in_reply_to":"1a4dcd0f_a712ea56","updated":"2015-08-18 19:35:09.000000000","message":"There was a lag before in iscsi driver, but I\u0027ve worked around it by re-verifying the lun. So I\u0027ve moved the decorator to _check_origin in zfssaiscsi.py as well.","commit_id":"2ee16a71d2e10111ced0dfc3bb71035058151465"},{"author":{"_account_id":11509,"name":"Juan Zuluaga","email":"juan.c.zuluaga@oracle.com","username":"juzuluag"},"change_message_id":"ddfb621ef5b35a4592d30706b4814602818b92b3","unresolved":false,"context_lines":[{"line_number":375,"context_line":"            self.zfssa.set_file_props(origin, cachevol_props)"},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"    def _verify_cache_volume(self, context, img_meta, img_service, specs):"},{"line_number":378,"context_line":"        \"\"\"Verify if we have a cache volume that we want."},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"        If we don\u0027t, create one."},{"line_number":381,"context_line":"        If we do, check if it\u0027s been updated:"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_c73b76c7","line":378,"updated":"2015-08-14 19:49:07.000000000","message":"Seems like there is a LOT of common code between iscsi and nfs. Worth to try to put this in a common area. 1 change would help both implementations.","commit_id":"2ee16a71d2e10111ced0dfc3bb71035058151465"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"69497f4f9aaa89e4935181c6590bd14d0bb65500","unresolved":false,"context_lines":[{"line_number":375,"context_line":"            self.zfssa.set_file_props(origin, cachevol_props)"},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"    def _verify_cache_volume(self, context, img_meta, img_service, specs):"},{"line_number":378,"context_line":"        \"\"\"Verify if we have a cache volume that we want."},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"        If we don\u0027t, create one."},{"line_number":381,"context_line":"        If we do, check if it\u0027s been updated:"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_a895d788","line":378,"in_reply_to":"1a4dcd0f_c73b76c7","updated":"2015-08-14 21:04:09.000000000","message":"Good suggestion.","commit_id":"2ee16a71d2e10111ced0dfc3bb71035058151465"},{"author":{"_account_id":13524,"name":"Diem Tran","email":"diem.tran@oracle.com","username":"dttran"},"change_message_id":"6611f08cdbe39c813de48bd316ca075bd6205621","unresolved":false,"context_lines":[{"line_number":375,"context_line":"            self.zfssa.set_file_props(origin, cachevol_props)"},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"    def _verify_cache_volume(self, context, img_meta, img_service, specs):"},{"line_number":378,"context_line":"        \"\"\"Verify if we have a cache volume that we want."},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"        If we don\u0027t, create one."},{"line_number":381,"context_line":"        If we do, check if it\u0027s been updated:"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa1b9901_ccdce8e6","line":378,"in_reply_to":"1a4dcd0f_c73b76c7","updated":"2015-08-18 19:35:09.000000000","message":"I do agree there is common code, but there are also enough differences to make the refactoring work a separate effort, as it will involve more changes not related to the feature at all.\n\nI suggest we file a bug to track this refactor work.","commit_id":"2ee16a71d2e10111ced0dfc3bb71035058151465"},{"author":{"_account_id":11509,"name":"Juan Zuluaga","email":"juan.c.zuluaga@oracle.com","username":"juzuluag"},"change_message_id":"45a832d350f6274cbbbf075b99232bb3298751c9","unresolved":false,"context_lines":[{"line_number":375,"context_line":"            self.zfssa.set_file_props(origin, cachevol_props)"},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"    def _verify_cache_volume(self, context, img_meta, img_service, specs):"},{"line_number":378,"context_line":"        \"\"\"Verify if we have a cache volume that we want."},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"        If we don\u0027t, create one."},{"line_number":381,"context_line":"        If we do, check if it\u0027s been updated:"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa1b9901_3270ab3f","line":378,"in_reply_to":"fa1b9901_ccdce8e6","updated":"2015-08-21 17:17:31.000000000","message":"So I would suggest you to file a bug to cover this up.","commit_id":"2ee16a71d2e10111ced0dfc3bb71035058151465"},{"author":{"_account_id":11509,"name":"Juan Zuluaga","email":"juan.c.zuluaga@oracle.com","username":"juzuluag"},"change_message_id":"ddfb621ef5b35a4592d30706b4814602818b92b3","unresolved":false,"context_lines":[{"line_number":432,"context_line":"        return cachevol_name"},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"    def _create_cache_volume(self, context, img_meta, img_service, specs):"},{"line_number":435,"context_line":"        \"\"\"Create a cache volume from an image."},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"        Returns name of the cache volume."},{"line_number":438,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_87456e44","line":435,"updated":"2015-08-14 19:49:07.000000000","message":"Same comment as the above. (common code)","commit_id":"2ee16a71d2e10111ced0dfc3bb71035058151465"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"69497f4f9aaa89e4935181c6590bd14d0bb65500","unresolved":false,"context_lines":[{"line_number":456,"context_line":"                         \u0027Error: %(err)s\u0027),"},{"line_number":457,"context_line":"                       {\u0027volume\u0027: cache_vol[\u0027name\u0027],"},{"line_number":458,"context_line":"                        \u0027err\u0027: six.text_type(exc)})"},{"line_number":459,"context_line":"            LOG.debug(exc_msg)"},{"line_number":460,"context_line":"            self.zfssa.delete_file(cache_vol[\u0027name\u0027])"},{"line_number":461,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dexc_msg)"},{"line_number":462,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_08f5ebeb","line":459,"updated":"2015-08-14 21:04:09.000000000","message":"This should be LOG.error  If it is debug, you shouldn\u0027t use _.","commit_id":"2ee16a71d2e10111ced0dfc3bb71035058151465"},{"author":{"_account_id":11509,"name":"Juan Zuluaga","email":"juan.c.zuluaga@oracle.com","username":"juzuluag"},"change_message_id":"ddfb621ef5b35a4592d30706b4814602818b92b3","unresolved":false,"context_lines":[{"line_number":482,"context_line":"        return free, used"},{"line_number":483,"context_line":""},{"line_number":484,"context_line":"    @utils.synchronized(\u0027zfssanfs\u0027, external\u003dTrue)"},{"line_number":485,"context_line":"    def _update_origin(self, vol_name, cachevol_name):"},{"line_number":486,"context_line":"        volume_origin \u003d {\u0027origin\u0027: cachevol_name}"},{"line_number":487,"context_line":"        self.zfssa.set_file_props(vol_name, volume_origin)"},{"line_number":488,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_c76296d9","line":485,"updated":"2015-08-14 19:49:07.000000000","message":"Not sure why this lock is in here. Worth an explanation what is going on in order to put this lock in.","commit_id":"2ee16a71d2e10111ced0dfc3bb71035058151465"},{"author":{"_account_id":13524,"name":"Diem Tran","email":"diem.tran@oracle.com","username":"dttran"},"change_message_id":"6611f08cdbe39c813de48bd316ca075bd6205621","unresolved":false,"context_lines":[{"line_number":482,"context_line":"        return free, used"},{"line_number":483,"context_line":""},{"line_number":484,"context_line":"    @utils.synchronized(\u0027zfssanfs\u0027, external\u003dTrue)"},{"line_number":485,"context_line":"    def _update_origin(self, vol_name, cachevol_name):"},{"line_number":486,"context_line":"        volume_origin \u003d {\u0027origin\u0027: cachevol_name}"},{"line_number":487,"context_line":"        self.zfssa.set_file_props(vol_name, volume_origin)"},{"line_number":488,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"fa1b9901_4e4be887","line":485,"in_reply_to":"1a4dcd0f_c76296d9","updated":"2015-08-18 19:35:09.000000000","message":"Done","commit_id":"2ee16a71d2e10111ced0dfc3bb71035058151465"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"69497f4f9aaa89e4935181c6590bd14d0bb65500","unresolved":false,"context_lines":[{"line_number":488,"context_line":""},{"line_number":489,"context_line":"        cache_props \u003d self.zfssa.get_volume(cachevol_name)"},{"line_number":490,"context_line":"        cache_props.update({\u0027numclones\u0027:"},{"line_number":491,"context_line":"                            str(cache_props[\u0027numclones\u0027] + 1)})"},{"line_number":492,"context_line":"        self.zfssa.set_file_props(cachevol_name, cache_props)"},{"line_number":493,"context_line":""},{"line_number":494,"context_line":"    def _update_volume_stats(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_88e1fb2c","line":491,"updated":"2015-08-14 21:04:09.000000000","message":"str -\u003e six.text_type","commit_id":"2ee16a71d2e10111ced0dfc3bb71035058151465"},{"author":{"_account_id":13524,"name":"Diem Tran","email":"diem.tran@oracle.com","username":"dttran"},"change_message_id":"6611f08cdbe39c813de48bd316ca075bd6205621","unresolved":false,"context_lines":[{"line_number":488,"context_line":""},{"line_number":489,"context_line":"        cache_props \u003d self.zfssa.get_volume(cachevol_name)"},{"line_number":490,"context_line":"        cache_props.update({\u0027numclones\u0027:"},{"line_number":491,"context_line":"                            str(cache_props[\u0027numclones\u0027] + 1)})"},{"line_number":492,"context_line":"        self.zfssa.set_file_props(cachevol_name, cache_props)"},{"line_number":493,"context_line":""},{"line_number":494,"context_line":"    def _update_volume_stats(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa1b9901_8e826093","line":491,"in_reply_to":"1a4dcd0f_88e1fb2c","updated":"2015-08-18 19:35:09.000000000","message":"Done","commit_id":"2ee16a71d2e10111ced0dfc3bb71035058151465"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"fd172e55365d903ee7737aace5fed2faadd601a9","unresolved":false,"context_lines":[{"line_number":444,"context_line":"                                                             img_meta[\u0027id\u0027])"},{"line_number":445,"context_line":""},{"line_number":446,"context_line":"        except Exception as exc:"},{"line_number":447,"context_line":"            exc_msg \u003d (_LE(\u0027Fail to create cache volume %(volume)s. \u0027"},{"line_number":448,"context_line":"                           \u0027Error: %(err)s\u0027),"},{"line_number":449,"context_line":"                       {\u0027volume\u0027: cache_vol[\u0027name\u0027],"},{"line_number":450,"context_line":"                        \u0027err\u0027: six.text_type(exc)})"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_2a3936d7","line":447,"updated":"2015-08-21 02:31:51.000000000","message":"This should still be _ instead of _LE because this message goes to the exception.","commit_id":"ac62a034b13091bbdc278c60c3380947552a9a03"},{"author":{"_account_id":13524,"name":"Diem Tran","email":"diem.tran@oracle.com","username":"dttran"},"change_message_id":"e6bd806ef2c9c40176a6a55ce3db27f49a94c156","unresolved":false,"context_lines":[{"line_number":444,"context_line":"                                                             img_meta[\u0027id\u0027])"},{"line_number":445,"context_line":""},{"line_number":446,"context_line":"        except Exception as exc:"},{"line_number":447,"context_line":"            exc_msg \u003d (_LE(\u0027Fail to create cache volume %(volume)s. \u0027"},{"line_number":448,"context_line":"                           \u0027Error: %(err)s\u0027),"},{"line_number":449,"context_line":"                       {\u0027volume\u0027: cache_vol[\u0027name\u0027],"},{"line_number":450,"context_line":"                        \u0027err\u0027: six.text_type(exc)})"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_ed09f495","line":447,"in_reply_to":"fa1b9901_2a3936d7","updated":"2015-08-21 15:22:42.000000000","message":"Done","commit_id":"ac62a034b13091bbdc278c60c3380947552a9a03"}],"cinder/volume/drivers/zfssa/zfssarest.py":[{"author":{"_account_id":11509,"name":"Juan Zuluaga","email":"juan.c.zuluaga@oracle.com","username":"juzuluag"},"change_message_id":"35c1f5066800a9b6099b67444e67ffb86bc91cf1","unresolved":false,"context_lines":[{"line_number":440,"context_line":"                                \u0027ret.status\u0027: ret.status,"},{"line_number":441,"context_line":"                                \u0027ret.data\u0027: ret.data})"},{"line_number":442,"context_line":"            LOG.error(exception_msg)"},{"line_number":443,"context_line":"            raise exception.VolumeNotFound(volume_id\u003dlun)"},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"        val \u003d json.loads(ret.data)"},{"line_number":446,"context_line":"        ret \u003d {"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_6463eeb1","line":443,"updated":"2015-08-12 23:13:11.000000000","message":"Why is this change related with the feature?","commit_id":"69ab02f148d7ebf65f4716c772deaf62fedc7821"},{"author":{"_account_id":13524,"name":"Diem Tran","email":"diem.tran@oracle.com","username":"dttran"},"change_message_id":"76c3b41d910abc6fa24d82b17f6450f1f388b50b","unresolved":false,"context_lines":[{"line_number":440,"context_line":"                                \u0027ret.status\u0027: ret.status,"},{"line_number":441,"context_line":"                                \u0027ret.data\u0027: ret.data})"},{"line_number":442,"context_line":"            LOG.error(exception_msg)"},{"line_number":443,"context_line":"            raise exception.VolumeNotFound(volume_id\u003dlun)"},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"        val \u003d json.loads(ret.data)"},{"line_number":446,"context_line":"        ret \u003d {"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_7b911f9a","line":443,"in_reply_to":"1a4dcd0f_6463eeb1","updated":"2015-08-13 19:42:36.000000000","message":"I believe changing it to VolumeNotFound would be more specific. And in zfssaiscsi._verify_cache_volume, this exception as well as SnapshotNotFound will be caught. It indicates that the cache volume is not available. For non-bootable volume this does no harm but is an improvement, because the exception is now clearer.","commit_id":"69ab02f148d7ebf65f4716c772deaf62fedc7821"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"a51556b753310e7599f5a61dcf66eed4b09eb9dc","unresolved":false,"context_lines":[{"line_number":689,"context_line":"        svc \u003d \"%s/%s\" % (base, schema[\u0027property\u0027])"},{"line_number":690,"context_line":"        ret \u003d self.rclient.get(svc)"},{"line_number":691,"context_line":"        if ret.status \u003d\u003d restclient.Status.OK:"},{"line_number":692,"context_line":"            LOG.warning(_LW(\u0027Property %s already exists\u0027), schema[\u0027property\u0027])"},{"line_number":693,"context_line":"            return"},{"line_number":694,"context_line":""},{"line_number":695,"context_line":"        ret \u003d self.rclient.post(base, schema)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_5b2d71fc","line":692,"updated":"2015-08-12 21:15:31.000000000","message":"\".\" at EOL","commit_id":"69ab02f148d7ebf65f4716c772deaf62fedc7821"},{"author":{"_account_id":13524,"name":"Diem Tran","email":"diem.tran@oracle.com","username":"dttran"},"change_message_id":"76c3b41d910abc6fa24d82b17f6450f1f388b50b","unresolved":false,"context_lines":[{"line_number":689,"context_line":"        svc \u003d \"%s/%s\" % (base, schema[\u0027property\u0027])"},{"line_number":690,"context_line":"        ret \u003d self.rclient.get(svc)"},{"line_number":691,"context_line":"        if ret.status \u003d\u003d restclient.Status.OK:"},{"line_number":692,"context_line":"            LOG.warning(_LW(\u0027Property %s already exists\u0027), schema[\u0027property\u0027])"},{"line_number":693,"context_line":"            return"},{"line_number":694,"context_line":""},{"line_number":695,"context_line":"        ret \u003d self.rclient.post(base, schema)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_dbcdd3bb","line":692,"in_reply_to":"1a4dcd0f_5b2d71fc","updated":"2015-08-13 19:42:36.000000000","message":"Done","commit_id":"69ab02f148d7ebf65f4716c772deaf62fedc7821"},{"author":{"_account_id":11509,"name":"Juan Zuluaga","email":"juan.c.zuluaga@oracle.com","username":"juzuluag"},"change_message_id":"2a2c820be31ef946e0b097e68f44f3077b93be7d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"1a4dcd0f_1dd32661","updated":"2015-08-13 20:57:31.000000000","message":"need to update copyright","commit_id":"2f8ef5cb2180a5b79d6bc486874fbf91b51fb2aa"},{"author":{"_account_id":8202,"name":"chenzongliang","email":"chenzongliang@huawei.com","username":"zongliang"},"change_message_id":"6e0483ddb342f24400bee21abcfc37eb2d32ecd2","unresolved":false,"context_lines":[{"line_number":493,"context_line":"        if initiatorgroup \u003d\u003d \u0027\u0027:"},{"line_number":494,"context_line":"            initiatorgroup \u003d \u0027com.sun.ms.vss.hg.maskAll\u0027"},{"line_number":495,"context_line":""},{"line_number":496,"context_line":"        svc \u003d \u0027/api/storage/v1/pools/\u0027 + pool + \u0027/projects/\u0027 + \\"},{"line_number":497,"context_line":"            project + \u0027/luns/\u0027 + lun"},{"line_number":498,"context_line":"        arg \u003d {"},{"line_number":499,"context_line":"            \u0027initiatorgroup\u0027: initiatorgroup"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_0212da09","line":496,"updated":"2015-08-14 01:21:25.000000000","message":"It is preferred to wrap long lines in parentheses and not a backslash for line continuation. Refer to http://docs.openstack.org/developer/hacking/","commit_id":"2f8ef5cb2180a5b79d6bc486874fbf91b51fb2aa"},{"author":{"_account_id":13524,"name":"Diem Tran","email":"diem.tran@oracle.com","username":"dttran"},"change_message_id":"35151537e64197d3e9312c32283038013069960b","unresolved":false,"context_lines":[{"line_number":493,"context_line":"        if initiatorgroup \u003d\u003d \u0027\u0027:"},{"line_number":494,"context_line":"            initiatorgroup \u003d \u0027com.sun.ms.vss.hg.maskAll\u0027"},{"line_number":495,"context_line":""},{"line_number":496,"context_line":"        svc \u003d \u0027/api/storage/v1/pools/\u0027 + pool + \u0027/projects/\u0027 + \\"},{"line_number":497,"context_line":"            project + \u0027/luns/\u0027 + lun"},{"line_number":498,"context_line":"        arg \u003d {"},{"line_number":499,"context_line":"            \u0027initiatorgroup\u0027: initiatorgroup"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_ec1b201b","line":496,"in_reply_to":"1a4dcd0f_0212da09","updated":"2015-08-14 03:24:54.000000000","message":"Hi chenzongliang,\n\nThis line is not included in the changeset. Making change to the line based only on your suggestion is irrelevant.","commit_id":"2f8ef5cb2180a5b79d6bc486874fbf91b51fb2aa"},{"author":{"_account_id":8202,"name":"chenzongliang","email":"chenzongliang@huawei.com","username":"zongliang"},"change_message_id":"6e0483ddb342f24400bee21abcfc37eb2d32ecd2","unresolved":false,"context_lines":[{"line_number":514,"context_line":""},{"line_number":515,"context_line":"    def delete_lun(self, pool, project, lun):"},{"line_number":516,"context_line":"        \"\"\"delete iscsi lun.\"\"\""},{"line_number":517,"context_line":"        svc \u003d \u0027/api/storage/v1/pools/\u0027 + pool + \u0027/projects/\u0027 + \\"},{"line_number":518,"context_line":"            project + \u0027/luns/\u0027 + lun"},{"line_number":519,"context_line":""},{"line_number":520,"context_line":"        ret \u003d self.rclient.delete(svc)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_a2f766d3","line":517,"updated":"2015-08-14 01:21:25.000000000","message":"the same above","commit_id":"2f8ef5cb2180a5b79d6bc486874fbf91b51fb2aa"},{"author":{"_account_id":13524,"name":"Diem Tran","email":"diem.tran@oracle.com","username":"dttran"},"change_message_id":"35151537e64197d3e9312c32283038013069960b","unresolved":false,"context_lines":[{"line_number":514,"context_line":""},{"line_number":515,"context_line":"    def delete_lun(self, pool, project, lun):"},{"line_number":516,"context_line":"        \"\"\"delete iscsi lun.\"\"\""},{"line_number":517,"context_line":"        svc \u003d \u0027/api/storage/v1/pools/\u0027 + pool + \u0027/projects/\u0027 + \\"},{"line_number":518,"context_line":"            project + \u0027/luns/\u0027 + lun"},{"line_number":519,"context_line":""},{"line_number":520,"context_line":"        ret \u003d self.rclient.delete(svc)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_ac1518e6","line":517,"in_reply_to":"1a4dcd0f_a2f766d3","updated":"2015-08-14 03:24:54.000000000","message":"same as above","commit_id":"2f8ef5cb2180a5b79d6bc486874fbf91b51fb2aa"},{"author":{"_account_id":11509,"name":"Juan Zuluaga","email":"juan.c.zuluaga@oracle.com","username":"juzuluag"},"change_message_id":"2a2c820be31ef946e0b097e68f44f3077b93be7d","unresolved":false,"context_lines":[{"line_number":638,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dexception_msg)"},{"line_number":639,"context_line":""},{"line_number":640,"context_line":"    def num_clones(self, pool, project, lun, snapshot):"},{"line_number":641,"context_line":"        \"\"\"Checks whether snapshot has clones or not.\"\"\""},{"line_number":642,"context_line":"        svc \u003d \u0027/api/storage/v1/pools/\u0027 + pool + \u0027/projects/\u0027 + \\"},{"line_number":643,"context_line":"            project + \u0027/luns/\u0027 + lun + \u0027/snapshots/\u0027 + snapshot"},{"line_number":644,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_3d9dc266","line":641,"updated":"2015-08-13 20:57:31.000000000","message":"comments are not accurate with the changes in behavior","commit_id":"2f8ef5cb2180a5b79d6bc486874fbf91b51fb2aa"},{"author":{"_account_id":11509,"name":"Juan Zuluaga","email":"juan.c.zuluaga@oracle.com","username":"juzuluag"},"change_message_id":"ddfb621ef5b35a4592d30706b4814602818b92b3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"1a4dcd0f_fc9ac561","updated":"2015-08-14 19:49:07.000000000","message":"need copyright changes","commit_id":"2ee16a71d2e10111ced0dfc3bb71035058151465"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"69497f4f9aaa89e4935181c6590bd14d0bb65500","unresolved":false,"context_lines":[{"line_number":460,"context_line":""},{"line_number":461,"context_line":"    def get_lun_snapshot(self, pool, project, lun, snapshot):"},{"line_number":462,"context_line":"        \"\"\"Return iscsi lun snapshot properties.\"\"\""},{"line_number":463,"context_line":"        svc \u003d \u0027/api/storage/v1/pools/\u0027 + pool + \u0027/projects/\u0027 + \\"},{"line_number":464,"context_line":"            project + \u0027/luns/\u0027 + lun + \u0027/snapshots/\u0027 + snapshot"},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"        ret \u003d self.rclient.get(svc)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_2d623917","line":463,"updated":"2015-08-14 21:04:09.000000000","message":"Please use () instead of \\","commit_id":"2ee16a71d2e10111ced0dfc3bb71035058151465"},{"author":{"_account_id":13524,"name":"Diem Tran","email":"diem.tran@oracle.com","username":"dttran"},"change_message_id":"6611f08cdbe39c813de48bd316ca075bd6205621","unresolved":false,"context_lines":[{"line_number":460,"context_line":""},{"line_number":461,"context_line":"    def get_lun_snapshot(self, pool, project, lun, snapshot):"},{"line_number":462,"context_line":"        \"\"\"Return iscsi lun snapshot properties.\"\"\""},{"line_number":463,"context_line":"        svc \u003d \u0027/api/storage/v1/pools/\u0027 + pool + \u0027/projects/\u0027 + \\"},{"line_number":464,"context_line":"            project + \u0027/luns/\u0027 + lun + \u0027/snapshots/\u0027 + snapshot"},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"        ret \u003d self.rclient.get(svc)"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa1b9901_ce2618ce","line":463,"in_reply_to":"1a4dcd0f_2d623917","updated":"2015-08-18 19:35:09.000000000","message":"Done","commit_id":"2ee16a71d2e10111ced0dfc3bb71035058151465"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"69497f4f9aaa89e4935181c6590bd14d0bb65500","unresolved":false,"context_lines":[{"line_number":465,"context_line":""},{"line_number":466,"context_line":"        ret \u003d self.rclient.get(svc)"},{"line_number":467,"context_line":"        if ret.status !\u003d restclient.Status.OK:"},{"line_number":468,"context_line":"            exception_msg \u003d (_(\u0027Error Getting \u0027"},{"line_number":469,"context_line":"                               \u0027Snapshot: %(snapshot)s of \u0027"},{"line_number":470,"context_line":"                               \u0027Volume: %(lun)s in \u0027"},{"line_number":471,"context_line":"                               \u0027Pool: %(pool)s, \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_0d3dfddc","line":468,"updated":"2015-08-14 21:04:09.000000000","message":"This should use _LE because it is logged as error but not in the exception message.","commit_id":"2ee16a71d2e10111ced0dfc3bb71035058151465"},{"author":{"_account_id":13524,"name":"Diem Tran","email":"diem.tran@oracle.com","username":"dttran"},"change_message_id":"6611f08cdbe39c813de48bd316ca075bd6205621","unresolved":false,"context_lines":[{"line_number":465,"context_line":""},{"line_number":466,"context_line":"        ret \u003d self.rclient.get(svc)"},{"line_number":467,"context_line":"        if ret.status !\u003d restclient.Status.OK:"},{"line_number":468,"context_line":"            exception_msg \u003d (_(\u0027Error Getting \u0027"},{"line_number":469,"context_line":"                               \u0027Snapshot: %(snapshot)s of \u0027"},{"line_number":470,"context_line":"                               \u0027Volume: %(lun)s in \u0027"},{"line_number":471,"context_line":"                               \u0027Pool: %(pool)s, \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa1b9901_8e302003","line":468,"in_reply_to":"1a4dcd0f_0d3dfddc","updated":"2015-08-18 19:35:09.000000000","message":"Done","commit_id":"2ee16a71d2e10111ced0dfc3bb71035058151465"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"69497f4f9aaa89e4935181c6590bd14d0bb65500","unresolved":false,"context_lines":[{"line_number":686,"context_line":"        \"\"\"Create a custom ZFSSA schema.\"\"\""},{"line_number":687,"context_line":"        base \u003d \u0027/api/storage/v1/schema\u0027"},{"line_number":688,"context_line":""},{"line_number":689,"context_line":"        svc \u003d \"%s/%s\" % (base, schema[\u0027property\u0027])"},{"line_number":690,"context_line":"        ret \u003d self.rclient.get(svc)"},{"line_number":691,"context_line":"        if ret.status \u003d\u003d restclient.Status.OK:"},{"line_number":692,"context_line":"            LOG.warning(_LW(\u0027Property %s already exists.\u0027), schema[\u0027property\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_ad0ba92a","line":689,"updated":"2015-08-14 21:04:09.000000000","message":"Please use named interpolation.","commit_id":"2ee16a71d2e10111ced0dfc3bb71035058151465"},{"author":{"_account_id":13524,"name":"Diem Tran","email":"diem.tran@oracle.com","username":"dttran"},"change_message_id":"6611f08cdbe39c813de48bd316ca075bd6205621","unresolved":false,"context_lines":[{"line_number":686,"context_line":"        \"\"\"Create a custom ZFSSA schema.\"\"\""},{"line_number":687,"context_line":"        base \u003d \u0027/api/storage/v1/schema\u0027"},{"line_number":688,"context_line":""},{"line_number":689,"context_line":"        svc \u003d \"%s/%s\" % (base, schema[\u0027property\u0027])"},{"line_number":690,"context_line":"        ret \u003d self.rclient.get(svc)"},{"line_number":691,"context_line":"        if ret.status \u003d\u003d restclient.Status.OK:"},{"line_number":692,"context_line":"            LOG.warning(_LW(\u0027Property %s already exists.\u0027), schema[\u0027property\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa1b9901_109f4eb5","line":689,"in_reply_to":"1a4dcd0f_ad0ba92a","updated":"2015-08-18 19:35:09.000000000","message":"Done","commit_id":"2ee16a71d2e10111ced0dfc3bb71035058151465"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"fd172e55365d903ee7737aace5fed2faadd601a9","unresolved":false,"context_lines":[{"line_number":530,"context_line":"                              \u0027ret.data\u0027: ret.data})"},{"line_number":531,"context_line":"            LOG.error(exception_msg)"},{"line_number":532,"context_line":"            if ret.status \u003d\u003d restclient.Status.FORBIDDEN:"},{"line_number":533,"context_line":"                # This means that the lun exists but it can\u0027t be deleted:"},{"line_number":534,"context_line":"                raise exception.VolumeBackendAPIException(data\u003dexception_msg)"},{"line_number":535,"context_line":""},{"line_number":536,"context_line":"    def create_snapshot(self, pool, project, lun, snapshot):"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_2aae16e6","line":533,"updated":"2015-08-21 02:31:51.000000000","message":"What are the cases where the lun can be deleted?  It got an error when trying to delete it.  In what situation you don\u0027t want to raise?  Is there an error code for lun doesn\u0027t exist?","commit_id":"ac62a034b13091bbdc278c60c3380947552a9a03"},{"author":{"_account_id":13524,"name":"Diem Tran","email":"diem.tran@oracle.com","username":"dttran"},"change_message_id":"e6bd806ef2c9c40176a6a55ce3db27f49a94c156","unresolved":false,"context_lines":[{"line_number":530,"context_line":"                              \u0027ret.data\u0027: ret.data})"},{"line_number":531,"context_line":"            LOG.error(exception_msg)"},{"line_number":532,"context_line":"            if ret.status \u003d\u003d restclient.Status.FORBIDDEN:"},{"line_number":533,"context_line":"                # This means that the lun exists but it can\u0027t be deleted:"},{"line_number":534,"context_line":"                raise exception.VolumeBackendAPIException(data\u003dexception_msg)"},{"line_number":535,"context_line":""},{"line_number":536,"context_line":"    def create_snapshot(self, pool, project, lun, snapshot):"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_2d17ec45","line":533,"in_reply_to":"fa1b9901_2aae16e6","updated":"2015-08-21 15:22:42.000000000","message":"A lun can be deleted if:\n- It has no clone\n- It has property nodestroy\u003dfalse\n\nIt can\u0027t be deleted otherwise (Rest client returns FORBIDDEN).\n\nI just want to raise an exception if Rest client returns FORBIDDEN. If the lun doesn\u0027t exist, REST client will return NOT_FOUND.","commit_id":"ac62a034b13091bbdc278c60c3380947552a9a03"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"fd172e55365d903ee7737aace5fed2faadd601a9","unresolved":false,"context_lines":[{"line_number":543,"context_line":""},{"line_number":544,"context_line":"        ret \u003d self.rclient.post(svc, arg)"},{"line_number":545,"context_line":"        if ret.status !\u003d restclient.Status.CREATED:"},{"line_number":546,"context_line":"            exception_msg \u003d (_LE(\u0027Error Creating \u0027"},{"line_number":547,"context_line":"                                 \u0027Snapshot: %(snapshot)s on\u0027"},{"line_number":548,"context_line":"                                 \u0027Volume: %(lun)s to \u0027"},{"line_number":549,"context_line":"                                 \u0027Pool: %(pool)s \u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_ca02fab3","line":546,"updated":"2015-08-21 02:31:51.000000000","message":"This should be _ instead of _LE because it goes to the exception below.","commit_id":"ac62a034b13091bbdc278c60c3380947552a9a03"},{"author":{"_account_id":13524,"name":"Diem Tran","email":"diem.tran@oracle.com","username":"dttran"},"change_message_id":"e6bd806ef2c9c40176a6a55ce3db27f49a94c156","unresolved":false,"context_lines":[{"line_number":543,"context_line":""},{"line_number":544,"context_line":"        ret \u003d self.rclient.post(svc, arg)"},{"line_number":545,"context_line":"        if ret.status !\u003d restclient.Status.CREATED:"},{"line_number":546,"context_line":"            exception_msg \u003d (_LE(\u0027Error Creating \u0027"},{"line_number":547,"context_line":"                                 \u0027Snapshot: %(snapshot)s on\u0027"},{"line_number":548,"context_line":"                                 \u0027Volume: %(lun)s to \u0027"},{"line_number":549,"context_line":"                                 \u0027Pool: %(pool)s \u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_8dfcf872","line":546,"in_reply_to":"fa1b9901_ca02fab3","updated":"2015-08-21 15:22:42.000000000","message":"Done","commit_id":"ac62a034b13091bbdc278c60c3380947552a9a03"}]}
