)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"42902500e12439e7e616b07f8c9ce2652229b41d","unresolved":false,"context_lines":[{"line_number":3,"context_line":"AuthorDate: 2016-07-14 18:33:15 +0100"},{"line_number":4,"context_line":"Commit:     Helen Walsh \u003chelen.walsh@emc.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-07-14 18:39:34 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"In get target wwn functionality, the operation throws an error if"},{"line_number":8,"context_line":"a target port is unavailable for any reason. This defeats the"},{"line_number":9,"context_line":"purpose of redundancy if other ports are available. An error should"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1aa78d24_788f8375","line":6,"updated":"2016-07-15 03:33:24.000000000","message":"Can you please add a title here?","commit_id":"94e28a25a9f9d0b10bde6bb9072848dcb5cc09de"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"aeb7ee2c890f25b60df8d49998e16a2051013341","unresolved":false,"context_lines":[{"line_number":3,"context_line":"AuthorDate: 2016-07-14 18:33:15 +0100"},{"line_number":4,"context_line":"Commit:     Helen Walsh \u003chelen.walsh@emc.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-07-14 18:39:34 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"In get target wwn functionality, the operation throws an error if"},{"line_number":8,"context_line":"a target port is unavailable for any reason. This defeats the"},{"line_number":9,"context_line":"purpose of redundancy if other ports are available. An error should"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1aa78d24_4158cf57","line":6,"in_reply_to":"1aa78d24_788f8375","updated":"2016-07-15 08:35:01.000000000","message":"Will do.  Thanks","commit_id":"94e28a25a9f9d0b10bde6bb9072848dcb5cc09de"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"42902500e12439e7e616b07f8c9ce2652229b41d","unresolved":false,"context_lines":[{"line_number":7,"context_line":"In get target wwn functionality, the operation throws an error if"},{"line_number":8,"context_line":"a target port is unavailable for any reason. This defeats the"},{"line_number":9,"context_line":"purpose of redundancy if other ports are available. An error should"},{"line_number":10,"context_line":"be thrown if no target port is available."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I3cc88a09e0f4d41705ae870b7aa40131042a99f3"},{"line_number":13,"context_line":"Closes-Bug: #1597284"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1aa78d24_b85c4bf1","line":10,"updated":"2016-07-15 03:33:24.000000000","message":"Where do you throw error now?  I see you changed it to continue, but I don\u0027t see where you are still throwing an error.","commit_id":"94e28a25a9f9d0b10bde6bb9072848dcb5cc09de"},{"author":{"_account_id":22021,"name":"Unana Okpoyo","email":"tomitu@yahoo.com","username":"UnanaOkpoyo"},"change_message_id":"f080b4306498e94138d6d736e4d5e2e1fd46f52e","unresolved":false,"context_lines":[{"line_number":7,"context_line":"In get target wwn functionality, the operation throws an error if"},{"line_number":8,"context_line":"a target port is unavailable for any reason. This defeats the"},{"line_number":9,"context_line":"purpose of redundancy if other ports are available. An error should"},{"line_number":10,"context_line":"be thrown if no target port is available."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I3cc88a09e0f4d41705ae870b7aa40131042a99f3"},{"line_number":13,"context_line":"Closes-Bug: #1597284"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"dada55a8_20f86ee5","line":10,"in_reply_to":"1aa78d24_b85c4bf1","updated":"2016-07-18 09:33:10.000000000","message":"Will update the function with appropriate error....Thanks for the feedback","commit_id":"94e28a25a9f9d0b10bde6bb9072848dcb5cc09de"},{"author":{"_account_id":12112,"name":"Tom Swanson","email":"tom_swanson@dell.com","username":"tomswanson"},"change_message_id":"081470d67487a800fc1fc5d07d4ce2106da545a4","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Helen Walsh \u003chelen.walsh@emc.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-07-19 11:53:01 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"In get target wwn functionality, the operation throws an error if"},{"line_number":8,"context_line":"a target port is unavailable for any reason. This defeats the"},{"line_number":9,"context_line":"purpose of redundancy if other ports are available. An error should"},{"line_number":10,"context_line":"be thrown if no target port is available."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"dada55a8_d6b10ee3","line":7,"range":{"start_line":7,"start_character":1,"end_line":7,"end_character":65},"updated":"2016-07-19 15:24:33.000000000","message":"First paragraph should be a sub 50 character summary line.","commit_id":"eb35dac9a60da4d4588078ece4cb3d008e3b5ba1"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"9589a058d0a6953d58afbca2fed68c10553b15df","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Helen Walsh \u003chelen.walsh@emc.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-07-19 11:53:01 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"In get target wwn functionality, the operation throws an error if"},{"line_number":8,"context_line":"a target port is unavailable for any reason. This defeats the"},{"line_number":9,"context_line":"purpose of redundancy if other ports are available. An error should"},{"line_number":10,"context_line":"be thrown if no target port is available."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"dada55a8_a2d1b059","line":7,"range":{"start_line":7,"start_character":1,"end_line":7,"end_character":65},"in_reply_to":"dada55a8_d6b10ee3","updated":"2016-07-19 16:17:18.000000000","message":"Thank you, I will change this","commit_id":"eb35dac9a60da4d4588078ece4cb3d008e3b5ba1"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"4fef6bf7a44382bb1acec398bb88a2c2fd1a036a","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Helen Walsh \u003chelen.walsh@emc.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-08-16 23:06:52 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Target WWN change to allow for redundancy"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In get target wwn functionality, the operation"},{"line_number":10,"context_line":"throws an error if a target port is unavailable"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"3ac371cc_59584c56","line":7,"updated":"2016-08-18 02:23:49.000000000","message":"Do you mind changing title of commit to \u0027vmax: Target WWN change to allow...\u0027?","commit_id":"ef778c96d219419bc920b345034ed93fcd16d073"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"5dcd285b3f00ce96d898c905de99dc35059e80aa","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Helen Walsh \u003chelen.walsh@emc.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-08-16 23:06:52 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Target WWN change to allow for redundancy"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In get target wwn functionality, the operation"},{"line_number":10,"context_line":"throws an error if a target port is unavailable"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"1ac06dbe_edc002e3","line":7,"in_reply_to":"3ac371cc_59584c56","updated":"2016-08-19 17:08:07.000000000","message":"Sure, we can change that.  Thanks","commit_id":"ef778c96d219419bc920b345034ed93fcd16d073"}],"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":"88a5a9d33752e492117b73340e28101ac7c1ea1f","unresolved":false,"context_lines":[{"line_number":7985,"context_line":"            sourceInstance, cloneName, extraSpecs)"},{"line_number":7986,"context_line":"        self.assertIsNotNone(duplicateVolumeInstance)"},{"line_number":7987,"context_line":""},{"line_number":7988,"context_line":"    def test_get_target_wwn(self):"},{"line_number":7989,"context_line":"        common \u003d self.driver.common"},{"line_number":7990,"context_line":"        common.conn \u003d FakeEcomConnection()"},{"line_number":7991,"context_line":"        targetWwns \u003d common.get_target_wwns("}],"source_content_type":"text/x-python","patch_set":7,"id":"9ad45d7e_690c97ed","line":7988,"updated":"2016-08-10 14:17:06.000000000","message":"This doesn\u0027t test the case where utils.get_target_endpoints fails and we continue to check other end points.","commit_id":"b44cc807b17045118d4fdecc0d2a425a1660ad61"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"51a5d3ccb0366df70b6405ed6eb393aef29bc149","unresolved":false,"context_lines":[{"line_number":7985,"context_line":"            sourceInstance, cloneName, extraSpecs)"},{"line_number":7986,"context_line":"        self.assertIsNotNone(duplicateVolumeInstance)"},{"line_number":7987,"context_line":""},{"line_number":7988,"context_line":"    def test_get_target_wwn(self):"},{"line_number":7989,"context_line":"        common \u003d self.driver.common"},{"line_number":7990,"context_line":"        common.conn \u003d FakeEcomConnection()"},{"line_number":7991,"context_line":"        targetWwns \u003d common.get_target_wwns("}],"source_content_type":"text/x-python","patch_set":7,"id":"9ad45d7e_89910b4a","line":7988,"in_reply_to":"9ad45d7e_690c97ed","updated":"2016-08-10 14:19:22.000000000","message":"We will write another test to test this scenario","commit_id":"b44cc807b17045118d4fdecc0d2a425a1660ad61"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"45d6308dcf45ccac3937307ddd9c65e845c720d8","unresolved":false,"context_lines":[{"line_number":8010,"context_line":"        hardwareInstanceNames \u003d [{\u0027CreationClassName\u0027: \u0027EMC_StorageHardwareID\u0027,"},{"line_number":8011,"context_line":"                                  \u0027Name\u0027: \u00275000090000000000\u0027}]"},{"line_number":8012,"context_line":"        common.utils.get_target_endpoints \u003d mock.Mock("},{"line_number":8013,"context_line":"            side_effect\u003d[None, hardwareInstanceNames])"},{"line_number":8014,"context_line":""},{"line_number":8015,"context_line":"        targetWwns \u003d common.get_target_wwns("},{"line_number":8016,"context_line":"            EMCVMAXCommonData.storage_system, EMCVMAXCommonData.connector)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9ad45d7e_883a7397","line":8013,"updated":"2016-08-11 11:08:52.000000000","message":"We could also add an exception (after or before None) to the side_effect to cover one more code path. Also you may need to update the test case name.","commit_id":"ba7d7f770d725b4f53167582a660c81e737c5498"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"60ffcb4e735919dbcb7f944f190c96e877a42951","unresolved":false,"context_lines":[{"line_number":8010,"context_line":"        hardwareInstanceNames \u003d [{\u0027CreationClassName\u0027: \u0027EMC_StorageHardwareID\u0027,"},{"line_number":8011,"context_line":"                                  \u0027Name\u0027: \u00275000090000000000\u0027}]"},{"line_number":8012,"context_line":"        common.utils.get_target_endpoints \u003d mock.Mock("},{"line_number":8013,"context_line":"            side_effect\u003d[None, hardwareInstanceNames])"},{"line_number":8014,"context_line":""},{"line_number":8015,"context_line":"        targetWwns \u003d common.get_target_wwns("},{"line_number":8016,"context_line":"            EMCVMAXCommonData.storage_system, EMCVMAXCommonData.connector)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9ad45d7e_c8346b4b","line":8013,"in_reply_to":"9ad45d7e_883a7397","updated":"2016-08-11 11:14:31.000000000","message":"I think between all three we are covering all scenarios.  The none causes a failure on one target wwn so even though one fails, if the other succeeds then the test will pass.  This is why I called the test one_invalid.","commit_id":"ba7d7f770d725b4f53167582a660c81e737c5498"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"5491a52c26f677840c19a89e1f0f904447a17dd1","unresolved":false,"context_lines":[{"line_number":8010,"context_line":"        hardwareInstanceNames \u003d [{\u0027CreationClassName\u0027: \u0027EMC_StorageHardwareID\u0027,"},{"line_number":8011,"context_line":"                                  \u0027Name\u0027: \u00275000090000000000\u0027}]"},{"line_number":8012,"context_line":"        common.utils.get_target_endpoints \u003d mock.Mock("},{"line_number":8013,"context_line":"            side_effect\u003d[None, hardwareInstanceNames])"},{"line_number":8014,"context_line":""},{"line_number":8015,"context_line":"        targetWwns \u003d common.get_target_wwns("},{"line_number":8016,"context_line":"            EMCVMAXCommonData.storage_system, EMCVMAXCommonData.connector)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9ad45d7e_134fd437","line":8013,"in_reply_to":"9ad45d7e_c8346b4b","updated":"2016-08-11 11:25:56.000000000","message":"Are we covering https://review.openstack.org/#/c/342300/8/cinder/volume/drivers/emc/emc_vmax_common.py line 1580. IIUC, common.utils.get_target_endpoints should throw an exception to cover that.\n\ncommon.utils.get_target_endpoints \u003d mock.Mock(\nside_effect\u003d[None, *SomeException*, hardwareInstanceNames])\n\nCurrently the test name is fine, but once the exception is added to the side_effect, there are two invalid cases.","commit_id":"ba7d7f770d725b4f53167582a660c81e737c5498"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"45d6308dcf45ccac3937307ddd9c65e845c720d8","unresolved":false,"context_lines":[{"line_number":8014,"context_line":""},{"line_number":8015,"context_line":"        targetWwns \u003d common.get_target_wwns("},{"line_number":8016,"context_line":"            EMCVMAXCommonData.storage_system, EMCVMAXCommonData.connector)"},{"line_number":8017,"context_line":"        self.assertEqual([\"5000090000000000\"], targetWwns)"},{"line_number":8018,"context_line":""},{"line_number":8019,"context_line":"    def test_cleanup_target(self):"},{"line_number":8020,"context_line":"        common \u003d self.driver.common"}],"source_content_type":"text/x-python","patch_set":8,"id":"9ad45d7e_6888df71","line":8017,"updated":"2016-08-11 11:08:52.000000000","message":"nit: self.assertEqual(\"5000090000000000\", targetWwns[0]) to be consistent with test_get_target_wwn","commit_id":"ba7d7f770d725b4f53167582a660c81e737c5498"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"60ffcb4e735919dbcb7f944f190c96e877a42951","unresolved":false,"context_lines":[{"line_number":8014,"context_line":""},{"line_number":8015,"context_line":"        targetWwns \u003d common.get_target_wwns("},{"line_number":8016,"context_line":"            EMCVMAXCommonData.storage_system, EMCVMAXCommonData.connector)"},{"line_number":8017,"context_line":"        self.assertEqual([\"5000090000000000\"], targetWwns)"},{"line_number":8018,"context_line":""},{"line_number":8019,"context_line":"    def test_cleanup_target(self):"},{"line_number":8020,"context_line":"        common \u003d self.driver.common"}],"source_content_type":"text/x-python","patch_set":8,"id":"9ad45d7e_8892734a","line":8017,"in_reply_to":"9ad45d7e_6888df71","updated":"2016-08-11 11:14:31.000000000","message":"It was my intention to bring back a list but I can change this","commit_id":"ba7d7f770d725b4f53167582a660c81e737c5498"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"f6e481f2f0ff28e99a44f9a032d59ba52de66d9f","unresolved":false,"context_lines":[{"line_number":8108,"context_line":"        common.conn \u003d FakeEcomConnection()"},{"line_number":8109,"context_line":"        targetWwns \u003d common.get_target_wwns("},{"line_number":8110,"context_line":"            EMCVMAXCommonData.storage_system, EMCVMAXCommonData.connector)"},{"line_number":8111,"context_line":"        self.assertEqual(\"5000090000000000\", targetWwns[0])"},{"line_number":8112,"context_line":""},{"line_number":8113,"context_line":"    def test_get_target_wwn_all_invalid(self):"},{"line_number":8114,"context_line":"        common \u003d self.driver.common"}],"source_content_type":"text/x-python","patch_set":11,"id":"1ac06dbe_158ba0c4","line":8111,"updated":"2016-08-22 11:02:25.000000000","message":"-1: If there\u0027s only 1 entry the check should be:\n\n self.assertListEqual([\"5000090000000000\"], targetWwns)","commit_id":"1f06663cc2bc0bf848fa0c751ecb0dc9255feca4"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"1f3d3d0090d43955653fd3f895417ed0cbfed1c5","unresolved":false,"context_lines":[{"line_number":8108,"context_line":"        common.conn \u003d FakeEcomConnection()"},{"line_number":8109,"context_line":"        targetWwns \u003d common.get_target_wwns("},{"line_number":8110,"context_line":"            EMCVMAXCommonData.storage_system, EMCVMAXCommonData.connector)"},{"line_number":8111,"context_line":"        self.assertEqual(\"5000090000000000\", targetWwns[0])"},{"line_number":8112,"context_line":""},{"line_number":8113,"context_line":"    def test_get_target_wwn_all_invalid(self):"},{"line_number":8114,"context_line":"        common \u003d self.driver.common"}],"source_content_type":"text/x-python","patch_set":11,"id":"1ac06dbe_517d23e6","line":8111,"in_reply_to":"1ac06dbe_158ba0c4","updated":"2016-08-22 13:49:33.000000000","message":"Will do.","commit_id":"1f06663cc2bc0bf848fa0c751ecb0dc9255feca4"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"f6e481f2f0ff28e99a44f9a032d59ba52de66d9f","unresolved":false,"context_lines":[{"line_number":8114,"context_line":"        common \u003d self.driver.common"},{"line_number":8115,"context_line":"        common.conn \u003d FakeEcomConnection()"},{"line_number":8116,"context_line":""},{"line_number":8117,"context_line":"        common.utils.get_target_endpoints \u003d mock.Mock("},{"line_number":8118,"context_line":"            return_value\u003dNone)"},{"line_number":8119,"context_line":""},{"line_number":8120,"context_line":"        self.assertRaises("}],"source_content_type":"text/x-python","patch_set":11,"id":"1ac06dbe_555a3850","line":8117,"updated":"2016-08-22 11:02:25.000000000","message":"-1: Mock the method instead of changing it directly","commit_id":"1f06663cc2bc0bf848fa0c751ecb0dc9255feca4"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"1f3d3d0090d43955653fd3f895417ed0cbfed1c5","unresolved":false,"context_lines":[{"line_number":8114,"context_line":"        common \u003d self.driver.common"},{"line_number":8115,"context_line":"        common.conn \u003d FakeEcomConnection()"},{"line_number":8116,"context_line":""},{"line_number":8117,"context_line":"        common.utils.get_target_endpoints \u003d mock.Mock("},{"line_number":8118,"context_line":"            return_value\u003dNone)"},{"line_number":8119,"context_line":""},{"line_number":8120,"context_line":"        self.assertRaises("}],"source_content_type":"text/x-python","patch_set":11,"id":"1ac06dbe_e26eff94","line":8117,"in_reply_to":"1ac06dbe_555a3850","updated":"2016-08-22 13:49:33.000000000","message":"Ok","commit_id":"1f06663cc2bc0bf848fa0c751ecb0dc9255feca4"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"f6e481f2f0ff28e99a44f9a032d59ba52de66d9f","unresolved":false,"context_lines":[{"line_number":8128,"context_line":"        hardwareInstanceNames \u003d [{\u0027CreationClassName\u0027: \u0027EMC_StorageHardwareID\u0027,"},{"line_number":8129,"context_line":"                                  \u0027Name\u0027: \u00275000090000000000\u0027}]"},{"line_number":8130,"context_line":"        e \u003d exception.VolumeBackendAPIException(\u0027Get target endpoint ex\u0027)"},{"line_number":8131,"context_line":"        common.utils.get_target_endpoints \u003d mock.Mock("},{"line_number":8132,"context_line":"            side_effect\u003d[None, hardwareInstanceNames, e])"},{"line_number":8133,"context_line":""},{"line_number":8134,"context_line":"        targetWwns \u003d common.get_target_wwns("}],"source_content_type":"text/x-python","patch_set":11,"id":"1ac06dbe_d53c68e4","line":8131,"updated":"2016-08-22 11:02:25.000000000","message":"-1: Mock the method instead of changing it directly","commit_id":"1f06663cc2bc0bf848fa0c751ecb0dc9255feca4"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"1f3d3d0090d43955653fd3f895417ed0cbfed1c5","unresolved":false,"context_lines":[{"line_number":8128,"context_line":"        hardwareInstanceNames \u003d [{\u0027CreationClassName\u0027: \u0027EMC_StorageHardwareID\u0027,"},{"line_number":8129,"context_line":"                                  \u0027Name\u0027: \u00275000090000000000\u0027}]"},{"line_number":8130,"context_line":"        e \u003d exception.VolumeBackendAPIException(\u0027Get target endpoint ex\u0027)"},{"line_number":8131,"context_line":"        common.utils.get_target_endpoints \u003d mock.Mock("},{"line_number":8132,"context_line":"            side_effect\u003d[None, hardwareInstanceNames, e])"},{"line_number":8133,"context_line":""},{"line_number":8134,"context_line":"        targetWwns \u003d common.get_target_wwns("}],"source_content_type":"text/x-python","patch_set":11,"id":"1ac06dbe_82062bcc","line":8131,"in_reply_to":"1ac06dbe_d53c68e4","updated":"2016-08-22 13:49:33.000000000","message":"Ok","commit_id":"1f06663cc2bc0bf848fa0c751ecb0dc9255feca4"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"f6e481f2f0ff28e99a44f9a032d59ba52de66d9f","unresolved":false,"context_lines":[{"line_number":8133,"context_line":""},{"line_number":8134,"context_line":"        targetWwns \u003d common.get_target_wwns("},{"line_number":8135,"context_line":"            EMCVMAXCommonData.storage_system, EMCVMAXCommonData.connector)"},{"line_number":8136,"context_line":"        self.assertEqual([\"5000090000000000\"], targetWwns)"},{"line_number":8137,"context_line":""},{"line_number":8138,"context_line":"    def test_cleanup_target(self):"},{"line_number":8139,"context_line":"        common \u003d self.driver.common"}],"source_content_type":"text/x-python","patch_set":11,"id":"1ac06dbe_d513c864","line":8136,"updated":"2016-08-22 11:02:25.000000000","message":"nit: assertListEqual","commit_id":"1f06663cc2bc0bf848fa0c751ecb0dc9255feca4"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"1f3d3d0090d43955653fd3f895417ed0cbfed1c5","unresolved":false,"context_lines":[{"line_number":8133,"context_line":""},{"line_number":8134,"context_line":"        targetWwns \u003d common.get_target_wwns("},{"line_number":8135,"context_line":"            EMCVMAXCommonData.storage_system, EMCVMAXCommonData.connector)"},{"line_number":8136,"context_line":"        self.assertEqual([\"5000090000000000\"], targetWwns)"},{"line_number":8137,"context_line":""},{"line_number":8138,"context_line":"    def test_cleanup_target(self):"},{"line_number":8139,"context_line":"        common \u003d self.driver.common"}],"source_content_type":"text/x-python","patch_set":11,"id":"1ac06dbe_f1552f50","line":8136,"in_reply_to":"1ac06dbe_d513c864","updated":"2016-08-22 13:49:33.000000000","message":"Sure, we will change. Thanks for the feedback","commit_id":"1f06663cc2bc0bf848fa0c751ecb0dc9255feca4"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"24af9198c0fdef2e790324261ea9d7869660d1f7","unresolved":false,"context_lines":[{"line_number":8129,"context_line":"        side_effect\u003d[None, [{\u0027CreationClassName\u0027: \u0027EMC_StorageHardwareID\u0027,"},{"line_number":8130,"context_line":"                             \u0027Name\u0027: \u00275000090000000000\u0027}],"},{"line_number":8131,"context_line":"                     exception.VolumeBackendAPIException("},{"line_number":8132,"context_line":"                         \u0027Get target endpoint ex\u0027)])"},{"line_number":8133,"context_line":"    def test_get_target_wwn_one_invalid(self, mock_target_ep):"},{"line_number":8134,"context_line":"        common \u003d self.driver.common"},{"line_number":8135,"context_line":"        common.conn \u003d FakeEcomConnection()"}],"source_content_type":"text/x-python","patch_set":12,"id":"1ac06dbe_608e4fd1","line":8132,"updated":"2016-08-23 10:17:13.000000000","message":"nit: Maybe doing the mock with a context manager instead of a decorator would have been cleaner.","commit_id":"5a4d408ffc67fda76bfff0bb3a548ef88b09a515"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"f8e29d7df02495c62363878f0bb88ea7b089d89d","unresolved":false,"context_lines":[{"line_number":8129,"context_line":"        side_effect\u003d[None, [{\u0027CreationClassName\u0027: \u0027EMC_StorageHardwareID\u0027,"},{"line_number":8130,"context_line":"                             \u0027Name\u0027: \u00275000090000000000\u0027}],"},{"line_number":8131,"context_line":"                     exception.VolumeBackendAPIException("},{"line_number":8132,"context_line":"                         \u0027Get target endpoint ex\u0027)])"},{"line_number":8133,"context_line":"    def test_get_target_wwn_one_invalid(self, mock_target_ep):"},{"line_number":8134,"context_line":"        common \u003d self.driver.common"},{"line_number":8135,"context_line":"        common.conn \u003d FakeEcomConnection()"}],"source_content_type":"text/x-python","patch_set":12,"id":"1ac06dbe_d4d5aa1b","line":8132,"in_reply_to":"1ac06dbe_608e4fd1","updated":"2016-08-25 08:15:25.000000000","message":"Hi Gorka,\nThanks for the feedback, could you give an example of what you mean?\nThanks\nHelen","commit_id":"5a4d408ffc67fda76bfff0bb3a548ef88b09a515"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"bc6ebd118cc52b2ad6b40038024f25053a70ed24","unresolved":false,"context_lines":[{"line_number":8129,"context_line":"        side_effect\u003d[None, [{\u0027CreationClassName\u0027: \u0027EMC_StorageHardwareID\u0027,"},{"line_number":8130,"context_line":"                             \u0027Name\u0027: \u00275000090000000000\u0027}],"},{"line_number":8131,"context_line":"                     exception.VolumeBackendAPIException("},{"line_number":8132,"context_line":"                         \u0027Get target endpoint ex\u0027)])"},{"line_number":8133,"context_line":"    def test_get_target_wwn_one_invalid(self, mock_target_ep):"},{"line_number":8134,"context_line":"        common \u003d self.driver.common"},{"line_number":8135,"context_line":"        common.conn \u003d FakeEcomConnection()"}],"source_content_type":"text/x-python","patch_set":12,"id":"1ac06dbe_ffd23f33","line":8132,"in_reply_to":"1ac06dbe_d4d5aa1b","updated":"2016-08-25 08:37:22.000000000","message":"Sure, but this is just a nit, the downvote is for the unanswered questions from the previous patch:","commit_id":"5a4d408ffc67fda76bfff0bb3a548ef88b09a515"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"bc6ebd118cc52b2ad6b40038024f25053a70ed24","unresolved":false,"context_lines":[{"line_number":8129,"context_line":"        side_effect\u003d[None, [{\u0027CreationClassName\u0027: \u0027EMC_StorageHardwareID\u0027,"},{"line_number":8130,"context_line":"                             \u0027Name\u0027: \u00275000090000000000\u0027}],"},{"line_number":8131,"context_line":"                     exception.VolumeBackendAPIException("},{"line_number":8132,"context_line":"                         \u0027Get target endpoint ex\u0027)])"},{"line_number":8133,"context_line":"    def test_get_target_wwn_one_invalid(self, mock_target_ep):"},{"line_number":8134,"context_line":"        common \u003d self.driver.common"},{"line_number":8135,"context_line":"        common.conn \u003d FakeEcomConnection()"}],"source_content_type":"text/x-python","patch_set":12,"id":"1ac06dbe_7f02cf3f","line":8132,"in_reply_to":"1ac06dbe_d4d5aa1b","updated":"2016-08-25 08:37:22.000000000","message":"Sure, but this is just a nit, the downvote is for unanswered questions and the pending -1 comment in previous patch.\n\n    def test_get_target_wwn_one_invalid(self):\n        common \u003d self.driver.common\n        common.conn \u003d FakeEcomConnection()\n        hardwareInstanceNames \u003d [{\u0027CreationClassName\u0027: \u0027EMC_StorageHardwareID\u0027,\n                                  \u0027Name\u0027: \u00275000090000000000\u0027}]\n        e \u003d exception.VolumeBackendAPIException(\u0027Get target endpoint ex\u0027)\n        with mock.patch.object(common.utils.get_target_endpoints,\n                               side_effect\u003d[None, hardwareInstanceNames, e]):\n            targetWwns \u003d common.get_target_wwns(\n                EMCVMAXCommonData.storage_system, EMCVMAXCommonData.connector)\n            self.assertListEqual([\"5000090000000000\"], targetWwns)","commit_id":"5a4d408ffc67fda76bfff0bb3a548ef88b09a515"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"75236735f7acfbad879c428a044080494fad6c7c","unresolved":false,"context_lines":[{"line_number":8130,"context_line":"                                  \u0027Name\u0027: \u00275000090000000000\u0027}]"},{"line_number":8131,"context_line":"        e \u003d exception.VolumeBackendAPIException(\u0027Get target endpoint ex\u0027)"},{"line_number":8132,"context_line":"        with mock.patch.object(common.utils, \u0027get_target_endpoints\u0027,"},{"line_number":8133,"context_line":"                               side_effect\u003d[None, hardwareInstanceNames, e]):"},{"line_number":8134,"context_line":"            targetWwns \u003d common.get_target_wwns("},{"line_number":8135,"context_line":"                EMCVMAXCommonData.storage_system, EMCVMAXCommonData.connector)"},{"line_number":8136,"context_line":"            self.assertListEqual([\"5000090000000000\"], targetWwns)"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa7ab95a_1821964d","line":8133,"range":{"start_line":8133,"start_character":30,"end_line":8133,"end_character":77},"updated":"2016-09-02 10:39:50.000000000","message":"-1: Since now we are breaking as soon as we get valid values we have to change the order of these, otherwise we are not testing the exception case:\n\n  side_effect\u003d[None, e, hardwareInstanceNames]):","commit_id":"2950e11cf8dccccf2d7150ec47533e54677b3be3"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"01ee388b3d3d3d10c65470f131f6997f02558491","unresolved":false,"context_lines":[{"line_number":8130,"context_line":"                                  \u0027Name\u0027: \u00275000090000000000\u0027}]"},{"line_number":8131,"context_line":"        e \u003d exception.VolumeBackendAPIException(\u0027Get target endpoint ex\u0027)"},{"line_number":8132,"context_line":"        with mock.patch.object(common.utils, \u0027get_target_endpoints\u0027,"},{"line_number":8133,"context_line":"                               side_effect\u003d[None, hardwareInstanceNames, e]):"},{"line_number":8134,"context_line":"            targetWwns \u003d common.get_target_wwns("},{"line_number":8135,"context_line":"                EMCVMAXCommonData.storage_system, EMCVMAXCommonData.connector)"},{"line_number":8136,"context_line":"            self.assertListEqual([\"5000090000000000\"], targetWwns)"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa7ab95a_ee6fc8c1","line":8133,"range":{"start_line":8133,"start_character":30,"end_line":8133,"end_character":77},"in_reply_to":"fa7ab95a_1821964d","updated":"2016-09-02 11:17:16.000000000","message":"Sure, we will try that.","commit_id":"2950e11cf8dccccf2d7150ec47533e54677b3be3"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"e492714cc5e04f1982902440a6c302d4e4251033","unresolved":false,"context_lines":[{"line_number":8130,"context_line":"                                  \u0027Name\u0027: \u00275000090000000000\u0027}]"},{"line_number":8131,"context_line":"        e \u003d exception.VolumeBackendAPIException(\u0027Get target endpoint ex\u0027)"},{"line_number":8132,"context_line":"        with mock.patch.object(common.utils, \u0027get_target_endpoints\u0027,"},{"line_number":8133,"context_line":"                               side_effect\u003d[None, hardwareInstanceNames]):"},{"line_number":8134,"context_line":"            targetWwns \u003d common.get_target_wwns("},{"line_number":8135,"context_line":"                EMCVMAXCommonData.storage_system, EMCVMAXCommonData.connector)"},{"line_number":8136,"context_line":"            self.assertListEqual([\"5000090000000000\"], targetWwns)"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa7ab95a_a575d6cb","line":8133,"updated":"2016-09-02 13:53:56.000000000","message":"-1: It should have e in here as well, because we want to check that even if we have None, or an exception in there we will keep looking through all of them.","commit_id":"34b59a67096607e64b05899f83060bcaf6859e63"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"ed1e4075f9137cd351cdbd522df0999be9752720","unresolved":false,"context_lines":[{"line_number":8130,"context_line":"                                  \u0027Name\u0027: \u00275000090000000000\u0027}]"},{"line_number":8131,"context_line":"        e \u003d exception.VolumeBackendAPIException(\u0027Get target endpoint ex\u0027)"},{"line_number":8132,"context_line":"        with mock.patch.object(common.utils, \u0027get_target_endpoints\u0027,"},{"line_number":8133,"context_line":"                               side_effect\u003d[None, hardwareInstanceNames]):"},{"line_number":8134,"context_line":"            targetWwns \u003d common.get_target_wwns("},{"line_number":8135,"context_line":"                EMCVMAXCommonData.storage_system, EMCVMAXCommonData.connector)"},{"line_number":8136,"context_line":"            self.assertListEqual([\"5000090000000000\"], targetWwns)"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a89bdaa_b42c359a","line":8133,"in_reply_to":"9a89bdaa_c7f6edd6","updated":"2016-09-07 13:28:15.000000000","message":"Figured it out, we were only iterating once so only the first in the side_effect got executed.  Changed it so we do 3 iterations so all 3 get executed","commit_id":"34b59a67096607e64b05899f83060bcaf6859e63"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"4695cadefa7c4d45fe384968180afd5a91500bc2","unresolved":false,"context_lines":[{"line_number":8130,"context_line":"                                  \u0027Name\u0027: \u00275000090000000000\u0027}]"},{"line_number":8131,"context_line":"        e \u003d exception.VolumeBackendAPIException(\u0027Get target endpoint ex\u0027)"},{"line_number":8132,"context_line":"        with mock.patch.object(common.utils, \u0027get_target_endpoints\u0027,"},{"line_number":8133,"context_line":"                               side_effect\u003d[None, hardwareInstanceNames]):"},{"line_number":8134,"context_line":"            targetWwns \u003d common.get_target_wwns("},{"line_number":8135,"context_line":"                EMCVMAXCommonData.storage_system, EMCVMAXCommonData.connector)"},{"line_number":8136,"context_line":"            self.assertListEqual([\"5000090000000000\"], targetWwns)"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a89bdaa_c7f6edd6","line":8133,"in_reply_to":"fa7ab95a_a575d6cb","updated":"2016-09-05 09:05:54.000000000","message":"Unfortunately we cannot make that work, with an e there the targetWwns will always be empty and a an exception will always be thrown. Can you see another way?","commit_id":"34b59a67096607e64b05899f83060bcaf6859e63"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"e492714cc5e04f1982902440a6c302d4e4251033","unresolved":false,"context_lines":[{"line_number":8137,"context_line":"        with mock.patch.object(common.utils, \u0027get_target_endpoints\u0027,"},{"line_number":8138,"context_line":"                               side_effect\u003d[e]):"},{"line_number":8139,"context_line":"            self.assertRaises("},{"line_number":8140,"context_line":"                exception.VolumeBackendAPIException,"},{"line_number":8141,"context_line":"                common.get_target_wwns, EMCVMAXCommonData.storage_system,"},{"line_number":8142,"context_line":"                EMCVMAXCommonData.connector)"},{"line_number":8143,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"fa7ab95a_30f026fd","line":8140,"updated":"2016-09-02 13:53:56.000000000","message":"-1: This is a different test and should go in a different method.\n\nThis is checking that we will raise VolumeBackendAPIException if we don\u0027t find valid data, and in the test, e should not be VolumeBackendAPIException, because it would be confusing, as we wouldn\u0027t be able to tell if that\u0027s the exception being raised or if we are actually raising the exception ourselves.\n\n e \u003d Exception()\n\n side_effect\u003d[e, None]","commit_id":"34b59a67096607e64b05899f83060bcaf6859e63"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"4695cadefa7c4d45fe384968180afd5a91500bc2","unresolved":false,"context_lines":[{"line_number":8137,"context_line":"        with mock.patch.object(common.utils, \u0027get_target_endpoints\u0027,"},{"line_number":8138,"context_line":"                               side_effect\u003d[e]):"},{"line_number":8139,"context_line":"            self.assertRaises("},{"line_number":8140,"context_line":"                exception.VolumeBackendAPIException,"},{"line_number":8141,"context_line":"                common.get_target_wwns, EMCVMAXCommonData.storage_system,"},{"line_number":8142,"context_line":"                EMCVMAXCommonData.connector)"},{"line_number":8143,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"9a89bdaa_a7ce4981","line":8140,"in_reply_to":"fa7ab95a_30f026fd","updated":"2016-09-05 09:05:54.000000000","message":"We will separate out the test.","commit_id":"34b59a67096607e64b05899f83060bcaf6859e63"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"20d561e97ca40b17bfd82853351d78a1b746d115","unresolved":false,"context_lines":[{"line_number":8128,"context_line":"        common.conn \u003d FakeEcomConnection()"},{"line_number":8129,"context_line":"        targetEndpoints \u003d [{\u0027CreationClassName\u0027: \u0027EMC_FCSCSIProtocolEndpoint\u0027,"},{"line_number":8130,"context_line":"                            \u0027Name\u0027: \u00275000090000000000\u0027}]"},{"line_number":8131,"context_line":"        hardwareInstanceName \u003d {\u0027CreationClassName\u0027: \u0027EMC_StorageHardwareID\u0027}"},{"line_number":8132,"context_line":"        hardwareInstanceNames \u003d [hardwareInstanceName, hardwareInstanceName,"},{"line_number":8133,"context_line":"                                 hardwareInstanceName]"},{"line_number":8134,"context_line":"        e \u003d exception.VolumeBackendAPIException(\u0027Get target endpoint ex\u0027)"},{"line_number":8135,"context_line":"        with mock.patch.object(common, \u0027_find_storage_hardwareids\u0027,"},{"line_number":8136,"context_line":"                               return_value\u003dhardwareInstanceNames):"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a89bdaa_ccf73cd1","line":8133,"range":{"start_line":8131,"start_character":0,"end_line":8133,"end_character":54},"updated":"2016-09-08 11:07:58.000000000","message":"nit: You could do\n\n hardwareInstanceNames \u003d [{\u0027CreationClassName\u0027: \u0027EMC_StorageHardwareID\u0027}] * 3","commit_id":"4a5ec15891d7de11ae6642ce2f78c0e754fa681a"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"c3aded00cf03d66c0bf1fcd9c389bebecde0f312","unresolved":false,"context_lines":[{"line_number":8128,"context_line":"        common.conn \u003d FakeEcomConnection()"},{"line_number":8129,"context_line":"        targetEndpoints \u003d [{\u0027CreationClassName\u0027: \u0027EMC_FCSCSIProtocolEndpoint\u0027,"},{"line_number":8130,"context_line":"                            \u0027Name\u0027: \u00275000090000000000\u0027}]"},{"line_number":8131,"context_line":"        hardwareInstanceName \u003d {\u0027CreationClassName\u0027: \u0027EMC_StorageHardwareID\u0027}"},{"line_number":8132,"context_line":"        hardwareInstanceNames \u003d [hardwareInstanceName, hardwareInstanceName,"},{"line_number":8133,"context_line":"                                 hardwareInstanceName]"},{"line_number":8134,"context_line":"        e \u003d exception.VolumeBackendAPIException(\u0027Get target endpoint ex\u0027)"},{"line_number":8135,"context_line":"        with mock.patch.object(common, \u0027_find_storage_hardwareids\u0027,"},{"line_number":8136,"context_line":"                               return_value\u003dhardwareInstanceNames):"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a89bdaa_acf66e5a","line":8133,"range":{"start_line":8131,"start_character":0,"end_line":8133,"end_character":54},"in_reply_to":"9a89bdaa_ccf73cd1","updated":"2016-09-08 13:46:37.000000000","message":"Sure","commit_id":"4a5ec15891d7de11ae6642ce2f78c0e754fa681a"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"20d561e97ca40b17bfd82853351d78a1b746d115","unresolved":false,"context_lines":[{"line_number":8140,"context_line":"                    EMCVMAXCommonData.storage_system,"},{"line_number":8141,"context_line":"                    EMCVMAXCommonData.connector)"},{"line_number":8142,"context_line":"                self.assertListEqual([\"5000090000000000\"], targetWwns)"},{"line_number":8143,"context_line":""},{"line_number":8144,"context_line":"    def test_cleanup_target(self):"},{"line_number":8145,"context_line":"        common \u003d self.driver.common"},{"line_number":8146,"context_line":"        common.conn \u003d FakeEcomConnection()"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a89bdaa_accd9867","line":8143,"updated":"2016-09-08 11:07:58.000000000","message":"-1: You removed the VolumeBackendAPIException test.","commit_id":"4a5ec15891d7de11ae6642ce2f78c0e754fa681a"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"c3aded00cf03d66c0bf1fcd9c389bebecde0f312","unresolved":false,"context_lines":[{"line_number":8140,"context_line":"                    EMCVMAXCommonData.storage_system,"},{"line_number":8141,"context_line":"                    EMCVMAXCommonData.connector)"},{"line_number":8142,"context_line":"                self.assertListEqual([\"5000090000000000\"], targetWwns)"},{"line_number":8143,"context_line":""},{"line_number":8144,"context_line":"    def test_cleanup_target(self):"},{"line_number":8145,"context_line":"        common \u003d self.driver.common"},{"line_number":8146,"context_line":"        common.conn \u003d FakeEcomConnection()"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a89bdaa_4c7a42be","line":8143,"in_reply_to":"9a89bdaa_accd9867","updated":"2016-09-08 13:46:37.000000000","message":"Yes, I thought that was covered by the test test_get_target_wwn_all_invalid, however it does not hurt to put it back in","commit_id":"4a5ec15891d7de11ae6642ce2f78c0e754fa681a"}],"cinder/volume/drivers/emc/emc_vmax_common.py":[{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"46b828f0f0fa8e245d9899fea719766c6d579d3c","unresolved":false,"context_lines":[{"line_number":1574,"context_line":"                targetEndpoints \u003d ("},{"line_number":1575,"context_line":"                    self.utils.get_target_endpoints("},{"line_number":1576,"context_line":"                        self.conn, hardwareIdInstance))"},{"line_number":1577,"context_line":"                if not targetEndpoints:"},{"line_number":1578,"context_line":"                    raise Exception"},{"line_number":1579,"context_line":"            except Exception:"},{"line_number":1580,"context_line":"                errorMessage \u003d (_("},{"line_number":1581,"context_line":"                    \"Unable to get target endpoints for hardwareId \""}],"source_content_type":"text/x-python","patch_set":3,"id":"dada55a8_0a44e947","line":1578,"range":{"start_line":1577,"start_character":0,"end_line":1578,"end_character":35},"updated":"2016-07-20 11:19:37.000000000","message":"It\u0027s not a good style to use exceptions for flow control. It\u0027s better to log a message and continue the loop. Also, the message you would print here will be different from the one in line 1584 because it is handling a real exception.","commit_id":"1e76169e424b35907ba9a1fd0fbcc393680c9c72"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"17ba86935ddce193487803127454548e61aa142c","unresolved":false,"context_lines":[{"line_number":1574,"context_line":"                targetEndpoints \u003d ("},{"line_number":1575,"context_line":"                    self.utils.get_target_endpoints("},{"line_number":1576,"context_line":"                        self.conn, hardwareIdInstance))"},{"line_number":1577,"context_line":"                if not targetEndpoints:"},{"line_number":1578,"context_line":"                    raise Exception"},{"line_number":1579,"context_line":"            except Exception:"},{"line_number":1580,"context_line":"                errorMessage \u003d (_("},{"line_number":1581,"context_line":"                    \"Unable to get target endpoints for hardwareId \""}],"source_content_type":"text/x-python","patch_set":3,"id":"dada55a8_5bd6b54f","line":1578,"range":{"start_line":1577,"start_character":0,"end_line":1578,"end_character":35},"in_reply_to":"dada55a8_0a44e947","updated":"2016-07-26 10:51:33.000000000","message":"ok, we will change this.  Thanks","commit_id":"1e76169e424b35907ba9a1fd0fbcc393680c9c72"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"46b828f0f0fa8e245d9899fea719766c6d579d3c","unresolved":false,"context_lines":[{"line_number":1577,"context_line":"                if not targetEndpoints:"},{"line_number":1578,"context_line":"                    raise Exception"},{"line_number":1579,"context_line":"            except Exception:"},{"line_number":1580,"context_line":"                errorMessage \u003d (_("},{"line_number":1581,"context_line":"                    \"Unable to get target endpoints for hardwareId \""},{"line_number":1582,"context_line":"                    \"%(hardwareIdInstance)s.\")"},{"line_number":1583,"context_line":"                    % {\u0027hardwareIdInstance\u0027: hardwareIdInstance})"}],"source_content_type":"text/x-python","patch_set":3,"id":"dada55a8_2a472d4c","line":1580,"updated":"2016-07-20 11:19:37.000000000","message":"_() -\u003e _LW()\n\nbecause this message is not part of an exception anymore.","commit_id":"1e76169e424b35907ba9a1fd0fbcc393680c9c72"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"17ba86935ddce193487803127454548e61aa142c","unresolved":false,"context_lines":[{"line_number":1577,"context_line":"                if not targetEndpoints:"},{"line_number":1578,"context_line":"                    raise Exception"},{"line_number":1579,"context_line":"            except Exception:"},{"line_number":1580,"context_line":"                errorMessage \u003d (_("},{"line_number":1581,"context_line":"                    \"Unable to get target endpoints for hardwareId \""},{"line_number":1582,"context_line":"                    \"%(hardwareIdInstance)s.\")"},{"line_number":1583,"context_line":"                    % {\u0027hardwareIdInstance\u0027: hardwareIdInstance})"}],"source_content_type":"text/x-python","patch_set":3,"id":"dada55a8_9b430d13","line":1580,"in_reply_to":"dada55a8_2a472d4c","updated":"2016-07-26 10:51:33.000000000","message":"We will change.","commit_id":"1e76169e424b35907ba9a1fd0fbcc393680c9c72"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"46b828f0f0fa8e245d9899fea719766c6d579d3c","unresolved":false,"context_lines":[{"line_number":1581,"context_line":"                    \"Unable to get target endpoints for hardwareId \""},{"line_number":1582,"context_line":"                    \"%(hardwareIdInstance)s.\")"},{"line_number":1583,"context_line":"                    % {\u0027hardwareIdInstance\u0027: hardwareIdInstance})"},{"line_number":1584,"context_line":"                LOG.warning(errorMessage)"},{"line_number":1585,"context_line":"                continue"},{"line_number":1586,"context_line":""},{"line_number":1587,"context_line":"            LOG.debug(\"There are %(len)lu endpoints.\","}],"source_content_type":"text/x-python","patch_set":3,"id":"dada55a8_aaa83ddc","line":1584,"updated":"2016-07-20 11:19:37.000000000","message":"use exc_info\u003dTrue or add the exception message to errorMessage","commit_id":"1e76169e424b35907ba9a1fd0fbcc393680c9c72"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"17ba86935ddce193487803127454548e61aa142c","unresolved":false,"context_lines":[{"line_number":1581,"context_line":"                    \"Unable to get target endpoints for hardwareId \""},{"line_number":1582,"context_line":"                    \"%(hardwareIdInstance)s.\")"},{"line_number":1583,"context_line":"                    % {\u0027hardwareIdInstance\u0027: hardwareIdInstance})"},{"line_number":1584,"context_line":"                LOG.warning(errorMessage)"},{"line_number":1585,"context_line":"                continue"},{"line_number":1586,"context_line":""},{"line_number":1587,"context_line":"            LOG.debug(\"There are %(len)lu endpoints.\","}],"source_content_type":"text/x-python","patch_set":3,"id":"dada55a8_3b0141b0","line":1584,"in_reply_to":"dada55a8_aaa83ddc","updated":"2016-07-26 10:51:33.000000000","message":"Ok.  Thanks","commit_id":"1e76169e424b35907ba9a1fd0fbcc393680c9c72"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"b975d83e7f03452af936cccccb019153e42cb5f2","unresolved":false,"context_lines":[{"line_number":1573,"context_line":"                        {\u0027storageid\u0027: hardwareIdInstance[\u0027StorageID\u0027]})"},{"line_number":1574,"context_line":"                    continue"},{"line_number":1575,"context_line":"            except Exception:"},{"line_number":1576,"context_line":"                LOG.warning(_LW("},{"line_number":1577,"context_line":"                    \"Unable to get target endpoints for hardwareId \""},{"line_number":1578,"context_line":"                    \"%(storageid)s.\"),"},{"line_number":1579,"context_line":"                    {\u0027storageid\u0027: hardwareIdInstance[\u0027StorageID\u0027]})"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad45d7e_53373ae3","line":1576,"updated":"2016-08-08 15:06:26.000000000","message":"You agreed to fix this, but it is not fixed.\n\nuse kwarg exc_info\u003dTrue in the LOG.warning() call or add the exception message to the log message.","commit_id":"98e677ba426d1ebef93d627d656543037b1ed254"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"efc3a3117ebfbe5534f546873ee23bdef7aae64e","unresolved":false,"context_lines":[{"line_number":1573,"context_line":"                        {\u0027storageid\u0027: hardwareIdInstance[\u0027StorageID\u0027]})"},{"line_number":1574,"context_line":"                    continue"},{"line_number":1575,"context_line":"            except Exception:"},{"line_number":1576,"context_line":"                LOG.warning(_LW("},{"line_number":1577,"context_line":"                    \"Unable to get target endpoints for hardwareId \""},{"line_number":1578,"context_line":"                    \"%(storageid)s.\"),"},{"line_number":1579,"context_line":"                    {\u0027storageid\u0027: hardwareIdInstance[\u0027StorageID\u0027]})"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad45d7e_852aba7c","line":1576,"in_reply_to":"9ad45d7e_53373ae3","updated":"2016-08-09 21:08:28.000000000","message":"Apologies, we will use exc_info\u003dTrue","commit_id":"98e677ba426d1ebef93d627d656543037b1ed254"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"f6e481f2f0ff28e99a44f9a032d59ba52de66d9f","unresolved":false,"context_lines":[{"line_number":1600,"context_line":"        hardwareIdInstances \u003d self._find_storage_hardwareids("},{"line_number":1601,"context_line":"            connector, storageHardwareService)"},{"line_number":1602,"context_line":""},{"line_number":1603,"context_line":"        LOG.debug("},{"line_number":1604,"context_line":"            \"EMCGetTargetEndpoints: Service: %(service)s, \""},{"line_number":1605,"context_line":"            \"Storage HardwareIDs: %(hardwareIds)s.\","},{"line_number":1606,"context_line":"            {\u0027service\u0027: storageHardwareService,"}],"source_content_type":"text/x-python","patch_set":11,"id":"1ac06dbe_f592449e","side":"PARENT","line":1603,"updated":"2016-08-22 11:02:25.000000000","message":"?: Why are we removing this debug message?  This seems like an unrelated change.","commit_id":"f2d6bea09754b4cecb47666ab0b1ca214dac3c7b"},{"author":{"_account_id":22021,"name":"Unana Okpoyo","email":"tomitu@yahoo.com","username":"UnanaOkpoyo"},"change_message_id":"ceaad2e7f1c30aff8a066afff2a1b7c94e7a9224","unresolved":false,"context_lines":[{"line_number":1600,"context_line":"        hardwareIdInstances \u003d self._find_storage_hardwareids("},{"line_number":1601,"context_line":"            connector, storageHardwareService)"},{"line_number":1602,"context_line":""},{"line_number":1603,"context_line":"        LOG.debug("},{"line_number":1604,"context_line":"            \"EMCGetTargetEndpoints: Service: %(service)s, \""},{"line_number":1605,"context_line":"            \"Storage HardwareIDs: %(hardwareIds)s.\","},{"line_number":1606,"context_line":"            {\u0027service\u0027: storageHardwareService,"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa7ab95a_f0b51331","side":"PARENT","line":1603,"in_reply_to":"1ac06dbe_f592449e","updated":"2016-08-29 10:08:51.000000000","message":"This was removed cause we kept getting key errors for the hardwareIdInstance","commit_id":"f2d6bea09754b4cecb47666ab0b1ca214dac3c7b"},{"author":{"_account_id":22021,"name":"Unana Okpoyo","email":"tomitu@yahoo.com","username":"UnanaOkpoyo"},"change_message_id":"39a44af2815f646c41f52ec993ab41e747194cf6","unresolved":false,"context_lines":[{"line_number":1600,"context_line":"        hardwareIdInstances \u003d self._find_storage_hardwareids("},{"line_number":1601,"context_line":"            connector, storageHardwareService)"},{"line_number":1602,"context_line":""},{"line_number":1603,"context_line":"        LOG.debug("},{"line_number":1604,"context_line":"            \"EMCGetTargetEndpoints: Service: %(service)s, \""},{"line_number":1605,"context_line":"            \"Storage HardwareIDs: %(hardwareIds)s.\","},{"line_number":1606,"context_line":"            {\u0027service\u0027: storageHardwareService,"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa7ab95a_dfe582a8","side":"PARENT","line":1603,"in_reply_to":"fa7ab95a_4df0da67","updated":"2016-09-01 15:31:28.000000000","message":"Will update","commit_id":"f2d6bea09754b4cecb47666ab0b1ca214dac3c7b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"b3335ad5f65cf2a63ae50ed2c54120618214c1b8","unresolved":false,"context_lines":[{"line_number":1600,"context_line":"        hardwareIdInstances \u003d self._find_storage_hardwareids("},{"line_number":1601,"context_line":"            connector, storageHardwareService)"},{"line_number":1602,"context_line":""},{"line_number":1603,"context_line":"        LOG.debug("},{"line_number":1604,"context_line":"            \"EMCGetTargetEndpoints: Service: %(service)s, \""},{"line_number":1605,"context_line":"            \"Storage HardwareIDs: %(hardwareIds)s.\","},{"line_number":1606,"context_line":"            {\u0027service\u0027: storageHardwareService,"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa7ab95a_4df0da67","side":"PARENT","line":1603,"in_reply_to":"fa7ab95a_f0b51331","updated":"2016-08-29 13:19:47.000000000","message":"I don\u0027t see how could there be a keyword error when accessing the variable directly.\n\nAnd anyway, that means that it is unrelated to this redundancy path and it should go in another patch set.\n\nUnless you are saying that those key errors are in the unit tests, in which case those unit tests needs to be modified, not this code removed.","commit_id":"f2d6bea09754b4cecb47666ab0b1ca214dac3c7b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"f6e481f2f0ff28e99a44f9a032d59ba52de66d9f","unresolved":false,"context_lines":[{"line_number":1607,"context_line":"             \u0027hardwareIds\u0027: hardwareIdInstances})"},{"line_number":1608,"context_line":""},{"line_number":1609,"context_line":"        for hardwareIdInstance in hardwareIdInstances:"},{"line_number":1610,"context_line":"            LOG.debug(\"HardwareID instance is: %(hardwareIdInstance)s.\","},{"line_number":1611,"context_line":"                      {\u0027hardwareIdInstance\u0027: hardwareIdInstance})"},{"line_number":1612,"context_line":"            try:"},{"line_number":1613,"context_line":"                targetEndpoints \u003d ("}],"source_content_type":"text/x-python","patch_set":11,"id":"1ac06dbe_358dfc7b","side":"PARENT","line":1610,"updated":"2016-08-22 11:02:25.000000000","message":"?: Why are we removing this debug message?  This seems like an unrelated change.","commit_id":"f2d6bea09754b4cecb47666ab0b1ca214dac3c7b"},{"author":{"_account_id":22021,"name":"Unana Okpoyo","email":"tomitu@yahoo.com","username":"UnanaOkpoyo"},"change_message_id":"ceaad2e7f1c30aff8a066afff2a1b7c94e7a9224","unresolved":false,"context_lines":[{"line_number":1607,"context_line":"             \u0027hardwareIds\u0027: hardwareIdInstances})"},{"line_number":1608,"context_line":""},{"line_number":1609,"context_line":"        for hardwareIdInstance in hardwareIdInstances:"},{"line_number":1610,"context_line":"            LOG.debug(\"HardwareID instance is: %(hardwareIdInstance)s.\","},{"line_number":1611,"context_line":"                      {\u0027hardwareIdInstance\u0027: hardwareIdInstance})"},{"line_number":1612,"context_line":"            try:"},{"line_number":1613,"context_line":"                targetEndpoints \u003d ("}],"source_content_type":"text/x-python","patch_set":11,"id":"fa7ab95a_30869b65","side":"PARENT","line":1610,"in_reply_to":"1ac06dbe_358dfc7b","updated":"2016-08-29 10:08:51.000000000","message":"Same as above","commit_id":"f2d6bea09754b4cecb47666ab0b1ca214dac3c7b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"f6e481f2f0ff28e99a44f9a032d59ba52de66d9f","unresolved":false,"context_lines":[{"line_number":1623,"context_line":"            for targetendpoint in targetEndpoints:"},{"line_number":1624,"context_line":"                wwn \u003d targetendpoint[\u0027Name\u0027]"},{"line_number":1625,"context_line":"                # Add target wwn to the list if it is not already there."},{"line_number":1626,"context_line":"                if not any(d \u003d\u003d wwn for d in targetWwns):"},{"line_number":1627,"context_line":"                    targetWwns.append(wwn)"},{"line_number":1628,"context_line":""},{"line_number":1629,"context_line":"        if not targetWwns:"}],"source_content_type":"text/x-python","patch_set":11,"id":"1ac06dbe_551fd85e","line":1626,"updated":"2016-08-22 11:02:25.000000000","message":"?: Why aren\u0027t we using\n\n if wwn not in targetWwns:\n\nOr even define targetWwns as a set and just add the element regardless?","commit_id":"1f06663cc2bc0bf848fa0c751ecb0dc9255feca4"},{"author":{"_account_id":22021,"name":"Unana Okpoyo","email":"tomitu@yahoo.com","username":"UnanaOkpoyo"},"change_message_id":"ceaad2e7f1c30aff8a066afff2a1b7c94e7a9224","unresolved":false,"context_lines":[{"line_number":1623,"context_line":"            for targetendpoint in targetEndpoints:"},{"line_number":1624,"context_line":"                wwn \u003d targetendpoint[\u0027Name\u0027]"},{"line_number":1625,"context_line":"                # Add target wwn to the list if it is not already there."},{"line_number":1626,"context_line":"                if not any(d \u003d\u003d wwn for d in targetWwns):"},{"line_number":1627,"context_line":"                    targetWwns.append(wwn)"},{"line_number":1628,"context_line":""},{"line_number":1629,"context_line":"        if not targetWwns:"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa7ab95a_95b11992","line":1626,"in_reply_to":"1ac06dbe_551fd85e","updated":"2016-08-29 10:08:51.000000000","message":"Will update to if wwn not in targetWwns","commit_id":"1f06663cc2bc0bf848fa0c751ecb0dc9255feca4"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"f6e481f2f0ff28e99a44f9a032d59ba52de66d9f","unresolved":false,"context_lines":[{"line_number":1624,"context_line":"                wwn \u003d targetendpoint[\u0027Name\u0027]"},{"line_number":1625,"context_line":"                # Add target wwn to the list if it is not already there."},{"line_number":1626,"context_line":"                if not any(d \u003d\u003d wwn for d in targetWwns):"},{"line_number":1627,"context_line":"                    targetWwns.append(wwn)"},{"line_number":1628,"context_line":""},{"line_number":1629,"context_line":"        if not targetWwns:"},{"line_number":1630,"context_line":"            exception_message \u003d (_("}],"source_content_type":"text/x-python","patch_set":11,"id":"1ac06dbe_f5e36403","line":1627,"updated":"2016-08-22 11:02:25.000000000","message":"-1: Any reason why we want to check other hardwareIdInstaces now that we have targetendpoints?  Can\u0027t we just break here?","commit_id":"1f06663cc2bc0bf848fa0c751ecb0dc9255feca4"},{"author":{"_account_id":22021,"name":"Unana Okpoyo","email":"tomitu@yahoo.com","username":"UnanaOkpoyo"},"change_message_id":"ceaad2e7f1c30aff8a066afff2a1b7c94e7a9224","unresolved":false,"context_lines":[{"line_number":1624,"context_line":"                wwn \u003d targetendpoint[\u0027Name\u0027]"},{"line_number":1625,"context_line":"                # Add target wwn to the list if it is not already there."},{"line_number":1626,"context_line":"                if not any(d \u003d\u003d wwn for d in targetWwns):"},{"line_number":1627,"context_line":"                    targetWwns.append(wwn)"},{"line_number":1628,"context_line":""},{"line_number":1629,"context_line":"        if not targetWwns:"},{"line_number":1630,"context_line":"            exception_message \u003d (_("}],"source_content_type":"text/x-python","patch_set":11,"id":"fa7ab95a_f5ffc5a7","line":1627,"in_reply_to":"1ac06dbe_f5e36403","updated":"2016-08-29 10:08:51.000000000","message":"Will do","commit_id":"1f06663cc2bc0bf848fa0c751ecb0dc9255feca4"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"5359b8334da3a11095020999a724acc3a74dc407","unresolved":false,"context_lines":[{"line_number":1624,"context_line":"                wwn \u003d targetendpoint[\u0027Name\u0027]"},{"line_number":1625,"context_line":"                # Add target wwn to the list if it is not already there."},{"line_number":1626,"context_line":"                if not any(d \u003d\u003d wwn for d in targetWwns):"},{"line_number":1627,"context_line":"                    targetWwns.append(wwn)"},{"line_number":1628,"context_line":""},{"line_number":1629,"context_line":"        if not targetWwns:"},{"line_number":1630,"context_line":"            exception_message \u003d (_("}],"source_content_type":"text/x-python","patch_set":11,"id":"fa7ab95a_b34a2454","line":1627,"in_reply_to":"fa7ab95a_09fd6a6e","updated":"2016-08-31 08:07:45.000000000","message":"Maybe I\u0027m making the wrong assumption here, but as I understand it, for a storage system you have multiple hardware ids all with the same wwns, so querying multiple hardware instances will not give you additional wwns, it will just report the same ones over and over again.\n\nThis patch is changing the way we handle the redundant hardware instances, instead of considering a failure when one of them fails, we consider it an error if all of them fail to return wwns.\n\nSo the idea is not to query them all, but to query them until one of the hardware instances can report target endpoints.\n\nI could be wrong though, since I don\u0027t know anything about this driver or the hardware itself.","commit_id":"1f06663cc2bc0bf848fa0c751ecb0dc9255feca4"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"f30f6aa61f8c1b0f1ebe66c7f0092aa6f5d60640","unresolved":false,"context_lines":[{"line_number":1624,"context_line":"                wwn \u003d targetendpoint[\u0027Name\u0027]"},{"line_number":1625,"context_line":"                # Add target wwn to the list if it is not already there."},{"line_number":1626,"context_line":"                if not any(d \u003d\u003d wwn for d in targetWwns):"},{"line_number":1627,"context_line":"                    targetWwns.append(wwn)"},{"line_number":1628,"context_line":""},{"line_number":1629,"context_line":"        if not targetWwns:"},{"line_number":1630,"context_line":"            exception_message \u003d (_("}],"source_content_type":"text/x-python","patch_set":11,"id":"fa7ab95a_ecd35e02","line":1627,"in_reply_to":"fa7ab95a_75dabc4d","updated":"2016-08-29 17:15:30.000000000","message":"That would hurt us if we do stop right after we find the first targetWwns, but I was saying not to check other hardwareIdInstances, not stop when we find one wwn.\n\nSo it would look like this:\n\n for hardwareIdInstance in hardwareIdInstances:\n     ...\n     for targetendpoint in targetEndpoints:\n         ...\n         if wwn not in targetWwns:\n             targetWwns.append(wwn)\n     if targetWwns:\n         break\n else:\n     msg \u003d (_(\"Unable to get target endpoints for any hardwareIds.\"))\n     raise exception.VolumeBackendAPIException(data\u003dmsg)","commit_id":"1f06663cc2bc0bf848fa0c751ecb0dc9255feca4"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"577ad4a8bb9e4d48472a665f826c7f5633cbfe80","unresolved":false,"context_lines":[{"line_number":1624,"context_line":"                wwn \u003d targetendpoint[\u0027Name\u0027]"},{"line_number":1625,"context_line":"                # Add target wwn to the list if it is not already there."},{"line_number":1626,"context_line":"                if not any(d \u003d\u003d wwn for d in targetWwns):"},{"line_number":1627,"context_line":"                    targetWwns.append(wwn)"},{"line_number":1628,"context_line":""},{"line_number":1629,"context_line":"        if not targetWwns:"},{"line_number":1630,"context_line":"            exception_message \u003d (_("}],"source_content_type":"text/x-python","patch_set":11,"id":"fa7ab95a_f83427df","line":1627,"in_reply_to":"fa7ab95a_b34a2454","updated":"2016-09-01 13:34:13.000000000","message":"Thanks Huang, Gorka.  Unana will address your comments shortly.","commit_id":"1f06663cc2bc0bf848fa0c751ecb0dc9255feca4"},{"author":{"_account_id":22021,"name":"Unana Okpoyo","email":"tomitu@yahoo.com","username":"UnanaOkpoyo"},"change_message_id":"39a44af2815f646c41f52ec993ab41e747194cf6","unresolved":false,"context_lines":[{"line_number":1624,"context_line":"                wwn \u003d targetendpoint[\u0027Name\u0027]"},{"line_number":1625,"context_line":"                # Add target wwn to the list if it is not already there."},{"line_number":1626,"context_line":"                if not any(d \u003d\u003d wwn for d in targetWwns):"},{"line_number":1627,"context_line":"                    targetWwns.append(wwn)"},{"line_number":1628,"context_line":""},{"line_number":1629,"context_line":"        if not targetWwns:"},{"line_number":1630,"context_line":"            exception_message \u003d (_("}],"source_content_type":"text/x-python","patch_set":11,"id":"fa7ab95a_5e084dda","line":1627,"in_reply_to":"fa7ab95a_ecd35e02","updated":"2016-09-01 15:31:28.000000000","message":"Will update","commit_id":"1f06663cc2bc0bf848fa0c751ecb0dc9255feca4"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"b871fd523081824c84dba848b9be45c4e5a79b00","unresolved":false,"context_lines":[{"line_number":1624,"context_line":"                wwn \u003d targetendpoint[\u0027Name\u0027]"},{"line_number":1625,"context_line":"                # Add target wwn to the list if it is not already there."},{"line_number":1626,"context_line":"                if not any(d \u003d\u003d wwn for d in targetWwns):"},{"line_number":1627,"context_line":"                    targetWwns.append(wwn)"},{"line_number":1628,"context_line":""},{"line_number":1629,"context_line":"        if not targetWwns:"},{"line_number":1630,"context_line":"            exception_message \u003d (_("}],"source_content_type":"text/x-python","patch_set":11,"id":"fa7ab95a_09fd6a6e","line":1627,"in_reply_to":"fa7ab95a_ecd35e02","updated":"2016-08-31 03:48:51.000000000","message":"why break? what\u0027s the the expectation of get_target_wwns() is to return all wwns or it is ok to return some of them?","commit_id":"1f06663cc2bc0bf848fa0c751ecb0dc9255feca4"},{"author":{"_account_id":22021,"name":"Unana Okpoyo","email":"tomitu@yahoo.com","username":"UnanaOkpoyo"},"change_message_id":"66a7b5366116b99f301a49933ff8794f2083fd15","unresolved":false,"context_lines":[{"line_number":1624,"context_line":"                wwn \u003d targetendpoint[\u0027Name\u0027]"},{"line_number":1625,"context_line":"                # Add target wwn to the list if it is not already there."},{"line_number":1626,"context_line":"                if not any(d \u003d\u003d wwn for d in targetWwns):"},{"line_number":1627,"context_line":"                    targetWwns.append(wwn)"},{"line_number":1628,"context_line":""},{"line_number":1629,"context_line":"        if not targetWwns:"},{"line_number":1630,"context_line":"            exception_message \u003d (_("}],"source_content_type":"text/x-python","patch_set":11,"id":"fa7ab95a_75dabc4d","line":1627,"in_reply_to":"fa7ab95a_f5ffc5a7","updated":"2016-08-29 15:37:10.000000000","message":"We are appending to a list with related wwns so using a break would limit us here","commit_id":"1f06663cc2bc0bf848fa0c751ecb0dc9255feca4"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"535d6f3e4b55c6885d29e8d1486d049dda20c2ae","unresolved":false,"context_lines":[{"line_number":1632,"context_line":"                wwn \u003d targetendpoint[\u0027Name\u0027]"},{"line_number":1633,"context_line":"                # Add target wwn to the list if it is not already there."},{"line_number":1634,"context_line":"                targetWwns.add(wwn)"},{"line_number":1635,"context_line":"            if targetWwns:"},{"line_number":1636,"context_line":"                break"},{"line_number":1637,"context_line":""},{"line_number":1638,"context_line":"        if not targetWwns:"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa7ab95a_73c97c5a","line":1635,"updated":"2016-08-31 08:14:43.000000000","message":"-1: This will always be true, because the only way this is not evaluated to true is if targetEndpoints is empty, and that\u0027s impossible due to L1616-L1621","commit_id":"c9301627187685b3a752571590137581abdedb1f"},{"author":{"_account_id":22021,"name":"Unana Okpoyo","email":"tomitu@yahoo.com","username":"UnanaOkpoyo"},"change_message_id":"31ae44aebde24a61976143c81f24612f0478f4b5","unresolved":false,"context_lines":[{"line_number":1632,"context_line":"                wwn \u003d targetendpoint[\u0027Name\u0027]"},{"line_number":1633,"context_line":"                # Add target wwn to the list if it is not already there."},{"line_number":1634,"context_line":"                targetWwns.add(wwn)"},{"line_number":1635,"context_line":"            if targetWwns:"},{"line_number":1636,"context_line":"                break"},{"line_number":1637,"context_line":""},{"line_number":1638,"context_line":"        if not targetWwns:"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa7ab95a_bf9efe51","line":1635,"in_reply_to":"fa7ab95a_73c97c5a","updated":"2016-09-01 15:32:07.000000000","message":"I am going to replace this with the following. Is this what you mean?\n\nfor targetendpoint in targetEndpoints:\n    wwn \u003d targetendpoint[\u0027Name\u0027]\n    # Add target wwn to the list if it is not already there.\n    targetWwns.add(wwn)\nbreak","commit_id":"c9301627187685b3a752571590137581abdedb1f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"3d12d47e02feceacfa7e476171d7dfa50a25f97f","unresolved":false,"context_lines":[{"line_number":1632,"context_line":"                wwn \u003d targetendpoint[\u0027Name\u0027]"},{"line_number":1633,"context_line":"                # Add target wwn to the list if it is not already there."},{"line_number":1634,"context_line":"                targetWwns.add(wwn)"},{"line_number":1635,"context_line":"            if targetWwns:"},{"line_number":1636,"context_line":"                break"},{"line_number":1637,"context_line":""},{"line_number":1638,"context_line":"        if not targetWwns:"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa7ab95a_cf73f77e","line":1635,"in_reply_to":"fa7ab95a_bf9efe51","updated":"2016-09-02 01:05:05.000000000","message":"Unana,\n\nSince targetWwns will always be not empty, you will always break here any way.  Please go ahead and make this change.","commit_id":"c9301627187685b3a752571590137581abdedb1f"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"20d561e97ca40b17bfd82853351d78a1b746d115","unresolved":false,"context_lines":[{"line_number":1605,"context_line":"            \"Storage HardwareIDs: %(hardwareIds)s.\","},{"line_number":1606,"context_line":"            {\u0027service\u0027: storageHardwareService,"},{"line_number":1607,"context_line":"             \u0027hardwareIds\u0027: hardwareIdInstances})"},{"line_number":1608,"context_line":""},{"line_number":1609,"context_line":"        for hardwareIdInstance in hardwareIdInstances:"},{"line_number":1610,"context_line":"            LOG.debug(\"HardwareID instance is: %(hardwareIdInstance)s.\","},{"line_number":1611,"context_line":"                      {\u0027hardwareIdInstance\u0027: hardwareIdInstance})"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a89bdaa_0ceda4b6","side":"PARENT","line":1608,"updated":"2016-09-08 11:07:58.000000000","message":"nit: This line should not be removed, we should try to limit our changes so reduce merge conflicts with other ongoing patches.","commit_id":"f2d6bea09754b4cecb47666ab0b1ca214dac3c7b"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"c3aded00cf03d66c0bf1fcd9c389bebecde0f312","unresolved":false,"context_lines":[{"line_number":1605,"context_line":"            \"Storage HardwareIDs: %(hardwareIds)s.\","},{"line_number":1606,"context_line":"            {\u0027service\u0027: storageHardwareService,"},{"line_number":1607,"context_line":"             \u0027hardwareIds\u0027: hardwareIdInstances})"},{"line_number":1608,"context_line":""},{"line_number":1609,"context_line":"        for hardwareIdInstance in hardwareIdInstances:"},{"line_number":1610,"context_line":"            LOG.debug(\"HardwareID instance is: %(hardwareIdInstance)s.\","},{"line_number":1611,"context_line":"                      {\u0027hardwareIdInstance\u0027: hardwareIdInstance})"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a89bdaa_ac710e0e","side":"PARENT","line":1608,"in_reply_to":"9a89bdaa_0ceda4b6","updated":"2016-09-08 13:46:37.000000000","message":"Sure","commit_id":"f2d6bea09754b4cecb47666ab0b1ca214dac3c7b"}],"cinder/volume/drivers/emc/emc_vmax_masking.py":[{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"46b828f0f0fa8e245d9899fea719766c6d579d3c","unresolved":false,"context_lines":[{"line_number":2363,"context_line":"                mvInstanceName \u003d self.get_masking_view_from_storage_group("},{"line_number":2364,"context_line":"                    conn, sgInstanceName)"},{"line_number":2365,"context_line":"                # Get initiator group from masking view."},{"line_number":2366,"context_line":"                if mvInstanceName:"},{"line_number":2367,"context_line":"                    LOG.debug(\"Found masking view associated with SG \""},{"line_number":2368,"context_line":"                              \"%(storageGroup)s: %(maskingview)s\","},{"line_number":2369,"context_line":"                              {\u0027maskingview\u0027: mvInstanceName,"}],"source_content_type":"text/x-python","patch_set":3,"id":"dada55a8_0a4ea93a","line":2366,"updated":"2016-07-20 11:19:37.000000000","message":"How this change is related to the bug fixed?","commit_id":"1e76169e424b35907ba9a1fd0fbcc393680c9c72"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"9b152cf7c297bc29b50e286f3c22533b5ea036a1","unresolved":false,"context_lines":[{"line_number":2363,"context_line":"                mvInstanceName \u003d self.get_masking_view_from_storage_group("},{"line_number":2364,"context_line":"                    conn, sgInstanceName)"},{"line_number":2365,"context_line":"                # Get initiator group from masking view."},{"line_number":2366,"context_line":"                if mvInstanceName:"},{"line_number":2367,"context_line":"                    LOG.debug(\"Found masking view associated with SG \""},{"line_number":2368,"context_line":"                              \"%(storageGroup)s: %(maskingview)s\","},{"line_number":2369,"context_line":"                              {\u0027maskingview\u0027: mvInstanceName,"}],"source_content_type":"text/x-python","patch_set":9,"id":"9ad45d7e_50a76bbc","line":2366,"updated":"2016-08-11 16:47:18.000000000","message":"Is this change unrelated? If yes, please make a note in the commit message.","commit_id":"857ed2f58eff4ea082446c88415af71920175e06"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"f6e481f2f0ff28e99a44f9a032d59ba52de66d9f","unresolved":false,"context_lines":[{"line_number":2363,"context_line":"                mvInstanceName \u003d self.get_masking_view_from_storage_group("},{"line_number":2364,"context_line":"                    conn, sgInstanceName)"},{"line_number":2365,"context_line":"                # Get initiator group from masking view."},{"line_number":2366,"context_line":"                if mvInstanceName:"},{"line_number":2367,"context_line":"                    LOG.debug(\"Found masking view associated with SG \""},{"line_number":2368,"context_line":"                              \"%(storageGroup)s: %(maskingview)s\","},{"line_number":2369,"context_line":"                              {\u0027maskingview\u0027: mvInstanceName,"}],"source_content_type":"text/x-python","patch_set":11,"id":"1ac06dbe_982d0549","line":2366,"updated":"2016-08-22 11:02:25.000000000","message":"?: Is this change needed to fix this bug or is this for another bug?","commit_id":"1f06663cc2bc0bf848fa0c751ecb0dc9255feca4"}]}
