)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"88aabc26cad41bfea5036608ac8bd87ab176bc1d","unresolved":false,"context_lines":[{"line_number":9,"context_line":"When the last volume has been deleted from the Storage"},{"line_number":10,"context_line":"Group and the Masking View has been deleted and the"},{"line_number":11,"context_line":"initiator group is no longer in use, the deletion of"},{"line_number":12,"context_line":"the Initiator group fails."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I79559789459f73c4adebf010d84cbeedd25f7f74"},{"line_number":15,"context_line":"Closes-Bug: #1605193"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"bacf61ea_28f86b7c","line":12,"updated":"2016-07-27 14:05:40.000000000","message":"This only describes the problem, we should also briefly summarize the fix.","commit_id":"df6926af9a91db3ccf3d0d305f3ef3741d4f8f2d"}],"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":"88aabc26cad41bfea5036608ac8bd87ab176bc1d","unresolved":false,"context_lines":[{"line_number":7742,"context_line":"            return_value\u003d[])"},{"line_number":7743,"context_line":"        common.get_target_wwns \u003d mock.Mock("},{"line_number":7744,"context_line":"            return_value\u003dEMCVMAXCommonData.target_wwns)"},{"line_number":7745,"context_line":"        self.driver.common.check_ig_instance_name \u003d mock.Mock("},{"line_number":7746,"context_line":"            return_value\u003dNone)"},{"line_number":7747,"context_line":"        data \u003d self.driver.terminate_connection(self.data.test_volume_v3,"},{"line_number":7748,"context_line":"                                                self.data.connector)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_6849c3d0","line":7745,"updated":"2016-07-27 14:05:40.000000000","message":"Could you please add a test which covers the case where check_ig_instance_name returns a name?","commit_id":"df6926af9a91db3ccf3d0d305f3ef3741d4f8f2d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b791bda9774fa271d7887bd721bac801f980008b","unresolved":false,"context_lines":[{"line_number":4801,"context_line":"    def test_detach_no_fast_last_volume_success("},{"line_number":4802,"context_line":"            self, mock_volume_type, mock_mv, mock_ig, mock_igc):"},{"line_number":4803,"context_line":"        # last volume so initiatorGroup will be deleted by terminate connection"},{"line_number":4804,"context_line":"        self.driver.common.check_ig_instance_name \u003d mock.Mock("},{"line_number":4805,"context_line":"            return_value\u003dNone)"},{"line_number":4806,"context_line":"        self.driver.terminate_connection(self.data.test_source_volume,"},{"line_number":4807,"context_line":"                                         self.data.connector)"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa7ab95a_a8ea34aa","line":4804,"updated":"2016-08-29 13:35:15.000000000","message":"Please mock self.driver.common.check_ig_instance_name rather than change it directly.","commit_id":"e883927e540067c3642d03a4cf4314bb834d612c"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b791bda9774fa271d7887bd721bac801f980008b","unresolved":false,"context_lines":[{"line_number":5408,"context_line":"        common.get_target_wwns \u003d mock.Mock("},{"line_number":5409,"context_line":"            return_value\u003dEMCVMAXCommonData.target_wwns)"},{"line_number":5410,"context_line":"        self.driver.common.check_ig_instance_name \u003d mock.Mock("},{"line_number":5411,"context_line":"            return_value\u003dNone)"},{"line_number":5412,"context_line":"        data \u003d self.driver.terminate_connection(self.data.test_volume,"},{"line_number":5413,"context_line":"                                                self.data.connector)"},{"line_number":5414,"context_line":"        common.get_target_wwns.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":5,"id":"fa7ab95a_e8d0bcf8","line":5411,"updated":"2016-08-29 13:35:15.000000000","message":"Same.","commit_id":"e883927e540067c3642d03a4cf4314bb834d612c"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b791bda9774fa271d7887bd721bac801f980008b","unresolved":false,"context_lines":[{"line_number":6414,"context_line":"        initiatorGroupInstanceName \u003d conn.AssociatorNames("},{"line_number":6415,"context_line":"            objectpath\u003d\u0027fakepath\u0027, ResultClass\u003d\u0027SE_InitiatorMaskingGroup\u0027)[0]"},{"line_number":6416,"context_line":"        self.driver.common.check_ig_instance_name \u003d mock.Mock("},{"line_number":6417,"context_line":"            return_value\u003dinitiatorGroupInstanceName)"},{"line_number":6418,"context_line":"        data \u003d self.driver.terminate_connection(self.data.test_volume_v3,"},{"line_number":6419,"context_line":"                                                self.data.connector)"},{"line_number":6420,"context_line":"        common.get_target_wwns.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":5,"id":"fa7ab95a_28d704ee","line":6417,"updated":"2016-08-29 13:35:15.000000000","message":"Same","commit_id":"e883927e540067c3642d03a4cf4314bb834d612c"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b791bda9774fa271d7887bd721bac801f980008b","unresolved":false,"context_lines":[{"line_number":7805,"context_line":"                common.conn, self.data.lunmaskctrl_name,"},{"line_number":7806,"context_line":"                self.data.storage_system))"},{"line_number":7807,"context_line":"        self.driver.common.check_ig_instance_name \u003d mock.Mock("},{"line_number":7808,"context_line":"            return_value\u003dinitiatorGroupInstanceName)"},{"line_number":7809,"context_line":"        data \u003d self.driver.terminate_connection(self.data.test_volume_v3,"},{"line_number":7810,"context_line":"                                                self.data.connector)"},{"line_number":7811,"context_line":"        common.get_target_wwns.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":5,"id":"fa7ab95a_88fc9073","line":7808,"updated":"2016-08-29 13:35:15.000000000","message":"Same","commit_id":"e883927e540067c3642d03a4cf4314bb834d612c"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b791bda9774fa271d7887bd721bac801f980008b","unresolved":false,"context_lines":[{"line_number":7816,"context_line":"    def test_terminate_connection_no_ig(self):"},{"line_number":7817,"context_line":"        common \u003d self.driver.common"},{"line_number":7818,"context_line":"        common.conn \u003d FakeEcomConnection()"},{"line_number":7819,"context_line":"        common._unmap_lun \u003d mock.Mock()"},{"line_number":7820,"context_line":"        common.get_masking_view_by_volume \u003d mock.Mock("},{"line_number":7821,"context_line":"            return_value\u003d\u0027testMV\u0027)"},{"line_number":7822,"context_line":"        common.get_masking_views_by_port_group \u003d mock.Mock("}],"source_content_type":"text/x-python","patch_set":5,"id":"fa7ab95a_28ee24b4","line":7819,"updated":"2016-08-29 13:35:15.000000000","message":"Same","commit_id":"e883927e540067c3642d03a4cf4314bb834d612c"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b791bda9774fa271d7887bd721bac801f980008b","unresolved":false,"context_lines":[{"line_number":7817,"context_line":"        common \u003d self.driver.common"},{"line_number":7818,"context_line":"        common.conn \u003d FakeEcomConnection()"},{"line_number":7819,"context_line":"        common._unmap_lun \u003d mock.Mock()"},{"line_number":7820,"context_line":"        common.get_masking_view_by_volume \u003d mock.Mock("},{"line_number":7821,"context_line":"            return_value\u003d\u0027testMV\u0027)"},{"line_number":7822,"context_line":"        common.get_masking_views_by_port_group \u003d mock.Mock("},{"line_number":7823,"context_line":"            return_value\u003d[])"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa7ab95a_6832ec60","line":7820,"updated":"2016-08-29 13:35:15.000000000","message":"Same","commit_id":"e883927e540067c3642d03a4cf4314bb834d612c"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b791bda9774fa271d7887bd721bac801f980008b","unresolved":false,"context_lines":[{"line_number":7819,"context_line":"        common._unmap_lun \u003d mock.Mock()"},{"line_number":7820,"context_line":"        common.get_masking_view_by_volume \u003d mock.Mock("},{"line_number":7821,"context_line":"            return_value\u003d\u0027testMV\u0027)"},{"line_number":7822,"context_line":"        common.get_masking_views_by_port_group \u003d mock.Mock("},{"line_number":7823,"context_line":"            return_value\u003d[])"},{"line_number":7824,"context_line":"        common.get_target_wwns \u003d mock.Mock("},{"line_number":7825,"context_line":"            return_value\u003dEMCVMAXCommonData.target_wwns)"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa7ab95a_c84138ab","line":7822,"updated":"2016-08-29 13:35:15.000000000","message":"Same","commit_id":"e883927e540067c3642d03a4cf4314bb834d612c"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b791bda9774fa271d7887bd721bac801f980008b","unresolved":false,"context_lines":[{"line_number":7821,"context_line":"            return_value\u003d\u0027testMV\u0027)"},{"line_number":7822,"context_line":"        common.get_masking_views_by_port_group \u003d mock.Mock("},{"line_number":7823,"context_line":"            return_value\u003d[])"},{"line_number":7824,"context_line":"        common.get_target_wwns \u003d mock.Mock("},{"line_number":7825,"context_line":"            return_value\u003dEMCVMAXCommonData.target_wwns)"},{"line_number":7826,"context_line":"        self.driver.common.check_ig_instance_name \u003d mock.Mock("},{"line_number":7827,"context_line":"            return_value\u003dNone)"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa7ab95a_084880cb","line":7824,"updated":"2016-08-29 13:35:15.000000000","message":"Same","commit_id":"e883927e540067c3642d03a4cf4314bb834d612c"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b791bda9774fa271d7887bd721bac801f980008b","unresolved":false,"context_lines":[{"line_number":7823,"context_line":"            return_value\u003d[])"},{"line_number":7824,"context_line":"        common.get_target_wwns \u003d mock.Mock("},{"line_number":7825,"context_line":"            return_value\u003dEMCVMAXCommonData.target_wwns)"},{"line_number":7826,"context_line":"        self.driver.common.check_ig_instance_name \u003d mock.Mock("},{"line_number":7827,"context_line":"            return_value\u003dNone)"},{"line_number":7828,"context_line":"        data \u003d self.driver.terminate_connection(self.data.test_volume_v3,"},{"line_number":7829,"context_line":"                                                self.data.connector)"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa7ab95a_284544b2","line":7826,"updated":"2016-08-29 13:35:15.000000000","message":"Same","commit_id":"e883927e540067c3642d03a4cf4314bb834d612c"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b791bda9774fa271d7887bd721bac801f980008b","unresolved":false,"context_lines":[{"line_number":8114,"context_line":"    def test_check_ig_instance_name_not_present(self):"},{"line_number":8115,"context_line":"        conn \u003d FakeEcomConnection()"},{"line_number":8116,"context_line":"        initiatorgroup \u003d None"},{"line_number":8117,"context_line":"        self.driver.utils.get_existing_instance \u003d mock.Mock("},{"line_number":8118,"context_line":"            return_value\u003dNone)"},{"line_number":8119,"context_line":"        foundIg \u003d self.driver.utils.check_ig_instance_name("},{"line_number":8120,"context_line":"            conn, initiatorgroup)"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa7ab95a_880ad077","line":8117,"updated":"2016-08-29 13:35:15.000000000","message":"Same","commit_id":"e883927e540067c3642d03a4cf4314bb834d612c"}],"cinder/volume/drivers/emc/emc_vmax_fc.py":[{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"88aabc26cad41bfea5036608ac8bd87ab176bc1d","unresolved":false,"context_lines":[{"line_number":259,"context_line":"                mvInstances \u003d self._get_common_masking_views("},{"line_number":260,"context_line":"                    portGroupInstanceName, initiatorGroupInstanceName)"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"                if len(mvInstances) \u003e 0:"},{"line_number":263,"context_line":"                    LOG.debug(\"Found %(numViews)lu MaskingViews.\","},{"line_number":264,"context_line":"                              {\u0027numViews\u0027: len(mvInstances)})"},{"line_number":265,"context_line":"                    data \u003d {\u0027driver_volume_type\u0027: \u0027fibre_channel\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_888cf736","line":262,"updated":"2016-07-27 14:05:40.000000000","message":"The else part is removed and it doesn\u0027t look like intentional.","commit_id":"df6926af9a91db3ccf3d0d305f3ef3741d4f8f2d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b791bda9774fa271d7887bd721bac801f980008b","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":"              - QoS support (blueprint vmax-qos)"},{"line_number":74,"context_line":"              - Fix initiator group cleanup (bug #1605193 ) NOTE: FC Only"},{"line_number":75,"context_line":"    \"\"\""},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    VERSION \u003d \"2.4.0\""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa7ab95a_c8ddb8e1","line":74,"updated":"2016-08-29 13:35:15.000000000","message":"nit: You removed this from other patches.  Please be consistent.","commit_id":"e883927e540067c3642d03a4cf4314bb834d612c"}],"cinder/volume/drivers/emc/emc_vmax_iscsi.py":[{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"88aabc26cad41bfea5036608ac8bd87ab176bc1d","unresolved":false,"context_lines":[{"line_number":74,"context_line":"              - VMAX3 snapvx improvements (bug #1522821)"},{"line_number":75,"context_line":"              - Operations and timeout issues (bug #1538214)"},{"line_number":76,"context_line":"        2.4.0 - EMC VMAX - locking SG for concurrent threads (bug #1554634)"},{"line_number":77,"context_line":"                Fix initiatior group cleanup (bug #1605193 ) NOTE: FC Only"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    \"\"\""},{"line_number":80,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_685543c5","line":77,"updated":"2016-07-27 14:05:40.000000000","message":"If it is FC only, why do you need to add this line here?","commit_id":"df6926af9a91db3ccf3d0d305f3ef3741d4f8f2d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b791bda9774fa271d7887bd721bac801f980008b","unresolved":false,"context_lines":[{"line_number":79,"context_line":"              - QoS support (blueprint vmax-qos)"},{"line_number":80,"context_line":"              - VMAX2/VMAX3 iscsi multipath support (iscsi only)"},{"line_number":81,"context_line":"              https://blueprints.launchpad.net/cinder/+spec/vmax-iscsi-multipath"},{"line_number":82,"context_line":"              - Fix initiator group cleanup (bug #1605193 ) NOTE: FC Only"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    \"\"\""},{"line_number":85,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa7ab95a_c804d84b","line":82,"updated":"2016-08-29 13:35:15.000000000","message":"nit: You removed this from other patches.  Please be consistent.","commit_id":"e883927e540067c3642d03a4cf4314bb834d612c"}],"cinder/volume/drivers/emc/emc_vmax_utils.py":[{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"88aabc26cad41bfea5036608ac8bd87ab176bc1d","unresolved":false,"context_lines":[{"line_number":2594,"context_line":""},{"line_number":2595,"context_line":"        :param conn: the ecom connection"},{"line_number":2596,"context_line":"        :param initiatorGroupInstanceName: the given IG instance name"},{"line_number":2597,"context_line":"        :return: foundinitiatorGroupInstanceName"},{"line_number":2598,"context_line":"        \"\"\""},{"line_number":2599,"context_line":"        foundinitiatorGroupInstanceName \u003d self.get_existing_instance("},{"line_number":2600,"context_line":"            conn, initiatorGroupInstanceName)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_8893574f","line":2597,"updated":"2016-07-27 14:05:40.000000000","message":"initiator group name, or None if deleted","commit_id":"df6926af9a91db3ccf3d0d305f3ef3741d4f8f2d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7349b6ac4f73160eea10c760635ed92a20d19179","unresolved":false,"context_lines":[{"line_number":2718,"context_line":""},{"line_number":2719,"context_line":"    def check_ig_instance_name("},{"line_number":2720,"context_line":"            self, conn, initiatorGroupInstanceName):"},{"line_number":2721,"context_line":"        \"\"\"Check if a given Initiator Group Instance Name has been deleted"},{"line_number":2722,"context_line":""},{"line_number":2723,"context_line":"        :param conn: the ecom connection"},{"line_number":2724,"context_line":"        :param initiatorGroupInstanceName: the given IG instance name"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa7ab95a_69ef4b87","line":2721,"updated":"2016-09-02 00:17:19.000000000","message":"Missing period at the end.","commit_id":"3e4570a08a9cdef848106e290a9833650fd3664e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7349b6ac4f73160eea10c760635ed92a20d19179","unresolved":false,"context_lines":[{"line_number":2718,"context_line":""},{"line_number":2719,"context_line":"    def check_ig_instance_name("},{"line_number":2720,"context_line":"            self, conn, initiatorGroupInstanceName):"},{"line_number":2721,"context_line":"        \"\"\"Check if a given Initiator Group Instance Name has been deleted"},{"line_number":2722,"context_line":""},{"line_number":2723,"context_line":"        :param conn: the ecom connection"},{"line_number":2724,"context_line":"        :param initiatorGroupInstanceName: the given IG instance name"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa7ab95a_69c82b23","line":2721,"updated":"2016-09-02 00:17:19.000000000","message":"nit: Missing period at the end.","commit_id":"3e4570a08a9cdef848106e290a9833650fd3664e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7349b6ac4f73160eea10c760635ed92a20d19179","unresolved":false,"context_lines":[{"line_number":2727,"context_line":"        foundinitiatorGroupInstanceName \u003d self.get_existing_instance("},{"line_number":2728,"context_line":"            conn, initiatorGroupInstanceName)"},{"line_number":2729,"context_line":"        if foundinitiatorGroupInstanceName is not None:"},{"line_number":2730,"context_line":"            LOG.debug(\"Found initiator group name Name: \""},{"line_number":2731,"context_line":"                      \"%(igName)s.\","},{"line_number":2732,"context_line":"                      {\u0027igName\u0027: foundinitiatorGroupInstanceName})"},{"line_number":2733,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa7ab95a_c9d3f7d3","line":2730,"updated":"2016-09-02 00:17:19.000000000","message":"Please remove the last \"Name\".  No need to repeat it.","commit_id":"3e4570a08a9cdef848106e290a9833650fd3664e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7349b6ac4f73160eea10c760635ed92a20d19179","unresolved":false,"context_lines":[{"line_number":2727,"context_line":"        foundinitiatorGroupInstanceName \u003d self.get_existing_instance("},{"line_number":2728,"context_line":"            conn, initiatorGroupInstanceName)"},{"line_number":2729,"context_line":"        if foundinitiatorGroupInstanceName is not None:"},{"line_number":2730,"context_line":"            LOG.debug(\"Found initiator group name Name: \""},{"line_number":2731,"context_line":"                      \"%(igName)s.\","},{"line_number":2732,"context_line":"                      {\u0027igName\u0027: foundinitiatorGroupInstanceName})"},{"line_number":2733,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa7ab95a_f4117253","line":2730,"updated":"2016-09-02 00:17:19.000000000","message":"Please remove the last \"Name\".  No need to repeat.","commit_id":"3e4570a08a9cdef848106e290a9833650fd3664e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7349b6ac4f73160eea10c760635ed92a20d19179","unresolved":false,"context_lines":[{"line_number":2731,"context_line":"                      \"%(igName)s.\","},{"line_number":2732,"context_line":"                      {\u0027igName\u0027: foundinitiatorGroupInstanceName})"},{"line_number":2733,"context_line":"        else:"},{"line_number":2734,"context_line":"            LOG.debug(\"Could not find initiator group name Name: \""},{"line_number":2735,"context_line":"                      \"%(igName)s.\","},{"line_number":2736,"context_line":"                      {\u0027igName\u0027: foundinitiatorGroupInstanceName})"},{"line_number":2737,"context_line":"        return foundinitiatorGroupInstanceName"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa7ab95a_141b3674","line":2734,"updated":"2016-09-02 00:17:19.000000000","message":"Same","commit_id":"3e4570a08a9cdef848106e290a9833650fd3664e"}]}
