)]}'
{"cinder/volume/drivers/ibm/gpfs.py":[{"author":{"_account_id":7689,"name":"Bill Owen","email":"billowen@us.ibm.com","username":"billowen"},"change_message_id":"a65005584999a945f9fbe7dc6ff5129013b7a8f5","unresolved":false,"context_lines":[{"line_number":592,"context_line":"                return True"},{"line_number":593,"context_line":"        return False"},{"line_number":594,"context_line":""},{"line_number":595,"context_line":"    def _create_gpfs_clone(self, src, dest):"},{"line_number":596,"context_line":"        \"\"\"Create a GPFS file clone parent for the specified file.\"\"\""},{"line_number":597,"context_line":"        snap \u003d dest + \".snap\""},{"line_number":598,"context_line":"        self._create_gpfs_snap(src, snap)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_d41f7007","line":595,"updated":"2015-01-06 17:26:28.000000000","message":"if src and dest are not in same fileset, do full copy?","commit_id":"452fc1a583d4f2442b75faa545f4cf65e6f1d954"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"8b3d29c62027afc69c6b4b10ac869188a95c8c0f","unresolved":false,"context_lines":[{"line_number":592,"context_line":"                return True"},{"line_number":593,"context_line":"        return False"},{"line_number":594,"context_line":""},{"line_number":595,"context_line":"    def _create_gpfs_clone(self, src, dest):"},{"line_number":596,"context_line":"        \"\"\"Create a GPFS file clone parent for the specified file.\"\"\""},{"line_number":597,"context_line":"        snap \u003d dest + \".snap\""},{"line_number":598,"context_line":"        self._create_gpfs_snap(src, snap)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a930d6b_11befaff","line":595,"in_reply_to":"3a961159_d41f7007","updated":"2015-01-21 10:51:02.000000000","message":"Agree, I will add handling for this in a subsequent patch, meanwhile adding patch to complete CG functionality for community review.","commit_id":"452fc1a583d4f2442b75faa545f4cf65e6f1d954"},{"author":{"_account_id":7689,"name":"Bill Owen","email":"billowen@us.ibm.com","username":"billowen"},"change_message_id":"a65005584999a945f9fbe7dc6ff5129013b7a8f5","unresolved":false,"context_lines":[{"line_number":600,"context_line":"        if self._gpfs_redirect(src) and self._gpfs_redirect(dest):"},{"line_number":601,"context_line":"            self._execute(\u0027rm\u0027, \u0027-f\u0027, snap, run_as_root\u003dTrue)"},{"line_number":602,"context_line":""},{"line_number":603,"context_line":"    def _create_gpfs_copy(self, src, dest):"},{"line_number":604,"context_line":"        \"\"\"Create a GPFS file clone copy for the specified file.\"\"\""},{"line_number":605,"context_line":"        self._execute(\u0027mmclone\u0027, \u0027copy\u0027, src, dest, run_as_root\u003dTrue)"},{"line_number":606,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_d4e69015","line":603,"updated":"2015-01-06 17:26:28.000000000","message":"if src and dest are not in same fileset, do full copy?","commit_id":"452fc1a583d4f2442b75faa545f4cf65e6f1d954"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"8b3d29c62027afc69c6b4b10ac869188a95c8c0f","unresolved":false,"context_lines":[{"line_number":600,"context_line":"        if self._gpfs_redirect(src) and self._gpfs_redirect(dest):"},{"line_number":601,"context_line":"            self._execute(\u0027rm\u0027, \u0027-f\u0027, snap, run_as_root\u003dTrue)"},{"line_number":602,"context_line":""},{"line_number":603,"context_line":"    def _create_gpfs_copy(self, src, dest):"},{"line_number":604,"context_line":"        \"\"\"Create a GPFS file clone copy for the specified file.\"\"\""},{"line_number":605,"context_line":"        self._execute(\u0027mmclone\u0027, \u0027copy\u0027, src, dest, run_as_root\u003dTrue)"},{"line_number":606,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1a930d6b_713c9e94","line":603,"in_reply_to":"3a961159_d4e69015","updated":"2015-01-21 10:51:02.000000000","message":"Same as above","commit_id":"452fc1a583d4f2442b75faa545f4cf65e6f1d954"},{"author":{"_account_id":7689,"name":"Bill Owen","email":"billowen@us.ibm.com","username":"billowen"},"change_message_id":"a65005584999a945f9fbe7dc6ff5129013b7a8f5","unresolved":false,"context_lines":[{"line_number":645,"context_line":"        # Check if the volume is part of a consistency group and return"},{"line_number":646,"context_line":"        # the local_path accordingly."},{"line_number":647,"context_line":"        if volume[\u0027consistencygroup_id\u0027] is not None:"},{"line_number":648,"context_line":"            cgname \u003d \"consisgroup-%s\" % volume[\u0027consistencygroup_id\u0027]"},{"line_number":649,"context_line":"            volume_path \u003d os.path.join("},{"line_number":650,"context_line":"                self.configuration.gpfs_mount_point_base,"},{"line_number":651,"context_line":"                cgname,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_740a3cd3","line":648,"updated":"2015-01-06 17:26:28.000000000","message":"can you use \"cg-%s\" to have more concise path?","commit_id":"452fc1a583d4f2442b75faa545f4cf65e6f1d954"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"8b3d29c62027afc69c6b4b10ac869188a95c8c0f","unresolved":false,"context_lines":[{"line_number":645,"context_line":"        # Check if the volume is part of a consistency group and return"},{"line_number":646,"context_line":"        # the local_path accordingly."},{"line_number":647,"context_line":"        if volume[\u0027consistencygroup_id\u0027] is not None:"},{"line_number":648,"context_line":"            cgname \u003d \"consisgroup-%s\" % volume[\u0027consistencygroup_id\u0027]"},{"line_number":649,"context_line":"            volume_path \u003d os.path.join("},{"line_number":650,"context_line":"                self.configuration.gpfs_mount_point_base,"},{"line_number":651,"context_line":"                cgname,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_2ac0d62a","line":648,"in_reply_to":"3a961159_740a3cd3","updated":"2015-01-21 10:51:02.000000000","message":"I see other implementations (e.g. Pure storage) using \u0027consisgroup-\u0027 as the prefix. Also, it is inline with the other standard prefixes like \u0027volume-\u0027, \u0027snapshot-\u0027 which are using the CLI prefix like \u0027cinder snapshot-create ...\u0027, so it \u0027cinder consisgroup-create ...\u0027. Same way I would be using \u0027cgsnapshot-\u0027  as prefix for cgsnapshots.","commit_id":"452fc1a583d4f2442b75faa545f4cf65e6f1d954"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"cad3c749ae0a8f1c233a6a781a239338cbbcf4f5","unresolved":false,"context_lines":[{"line_number":1014,"context_line":"                          \u0027--inode-space\u0027, \u0027new\u0027, run_as_root\u003dTrue)"},{"line_number":1015,"context_line":"        except processutils.ProcessExecutionError as e:"},{"line_number":1016,"context_line":"            msg \u003d (_(\u0027Failed to create consistency group: %(cgid)s. \u0027"},{"line_number":1017,"context_line":"                     \u0027Error: %(excmsg)s.\u0027),"},{"line_number":1018,"context_line":"                   {\u0027cgid\u0027: group[\u0027id\u0027], \u0027excmsg\u0027: six.text_type(e)})"},{"line_number":1019,"context_line":"            LOG.error(msg)"},{"line_number":1020,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_ef90a051","line":1017,"updated":"2015-01-20 04:28:53.000000000","message":"Should be % instead of \",\", otherwise string substitution won\u0027t happen.","commit_id":"452fc1a583d4f2442b75faa545f4cf65e6f1d954"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"8b3d29c62027afc69c6b4b10ac869188a95c8c0f","unresolved":false,"context_lines":[{"line_number":1014,"context_line":"                          \u0027--inode-space\u0027, \u0027new\u0027, run_as_root\u003dTrue)"},{"line_number":1015,"context_line":"        except processutils.ProcessExecutionError as e:"},{"line_number":1016,"context_line":"            msg \u003d (_(\u0027Failed to create consistency group: %(cgid)s. \u0027"},{"line_number":1017,"context_line":"                     \u0027Error: %(excmsg)s.\u0027),"},{"line_number":1018,"context_line":"                   {\u0027cgid\u0027: group[\u0027id\u0027], \u0027excmsg\u0027: six.text_type(e)})"},{"line_number":1019,"context_line":"            LOG.error(msg)"},{"line_number":1020,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a930d6b_f1e32e03","line":1017,"in_reply_to":"3a961159_ef90a051","updated":"2015-01-21 10:51:02.000000000","message":"Done","commit_id":"452fc1a583d4f2442b75faa545f4cf65e6f1d954"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"cad3c749ae0a8f1c233a6a781a239338cbbcf4f5","unresolved":false,"context_lines":[{"line_number":1024,"context_line":"                          \u0027-J\u0027, cgpath, run_as_root\u003dTrue)"},{"line_number":1025,"context_line":"        except processutils.ProcessExecutionError as e:"},{"line_number":1026,"context_line":"            msg \u003d (_(\u0027Failed to link fileset for the share %(cgname)s. \u0027"},{"line_number":1027,"context_line":"                     \u0027Error: %(excmsg)s.\u0027),"},{"line_number":1028,"context_line":"                   {\u0027cgname\u0027: cgname, \u0027excmsg\u0027: six.text_type(e)})"},{"line_number":1029,"context_line":"            LOG.error(msg)"},{"line_number":1030,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_2f9b8874","line":1027,"updated":"2015-01-20 04:28:53.000000000","message":"Same here","commit_id":"452fc1a583d4f2442b75faa545f4cf65e6f1d954"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"8b3d29c62027afc69c6b4b10ac869188a95c8c0f","unresolved":false,"context_lines":[{"line_number":1024,"context_line":"                          \u0027-J\u0027, cgpath, run_as_root\u003dTrue)"},{"line_number":1025,"context_line":"        except processutils.ProcessExecutionError as e:"},{"line_number":1026,"context_line":"            msg \u003d (_(\u0027Failed to link fileset for the share %(cgname)s. \u0027"},{"line_number":1027,"context_line":"                     \u0027Error: %(excmsg)s.\u0027),"},{"line_number":1028,"context_line":"                   {\u0027cgname\u0027: cgname, \u0027excmsg\u0027: six.text_type(e)})"},{"line_number":1029,"context_line":"            LOG.error(msg)"},{"line_number":1030,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a930d6b_11f19acd","line":1027,"in_reply_to":"3a961159_2f9b8874","updated":"2015-01-21 10:51:02.000000000","message":"Done","commit_id":"452fc1a583d4f2442b75faa545f4cf65e6f1d954"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"cad3c749ae0a8f1c233a6a781a239338cbbcf4f5","unresolved":false,"context_lines":[{"line_number":1027,"context_line":"                     \u0027Error: %(excmsg)s.\u0027),"},{"line_number":1028,"context_line":"                   {\u0027cgname\u0027: cgname, \u0027excmsg\u0027: six.text_type(e)})"},{"line_number":1029,"context_line":"            LOG.error(msg)"},{"line_number":1030,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":1031,"context_line":""},{"line_number":1032,"context_line":"    def delete_consistencygroup(self, context, group):"},{"line_number":1033,"context_line":"        \"\"\"Delete consistency group of GPFS volumes.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_cf83e401","line":1030,"updated":"2015-01-20 04:28:53.000000000","message":"create_consistencygroup needs to return a model_update to indicate success.","commit_id":"452fc1a583d4f2442b75faa545f4cf65e6f1d954"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"8b3d29c62027afc69c6b4b10ac869188a95c8c0f","unresolved":false,"context_lines":[{"line_number":1027,"context_line":"                     \u0027Error: %(excmsg)s.\u0027),"},{"line_number":1028,"context_line":"                   {\u0027cgname\u0027: cgname, \u0027excmsg\u0027: six.text_type(e)})"},{"line_number":1029,"context_line":"            LOG.error(msg)"},{"line_number":1030,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":1031,"context_line":""},{"line_number":1032,"context_line":"    def delete_consistencygroup(self, context, group):"},{"line_number":1033,"context_line":"        \"\"\"Delete consistency group of GPFS volumes.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_8a2d4a48","line":1030,"in_reply_to":"3a961159_cf83e401","updated":"2015-01-21 10:51:02.000000000","message":"Right, I had missed it. Adding with the next patch.","commit_id":"452fc1a583d4f2442b75faa545f4cf65e6f1d954"},{"author":{"_account_id":7689,"name":"Bill Owen","email":"billowen@us.ibm.com","username":"billowen"},"change_message_id":"a65005584999a945f9fbe7dc6ff5129013b7a8f5","unresolved":false,"context_lines":[{"line_number":1038,"context_line":"        model_update[\u0027status\u0027] \u003d group[\u0027status\u0027]"},{"line_number":1039,"context_line":"        volumes \u003d self.db.volume_get_all_by_group(context, group[\u0027id\u0027])"},{"line_number":1040,"context_line":""},{"line_number":1041,"context_line":"        # unlink and delete the fileset associated with the consistency group"},{"line_number":1042,"context_line":"        try:"},{"line_number":1043,"context_line":"            self._execute(\u0027mmunlinkfileset\u0027, fsdev, cgname, \u0027-f\u0027,"},{"line_number":1044,"context_line":"                          run_as_root\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_89cdd532","line":1041,"updated":"2015-01-06 17:26:28.000000000","message":"make clear that this also deletes volume \u0026 snapshot data:\n\n# all of the volume and volume snapshot data will also be deleted","commit_id":"452fc1a583d4f2442b75faa545f4cf65e6f1d954"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"8b3d29c62027afc69c6b4b10ac869188a95c8c0f","unresolved":false,"context_lines":[{"line_number":1038,"context_line":"        model_update[\u0027status\u0027] \u003d group[\u0027status\u0027]"},{"line_number":1039,"context_line":"        volumes \u003d self.db.volume_get_all_by_group(context, group[\u0027id\u0027])"},{"line_number":1040,"context_line":""},{"line_number":1041,"context_line":"        # unlink and delete the fileset associated with the consistency group"},{"line_number":1042,"context_line":"        try:"},{"line_number":1043,"context_line":"            self._execute(\u0027mmunlinkfileset\u0027, fsdev, cgname, \u0027-f\u0027,"},{"line_number":1044,"context_line":"                          run_as_root\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_aa0be6d3","line":1041,"in_reply_to":"3a961159_89cdd532","updated":"2015-01-21 10:51:02.000000000","message":"Done","commit_id":"452fc1a583d4f2442b75faa545f4cf65e6f1d954"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"cad3c749ae0a8f1c233a6a781a239338cbbcf4f5","unresolved":false,"context_lines":[{"line_number":1062,"context_line":"        for volume_ref in volumes:"},{"line_number":1063,"context_line":"            volume_ref[\u0027status\u0027] \u003d \u0027deleted\u0027"},{"line_number":1064,"context_line":""},{"line_number":1065,"context_line":"        return model_update, volumes"},{"line_number":1066,"context_line":""},{"line_number":1067,"context_line":"    def create_cgsnapshot(self, context, cgsnapshot):"},{"line_number":1068,"context_line":"        \"\"\"Create snapshot of a consistency group of GPFS volumes.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_4f6ff460","line":1065,"updated":"2015-01-20 04:28:53.000000000","message":"Need to update group status.","commit_id":"452fc1a583d4f2442b75faa545f4cf65e6f1d954"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"8b3d29c62027afc69c6b4b10ac869188a95c8c0f","unresolved":false,"context_lines":[{"line_number":1062,"context_line":"        for volume_ref in volumes:"},{"line_number":1063,"context_line":"            volume_ref[\u0027status\u0027] \u003d \u0027deleted\u0027"},{"line_number":1064,"context_line":""},{"line_number":1065,"context_line":"        return model_update, volumes"},{"line_number":1066,"context_line":""},{"line_number":1067,"context_line":"    def create_cgsnapshot(self, context, cgsnapshot):"},{"line_number":1068,"context_line":"        \"\"\"Create snapshot of a consistency group of GPFS volumes.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_ea6dee9b","line":1065,"in_reply_to":"3a961159_4f6ff460","updated":"2015-01-21 10:51:02.000000000","message":"Done","commit_id":"452fc1a583d4f2442b75faa545f4cf65e6f1d954"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"cad3c749ae0a8f1c233a6a781a239338cbbcf4f5","unresolved":false,"context_lines":[{"line_number":1070,"context_line":""},{"line_number":1071,"context_line":"    def delete_cgsnapshot(self, context, cgsnapshot):"},{"line_number":1072,"context_line":"        \"\"\"Delete snapshot of a consistency group of GPFS volumes.\"\"\""},{"line_number":1073,"context_line":"        raise NotImplementedError()"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_8f055c7b","line":1073,"updated":"2015-01-20 04:28:53.000000000","message":"Are you planning to implement create_cgsnapshot and delete_cgsnapshot?","commit_id":"452fc1a583d4f2442b75faa545f4cf65e6f1d954"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"8b3d29c62027afc69c6b4b10ac869188a95c8c0f","unresolved":false,"context_lines":[{"line_number":1070,"context_line":""},{"line_number":1071,"context_line":"    def delete_cgsnapshot(self, context, cgsnapshot):"},{"line_number":1072,"context_line":"        \"\"\"Delete snapshot of a consistency group of GPFS volumes.\"\"\""},{"line_number":1073,"context_line":"        raise NotImplementedError()"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_6a281e37","line":1073,"in_reply_to":"3a961159_8f055c7b","updated":"2015-01-21 10:51:02.000000000","message":"yes, adding with the next patch.","commit_id":"452fc1a583d4f2442b75faa545f4cf65e6f1d954"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6e96566db1b165423df2624529509b5a101b6ef2","unresolved":false,"context_lines":[{"line_number":1059,"context_line":"            self._execute(\u0027mmunlinkfileset\u0027, fsdev, cgname, \u0027-f\u0027,"},{"line_number":1060,"context_line":"                          run_as_root\u003dTrue)"},{"line_number":1061,"context_line":"        except processutils.ProcessExecutionError as e:"},{"line_number":1062,"context_line":"            msg \u003d (_(\u0027Failed unlink fileset for consistency group \u0027"},{"line_number":1063,"context_line":"                     \u0027%(cgname)s. Error: %(excmsg)s.\u0027) %"},{"line_number":1064,"context_line":"                   {\u0027cgname\u0027: cgname, \u0027excmsg\u0027: six.text_type(e)})"},{"line_number":1065,"context_line":"            LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a930d6b_e754dd00","line":1062,"updated":"2015-01-23 23:33:55.000000000","message":"Failed to unlink","commit_id":"7b3ad1b02f10785b3626b0f5086370174e3a036c"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"67973810104c71b76110f4172b5ab797bcaa2055","unresolved":false,"context_lines":[{"line_number":1059,"context_line":"            self._execute(\u0027mmunlinkfileset\u0027, fsdev, cgname, \u0027-f\u0027,"},{"line_number":1060,"context_line":"                          run_as_root\u003dTrue)"},{"line_number":1061,"context_line":"        except processutils.ProcessExecutionError as e:"},{"line_number":1062,"context_line":"            msg \u003d (_(\u0027Failed unlink fileset for consistency group \u0027"},{"line_number":1063,"context_line":"                     \u0027%(cgname)s. Error: %(excmsg)s.\u0027) %"},{"line_number":1064,"context_line":"                   {\u0027cgname\u0027: cgname, \u0027excmsg\u0027: six.text_type(e)})"},{"line_number":1065,"context_line":"            LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a930d6b_335c63ed","line":1062,"in_reply_to":"1a930d6b_e754dd00","updated":"2015-01-24 04:53:44.000000000","message":"Ohh, yeah, thanks for pointing out :)","commit_id":"7b3ad1b02f10785b3626b0f5086370174e3a036c"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6e96566db1b165423df2624529509b5a101b6ef2","unresolved":false,"context_lines":[{"line_number":1069,"context_line":"            self._execute(\u0027mmdelfileset\u0027, fsdev, cgname, \u0027-f\u0027,"},{"line_number":1070,"context_line":"                          run_as_root\u003dTrue)"},{"line_number":1071,"context_line":"        except processutils.ProcessExecutionError as e:"},{"line_number":1072,"context_line":"            msg \u003d (_(\u0027Failed delete fileset for consistency group \u0027"},{"line_number":1073,"context_line":"                     \u0027%(cgname)s. Error: %(excmsg)s.\u0027) %"},{"line_number":1074,"context_line":"                   {\u0027cgname\u0027: cgname, \u0027excmsg\u0027: six.text_type(e)})"},{"line_number":1075,"context_line":"            LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a930d6b_24398341","line":1072,"updated":"2015-01-23 23:33:55.000000000","message":"Failed to delete","commit_id":"7b3ad1b02f10785b3626b0f5086370174e3a036c"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"67973810104c71b76110f4172b5ab797bcaa2055","unresolved":false,"context_lines":[{"line_number":1069,"context_line":"            self._execute(\u0027mmdelfileset\u0027, fsdev, cgname, \u0027-f\u0027,"},{"line_number":1070,"context_line":"                          run_as_root\u003dTrue)"},{"line_number":1071,"context_line":"        except processutils.ProcessExecutionError as e:"},{"line_number":1072,"context_line":"            msg \u003d (_(\u0027Failed delete fileset for consistency group \u0027"},{"line_number":1073,"context_line":"                     \u0027%(cgname)s. Error: %(excmsg)s.\u0027) %"},{"line_number":1074,"context_line":"                   {\u0027cgname\u0027: cgname, \u0027excmsg\u0027: six.text_type(e)})"},{"line_number":1075,"context_line":"            LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a930d6b_53748f67","line":1072,"in_reply_to":"1a930d6b_24398341","updated":"2015-01-24 04:53:44.000000000","message":"Done","commit_id":"7b3ad1b02f10785b3626b0f5086370174e3a036c"},{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"600730f45c553bcabd13764c765675e594596ff7","unresolved":false,"context_lines":[{"line_number":1018,"context_line":"            msg \u003d (_(\u0027Failed to create consistency group: %(cgid)s. \u0027"},{"line_number":1019,"context_line":"                     \u0027Error: %(excmsg)s.\u0027) %"},{"line_number":1020,"context_line":"                   {\u0027cgid\u0027: group[\u0027id\u0027], \u0027excmsg\u0027: six.text_type(e)})"},{"line_number":1021,"context_line":"            LOG.error(msg)"},{"line_number":1022,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":1023,"context_line":""},{"line_number":1024,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_2d6e2302","line":1021,"updated":"2015-02-02 15:36:00.000000000","message":"Need _LE marker here","commit_id":"5f730db0efbcb7d4c72f1ac50fe6438f9f07eb9a"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b98f2540c057dc9fc32a9a04375b2d4bb96bab75","unresolved":false,"context_lines":[{"line_number":1018,"context_line":"            msg \u003d (_(\u0027Failed to create consistency group: %(cgid)s. \u0027"},{"line_number":1019,"context_line":"                     \u0027Error: %(excmsg)s.\u0027) %"},{"line_number":1020,"context_line":"                   {\u0027cgid\u0027: group[\u0027id\u0027], \u0027excmsg\u0027: six.text_type(e)})"},{"line_number":1021,"context_line":"            LOG.error(msg)"},{"line_number":1022,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":1023,"context_line":""},{"line_number":1024,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_481265b2","line":1021,"in_reply_to":"da86d52c_2d6e2302","updated":"2015-02-02 15:40:14.000000000","message":"Rushi,\r\nThis actually doesn\u0027t need _LE because it goes to an exception. Exception will be translated. We don\u0027t want to translate it twice.","commit_id":"5f730db0efbcb7d4c72f1ac50fe6438f9f07eb9a"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"50bc29da50f9691162c66ebb60d1f40240f9433a","unresolved":false,"context_lines":[{"line_number":1018,"context_line":"            msg \u003d (_(\u0027Failed to create consistency group: %(cgid)s. \u0027"},{"line_number":1019,"context_line":"                     \u0027Error: %(excmsg)s.\u0027) %"},{"line_number":1020,"context_line":"                   {\u0027cgid\u0027: group[\u0027id\u0027], \u0027excmsg\u0027: six.text_type(e)})"},{"line_number":1021,"context_line":"            LOG.error(msg)"},{"line_number":1022,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":1023,"context_line":""},{"line_number":1024,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_59e93d7f","line":1021,"in_reply_to":"da86d52c_481265b2","updated":"2015-02-03 05:07:14.000000000","message":"+1 Xing\n\nRushi, please refer the first example at: http://docs.openstack.org/developer/oslo.i18n/guidelines.html\n\nI have followed the logging guidelines.","commit_id":"5f730db0efbcb7d4c72f1ac50fe6438f9f07eb9a"},{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"9a5ad154dc05021a647e8ec29b5eff2fbf83c0d1","unresolved":false,"context_lines":[{"line_number":1018,"context_line":"            msg \u003d (_(\u0027Failed to create consistency group: %(cgid)s. \u0027"},{"line_number":1019,"context_line":"                     \u0027Error: %(excmsg)s.\u0027) %"},{"line_number":1020,"context_line":"                   {\u0027cgid\u0027: group[\u0027id\u0027], \u0027excmsg\u0027: six.text_type(e)})"},{"line_number":1021,"context_line":"            LOG.error(msg)"},{"line_number":1022,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":1023,"context_line":""},{"line_number":1024,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_ef368351","line":1021,"in_reply_to":"da86d52c_481265b2","updated":"2015-02-03 17:07:55.000000000","message":"Thanks Xing. I only recently came to know about that rule.","commit_id":"5f730db0efbcb7d4c72f1ac50fe6438f9f07eb9a"},{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"600730f45c553bcabd13764c765675e594596ff7","unresolved":false,"context_lines":[{"line_number":1028,"context_line":"            msg \u003d (_(\u0027Failed to link fileset for the share %(cgname)s. \u0027"},{"line_number":1029,"context_line":"                     \u0027Error: %(excmsg)s.\u0027) %"},{"line_number":1030,"context_line":"                   {\u0027cgname\u0027: cgname, \u0027excmsg\u0027: six.text_type(e)})"},{"line_number":1031,"context_line":"            LOG.error(msg)"},{"line_number":1032,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":1033,"context_line":""},{"line_number":1034,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_8d5b8f53","line":1031,"updated":"2015-02-02 15:36:00.000000000","message":"Need _LE marker here","commit_id":"5f730db0efbcb7d4c72f1ac50fe6438f9f07eb9a"},{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"600730f45c553bcabd13764c765675e594596ff7","unresolved":false,"context_lines":[{"line_number":1038,"context_line":"                     \u0027%(cgname)s. \u0027"},{"line_number":1039,"context_line":"                     \u0027Error: %(excmsg)s.\u0027) %"},{"line_number":1040,"context_line":"                   {\u0027cgname\u0027: cgname, \u0027excmsg\u0027: six.text_type(e)})"},{"line_number":1041,"context_line":"            LOG.error(msg)"},{"line_number":1042,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":1043,"context_line":""},{"line_number":1044,"context_line":"        model_update \u003d {\u0027status\u0027: \u0027available\u0027}"}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_ed316b0c","line":1041,"updated":"2015-02-02 15:36:00.000000000","message":"Need _LE marker here","commit_id":"5f730db0efbcb7d4c72f1ac50fe6438f9f07eb9a"},{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"600730f45c553bcabd13764c765675e594596ff7","unresolved":false,"context_lines":[{"line_number":1061,"context_line":"        except processutils.ProcessExecutionError as e:"},{"line_number":1062,"context_line":"            msg \u003d (_(\u0027Failed to unlink fileset for consistency group \u0027"},{"line_number":1063,"context_line":"                     \u0027%(cgname)s. Error: %(excmsg)s.\u0027) %"},{"line_number":1064,"context_line":"                   {\u0027cgname\u0027: cgname, \u0027excmsg\u0027: six.text_type(e)})"},{"line_number":1065,"context_line":"            LOG.error(msg)"},{"line_number":1066,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":1067,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_2d138367","line":1064,"updated":"2015-02-02 15:36:00.000000000","message":"Need _LE marker here","commit_id":"5f730db0efbcb7d4c72f1ac50fe6438f9f07eb9a"},{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"600730f45c553bcabd13764c765675e594596ff7","unresolved":false,"context_lines":[{"line_number":1072,"context_line":"            msg \u003d (_(\u0027Failed to delete fileset for consistency group \u0027"},{"line_number":1073,"context_line":"                     \u0027%(cgname)s. Error: %(excmsg)s.\u0027) %"},{"line_number":1074,"context_line":"                   {\u0027cgname\u0027: cgname, \u0027excmsg\u0027: six.text_type(e)})"},{"line_number":1075,"context_line":"            LOG.error(msg)"},{"line_number":1076,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":1077,"context_line":""},{"line_number":1078,"context_line":"        for volume_ref in volumes:"}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_8d09cf33","line":1075,"updated":"2015-02-02 15:36:00.000000000","message":"Need _LE marker here","commit_id":"5f730db0efbcb7d4c72f1ac50fe6438f9f07eb9a"},{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"600730f45c553bcabd13764c765675e594596ff7","unresolved":false,"context_lines":[{"line_number":1097,"context_line":"                   {\u0027cgsnap\u0027: cgsnapshot[\u0027id\u0027],"},{"line_number":1098,"context_line":"                    \u0027consisgroup\u0027: cgsnapshot[\u0027consistencygroup_id\u0027],"},{"line_number":1099,"context_line":"                    \u0027excmsg\u0027: six.text_type(e)})"},{"line_number":1100,"context_line":"            LOG.error(msg)"},{"line_number":1101,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":1102,"context_line":""},{"line_number":1103,"context_line":"        snapshots \u003d self.db.snapshot_get_all_for_cgsnapshot("}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_683ac9ce","line":1100,"updated":"2015-02-02 15:36:00.000000000","message":"Need _LE marker here","commit_id":"5f730db0efbcb7d4c72f1ac50fe6438f9f07eb9a"},{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"9a5ad154dc05021a647e8ec29b5eff2fbf83c0d1","unresolved":false,"context_lines":[{"line_number":1121,"context_line":"        except processutils.ProcessExecutionError as e:"},{"line_number":1122,"context_line":"            msg \u003d (_(\u0027Failed to delete snapshot %(cgsnap)s, of consistency \u0027"},{"line_number":1123,"context_line":"                     \u0027group %(consisgroup)s. \u0027"},{"line_number":1124,"context_line":"                     \u0027Error: %(excmsg)s.\u0027) %"},{"line_number":1125,"context_line":"                   {\u0027cgsnap\u0027: cgsnapshot[\u0027id\u0027],"},{"line_number":1126,"context_line":"                    \u0027consisgroup\u0027: cgsnapshot[\u0027consistencygroup_id\u0027],"},{"line_number":1127,"context_line":"                    \u0027excmsg\u0027: six.text_type(e)})"}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_cf7d3fe9","line":1124,"updated":"2015-02-03 17:07:55.000000000","message":"comma  instead of % ?","commit_id":"5f730db0efbcb7d4c72f1ac50fe6438f9f07eb9a"},{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"9a5ad154dc05021a647e8ec29b5eff2fbf83c0d1","unresolved":false,"context_lines":[{"line_number":1124,"context_line":"                     \u0027Error: %(excmsg)s.\u0027) %"},{"line_number":1125,"context_line":"                   {\u0027cgsnap\u0027: cgsnapshot[\u0027id\u0027],"},{"line_number":1126,"context_line":"                    \u0027consisgroup\u0027: cgsnapshot[\u0027consistencygroup_id\u0027],"},{"line_number":1127,"context_line":"                    \u0027excmsg\u0027: six.text_type(e)})"},{"line_number":1128,"context_line":"            LOG.error(msg)"},{"line_number":1129,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":1130,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_ea0af11f","line":1127,"updated":"2015-02-03 17:07:55.000000000","message":"please see http://docs.openstack.org/developer/oslo.i18n/guidelines.html#avoid-forcing-the-translation-of-translatable-variables","commit_id":"5f730db0efbcb7d4c72f1ac50fe6438f9f07eb9a"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"12fdb6e4e95564cfd2b8a77f4a1ee79ba9a265bf","unresolved":false,"context_lines":[{"line_number":1124,"context_line":"                     \u0027Error: %(excmsg)s.\u0027) %"},{"line_number":1125,"context_line":"                   {\u0027cgsnap\u0027: cgsnapshot[\u0027id\u0027],"},{"line_number":1126,"context_line":"                    \u0027consisgroup\u0027: cgsnapshot[\u0027consistencygroup_id\u0027],"},{"line_number":1127,"context_line":"                    \u0027excmsg\u0027: six.text_type(e)})"},{"line_number":1128,"context_line":"            LOG.error(msg)"},{"line_number":1129,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":1130,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_7bab2275","line":1127,"in_reply_to":"da86d52c_0d803145","updated":"2015-02-04 04:43:25.000000000","message":"+1 .. Thanks Xing for explaining :)","commit_id":"5f730db0efbcb7d4c72f1ac50fe6438f9f07eb9a"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"551a4c3e93d17a6c6816fff37f172232b0bf900d","unresolved":false,"context_lines":[{"line_number":1124,"context_line":"                     \u0027Error: %(excmsg)s.\u0027) %"},{"line_number":1125,"context_line":"                   {\u0027cgsnap\u0027: cgsnapshot[\u0027id\u0027],"},{"line_number":1126,"context_line":"                    \u0027consisgroup\u0027: cgsnapshot[\u0027consistencygroup_id\u0027],"},{"line_number":1127,"context_line":"                    \u0027excmsg\u0027: six.text_type(e)})"},{"line_number":1128,"context_line":"            LOG.error(msg)"},{"line_number":1129,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":1130,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_0d803145","line":1127,"in_reply_to":"da86d52c_ea0af11f","updated":"2015-02-04 04:01:14.000000000","message":"If the message formatting is inside LOG.error(), it is preferred to use \",\":\n\nLOG.error(_(\u0027some message: variable\u003d%s\u0027), variable)\n\nHowever here the message is formatted outside of LOG.error() because it is used in both LOG.error() and the exception below. For the exception, the substitution has to happen before it is passed on to the exception. Therefore % has to be used here.\n\nYou can test the following wrong format:\n\nmsg \u003d (_(\u0027some message: variable\u003d%s\u0027), variable)\n\nLOG.error(msg)\n\nThe substitution will not happen in the logs.","commit_id":"5f730db0efbcb7d4c72f1ac50fe6438f9f07eb9a"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"50096b15f4c3b80382a07d59c89d0d109843ac31","unresolved":false,"context_lines":[{"line_number":700,"context_line":"                                 {\u0027cluster_id\u0027: self._cluster_id,"},{"line_number":701,"context_line":"                                  \u0027root_path\u0027: gpfs_base})"},{"line_number":702,"context_line":""},{"line_number":703,"context_line":"        data[\u0027reserved_percentage\u0027] \u003d 0"},{"line_number":704,"context_line":"        self._stats \u003d data"},{"line_number":705,"context_line":""},{"line_number":706,"context_line":"    def clone_image(self, context, volume,"}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_0f6b921e","side":"PARENT","line":703,"updated":"2015-02-11 22:36:03.000000000","message":"Did you mean to remove this?","commit_id":"60e951ecf9ab2c5740a4e569c1b9c5d0bb01e219"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"009c4afbf39988cb8dc897220b2c5a9ae03532a9","unresolved":false,"context_lines":[{"line_number":700,"context_line":"                                 {\u0027cluster_id\u0027: self._cluster_id,"},{"line_number":701,"context_line":"                                  \u0027root_path\u0027: gpfs_base})"},{"line_number":702,"context_line":""},{"line_number":703,"context_line":"        data[\u0027reserved_percentage\u0027] \u003d 0"},{"line_number":704,"context_line":"        self._stats \u003d data"},{"line_number":705,"context_line":""},{"line_number":706,"context_line":"    def clone_image(self, context, volume,"}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_aaab4b73","side":"PARENT","line":703,"in_reply_to":"da86d52c_0f6b921e","updated":"2015-02-20 17:53:14.000000000","message":"yes, since it was a duplicate entry. If you see 4 lines above (L696) we are already taking care of this.","commit_id":"60e951ecf9ab2c5740a4e569c1b9c5d0bb01e219"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"50096b15f4c3b80382a07d59c89d0d109843ac31","unresolved":false,"context_lines":[{"line_number":1032,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":1033,"context_line":""},{"line_number":1034,"context_line":"        try:"},{"line_number":1035,"context_line":"            self._execute(\u0027chmod\u0027, \u0027777\u0027, cgpath, run_as_root\u003dTrue)"},{"line_number":1036,"context_line":"        except processutils.ProcessExecutionError as e:"},{"line_number":1037,"context_line":"            msg \u003d (_(\u0027Failed to set permissions for the consistency group \u0027"},{"line_number":1038,"context_line":"                     \u0027%(cgname)s. \u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_cfea5a73","line":1035,"updated":"2015-02-11 22:36:03.000000000","message":"I thought we were trying to avoid 777 ?  Should this be 770 at the most?","commit_id":"4c3cda8ff96c98e3e6a0730b70a8071d37ab9c7c"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"009c4afbf39988cb8dc897220b2c5a9ae03532a9","unresolved":false,"context_lines":[{"line_number":1032,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":1033,"context_line":""},{"line_number":1034,"context_line":"        try:"},{"line_number":1035,"context_line":"            self._execute(\u0027chmod\u0027, \u0027777\u0027, cgpath, run_as_root\u003dTrue)"},{"line_number":1036,"context_line":"        except processutils.ProcessExecutionError as e:"},{"line_number":1037,"context_line":"            msg \u003d (_(\u0027Failed to set permissions for the consistency group \u0027"},{"line_number":1038,"context_line":"                     \u0027%(cgname)s. \u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba7be1f8_9348225d","line":1035,"in_reply_to":"da86d52c_cfea5a73","updated":"2015-02-20 17:53:14.000000000","message":"Thanks Jay for your comment, I have changed it to 770.","commit_id":"4c3cda8ff96c98e3e6a0730b70a8071d37ab9c7c"}]}
