)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"f3276ffcf6cd4ebba153420e3f60f807b0209f2e","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"VMAX driver - Attach and detach snapshot"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"\"Attach snapshot\" and \"Detach snapshot\" are used internally"},{"line_number":10,"context_line":"by non-disruptive backup and to backup a snapshot"},{"line_number":11,"context_line":"separately from the backend storage."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I96993078a4123396206ce69a81c4d3f7180fec6b"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"5a74a57a_7ff075c9","line":10,"range":{"start_line":9,"start_character":39,"end_line":10,"end_character":17},"updated":"2016-11-29 11:12:45.000000000","message":"Is this cinder-backup service? How is this being called? Is it using Cinder context?","commit_id":"a536f5e0200fa467cc78cc3ccc145e22e2e0497b"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"7b247fafcb07b96372e5e4f012f17af042359e2e","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"VMAX driver - Attach and detach snapshot"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"\"Attach snapshot\" and \"Detach snapshot\" are used internally"},{"line_number":10,"context_line":"by non-disruptive backup and to backup a snapshot"},{"line_number":11,"context_line":"separately from the backend storage."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I96993078a4123396206ce69a81c4d3f7180fec6b"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"5a74a57a_a2175243","line":10,"range":{"start_line":9,"start_character":39,"end_line":10,"end_character":17},"in_reply_to":"5a74a57a_7ff075c9","updated":"2016-11-29 11:26:15.000000000","message":"It is implementing the following \nhttps://github.com/openstack/cinder-specs/blob/master/specs/mitaka/backup-snapshots.rst#developer-impact\n\nThank you\nHelen","commit_id":"a536f5e0200fa467cc78cc3ccc145e22e2e0497b"}],"cinder/tests/unit/volume/drivers/emc/test_emc_vmax.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"300147eb82d249467b5ed5926270c27f9783a9c6","unresolved":false,"context_lines":[{"line_number":8817,"context_line":"    def test_initialize_connection_snapshot(self, mock_conn, mock_num):"},{"line_number":8818,"context_line":"        data \u003d self.driver.initialize_connection_snapshot("},{"line_number":8819,"context_line":"            self.data.test_snapshot_v3, self.data.connector)"},{"line_number":8820,"context_line":"        self.assertEqual(data[\u0027driver_volume_type\u0027], \u0027iscsi\u0027)"},{"line_number":8821,"context_line":"        self.assertEqual(data[\u0027data\u0027][\u0027target_lun\u0027], 1)"},{"line_number":8822,"context_line":""},{"line_number":8823,"context_line":"    @mock.patch.object("}],"source_content_type":"text/x-python","patch_set":4,"id":"9a629dbe_6ba7cea6","line":8820,"updated":"2016-11-13 01:59:47.000000000","message":"reversed.","commit_id":"eda6fc357ae9cdb543dd3edfc19214bfc5265970"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"689df6342ee318a8834c1748a690b1e4eba7f5ec","unresolved":false,"context_lines":[{"line_number":8817,"context_line":"    def test_initialize_connection_snapshot(self, mock_conn, mock_num):"},{"line_number":8818,"context_line":"        data \u003d self.driver.initialize_connection_snapshot("},{"line_number":8819,"context_line":"            self.data.test_snapshot_v3, self.data.connector)"},{"line_number":8820,"context_line":"        self.assertEqual(data[\u0027driver_volume_type\u0027], \u0027iscsi\u0027)"},{"line_number":8821,"context_line":"        self.assertEqual(data[\u0027data\u0027][\u0027target_lun\u0027], 1)"},{"line_number":8822,"context_line":""},{"line_number":8823,"context_line":"    @mock.patch.object("}],"source_content_type":"text/x-python","patch_set":4,"id":"9a629dbe_4cebf1b0","line":8820,"in_reply_to":"9a629dbe_6ba7cea6","updated":"2016-11-14 09:28:36.000000000","message":"ok","commit_id":"eda6fc357ae9cdb543dd3edfc19214bfc5265970"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"300147eb82d249467b5ed5926270c27f9783a9c6","unresolved":false,"context_lines":[{"line_number":8818,"context_line":"        data \u003d self.driver.initialize_connection_snapshot("},{"line_number":8819,"context_line":"            self.data.test_snapshot_v3, self.data.connector)"},{"line_number":8820,"context_line":"        self.assertEqual(data[\u0027driver_volume_type\u0027], \u0027iscsi\u0027)"},{"line_number":8821,"context_line":"        self.assertEqual(data[\u0027data\u0027][\u0027target_lun\u0027], 1)"},{"line_number":8822,"context_line":""},{"line_number":8823,"context_line":"    @mock.patch.object("},{"line_number":8824,"context_line":"        emc_vmax_common.EMCVMAXCommon,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a629dbe_8bb8a2c9","line":8821,"updated":"2016-11-13 01:59:47.000000000","message":"reversed","commit_id":"eda6fc357ae9cdb543dd3edfc19214bfc5265970"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"689df6342ee318a8834c1748a690b1e4eba7f5ec","unresolved":false,"context_lines":[{"line_number":8818,"context_line":"        data \u003d self.driver.initialize_connection_snapshot("},{"line_number":8819,"context_line":"            self.data.test_snapshot_v3, self.data.connector)"},{"line_number":8820,"context_line":"        self.assertEqual(data[\u0027driver_volume_type\u0027], \u0027iscsi\u0027)"},{"line_number":8821,"context_line":"        self.assertEqual(data[\u0027data\u0027][\u0027target_lun\u0027], 1)"},{"line_number":8822,"context_line":""},{"line_number":8823,"context_line":"    @mock.patch.object("},{"line_number":8824,"context_line":"        emc_vmax_common.EMCVMAXCommon,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a629dbe_6cd0b5f8","line":8821,"in_reply_to":"9a629dbe_8bb8a2c9","updated":"2016-11-14 09:28:36.000000000","message":"ok","commit_id":"eda6fc357ae9cdb543dd3edfc19214bfc5265970"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bf636909bcb569858042967b07c4dd11cd5acda2","unresolved":false,"context_lines":[{"line_number":8291,"context_line":"    def test_initialize_connection_snapshot(self, mock_map, mock_conn):"},{"line_number":8292,"context_line":"        data \u003d self.driver.initialize_connection_snapshot("},{"line_number":8293,"context_line":"            self.data.test_snapshot_v3, self.data.connector)"},{"line_number":8294,"context_line":"        self.assertEqual(data[\u0027driver_volume_type\u0027], \u0027fibre_channel\u0027)"},{"line_number":8295,"context_line":"        self.assertEqual(data[\u0027data\u0027][\u0027target_lun\u0027], 3)"},{"line_number":8296,"context_line":""},{"line_number":8297,"context_line":"    @mock.patch.object("}],"source_content_type":"text/x-python","patch_set":11,"id":"3a71b18c_3456d7d2","line":8294,"range":{"start_line":8294,"start_character":8,"end_line":8294,"end_character":69},"updated":"2016-12-02 03:57:34.000000000","message":"The order is reversed.  Should be as follows:\n\nself.assertEqual(\u0027fibre_channel, data[\u0027driver_volume_type\u0027])","commit_id":"a536f5e0200fa467cc78cc3ccc145e22e2e0497b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bf636909bcb569858042967b07c4dd11cd5acda2","unresolved":false,"context_lines":[{"line_number":8292,"context_line":"        data \u003d self.driver.initialize_connection_snapshot("},{"line_number":8293,"context_line":"            self.data.test_snapshot_v3, self.data.connector)"},{"line_number":8294,"context_line":"        self.assertEqual(data[\u0027driver_volume_type\u0027], \u0027fibre_channel\u0027)"},{"line_number":8295,"context_line":"        self.assertEqual(data[\u0027data\u0027][\u0027target_lun\u0027], 3)"},{"line_number":8296,"context_line":""},{"line_number":8297,"context_line":"    @mock.patch.object("},{"line_number":8298,"context_line":"        emc_vmax_common.EMCVMAXCommon,"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a71b18c_94632bb1","line":8295,"updated":"2016-12-02 03:57:34.000000000","message":"same","commit_id":"a536f5e0200fa467cc78cc3ccc145e22e2e0497b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bf636909bcb569858042967b07c4dd11cd5acda2","unresolved":false,"context_lines":[{"line_number":8311,"context_line":"        common.conn \u003d FakeEcomConnection()"},{"line_number":8312,"context_line":"        data \u003d self.driver.terminate_connection_snapshot("},{"line_number":8313,"context_line":"            self.data.test_snapshot_v3, self.data.connector)"},{"line_number":8314,"context_line":"        self.assertEqual(data[\u0027driver_volume_type\u0027], \u0027fibre_channel\u0027)"},{"line_number":8315,"context_line":"        self.assertTrue(len(data[\u0027data\u0027][\u0027target_wwn\u0027]) \u003d\u003d 2)"},{"line_number":8316,"context_line":""},{"line_number":8317,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3a71b18c_d45da3ea","line":8314,"updated":"2016-12-02 03:57:34.000000000","message":"reversed.","commit_id":"a536f5e0200fa467cc78cc3ccc145e22e2e0497b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9d934499c599420c0bb72656997e681a5b73b765","unresolved":false,"context_lines":[{"line_number":8312,"context_line":"        data \u003d self.driver.terminate_connection_snapshot("},{"line_number":8313,"context_line":"            self.data.test_snapshot_v3, self.data.connector)"},{"line_number":8314,"context_line":"        self.assertEqual(\u0027fibre_channel\u0027, data[\u0027driver_volume_type\u0027])"},{"line_number":8315,"context_line":"        self.assertTrue(len(data[\u0027data\u0027][\u0027target_wwn\u0027]) \u003d\u003d 2)"},{"line_number":8316,"context_line":""},{"line_number":8317,"context_line":""},{"line_number":8318,"context_line":"@ddt.ddt"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a71b18c_97e3ada3","line":8315,"updated":"2016-12-06 04:52:57.000000000","message":"It\u0027s better to use assertEqual on this one.\n\nself.assertEqual(2, len(data[\u0027data\u0027][\u0027target_wwn\u0027]))","commit_id":"df1b3d23a4898cb62527583e4b7b1565dce5f680"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"6fbae10cef0b4f1aef16e37d1be7e7e9560afcda","unresolved":false,"context_lines":[{"line_number":8312,"context_line":"        data \u003d self.driver.terminate_connection_snapshot("},{"line_number":8313,"context_line":"            self.data.test_snapshot_v3, self.data.connector)"},{"line_number":8314,"context_line":"        self.assertEqual(\u0027fibre_channel\u0027, data[\u0027driver_volume_type\u0027])"},{"line_number":8315,"context_line":"        self.assertTrue(len(data[\u0027data\u0027][\u0027target_wwn\u0027]) \u003d\u003d 2)"},{"line_number":8316,"context_line":""},{"line_number":8317,"context_line":""},{"line_number":8318,"context_line":"@ddt.ddt"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a71b18c_52ecbc29","line":8315,"in_reply_to":"3a71b18c_97e3ada3","updated":"2016-12-06 09:09:34.000000000","message":"Sure","commit_id":"df1b3d23a4898cb62527583e4b7b1565dce5f680"}],"cinder/volume/drivers/emc/emc_vmax_fc.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"300147eb82d249467b5ed5926270c27f9783a9c6","unresolved":false,"context_lines":[{"line_number":188,"context_line":"        return self.populate_data(device_info, volume, connector)"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"    def populate_data(self, device_info, volume, connector):"},{"line_number":191,"context_line":"        \"\"\"Populate data dict"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"        Add relevant data to data dict, target_lun, target_wwn and"},{"line_number":194,"context_line":"        initiator_target_map."}],"source_content_type":"text/x-python","patch_set":4,"id":"9a629dbe_6b70ae40","line":191,"updated":"2016-11-13 01:59:47.000000000","message":"Period","commit_id":"eda6fc357ae9cdb543dd3edfc19214bfc5265970"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"689df6342ee318a8834c1748a690b1e4eba7f5ec","unresolved":false,"context_lines":[{"line_number":188,"context_line":"        return self.populate_data(device_info, volume, connector)"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"    def populate_data(self, device_info, volume, connector):"},{"line_number":191,"context_line":"        \"\"\"Populate data dict"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"        Add relevant data to data dict, target_lun, target_wwn and"},{"line_number":194,"context_line":"        initiator_target_map."}],"source_content_type":"text/x-python","patch_set":4,"id":"9a629dbe_0c081991","line":191,"in_reply_to":"9a629dbe_6b70ae40","updated":"2016-11-14 09:28:36.000000000","message":"ok","commit_id":"eda6fc357ae9cdb543dd3edfc19214bfc5265970"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"300147eb82d249467b5ed5926270c27f9783a9c6","unresolved":false,"context_lines":[{"line_number":239,"context_line":"        return data"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    def _get_zoning_mappings(self, volume, connector):"},{"line_number":242,"context_line":"        \"\"\"Get zoning mappings by building up initiator/target map"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"        :param volume: the volume object"},{"line_number":245,"context_line":"        :param connector: the connector object"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a629dbe_8b918249","line":242,"updated":"2016-11-13 01:59:47.000000000","message":"Period","commit_id":"eda6fc357ae9cdb543dd3edfc19214bfc5265970"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"689df6342ee318a8834c1748a690b1e4eba7f5ec","unresolved":false,"context_lines":[{"line_number":239,"context_line":"        return data"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    def _get_zoning_mappings(self, volume, connector):"},{"line_number":242,"context_line":"        \"\"\"Get zoning mappings by building up initiator/target map"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"        :param volume: the volume object"},{"line_number":245,"context_line":"        :param connector: the connector object"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a629dbe_8cf42988","line":242,"in_reply_to":"9a629dbe_8b918249","updated":"2016-11-14 09:28:36.000000000","message":"ok","commit_id":"eda6fc357ae9cdb543dd3edfc19214bfc5265970"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"300147eb82d249467b5ed5926270c27f9783a9c6","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        return zoning_mappings"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"    def _cleanup_zones(self, zoning_mappings):"},{"line_number":286,"context_line":"        \"\"\"Cleanup zones after terminate connection"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"        :param zoning_mappings: zoning mapping dict"},{"line_number":289,"context_line":"        :returns: data - dict"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a629dbe_ab948636","line":286,"updated":"2016-11-13 01:59:47.000000000","message":"period","commit_id":"eda6fc357ae9cdb543dd3edfc19214bfc5265970"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"689df6342ee318a8834c1748a690b1e4eba7f5ec","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        return zoning_mappings"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"    def _cleanup_zones(self, zoning_mappings):"},{"line_number":286,"context_line":"        \"\"\"Cleanup zones after terminate connection"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"        :param zoning_mappings: zoning mapping dict"},{"line_number":289,"context_line":"        :returns: data - dict"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a629dbe_acf1ed97","line":286,"in_reply_to":"9a629dbe_ab948636","updated":"2016-11-14 09:28:36.000000000","message":"ok","commit_id":"eda6fc357ae9cdb543dd3edfc19214bfc5265970"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"300147eb82d249467b5ed5926270c27f9783a9c6","unresolved":false,"context_lines":[{"line_number":486,"context_line":""},{"line_number":487,"context_line":"    def create_export_snapshot(self, context, snapshot, connector):"},{"line_number":488,"context_line":"        \"\"\"Creates a snapshot mount point for snapshot.\"\"\""},{"line_number":489,"context_line":"        pass"},{"line_number":490,"context_line":""},{"line_number":491,"context_line":"    def remove_export_snapshot(self, context, snapshot):"},{"line_number":492,"context_line":"        \"\"\"Removes snapshot mount point for snapshot.\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a629dbe_cb97fa37","line":489,"updated":"2016-11-13 01:59:47.000000000","message":"Remove this empty function.  The default in driver.py does not do anything anyway.","commit_id":"eda6fc357ae9cdb543dd3edfc19214bfc5265970"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"689df6342ee318a8834c1748a690b1e4eba7f5ec","unresolved":false,"context_lines":[{"line_number":486,"context_line":""},{"line_number":487,"context_line":"    def create_export_snapshot(self, context, snapshot, connector):"},{"line_number":488,"context_line":"        \"\"\"Creates a snapshot mount point for snapshot.\"\"\""},{"line_number":489,"context_line":"        pass"},{"line_number":490,"context_line":""},{"line_number":491,"context_line":"    def remove_export_snapshot(self, context, snapshot):"},{"line_number":492,"context_line":"        \"\"\"Removes snapshot mount point for snapshot.\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a629dbe_6c251509","line":489,"in_reply_to":"9a629dbe_cb97fa37","updated":"2016-11-14 09:28:36.000000000","message":"I had to add them, pretty sure the attaching and detaching of snapshots did not work without them","commit_id":"eda6fc357ae9cdb543dd3edfc19214bfc5265970"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"300147eb82d249467b5ed5926270c27f9783a9c6","unresolved":false,"context_lines":[{"line_number":490,"context_line":""},{"line_number":491,"context_line":"    def remove_export_snapshot(self, context, snapshot):"},{"line_number":492,"context_line":"        \"\"\"Removes snapshot mount point for snapshot.\"\"\""},{"line_number":493,"context_line":"        pass"},{"line_number":494,"context_line":""},{"line_number":495,"context_line":"    def initialize_connection_snapshot(self, snapshot, connector, **kwargs):"},{"line_number":496,"context_line":"        \"\"\"Allows connection to snapshot."}],"source_content_type":"text/x-python","patch_set":4,"id":"9a629dbe_eb9afe60","line":493,"updated":"2016-11-13 01:59:47.000000000","message":"Same","commit_id":"eda6fc357ae9cdb543dd3edfc19214bfc5265970"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"689df6342ee318a8834c1748a690b1e4eba7f5ec","unresolved":false,"context_lines":[{"line_number":490,"context_line":""},{"line_number":491,"context_line":"    def remove_export_snapshot(self, context, snapshot):"},{"line_number":492,"context_line":"        \"\"\"Removes snapshot mount point for snapshot.\"\"\""},{"line_number":493,"context_line":"        pass"},{"line_number":494,"context_line":""},{"line_number":495,"context_line":"    def initialize_connection_snapshot(self, snapshot, connector, **kwargs):"},{"line_number":496,"context_line":"        \"\"\"Allows connection to snapshot."}],"source_content_type":"text/x-python","patch_set":4,"id":"9a629dbe_8c226900","line":493,"in_reply_to":"9a629dbe_eb9afe60","updated":"2016-11-14 09:28:36.000000000","message":"See above","commit_id":"eda6fc357ae9cdb543dd3edfc19214bfc5265970"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"300147eb82d249467b5ed5926270c27f9783a9c6","unresolved":false,"context_lines":[{"line_number":495,"context_line":"    def initialize_connection_snapshot(self, snapshot, connector, **kwargs):"},{"line_number":496,"context_line":"        \"\"\"Allows connection to snapshot."},{"line_number":497,"context_line":""},{"line_number":498,"context_line":"        :param volume: the volume object"},{"line_number":499,"context_line":"        :param connector: the connector object"},{"line_number":500,"context_line":"        :returns:"},{"line_number":501,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a629dbe_0ba652ad","line":498,"updated":"2016-11-13 01:59:47.000000000","message":"snapshot","commit_id":"eda6fc357ae9cdb543dd3edfc19214bfc5265970"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"689df6342ee318a8834c1748a690b1e4eba7f5ec","unresolved":false,"context_lines":[{"line_number":495,"context_line":"    def initialize_connection_snapshot(self, snapshot, connector, **kwargs):"},{"line_number":496,"context_line":"        \"\"\"Allows connection to snapshot."},{"line_number":497,"context_line":""},{"line_number":498,"context_line":"        :param volume: the volume object"},{"line_number":499,"context_line":"        :param connector: the connector object"},{"line_number":500,"context_line":"        :returns:"},{"line_number":501,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a629dbe_6c3ef52a","line":498,"in_reply_to":"9a629dbe_0ba652ad","updated":"2016-11-14 09:28:36.000000000","message":"ok","commit_id":"eda6fc357ae9cdb543dd3edfc19214bfc5265970"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"300147eb82d249467b5ed5926270c27f9783a9c6","unresolved":false,"context_lines":[{"line_number":507,"context_line":"    def terminate_connection_snapshot(self, snapshot, connector, **kwargs):"},{"line_number":508,"context_line":"        \"\"\"Disallows connection to snapshot."},{"line_number":509,"context_line":""},{"line_number":510,"context_line":"        :param volume: the volume object"},{"line_number":511,"context_line":"        :param connector: the connector object"},{"line_number":512,"context_line":"        :returns:"},{"line_number":513,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a629dbe_2ba15694","line":510,"updated":"2016-11-13 01:59:47.000000000","message":"snapshot","commit_id":"eda6fc357ae9cdb543dd3edfc19214bfc5265970"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"689df6342ee318a8834c1748a690b1e4eba7f5ec","unresolved":false,"context_lines":[{"line_number":507,"context_line":"    def terminate_connection_snapshot(self, snapshot, connector, **kwargs):"},{"line_number":508,"context_line":"        \"\"\"Disallows connection to snapshot."},{"line_number":509,"context_line":""},{"line_number":510,"context_line":"        :param volume: the volume object"},{"line_number":511,"context_line":"        :param connector: the connector object"},{"line_number":512,"context_line":"        :returns:"},{"line_number":513,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a629dbe_ec776506","line":510,"in_reply_to":"9a629dbe_2ba15694","updated":"2016-11-14 09:28:36.000000000","message":"ok","commit_id":"eda6fc357ae9cdb543dd3edfc19214bfc5265970"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9d934499c599420c0bb72656997e681a5b73b765","unresolved":false,"context_lines":[{"line_number":500,"context_line":"        :param snapshot: the snapshot object"},{"line_number":501,"context_line":"        :param connector: the connector object"},{"line_number":502,"context_line":"        :param kwargs: additional parameters"},{"line_number":503,"context_line":"        :returns:"},{"line_number":504,"context_line":"        \"\"\""},{"line_number":505,"context_line":"        src_volume \u003d snapshot[\u0027volume\u0027]"},{"line_number":506,"context_line":"        snapshot[\u0027host\u0027] \u003d src_volume[\u0027host\u0027]"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a71b18c_b77c29b6","line":503,"updated":"2016-12-06 04:52:57.000000000","message":"Please fill in what this returns.","commit_id":"df1b3d23a4898cb62527583e4b7b1565dce5f680"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"6fbae10cef0b4f1aef16e37d1be7e7e9560afcda","unresolved":false,"context_lines":[{"line_number":500,"context_line":"        :param snapshot: the snapshot object"},{"line_number":501,"context_line":"        :param connector: the connector object"},{"line_number":502,"context_line":"        :param kwargs: additional parameters"},{"line_number":503,"context_line":"        :returns:"},{"line_number":504,"context_line":"        \"\"\""},{"line_number":505,"context_line":"        src_volume \u003d snapshot[\u0027volume\u0027]"},{"line_number":506,"context_line":"        snapshot[\u0027host\u0027] \u003d src_volume[\u0027host\u0027]"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a71b18c_12fc043d","line":503,"in_reply_to":"3a71b18c_b77c29b6","updated":"2016-12-06 09:09:34.000000000","message":"sure","commit_id":"df1b3d23a4898cb62527583e4b7b1565dce5f680"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9d934499c599420c0bb72656997e681a5b73b765","unresolved":false,"context_lines":[{"line_number":513,"context_line":"        :param snapshot: the snapshot object"},{"line_number":514,"context_line":"        :param connector: the connector object"},{"line_number":515,"context_line":"        :param kwargs: additional parameters"},{"line_number":516,"context_line":"        :returns:"},{"line_number":517,"context_line":"        \"\"\""},{"line_number":518,"context_line":"        src_volume \u003d snapshot[\u0027volume\u0027]"},{"line_number":519,"context_line":"        snapshot[\u0027host\u0027] \u003d src_volume[\u0027host\u0027]"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a71b18c_17423d68","line":516,"updated":"2016-12-06 04:52:57.000000000","message":"Please fill in what this returns.","commit_id":"df1b3d23a4898cb62527583e4b7b1565dce5f680"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"6fbae10cef0b4f1aef16e37d1be7e7e9560afcda","unresolved":false,"context_lines":[{"line_number":513,"context_line":"        :param snapshot: the snapshot object"},{"line_number":514,"context_line":"        :param connector: the connector object"},{"line_number":515,"context_line":"        :param kwargs: additional parameters"},{"line_number":516,"context_line":"        :returns:"},{"line_number":517,"context_line":"        \"\"\""},{"line_number":518,"context_line":"        src_volume \u003d snapshot[\u0027volume\u0027]"},{"line_number":519,"context_line":"        snapshot[\u0027host\u0027] \u003d src_volume[\u0027host\u0027]"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a71b18c_729b7818","line":516,"in_reply_to":"3a71b18c_17423d68","updated":"2016-12-06 09:09:34.000000000","message":"sure","commit_id":"df1b3d23a4898cb62527583e4b7b1565dce5f680"}],"cinder/volume/drivers/emc/emc_vmax_iscsi.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"300147eb82d249467b5ed5926270c27f9783a9c6","unresolved":false,"context_lines":[{"line_number":407,"context_line":"            source_vols)"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"    def create_export_snapshot(self, context, snapshot, connector):"},{"line_number":410,"context_line":"        \"\"\"Creates a snapshot mount point for snapshot.\"\"\""},{"line_number":411,"context_line":"        pass"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"    def remove_export_snapshot(self, context, snapshot):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a629dbe_cb80daf9","line":410,"updated":"2016-11-13 01:59:47.000000000","message":"Drop the \"snapshot\" in the middle of the sentence.  It\u0027s redundant with the one at the end.\n\nActually if you are not implementing this function, there\u0027s no need to add it here.  Just remove this function.  The default function in driver.py does not do anything anyway.","commit_id":"eda6fc357ae9cdb543dd3edfc19214bfc5265970"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"689df6342ee318a8834c1748a690b1e4eba7f5ec","unresolved":false,"context_lines":[{"line_number":407,"context_line":"            source_vols)"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"    def create_export_snapshot(self, context, snapshot, connector):"},{"line_number":410,"context_line":"        \"\"\"Creates a snapshot mount point for snapshot.\"\"\""},{"line_number":411,"context_line":"        pass"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"    def remove_export_snapshot(self, context, snapshot):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a629dbe_ec5e8578","line":410,"in_reply_to":"9a629dbe_cb80daf9","updated":"2016-11-14 09:28:36.000000000","message":"See emc_vmax_fc.py.  I will remove them and retest","commit_id":"eda6fc357ae9cdb543dd3edfc19214bfc5265970"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"300147eb82d249467b5ed5926270c27f9783a9c6","unresolved":false,"context_lines":[{"line_number":411,"context_line":"        pass"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"    def remove_export_snapshot(self, context, snapshot):"},{"line_number":414,"context_line":"        \"\"\"Removes snapshot mount point for snapshot.\"\"\""},{"line_number":415,"context_line":"        pass"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"    def initialize_connection_snapshot(self, snapshot, connector, **kwargs):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a629dbe_eb83de00","line":414,"updated":"2016-11-13 01:59:47.000000000","message":"Same","commit_id":"eda6fc357ae9cdb543dd3edfc19214bfc5265970"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"689df6342ee318a8834c1748a690b1e4eba7f5ec","unresolved":false,"context_lines":[{"line_number":411,"context_line":"        pass"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"    def remove_export_snapshot(self, context, snapshot):"},{"line_number":414,"context_line":"        \"\"\"Removes snapshot mount point for snapshot.\"\"\""},{"line_number":415,"context_line":"        pass"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"    def initialize_connection_snapshot(self, snapshot, connector, **kwargs):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a629dbe_6c53556d","line":414,"in_reply_to":"9a629dbe_eb83de00","updated":"2016-11-14 09:28:36.000000000","message":"I will remove them and retest","commit_id":"eda6fc357ae9cdb543dd3edfc19214bfc5265970"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"300147eb82d249467b5ed5926270c27f9783a9c6","unresolved":false,"context_lines":[{"line_number":417,"context_line":"    def initialize_connection_snapshot(self, snapshot, connector, **kwargs):"},{"line_number":418,"context_line":"        \"\"\"Allows connection to snapshot."},{"line_number":419,"context_line":""},{"line_number":420,"context_line":"        :param volume: the volume object"},{"line_number":421,"context_line":"        :param connector: the connector object"},{"line_number":422,"context_line":"        :returns:"},{"line_number":423,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a629dbe_2b7a3624","line":420,"updated":"2016-11-13 01:59:47.000000000","message":"snapshot","commit_id":"eda6fc357ae9cdb543dd3edfc19214bfc5265970"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"689df6342ee318a8834c1748a690b1e4eba7f5ec","unresolved":false,"context_lines":[{"line_number":417,"context_line":"    def initialize_connection_snapshot(self, snapshot, connector, **kwargs):"},{"line_number":418,"context_line":"        \"\"\"Allows connection to snapshot."},{"line_number":419,"context_line":""},{"line_number":420,"context_line":"        :param volume: the volume object"},{"line_number":421,"context_line":"        :param connector: the connector object"},{"line_number":422,"context_line":"        :returns:"},{"line_number":423,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a629dbe_cc4aa1ac","line":420,"in_reply_to":"9a629dbe_2b7a3624","updated":"2016-11-14 09:28:36.000000000","message":"will change","commit_id":"eda6fc357ae9cdb543dd3edfc19214bfc5265970"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"300147eb82d249467b5ed5926270c27f9783a9c6","unresolved":false,"context_lines":[{"line_number":431,"context_line":"    def terminate_connection_snapshot(self, snapshot, connector, **kwargs):"},{"line_number":432,"context_line":"        \"\"\"Disallows connection to snapshot."},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"        :param volume: the volume object"},{"line_number":435,"context_line":"        :param connector: the connector object"},{"line_number":436,"context_line":"        :returns:"},{"line_number":437,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a629dbe_4b75aa2f","line":434,"updated":"2016-11-13 01:59:47.000000000","message":"snapshot","commit_id":"eda6fc357ae9cdb543dd3edfc19214bfc5265970"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"689df6342ee318a8834c1748a690b1e4eba7f5ec","unresolved":false,"context_lines":[{"line_number":431,"context_line":"    def terminate_connection_snapshot(self, snapshot, connector, **kwargs):"},{"line_number":432,"context_line":"        \"\"\"Disallows connection to snapshot."},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"        :param volume: the volume object"},{"line_number":435,"context_line":"        :param connector: the connector object"},{"line_number":436,"context_line":"        :returns:"},{"line_number":437,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a629dbe_0ccbb91f","line":434,"in_reply_to":"9a629dbe_4b75aa2f","updated":"2016-11-14 09:28:36.000000000","message":"will change","commit_id":"eda6fc357ae9cdb543dd3edfc19214bfc5265970"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bf636909bcb569858042967b07c4dd11cd5acda2","unresolved":false,"context_lines":[{"line_number":421,"context_line":"        :param snapshot: the snapshot object"},{"line_number":422,"context_line":"        :param connector: the connector object"},{"line_number":423,"context_line":"        :param kwargs: additional parameters"},{"line_number":424,"context_line":"        :returns:"},{"line_number":425,"context_line":"        \"\"\""},{"line_number":426,"context_line":"        src_volume \u003d snapshot[\u0027volume\u0027]"},{"line_number":427,"context_line":"        snapshot[\u0027host\u0027] \u003d src_volume[\u0027host\u0027]"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a71b18c_f4ca9f4e","line":424,"updated":"2016-12-02 03:57:34.000000000","message":"Please fill in what this function returns.","commit_id":"a536f5e0200fa467cc78cc3ccc145e22e2e0497b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bf636909bcb569858042967b07c4dd11cd5acda2","unresolved":false,"context_lines":[{"line_number":436,"context_line":"        :param snapshot: the snapshot object"},{"line_number":437,"context_line":"        :param connector: the connector object"},{"line_number":438,"context_line":"        :param kwargs: additional parameters"},{"line_number":439,"context_line":"        :returns:"},{"line_number":440,"context_line":"        \"\"\""},{"line_number":441,"context_line":"        src_volume \u003d snapshot[\u0027volume\u0027]"},{"line_number":442,"context_line":"        snapshot[\u0027host\u0027] \u003d src_volume[\u0027host\u0027]"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a71b18c_34c5f73b","line":439,"updated":"2016-12-02 03:57:34.000000000","message":"Same","commit_id":"a536f5e0200fa467cc78cc3ccc145e22e2e0497b"}],"cinder/volume/drivers/emc/emc_vmax_utils.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bf636909bcb569858042967b07c4dd11cd5acda2","unresolved":false,"context_lines":[{"line_number":1284,"context_line":"            # Wait for SE_StorageSynchronized_SV_SV to be fully synced."},{"line_number":1285,"context_line":"            if waitforsync:"},{"line_number":1286,"context_line":"                LOG.warning(_LW("},{"line_number":1287,"context_line":"                    \"Expect a performance hit as volume is not not fully \""},{"line_number":1288,"context_line":"                    \"synced on %(deviceId)s.\"),"},{"line_number":1289,"context_line":"                    {\u0027deviceId\u0027: volumeInstance[\u0027DeviceID\u0027]})"},{"line_number":1290,"context_line":"                startTime \u003d time.time()"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a71b18c_34dc1712","line":1287,"updated":"2016-12-02 03:57:34.000000000","message":"duplicate \"not\".","commit_id":"a536f5e0200fa467cc78cc3ccc145e22e2e0497b"}],"releasenotes/notes/vmax-attach-snapshot-3137e59ab4ff39a4.yaml":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"300147eb82d249467b5ed5926270c27f9783a9c6","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"    Attach and detach snapshot"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"9a629dbe_ab8d6632","line":3,"updated":"2016-11-13 01:59:47.000000000","message":"Enable backup snapshot optimal path by implementing attach and detach snapshot in the VMAX driver.","commit_id":"eda6fc357ae9cdb543dd3edfc19214bfc5265970"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"689df6342ee318a8834c1748a690b1e4eba7f5ec","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"    Attach and detach snapshot"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"9a629dbe_8cfee936","line":3,"in_reply_to":"9a629dbe_ab8d6632","updated":"2016-11-14 09:28:36.000000000","message":"Ok. Thanks for the feedback.","commit_id":"eda6fc357ae9cdb543dd3edfc19214bfc5265970"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"eb6200a81a8f708ebe1a2c2b7151b52abe01d117","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"    Enable backup snapshot optimal path by implementing attach"},{"line_number":4,"context_line":"    and detach snapshot in the VMAX driver."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"5a74a57a_cafba145","line":4,"updated":"2016-11-28 21:33:24.000000000","message":"Looks like you had some rebasing errors.  This change was not in the latest patch.","commit_id":"61281807b3307b61b63c3f9f98a8db4abd953757"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"828b41ae141a3f64bcbeec7d4fd611971923b08a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"    Enable backup snapshot optimal path by implementing attach"},{"line_number":4,"context_line":"    and detach snapshot in the VMAX driver."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"5a74a57a_309b9567","line":4,"in_reply_to":"5a74a57a_cafba145","updated":"2016-11-29 09:30:55.000000000","message":"Yes, I saw this yesterday. I will fix this now.","commit_id":"61281807b3307b61b63c3f9f98a8db4abd953757"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bf636909bcb569858042967b07c4dd11cd5acda2","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"    Enable backup snapshot optimal path by implementing attach"},{"line_number":4,"context_line":"    and detach snapshot in the VMAX driver.---"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"3a71b18c_d48843ea","line":3,"updated":"2016-12-02 03:57:34.000000000","message":"Add a \"-\" in the beginning.  See example here:\n\nhttps://github.com/openstack/cinder/blob/master/releasenotes/notes/group-snapshots-36264409bbb8850c.yaml","commit_id":"a536f5e0200fa467cc78cc3ccc145e22e2e0497b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bf636909bcb569858042967b07c4dd11cd5acda2","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"    Enable backup snapshot optimal path by implementing attach"},{"line_number":4,"context_line":"    and detach snapshot in the VMAX driver.---"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"3a71b18c_d41123ae","line":4,"range":{"start_line":4,"start_character":43,"end_line":4,"end_character":46},"updated":"2016-12-02 03:57:34.000000000","message":"Please remove \"---\".","commit_id":"a536f5e0200fa467cc78cc3ccc145e22e2e0497b"}]}
