)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a77d1d3b4475a7aeb0e5c868c6ed6d52b34da8bc","unresolved":false,"context_lines":[{"line_number":9,"context_line":"iSCSI Multipathing allows you to configure multiple I/O paths"},{"line_number":10,"context_line":"between server nodes and VMAX2 or VMAX3 by supporting multiple"},{"line_number":11,"context_line":"iSCSI IP portals."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: Ie9fa678e61aa31ed5cca5c846a2dcecf2e107641"},{"line_number":14,"context_line":"Implements: blueprint vmax-iscsi-multipath"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"9abb7d3a_d5273e10","line":12,"updated":"2016-05-31 01:43:59.000000000","message":"Please add a DocImpact flag.","commit_id":"9fa4fc594eb452367afdf608c741eb2f1f952328"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"25bad55f8588c731be0613de63aa8fee7242ed73","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"DocImpact"},{"line_number":14,"context_line":"Change-Id: Ie9fa678e61aa31ed5cca5c846a2dcecf2e107641"},{"line_number":15,"context_line":"Implements: blueprint vmax-iscsi-multipath"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"bacf61ea_3beafa0f","line":15,"updated":"2016-07-29 13:46:45.000000000","message":"This blueprint is marked as \u0027implemented\u0027. Is this the correct blueprint?","commit_id":"b813311605540cacdcdf22ea8d8b190a5db41ebf"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7968b408430144c509837e5d3a539adc1353f3cf","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"DocImpact"},{"line_number":14,"context_line":"Change-Id: Ie9fa678e61aa31ed5cca5c846a2dcecf2e107641"},{"line_number":15,"context_line":"Implements: blueprint vmax-iscsi-multipath"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"bacf61ea_7020484a","line":15,"in_reply_to":"bacf61ea_3beafa0f","updated":"2016-08-03 12:22:32.000000000","message":"Helen,\n\nCan you change this to:\n\nPartial-Implements: blueprint vmax-iscsi-multipath\n\n\nVipin,\n\nThis blueprint is used to track multiple patches on VMAX iSCSI multipath.  Should have used Partial-Implements instead.","commit_id":"b813311605540cacdcdf22ea8d8b190a5db41ebf"}],"cinder/tests/unit/test_emc_vmax.py":[{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"950f4664913f5e3e6cfef3ced14540976a837469","unresolved":false,"context_lines":[{"line_number":8034,"context_line":"        configuration \u003d mock.Mock()"},{"line_number":8035,"context_line":"        configuration.safe_get.return_value \u003d \u0027iSCSITests\u0027"},{"line_number":8036,"context_line":"        configuration.config_group \u003d \u0027iSCSITests\u0027"},{"line_number":8037,"context_line":"        self.stubs.Set(emc_vmax_iscsi.EMCVMAXISCSIDriver,"},{"line_number":8038,"context_line":"                       \u0027smis_do_iscsi_discovery\u0027,"},{"line_number":8039,"context_line":"                       self.fake_do_iscsi_discovery)"},{"line_number":8040,"context_line":"        emc_vmax_common.EMCVMAXCommon._gather_info \u003d mock.Mock()"}],"source_content_type":"text/x-python","patch_set":6,"id":"dada55a8_8fd490bd","line":8037,"updated":"2016-07-25 17:25:21.000000000","message":"We shouldn\u0027t use mox for new tests.\n\nSee https://github.com/openstack/cinder/blob/master/HACKING.rst","commit_id":"9362f9a02654fa5423c4b15acacc72107f42b053"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"cae8d4967b7ebffbbff370fe088f7bdbbf042036","unresolved":false,"context_lines":[{"line_number":8034,"context_line":"        configuration \u003d mock.Mock()"},{"line_number":8035,"context_line":"        configuration.safe_get.return_value \u003d \u0027iSCSITests\u0027"},{"line_number":8036,"context_line":"        configuration.config_group \u003d \u0027iSCSITests\u0027"},{"line_number":8037,"context_line":"        self.stubs.Set(emc_vmax_iscsi.EMCVMAXISCSIDriver,"},{"line_number":8038,"context_line":"                       \u0027smis_do_iscsi_discovery\u0027,"},{"line_number":8039,"context_line":"                       self.fake_do_iscsi_discovery)"},{"line_number":8040,"context_line":"        emc_vmax_common.EMCVMAXCommon._gather_info \u003d mock.Mock()"}],"source_content_type":"text/x-python","patch_set":6,"id":"dada55a8_aa46991e","line":8037,"in_reply_to":"dada55a8_8fd490bd","updated":"2016-07-25 20:41:08.000000000","message":"Helen,\n\nself.stubs actually uses mox.  See here:\nhttps://github.com/openstack/cinder/blob/master/cinder/test.py#L200\n\nYou can use mock_object instead:\n\nself.mock_object(emc_vmax_iscsi.EMCVMAXISCSIDriver, \u0027smis_do_iscsi_discovery\u0027, self.fake_do_iscsi_discovery)","commit_id":"9362f9a02654fa5423c4b15acacc72107f42b053"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"0701e3aa461cb34b7348491d69e682f4f300c502","unresolved":false,"context_lines":[{"line_number":8034,"context_line":"        configuration \u003d mock.Mock()"},{"line_number":8035,"context_line":"        configuration.safe_get.return_value \u003d \u0027iSCSITests\u0027"},{"line_number":8036,"context_line":"        configuration.config_group \u003d \u0027iSCSITests\u0027"},{"line_number":8037,"context_line":"        self.stubs.Set(emc_vmax_iscsi.EMCVMAXISCSIDriver,"},{"line_number":8038,"context_line":"                       \u0027smis_do_iscsi_discovery\u0027,"},{"line_number":8039,"context_line":"                       self.fake_do_iscsi_discovery)"},{"line_number":8040,"context_line":"        emc_vmax_common.EMCVMAXCommon._gather_info \u003d mock.Mock()"}],"source_content_type":"text/x-python","patch_set":6,"id":"dada55a8_49941d8a","line":8037,"in_reply_to":"dada55a8_aa46991e","updated":"2016-07-26 15:22:32.000000000","message":"Thank you both for the feedback.  I will change this.\nKind Regards,\nHelen","commit_id":"9362f9a02654fa5423c4b15acacc72107f42b053"}],"cinder/tests/unit/volume/drivers/emc/test_emc_vmax.py":[{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"25bad55f8588c731be0613de63aa8fee7242ed73","unresolved":false,"context_lines":[{"line_number":1892,"context_line":"        conn \u003d FakeEcomConnection()"},{"line_number":1893,"context_line":"        return conn"},{"line_number":1894,"context_line":""},{"line_number":1895,"context_line":"    def fake_do_iscsi_discovery(self, volume):"},{"line_number":1896,"context_line":"        output \u003d []"},{"line_number":1897,"context_line":"        properties \u003d {}"},{"line_number":1898,"context_line":"        properties[\u0027target_portal\u0027] \u003d \u002710.10.0.50:3260\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"bacf61ea_db511eda","line":1895,"updated":"2016-07-29 13:46:45.000000000","message":"Can we move this fake to a common place? It is repeated in many places.","commit_id":"b813311605540cacdcdf22ea8d8b190a5db41ebf"}],"cinder/volume/drivers/emc/emc_vmax_common.py":[{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"49f71aab15a4c769f44fa3ed12cb4e8508d7c344","unresolved":false,"context_lines":[{"line_number":417,"context_line":"        if self.protocol.lower() \u003d\u003d \u0027iscsi\u0027:"},{"line_number":418,"context_line":"            return self._find_ip_protocol_endpoints("},{"line_number":419,"context_line":"                self.conn, deviceInfoDict[\u0027storagesystem\u0027],"},{"line_number":420,"context_line":"                portGroupName), is_multipath"},{"line_number":421,"context_line":"        else:"},{"line_number":422,"context_line":"            return deviceInfoDict"},{"line_number":423,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1aa78d24_abbe3c62","line":420,"updated":"2016-07-12 22:21:51.000000000","message":"this is very strange behavior.  In one case you return a single value, and yet in another case you return a tuple.  \n\nShouldn\u0027t you also return is_multipath for the FC case?","commit_id":"105b3d9b1edf8cd9fdb63883fde5e39e0e6050fd"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"ba01480dd4a421968eacba7ad873238b5d33b9e7","unresolved":false,"context_lines":[{"line_number":417,"context_line":"        if self.protocol.lower() \u003d\u003d \u0027iscsi\u0027:"},{"line_number":418,"context_line":"            return self._find_ip_protocol_endpoints("},{"line_number":419,"context_line":"                self.conn, deviceInfoDict[\u0027storagesystem\u0027],"},{"line_number":420,"context_line":"                portGroupName), is_multipath"},{"line_number":421,"context_line":"        else:"},{"line_number":422,"context_line":"            return deviceInfoDict"},{"line_number":423,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_f0509a60","line":420,"in_reply_to":"1aa78d24_abbe3c62","updated":"2016-07-19 15:01:32.000000000","message":"FC and iSCSI expect different data back. I do agree it is not typical behaviour.  I will take a look to see if there is a better way.\n\nThis is iSCSI multipathing only, it is only relevant for iSCSI.","commit_id":"105b3d9b1edf8cd9fdb63883fde5e39e0e6050fd"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"33cd23db33b3738643fa3dd8daf258492d61f2b3","unresolved":false,"context_lines":[{"line_number":385,"context_line":"        \"\"\""},{"line_number":386,"context_line":"        portGroupName \u003d None"},{"line_number":387,"context_line":"        extraSpecs \u003d self._initial_setup(volume)"},{"line_number":388,"context_line":"        is_multipath \u003d connector.get(\u0027multipath\u0027, False)"},{"line_number":389,"context_line":""},{"line_number":390,"context_line":"        volumeName \u003d volume[\u0027name\u0027]"},{"line_number":391,"context_line":"        LOG.info(_LI(\"Initialize connection: %(volume)s.\"),"}],"source_content_type":"text/x-python","patch_set":10,"id":"9ad45d7e_7a051c44","line":388,"updated":"2016-08-11 22:12:20.000000000","message":"do you do anything with this?   If this is False, then that means multipath daemon isn\u0027t even on/capable on the remote host.  In which case you don\u0027t want to export a volume out multiple ports.","commit_id":"ef2fa49067d02d91ae29ed21e763d332669bbe20"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"aa5552c991073e0d6073717092ad1f77d8bce0da","unresolved":false,"context_lines":[{"line_number":385,"context_line":"        \"\"\""},{"line_number":386,"context_line":"        portGroupName \u003d None"},{"line_number":387,"context_line":"        extraSpecs \u003d self._initial_setup(volume)"},{"line_number":388,"context_line":"        is_multipath \u003d connector.get(\u0027multipath\u0027, False)"},{"line_number":389,"context_line":""},{"line_number":390,"context_line":"        volumeName \u003d volume[\u0027name\u0027]"},{"line_number":391,"context_line":"        LOG.info(_LI(\"Initialize connection: %(volume)s.\"),"}],"source_content_type":"text/x-python","patch_set":10,"id":"3ac371cc_7d6e5097","line":388,"in_reply_to":"9ad45d7e_7a051c44","updated":"2016-08-16 07:22:12.000000000","message":"I pass this on to emc_vmax_iscsi.py even if it is false","commit_id":"ef2fa49067d02d91ae29ed21e763d332669bbe20"}],"cinder/volume/drivers/emc/emc_vmax_fc.py":[{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"33cd23db33b3738643fa3dd8daf258492d61f2b3","unresolved":false,"context_lines":[{"line_number":71,"context_line":"              - SnapVX licensing checks for VMAX3 (bug #1587017)"},{"line_number":72,"context_line":"              - VMAX oversubscription Support (blueprint vmax-oversubscription)"},{"line_number":73,"context_line":"              - VMAX2/VMAX3 iscsi multipath support (iscsi only)"},{"line_number":74,"context_line":"              https://blueprints.launchpad.net/cinder/+spec/vmax-iscsi-multipath"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    \"\"\""},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"9ad45d7e_1a0ea08b","line":74,"updated":"2016-08-11 22:12:20.000000000","message":"why are you modifying the Fibre channel driver to say iSCSI change only ?","commit_id":"ef2fa49067d02d91ae29ed21e763d332669bbe20"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"aa5552c991073e0d6073717092ad1f77d8bce0da","unresolved":false,"context_lines":[{"line_number":71,"context_line":"              - SnapVX licensing checks for VMAX3 (bug #1587017)"},{"line_number":72,"context_line":"              - VMAX oversubscription Support (blueprint vmax-oversubscription)"},{"line_number":73,"context_line":"              - VMAX2/VMAX3 iscsi multipath support (iscsi only)"},{"line_number":74,"context_line":"              https://blueprints.launchpad.net/cinder/+spec/vmax-iscsi-multipath"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    \"\"\""},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3ac371cc_7d1c9013","line":74,"in_reply_to":"9ad45d7e_1a0ea08b","updated":"2016-08-16 07:22:12.000000000","message":"I will remove it from here","commit_id":"ef2fa49067d02d91ae29ed21e763d332669bbe20"}],"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":"a77d1d3b4475a7aeb0e5c868c6ed6d52b34da8bc","unresolved":false,"context_lines":[{"line_number":189,"context_line":"                                    \u0027iqn.2010-10.org.openstack:volume-00002\u0027],"},{"line_number":190,"context_line":"                    \u0027target_portals\u0027: [\u0027127.0.0.1:3260\u0027, \u0027127.0.1.1:3260\u0027],"},{"line_number":191,"context_line":"                    \u0027target_luns\u0027: [1, 1],"},{"line_number":192,"context_line":"                    \u0027access_mode\u0027: \u0027rw\u0027"},{"line_number":193,"context_line":"                }"},{"line_number":194,"context_line":"            }"},{"line_number":195,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"9abb7d3a_55efce86","line":192,"updated":"2016-05-31 01:43:59.000000000","message":"I don\u0027t see \u0027access_mode\u0027 populated by this driver.  Please remove this line.\n\nIt will be added by the manager.","commit_id":"9fa4fc594eb452367afdf608c741eb2f1f952328"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"5d3922145b0f41f28a0ac293f114fb24e927512d","unresolved":false,"context_lines":[{"line_number":253,"context_line":"    def _parse_target_list(self, targets):"},{"line_number":254,"context_line":"        \"\"\"Parse target list into usable format."},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"        :param targets:"},{"line_number":257,"context_line":"        :return: outTargets"},{"line_number":258,"context_line":"        \"\"\""},{"line_number":259,"context_line":"        outTargets \u003d []"}],"source_content_type":"text/x-python","patch_set":4,"id":"1aa78d24_7ceb9cdc","line":256,"range":{"start_line":256,"start_character":8,"end_line":256,"end_character":23},"updated":"2016-07-12 11:56:37.000000000","message":"Maybe should add the description of param targets.","commit_id":"a29241b5cb000d9b7754d7114cd470ccdb82650d"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"5f25ba4574d26e1c32d5b3911b6289d611136314","unresolved":false,"context_lines":[{"line_number":253,"context_line":"    def _parse_target_list(self, targets):"},{"line_number":254,"context_line":"        \"\"\"Parse target list into usable format."},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"        :param targets:"},{"line_number":257,"context_line":"        :return: outTargets"},{"line_number":258,"context_line":"        \"\"\""},{"line_number":259,"context_line":"        outTargets \u003d []"}],"source_content_type":"text/x-python","patch_set":4,"id":"1aa78d24_06379eff","line":256,"range":{"start_line":256,"start_character":8,"end_line":256,"end_character":23},"in_reply_to":"1aa78d24_7ceb9cdc","updated":"2016-07-12 15:07:46.000000000","message":"Will do","commit_id":"a29241b5cb000d9b7754d7114cd470ccdb82650d"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"25bad55f8588c731be0613de63aa8fee7242ed73","unresolved":false,"context_lines":[{"line_number":202,"context_line":"            is_multipath \u003d device_info[\u0027is_multipath\u0027]"},{"line_number":203,"context_line":"        except KeyError:"},{"line_number":204,"context_line":"            exception_message \u003d (_(\"Cannot get iSCSI ipaddresses or \""},{"line_number":205,"context_line":"                                   \"multipath flag.\"))"},{"line_number":206,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dexception_message)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"        iscsi_properties \u003d self.smis_get_iscsi_properties("}],"source_content_type":"text/x-python","patch_set":8,"id":"bacf61ea_7be91280","line":205,"updated":"2016-07-29 13:46:45.000000000","message":"Please add the exception message (or e.args[0]) so that the key which caused this error will be clear.","commit_id":"b813311605540cacdcdf22ea8d8b190a5db41ebf"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"fdbc09f689eb5a128865ed2ab490ef96638233dc","unresolved":false,"context_lines":[{"line_number":202,"context_line":"            self.iscsi_ip_addresses \u003d device_info[\u0027iscsi_ip_addresses\u0027]"},{"line_number":203,"context_line":"            is_multipath \u003d device_info[\u0027is_multipath\u0027]"},{"line_number":204,"context_line":"        except KeyError:"},{"line_number":205,"context_line":"            exception_message \u003d (_(\"Cannot get iSCSI ipaddresses or \""},{"line_number":206,"context_line":"                                   \"multipath flag.\"))"},{"line_number":207,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dexception_message)"},{"line_number":208,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"9ad45d7e_31ba4b6f","line":205,"updated":"2016-08-09 13:19:06.000000000","message":"Please add e.args[0] so that it will be clear which key is missing.","commit_id":"e8800e50a6f32dc74600cc490705bba30eab8d3f"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"b8729f335cf120054c7bba5d34e57e6fe55db918","unresolved":false,"context_lines":[{"line_number":202,"context_line":"            self.iscsi_ip_addresses \u003d device_info[\u0027iscsi_ip_addresses\u0027]"},{"line_number":203,"context_line":"            is_multipath \u003d device_info[\u0027is_multipath\u0027]"},{"line_number":204,"context_line":"        except KeyError:"},{"line_number":205,"context_line":"            exception_message \u003d (_(\"Cannot get iSCSI ipaddresses or \""},{"line_number":206,"context_line":"                                   \"multipath flag.\"))"},{"line_number":207,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dexception_message)"},{"line_number":208,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"9ad45d7e_a1d30d5f","line":205,"in_reply_to":"9ad45d7e_31ba4b6f","updated":"2016-08-11 13:07:48.000000000","message":"Sure. Thanks","commit_id":"e8800e50a6f32dc74600cc490705bba30eab8d3f"}],"releasenotes/notes/slug-goes-here-76cc09bacf4fdfbf.yaml":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"aa23cc8dccdea2e4b593ec905a55e4832e8dba4b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"  - VMAX driver iSCSI Multipathing allows you to configure"},{"line_number":4,"context_line":"    multiple I/O paths between server nodes and VMAX2 or"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"bacf61ea_1b372f00","line":1,"updated":"2016-08-04 13:14:22.000000000","message":"Rename this file to vmax-iscsi-multipath-76cc09bacf4fdfbf.yaml","commit_id":"b813311605540cacdcdf22ea8d8b190a5db41ebf"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"aa23cc8dccdea2e4b593ec905a55e4832e8dba4b","unresolved":false,"context_lines":[{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"  - VMAX driver iSCSI Multipathing allows you to configure"},{"line_number":4,"context_line":"    multiple I/O paths between server nodes and VMAX2 or"},{"line_number":5,"context_line":"    VMAX3 by supporting multiple iSCSI IP portals."},{"line_number":6,"context_line":"features:"},{"line_number":7,"context_line":"  - VMAX driver iSCSI Multipathing."}],"source_content_type":"text/x-yaml","patch_set":8,"id":"bacf61ea_1b50cf31","line":5,"updated":"2016-08-04 13:14:22.000000000","message":"Remove the prelude section.","commit_id":"b813311605540cacdcdf22ea8d8b190a5db41ebf"}]}
