)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"b75f39e66a058fc910961a4cbe5e34e2cdbf9e86","unresolved":false,"context_lines":[{"line_number":11,"context_line":"A better solution is proposed below:"},{"line_number":12,"context_line":"https://review.openstack.org/#/c/201249/"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This fix is to implement proposed feature in VNX cinder driver."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: Ic0765081a88f28d3114f28b50c4f0a1b6d7ef9dd"},{"line_number":17,"context_line":"Implements: blueprint non-disruptive-backup-in-vnx"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"fa1b9901_b2d95859","line":14,"updated":"2015-08-20 15:47:03.000000000","message":"Suggest: \"This patch is to implement the above feature in the VNX Cinder driver.\"","commit_id":"365c856f2333463f034110fe26201423bf1aa089"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"8d435b8db1ae40554145e67ee96c9979c083b17a","unresolved":false,"context_lines":[{"line_number":11,"context_line":"A better solution is proposed below:"},{"line_number":12,"context_line":"https://review.openstack.org/#/c/201249/"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This fix is to implement proposed feature in VNX cinder driver."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: Ic0765081a88f28d3114f28b50c4f0a1b6d7ef9dd"},{"line_number":17,"context_line":"Implements: blueprint non-disruptive-backup-in-vnx"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"fa1b9901_eaf6de5b","line":14,"in_reply_to":"fa1b9901_b2d95859","updated":"2015-08-21 02:33:56.000000000","message":"Done","commit_id":"365c856f2333463f034110fe26201423bf1aa089"}],"cinder/volume/drivers/emc/emc_vnx_cli.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"da2ea338814ae01fcce5ba7aa71a20bf0e5d2930","unresolved":false,"context_lines":[{"line_number":1960,"context_line":"        return self.tmp_snap_prefix + volume[\u0027id\u0027]"},{"line_number":1961,"context_line":""},{"line_number":1962,"context_line":"    def _construct_tmp_smp_name(self, snapshot):"},{"line_number":1963,"context_line":"        return self.tmp_smp_for_backup_prefix + snapshot[\u0027id\u0027]"},{"line_number":1964,"context_line":""},{"line_number":1965,"context_line":"    def create_volume(self, volume):"},{"line_number":1966,"context_line":"        \"\"\"Creates a EMC volume.\"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"fa1b9901_e77d131d","line":1963,"updated":"2015-08-19 14:11:00.000000000","message":"Should use object, i.e., snapshot.id","commit_id":"3d9dedac5eddbba34ae07621f7c9cfd528f152bd"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"f1b76f8b0a1dd0e22b11640eb3b4492c47f89155","unresolved":false,"context_lines":[{"line_number":1960,"context_line":"        return self.tmp_snap_prefix + volume[\u0027id\u0027]"},{"line_number":1961,"context_line":""},{"line_number":1962,"context_line":"    def _construct_tmp_smp_name(self, snapshot):"},{"line_number":1963,"context_line":"        return self.tmp_smp_for_backup_prefix + snapshot[\u0027id\u0027]"},{"line_number":1964,"context_line":""},{"line_number":1965,"context_line":"    def create_volume(self, volume):"},{"line_number":1966,"context_line":"        \"\"\"Creates a EMC volume.\"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"fa1b9901_308eb9d0","line":1963,"in_reply_to":"fa1b9901_e77d131d","updated":"2015-08-20 08:49:53.000000000","message":"Done","commit_id":"3d9dedac5eddbba34ae07621f7c9cfd528f152bd"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"da2ea338814ae01fcce5ba7aa71a20bf0e5d2930","unresolved":false,"context_lines":[{"line_number":2107,"context_line":"            self._client.delete_lun(volume[\u0027name\u0027])"},{"line_number":2108,"context_line":"        except exception.EMCVnxCLICmdError as ex:"},{"line_number":2109,"context_line":"            orig_out \u003d \"\\n\".join(ex.kwargs[\"out\"])"},{"line_number":2110,"context_line":"            if (force_delete or self.force_delete_lun_in_sg) and \\"},{"line_number":2111,"context_line":"                    VNXError.has_error(orig_out, VNXError.LUN_IN_SG):"},{"line_number":2112,"context_line":"                LOG.warning(_LW(\u0027LUN corresponding to %s is still \u0027"},{"line_number":2113,"context_line":"                                \u0027in some Storage Groups.\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa1b9901_67902344","line":2110,"updated":"2015-08-19 14:11:00.000000000","message":"Please use () instead of ()","commit_id":"3d9dedac5eddbba34ae07621f7c9cfd528f152bd"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"f1b76f8b0a1dd0e22b11640eb3b4492c47f89155","unresolved":false,"context_lines":[{"line_number":2107,"context_line":"            self._client.delete_lun(volume[\u0027name\u0027])"},{"line_number":2108,"context_line":"        except exception.EMCVnxCLICmdError as ex:"},{"line_number":2109,"context_line":"            orig_out \u003d \"\\n\".join(ex.kwargs[\"out\"])"},{"line_number":2110,"context_line":"            if (force_delete or self.force_delete_lun_in_sg) and \\"},{"line_number":2111,"context_line":"                    VNXError.has_error(orig_out, VNXError.LUN_IN_SG):"},{"line_number":2112,"context_line":"                LOG.warning(_LW(\u0027LUN corresponding to %s is still \u0027"},{"line_number":2113,"context_line":"                                \u0027in some Storage Groups.\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa1b9901_538905c8","line":2110,"in_reply_to":"fa1b9901_67902344","updated":"2015-08-20 08:49:53.000000000","message":"Done","commit_id":"3d9dedac5eddbba34ae07621f7c9cfd528f152bd"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"da2ea338814ae01fcce5ba7aa71a20bf0e5d2930","unresolved":false,"context_lines":[{"line_number":2629,"context_line":"        return \u0027|\u0027.join([k + \u0027^\u0027 + pl_dict[k] for k in pl_dict])"},{"line_number":2630,"context_line":""},{"line_number":2631,"context_line":"    def _build_provider_location(self, lun_id, type\u003d\u0027lun\u0027):"},{"line_number":2632,"context_line":"        \"\"\"Builds provoider_location for volume or snaphost.\"\"\""},{"line_number":2633,"context_line":"        pl_dict \u003d {\u0027system\u0027: self.get_array_serial(),"},{"line_number":2634,"context_line":"                   \u0027type\u0027: type,"},{"line_number":2635,"context_line":"                   \u0027id\u0027: six.text_type(lun_id),"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa1b9901_67058378","line":2632,"updated":"2015-08-19 14:11:00.000000000","message":"s/provoider/provider\n\ns/snaphost/snapshot","commit_id":"3d9dedac5eddbba34ae07621f7c9cfd528f152bd"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"f1b76f8b0a1dd0e22b11640eb3b4492c47f89155","unresolved":false,"context_lines":[{"line_number":2629,"context_line":"        return \u0027|\u0027.join([k + \u0027^\u0027 + pl_dict[k] for k in pl_dict])"},{"line_number":2630,"context_line":""},{"line_number":2631,"context_line":"    def _build_provider_location(self, lun_id, type\u003d\u0027lun\u0027):"},{"line_number":2632,"context_line":"        \"\"\"Builds provoider_location for volume or snaphost.\"\"\""},{"line_number":2633,"context_line":"        pl_dict \u003d {\u0027system\u0027: self.get_array_serial(),"},{"line_number":2634,"context_line":"                   \u0027type\u0027: type,"},{"line_number":2635,"context_line":"                   \u0027id\u0027: six.text_type(lun_id),"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa1b9901_53b0258a","line":2632,"in_reply_to":"fa1b9901_67058378","updated":"2015-08-20 08:49:53.000000000","message":"Done","commit_id":"3d9dedac5eddbba34ae07621f7c9cfd528f152bd"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"da2ea338814ae01fcce5ba7aa71a20bf0e5d2930","unresolved":false,"context_lines":[{"line_number":3339,"context_line":"    def initialize_connection_snapshot(self, snapshot, connector, **kwargs):"},{"line_number":3340,"context_line":"        \"\"\"Initializes connection for mount point.\"\"\""},{"line_number":3341,"context_line":"        smp_name \u003d self._construct_tmp_smp_name(snapshot)"},{"line_number":3342,"context_line":"        self._client.attach_mount_point(smp_name, snapshot[\u0027name\u0027])"},{"line_number":3343,"context_line":"        volume \u003d {\u0027name\u0027: smp_name, \u0027id\u0027: snapshot[\u0027id\u0027]}"},{"line_number":3344,"context_line":"        return self.initialize_connection(volume, connector)"},{"line_number":3345,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"fa1b9901_877d37e9","line":3342,"updated":"2015-08-19 14:11:00.000000000","message":"snapshot.name","commit_id":"3d9dedac5eddbba34ae07621f7c9cfd528f152bd"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"f1b76f8b0a1dd0e22b11640eb3b4492c47f89155","unresolved":false,"context_lines":[{"line_number":3339,"context_line":"    def initialize_connection_snapshot(self, snapshot, connector, **kwargs):"},{"line_number":3340,"context_line":"        \"\"\"Initializes connection for mount point.\"\"\""},{"line_number":3341,"context_line":"        smp_name \u003d self._construct_tmp_smp_name(snapshot)"},{"line_number":3342,"context_line":"        self._client.attach_mount_point(smp_name, snapshot[\u0027name\u0027])"},{"line_number":3343,"context_line":"        volume \u003d {\u0027name\u0027: smp_name, \u0027id\u0027: snapshot[\u0027id\u0027]}"},{"line_number":3344,"context_line":"        return self.initialize_connection(volume, connector)"},{"line_number":3345,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"fa1b9901_337a51be","line":3342,"in_reply_to":"fa1b9901_877d37e9","updated":"2015-08-20 08:49:53.000000000","message":"Done","commit_id":"3d9dedac5eddbba34ae07621f7c9cfd528f152bd"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"da2ea338814ae01fcce5ba7aa71a20bf0e5d2930","unresolved":false,"context_lines":[{"line_number":3340,"context_line":"        \"\"\"Initializes connection for mount point.\"\"\""},{"line_number":3341,"context_line":"        smp_name \u003d self._construct_tmp_smp_name(snapshot)"},{"line_number":3342,"context_line":"        self._client.attach_mount_point(smp_name, snapshot[\u0027name\u0027])"},{"line_number":3343,"context_line":"        volume \u003d {\u0027name\u0027: smp_name, \u0027id\u0027: snapshot[\u0027id\u0027]}"},{"line_number":3344,"context_line":"        return self.initialize_connection(volume, connector)"},{"line_number":3345,"context_line":""},{"line_number":3346,"context_line":"    def terminate_connection_snapshot(self, snapshot, connector, **kwargs):"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa1b9901_27846bd2","line":3343,"updated":"2015-08-19 14:11:00.000000000","message":"snapshot.id","commit_id":"3d9dedac5eddbba34ae07621f7c9cfd528f152bd"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"f1b76f8b0a1dd0e22b11640eb3b4492c47f89155","unresolved":false,"context_lines":[{"line_number":3340,"context_line":"        \"\"\"Initializes connection for mount point.\"\"\""},{"line_number":3341,"context_line":"        smp_name \u003d self._construct_tmp_smp_name(snapshot)"},{"line_number":3342,"context_line":"        self._client.attach_mount_point(smp_name, snapshot[\u0027name\u0027])"},{"line_number":3343,"context_line":"        volume \u003d {\u0027name\u0027: smp_name, \u0027id\u0027: snapshot[\u0027id\u0027]}"},{"line_number":3344,"context_line":"        return self.initialize_connection(volume, connector)"},{"line_number":3345,"context_line":""},{"line_number":3346,"context_line":"    def terminate_connection_snapshot(self, snapshot, connector, **kwargs):"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa1b9901_5377c5d2","line":3343,"in_reply_to":"fa1b9901_27846bd2","updated":"2015-08-20 08:49:53.000000000","message":"Done","commit_id":"3d9dedac5eddbba34ae07621f7c9cfd528f152bd"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"da2ea338814ae01fcce5ba7aa71a20bf0e5d2930","unresolved":false,"context_lines":[{"line_number":3352,"context_line":"        return conn_info"},{"line_number":3353,"context_line":""},{"line_number":3354,"context_line":"    def create_export_snapshot(self, context, snapshot, connector):"},{"line_number":3355,"context_line":"        \"\"\"Creates SMP for a snapshot.\"\"\""},{"line_number":3356,"context_line":"        smp_name \u003d self._construct_tmp_smp_name(snapshot)"},{"line_number":3357,"context_line":"        primary_lun_name \u003d snapshot[\u0027volume_name\u0027]"},{"line_number":3358,"context_line":"        self._client.create_mount_point(primary_lun_name, smp_name)"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa1b9901_c7456fb3","line":3355,"updated":"2015-08-19 14:11:00.000000000","message":"It\u0027s probably better to spell out SMP so it is clear what it means.","commit_id":"3d9dedac5eddbba34ae07621f7c9cfd528f152bd"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"f1b76f8b0a1dd0e22b11640eb3b4492c47f89155","unresolved":false,"context_lines":[{"line_number":3352,"context_line":"        return conn_info"},{"line_number":3353,"context_line":""},{"line_number":3354,"context_line":"    def create_export_snapshot(self, context, snapshot, connector):"},{"line_number":3355,"context_line":"        \"\"\"Creates SMP for a snapshot.\"\"\""},{"line_number":3356,"context_line":"        smp_name \u003d self._construct_tmp_smp_name(snapshot)"},{"line_number":3357,"context_line":"        primary_lun_name \u003d snapshot[\u0027volume_name\u0027]"},{"line_number":3358,"context_line":"        self._client.create_mount_point(primary_lun_name, smp_name)"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa1b9901_d3519537","line":3355,"in_reply_to":"fa1b9901_c7456fb3","updated":"2015-08-20 08:49:53.000000000","message":"Done","commit_id":"3d9dedac5eddbba34ae07621f7c9cfd528f152bd"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"da2ea338814ae01fcce5ba7aa71a20bf0e5d2930","unresolved":false,"context_lines":[{"line_number":3354,"context_line":"    def create_export_snapshot(self, context, snapshot, connector):"},{"line_number":3355,"context_line":"        \"\"\"Creates SMP for a snapshot.\"\"\""},{"line_number":3356,"context_line":"        smp_name \u003d self._construct_tmp_smp_name(snapshot)"},{"line_number":3357,"context_line":"        primary_lun_name \u003d snapshot[\u0027volume_name\u0027]"},{"line_number":3358,"context_line":"        self._client.create_mount_point(primary_lun_name, smp_name)"},{"line_number":3359,"context_line":"        return None"},{"line_number":3360,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"fa1b9901_e76e732e","line":3357,"updated":"2015-08-19 14:11:00.000000000","message":"snapshot.volume_name","commit_id":"3d9dedac5eddbba34ae07621f7c9cfd528f152bd"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"f1b76f8b0a1dd0e22b11640eb3b4492c47f89155","unresolved":false,"context_lines":[{"line_number":3354,"context_line":"    def create_export_snapshot(self, context, snapshot, connector):"},{"line_number":3355,"context_line":"        \"\"\"Creates SMP for a snapshot.\"\"\""},{"line_number":3356,"context_line":"        smp_name \u003d self._construct_tmp_smp_name(snapshot)"},{"line_number":3357,"context_line":"        primary_lun_name \u003d snapshot[\u0027volume_name\u0027]"},{"line_number":3358,"context_line":"        self._client.create_mount_point(primary_lun_name, smp_name)"},{"line_number":3359,"context_line":"        return None"},{"line_number":3360,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"fa1b9901_b333c113","line":3357,"in_reply_to":"fa1b9901_e76e732e","updated":"2015-08-20 08:49:53.000000000","message":"Done","commit_id":"3d9dedac5eddbba34ae07621f7c9cfd528f152bd"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"da2ea338814ae01fcce5ba7aa71a20bf0e5d2930","unresolved":false,"context_lines":[{"line_number":3359,"context_line":"        return None"},{"line_number":3360,"context_line":""},{"line_number":3361,"context_line":"    def remove_export_snapshot(self, context, snapshot):"},{"line_number":3362,"context_line":"        \"\"\"Removes SMP for a snapshot.\"\"\""},{"line_number":3363,"context_line":"        smp_name \u003d self._construct_tmp_smp_name(snapshot)"},{"line_number":3364,"context_line":"        volume \u003d {\u0027name\u0027: smp_name, \u0027provider_location\u0027: None}"},{"line_number":3365,"context_line":"        self.delete_volume(volume, True)"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa1b9901_47107fa8","line":3362,"updated":"2015-08-19 14:11:00.000000000","message":"Same","commit_id":"3d9dedac5eddbba34ae07621f7c9cfd528f152bd"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"f1b76f8b0a1dd0e22b11640eb3b4492c47f89155","unresolved":false,"context_lines":[{"line_number":3359,"context_line":"        return None"},{"line_number":3360,"context_line":""},{"line_number":3361,"context_line":"    def remove_export_snapshot(self, context, snapshot):"},{"line_number":3362,"context_line":"        \"\"\"Removes SMP for a snapshot.\"\"\""},{"line_number":3363,"context_line":"        smp_name \u003d self._construct_tmp_smp_name(snapshot)"},{"line_number":3364,"context_line":"        volume \u003d {\u0027name\u0027: smp_name, \u0027provider_location\u0027: None}"},{"line_number":3365,"context_line":"        self.delete_volume(volume, True)"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa1b9901_90b3059a","line":3362,"in_reply_to":"fa1b9901_47107fa8","updated":"2015-08-20 08:49:53.000000000","message":"Done","commit_id":"3d9dedac5eddbba34ae07621f7c9cfd528f152bd"}]}
