)]}'
{"cinder/volume/drivers/emc/emc_vmax_common.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"963d79a1ff8057be29c27145dc0aa7794f243f73","unresolved":false,"context_lines":[{"line_number":2165,"context_line":"        storageGroupInstanceNames \u003d ("},{"line_number":2166,"context_line":"            self.masking.get_associated_masking_groups_from_device("},{"line_number":2167,"context_line":"                self.conn, volumeInstanceName))"},{"line_number":2168,"context_line":"        if storageGroupInstanceNames is not None and \\"},{"line_number":2169,"context_line":"                len(storageGroupInstanceNames) \u003e\u003d 1:"},{"line_number":2170,"context_line":"            LOG.warn(_LW("},{"line_number":2171,"context_line":"                \"Pre check for deletion \""}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_c9f0b693","line":2168,"updated":"2015-02-04 13:55:45.000000000","message":"Could be simplified to\nif storageGroupInstanceNames and len(storageGroupInstanceNames)","commit_id":"03fdf499ceb6e935f12dc5b3dad62d3ad28c53a2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"db876dc4bb896e45b6c777d687868cfc9b2356ea","unresolved":false,"context_lines":[{"line_number":2165,"context_line":"        storageGroupInstanceNames \u003d ("},{"line_number":2166,"context_line":"            self.masking.get_associated_masking_groups_from_device("},{"line_number":2167,"context_line":"                self.conn, volumeInstanceName))"},{"line_number":2168,"context_line":"        if storageGroupInstanceNames is not None and \\"},{"line_number":2169,"context_line":"                len(storageGroupInstanceNames) \u003e\u003d 1:"},{"line_number":2170,"context_line":"            LOG.warn(_LW("},{"line_number":2171,"context_line":"                \"Pre check for deletion \""}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_c2d4f1be","line":2168,"in_reply_to":"da86d52c_c9f0b693","updated":"2015-02-05 04:42:27.000000000","message":"Done","commit_id":"03fdf499ceb6e935f12dc5b3dad62d3ad28c53a2"},{"author":{"_account_id":12802,"name":"Carl Pecinovsky","email":"csky@us.ibm.com","username":"carl-sky"},"change_message_id":"0f4c49fe4ea51ba7bdcab730cf751155eb058b47","unresolved":false,"context_lines":[{"line_number":282,"context_line":"        deviceInfoDict \u003d self._wrap_find_device_number(volume, connector)"},{"line_number":283,"context_line":"        if (\u0027hostlunid\u0027 in deviceInfoDict and"},{"line_number":284,"context_line":"                deviceInfoDict[\u0027hostlunid\u0027] is not None):"},{"line_number":285,"context_line":"            isSameHost \u003d self._is_same_host(connector, deviceInfoDict)"},{"line_number":286,"context_line":"            if isSameHost:"},{"line_number":287,"context_line":"                # Device is already mapped so we will leave the state as is."},{"line_number":288,"context_line":"                deviceNumber \u003d deviceInfoDict[\u0027hostlunid\u0027]"}],"source_content_type":"text/x-python","patch_set":12,"id":"da86d52c_465d23ec","line":285,"updated":"2015-02-06 22:50:47.000000000","message":"Let\u0027s say it is not the same host. The device could still be mapped to the same host, couldn\u0027t it, if find_device_number() is still returning the first mapping it comes across? Another mapping could be for the same host.","commit_id":"06bde83d4cea37ddc9fec03d7d51db40ae03f3c0"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9afe96578a1959c3ceb70d1449c58f079e631e34","unresolved":false,"context_lines":[{"line_number":282,"context_line":"        deviceInfoDict \u003d self._wrap_find_device_number(volume, connector)"},{"line_number":283,"context_line":"        if (\u0027hostlunid\u0027 in deviceInfoDict and"},{"line_number":284,"context_line":"                deviceInfoDict[\u0027hostlunid\u0027] is not None):"},{"line_number":285,"context_line":"            isSameHost \u003d self._is_same_host(connector, deviceInfoDict)"},{"line_number":286,"context_line":"            if isSameHost:"},{"line_number":287,"context_line":"                # Device is already mapped so we will leave the state as is."},{"line_number":288,"context_line":"                deviceNumber \u003d deviceInfoDict[\u0027hostlunid\u0027]"}],"source_content_type":"text/x-python","patch_set":12,"id":"da86d52c_6ad2d835","line":285,"in_reply_to":"da86d52c_465d23ec","updated":"2015-02-08 19:37:29.000000000","message":"Let\u0027s say we are trying to attach volume1 to hostA.\n\n1) volume1 is already attached to hostA. isSameHost is True. We don\u0027t need to attach again.\n2) volume1 is not attached to hostA. isSameHost is False. We\u0027ll try to attach to hostA.\n\nIn your scenario, isSameHost returns False. volume1 is not attached to hostA according to our evaluation logic here. Somehow volume1 is truely attached to hostA already. So we\u0027ll try to do attach. That should not be a problem. If you trace the _attach_volume logic, it actually will return success if a volume is already in the storage group.","commit_id":"06bde83d4cea37ddc9fec03d7d51db40ae03f3c0"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9afe96578a1959c3ceb70d1449c58f079e631e34","unresolved":false,"context_lines":[{"line_number":358,"context_line":"                if currentHost in deviceInfoDict[\u0027maskingview\u0027]:"},{"line_number":359,"context_line":"                    return True"},{"line_number":360,"context_line":"        return False"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"    def _wrap_find_device_number(self, volume, connector):"},{"line_number":363,"context_line":"        \"\"\"Aid for unit testing"},{"line_number":364,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"da86d52c_ea240810","line":361,"updated":"2015-02-08 19:37:29.000000000","message":"This wrapper can be removed.","commit_id":"06bde83d4cea37ddc9fec03d7d51db40ae03f3c0"},{"author":{"_account_id":12802,"name":"Carl Pecinovsky","email":"csky@us.ibm.com","username":"carl-sky"},"change_message_id":"0f4c49fe4ea51ba7bdcab730cf751155eb058b47","unresolved":false,"context_lines":[{"line_number":1292,"context_line":"                  % {\u0027name\u0027: name,"},{"line_number":1293,"context_line":"                     \u0027initiator\u0027: foundinitiatornames})"},{"line_number":1294,"context_line":"        return foundinitiatornames"},{"line_number":1295,"context_line":""},{"line_number":1296,"context_line":"    def find_device_number(self, volume, connector):"},{"line_number":1297,"context_line":"        \"\"\"Given the volume dict find a device number."},{"line_number":1298,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"da86d52c_e6aa97d1","line":1295,"updated":"2015-02-06 22:50:47.000000000","message":"I think my original comment in the defect is that \"connector\" is not being looked at by this method to correlate to a masking view. It seems like another approach is being used to see if a second host mapping is being requested. That\u0027s fine, but connector should be removed as a parameter from this method to avoid confusion.","commit_id":"06bde83d4cea37ddc9fec03d7d51db40ae03f3c0"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9afe96578a1959c3ceb70d1449c58f079e631e34","unresolved":false,"context_lines":[{"line_number":1292,"context_line":"                  % {\u0027name\u0027: name,"},{"line_number":1293,"context_line":"                     \u0027initiator\u0027: foundinitiatornames})"},{"line_number":1294,"context_line":"        return foundinitiatornames"},{"line_number":1295,"context_line":""},{"line_number":1296,"context_line":"    def find_device_number(self, volume, connector):"},{"line_number":1297,"context_line":"        \"\"\"Given the volume dict find a device number."},{"line_number":1298,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"da86d52c_0a787c2a","line":1295,"in_reply_to":"da86d52c_e6aa97d1","updated":"2015-02-08 19:37:29.000000000","message":"You are referring to the find_device_number method below. I think you are right. \"connector\" can be removed from the parameters. It is not used here.","commit_id":"06bde83d4cea37ddc9fec03d7d51db40ae03f3c0"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9afe96578a1959c3ceb70d1449c58f079e631e34","unresolved":false,"context_lines":[{"line_number":1293,"context_line":"                     \u0027initiator\u0027: foundinitiatornames})"},{"line_number":1294,"context_line":"        return foundinitiatornames"},{"line_number":1295,"context_line":""},{"line_number":1296,"context_line":"    def find_device_number(self, volume, connector):"},{"line_number":1297,"context_line":"        \"\"\"Given the volume dict find a device number."},{"line_number":1298,"context_line":""},{"line_number":1299,"context_line":"        Find a device number that a host can see for a volume."}],"source_content_type":"text/x-python","patch_set":12,"id":"da86d52c_4a72744a","line":1296,"updated":"2015-02-08 19:37:29.000000000","message":"Remove \u0027connector\u0027 as it is not used here.","commit_id":"06bde83d4cea37ddc9fec03d7d51db40ae03f3c0"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9afe96578a1959c3ceb70d1449c58f079e631e34","unresolved":false,"context_lines":[{"line_number":1299,"context_line":"        Find a device number that a host can see for a volume."},{"line_number":1300,"context_line":""},{"line_number":1301,"context_line":"        :param volume: the volume dict"},{"line_number":1302,"context_line":"        :param connector: the connector dict"},{"line_number":1303,"context_line":"        :returns: data, the data dict"},{"line_number":1304,"context_line":""},{"line_number":1305,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":12,"id":"da86d52c_8a938c4e","line":1302,"updated":"2015-02-08 19:37:29.000000000","message":"Remove the above comment when connector is removed.","commit_id":"06bde83d4cea37ddc9fec03d7d51db40ae03f3c0"},{"author":{"_account_id":12802,"name":"Carl Pecinovsky","email":"csky@us.ibm.com","username":"carl-sky"},"change_message_id":"0f4c49fe4ea51ba7bdcab730cf751155eb058b47","unresolved":false,"context_lines":[{"line_number":2166,"context_line":"        storageGroupInstanceNames \u003d ("},{"line_number":2167,"context_line":"            self.masking.get_associated_masking_groups_from_device("},{"line_number":2168,"context_line":"                self.conn, volumeInstanceName))"},{"line_number":2169,"context_line":"        if storageGroupInstanceNames and len(storageGroupInstanceNames) \u003e\u003d 1:"},{"line_number":2170,"context_line":"            LOG.warn(_LW("},{"line_number":2171,"context_line":"                \"Pre check for deletion \""},{"line_number":2172,"context_line":"                \"Volume: %(volumeName)s is part of a storage group \""}],"source_content_type":"text/x-python","patch_set":12,"id":"da86d52c_e818a620","line":2169,"updated":"2015-02-06 22:50:47.000000000","message":"I believe that \"len(storageGroupInstanceNames) \u003e\u003d 1\" is implicitly checked as part of \"if storageGroupInstanceNames\", so is a redundant clause.","commit_id":"06bde83d4cea37ddc9fec03d7d51db40ae03f3c0"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"5f1c1becfcc0dd6670960ec6dc34c4af58b55e84","unresolved":false,"context_lines":[{"line_number":2178,"context_line":"                    self.conn, controllerConfigurationService,"},{"line_number":2179,"context_line":"                    storageGroupInstanceName,"},{"line_number":2180,"context_line":"                    volumeInstanceName, volumeName)"},{"line_number":2181,"context_line":"        return storageGroupInstanceNames"},{"line_number":2182,"context_line":""},{"line_number":2183,"context_line":"    def _find_lunmasking_scsi_protocol_controller(self, storageSystemName,"},{"line_number":2184,"context_line":"                                                  connector):"}],"source_content_type":"text/x-python","patch_set":14,"id":"da86d52c_c082cdc7","line":2181,"updated":"2015-02-07 22:13:32.000000000","message":"Is there a reason this was updated to return the names? I couldn\u0027t find anywhere it was used that checked for a return result.","commit_id":"8eb2415257e4c770e163ed932e3c6570cab51fdd"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bf784c79e189afe397d109f963e3ea7c0ee4b49a","unresolved":false,"context_lines":[{"line_number":2178,"context_line":"                    self.conn, controllerConfigurationService,"},{"line_number":2179,"context_line":"                    storageGroupInstanceName,"},{"line_number":2180,"context_line":"                    volumeInstanceName, volumeName)"},{"line_number":2181,"context_line":"        return storageGroupInstanceNames"},{"line_number":2182,"context_line":""},{"line_number":2183,"context_line":"    def _find_lunmasking_scsi_protocol_controller(self, storageSystemName,"},{"line_number":2184,"context_line":"                                                  connector):"}],"source_content_type":"text/x-python","patch_set":14,"id":"da86d52c_2a48e0cb","line":2181,"in_reply_to":"da86d52c_c082cdc7","updated":"2015-02-08 19:38:46.000000000","message":"You are right. The return value is not used any where. We\u0027ll take a closer look to see if it can be removed.","commit_id":"8eb2415257e4c770e163ed932e3c6570cab51fdd"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"e6375666880b43a006b8f4ee7093e50a21f9962b","unresolved":false,"context_lines":[{"line_number":672,"context_line":"               information"},{"line_number":673,"context_line":"        :param new_type: None"},{"line_number":674,"context_line":"        :returns: boolean True/False"},{"line_number":675,"context_line":"        :returns: list"},{"line_number":676,"context_line":"        \"\"\""},{"line_number":677,"context_line":"        LOG.warn(_LW(\"The VMAX plugin only supports Retype.  \""},{"line_number":678,"context_line":"                     \"If a pool based migration is necessary \""}],"source_content_type":"text/x-python","patch_set":15,"id":"da86d52c_a4fe72ac","line":675,"updated":"2015-02-10 15:39:23.000000000","message":"Actually it returns tuple instance","commit_id":"95b1943f5e2878e141284f55019b5d6b8540da50"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"e6375666880b43a006b8f4ee7093e50a21f9962b","unresolved":false,"context_lines":[{"line_number":694,"context_line":"        :param sourceFastPolicyName: the source FAST policy name, can be None"},{"line_number":695,"context_line":"        :param new_type: None"},{"line_number":696,"context_line":"        :returns:  boolean True/False"},{"line_number":697,"context_line":"        :returns:  empty list"},{"line_number":698,"context_line":"        \"\"\""},{"line_number":699,"context_line":"        volumeName \u003d volume[\u0027name\u0027]"},{"line_number":700,"context_line":"        storageSystemName \u003d volumeInstance[\u0027SystemName\u0027]"}],"source_content_type":"text/x-python","patch_set":15,"id":"da86d52c_84f16ecf","line":697,"updated":"2015-02-10 15:39:23.000000000","message":"It doesn\u0027t return list","commit_id":"95b1943f5e2878e141284f55019b5d6b8540da50"}],"cinder/volume/drivers/emc/emc_vmax_fc.py":[{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"54c503ea7e45420f602bd89d5799a29600bdbb4b","unresolved":false,"context_lines":[{"line_number":203,"context_line":""},{"line_number":204,"context_line":"            self.common.terminate_connection(volume, connector)"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"            LOG.debug(\"Looking for masking views still associated with\""},{"line_number":207,"context_line":"                      \"Port Group %s\", portGroupInstanceName)"},{"line_number":208,"context_line":"            mvInstances \u003d self.common.get_masking_views_by_port_group("},{"line_number":209,"context_line":"                portGroupInstanceName)"}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_9f62beab","line":206,"updated":"2015-02-03 00:06:53.000000000","message":"Missing space at EOL.","commit_id":"1a44ccba6e425f47bd7fc255b60eb6d1e2cb6f2f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6524309e643a8f190bda180de946647361ab888f","unresolved":false,"context_lines":[{"line_number":203,"context_line":""},{"line_number":204,"context_line":"            self.common.terminate_connection(volume, connector)"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"            LOG.debug(\"Looking for masking views still associated with\""},{"line_number":207,"context_line":"                      \"Port Group %s\", portGroupInstanceName)"},{"line_number":208,"context_line":"            mvInstances \u003d self.common.get_masking_views_by_port_group("},{"line_number":209,"context_line":"                portGroupInstanceName)"}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_c1899827","line":206,"in_reply_to":"da86d52c_9f62beab","updated":"2015-02-03 16:34:44.000000000","message":"Done","commit_id":"1a44ccba6e425f47bd7fc255b60eb6d1e2cb6f2f"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"ca0be93a8dce8d46133a04d26ee6529bc586d835","unresolved":false,"context_lines":[{"line_number":221,"context_line":"            LOG.debug(\"Return FC data for zone removal: %(data)s.\","},{"line_number":222,"context_line":"                      {\u0027data\u0027: data})"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"        return data"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"    def _build_initiator_target_map(self, storage_system, volume, connector):"},{"line_number":227,"context_line":"        \"\"\"Build the target_wwns and the initiator target map.\"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_7019c187","line":224,"updated":"2015-02-02 21:59:10.000000000","message":"What is data if mvInstanceName is None?","commit_id":"1a44ccba6e425f47bd7fc255b60eb6d1e2cb6f2f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6524309e643a8f190bda180de946647361ab888f","unresolved":false,"context_lines":[{"line_number":221,"context_line":"            LOG.debug(\"Return FC data for zone removal: %(data)s.\","},{"line_number":222,"context_line":"                      {\u0027data\u0027: data})"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"        return data"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"    def _build_initiator_target_map(self, storage_system, volume, connector):"},{"line_number":227,"context_line":"        \"\"\"Build the target_wwns and the initiator target map.\"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_0184900a","line":224,"in_reply_to":"da86d52c_33f3d39f","updated":"2015-02-03 16:34:44.000000000","message":"Done","commit_id":"1a44ccba6e425f47bd7fc255b60eb6d1e2cb6f2f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4af0b12bac54a721d3a6bfdfb8f3f1314f52fff3","unresolved":false,"context_lines":[{"line_number":221,"context_line":"            LOG.debug(\"Return FC data for zone removal: %(data)s.\","},{"line_number":222,"context_line":"                      {\u0027data\u0027: data})"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"        return data"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"    def _build_initiator_target_map(self, storage_system, volume, connector):"},{"line_number":227,"context_line":"        \"\"\"Build the target_wwns and the initiator target map.\"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_33f3d39f","line":224,"in_reply_to":"da86d52c_7019c187","updated":"2015-02-02 22:18:11.000000000","message":"Good catch!  Should return the following if instance name is None. Looks like this was introduced when the None check was added.\n\ndata \u003d {\u0027driver_volume_type\u0027: \u0027fibre_channel\u0027,\t                       \n           \u0027data\u0027: {}}","commit_id":"1a44ccba6e425f47bd7fc255b60eb6d1e2cb6f2f"},{"author":{"_account_id":8757,"name":"Angela Smith","email":"angela.smith@broadcom.com","username":"asmith_brcd"},"change_message_id":"6871bcc647df85716895c2f94571844581f9d41f","unresolved":false,"context_lines":[{"line_number":187,"context_line":"                 % {\u0027volume\u0027: volume[\u0027name\u0027]})"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        target_wwns, init_targ_map \u003d self._build_initiator_target_map("},{"line_number":190,"context_line":"            storage_system, volume, connector)"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"        mvInstanceName \u003d self.common.get_masking_view_by_volume("},{"line_number":193,"context_line":"            volume, connector)"}],"source_content_type":"text/x-python","patch_set":12,"id":"da86d52c_a22ef989","line":190,"updated":"2015-02-05 21:01:01.000000000","message":"as the return data fetched from this call is only used in else stmt below, can this call be moved to improve performance?","commit_id":"06bde83d4cea37ddc9fec03d7d51db40ae03f3c0"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"fa2c9eaaef291fd50c32e113c37fc5fe8e48a37c","unresolved":false,"context_lines":[{"line_number":187,"context_line":"                 % {\u0027volume\u0027: volume[\u0027name\u0027]})"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        target_wwns, init_targ_map \u003d self._build_initiator_target_map("},{"line_number":190,"context_line":"            storage_system, volume, connector)"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"        mvInstanceName \u003d self.common.get_masking_view_by_volume("},{"line_number":193,"context_line":"            volume, connector)"}],"source_content_type":"text/x-python","patch_set":12,"id":"da86d52c_03e0a627","line":190,"in_reply_to":"da86d52c_a22ef989","updated":"2015-02-05 23:06:01.000000000","message":"Good suggestion.\n\nMove this call to inside the \"else:  # No views found.\" block.","commit_id":"06bde83d4cea37ddc9fec03d7d51db40ae03f3c0"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"fa2c9eaaef291fd50c32e113c37fc5fe8e48a37c","unresolved":false,"context_lines":[{"line_number":211,"context_line":"                LOG.debug(\"Found %(numViews)lu MaskingViews.\","},{"line_number":212,"context_line":"                          {\u0027numViews\u0027: len(mvInstances)})"},{"line_number":213,"context_line":"                data \u003d {\u0027driver_volume_type\u0027: \u0027fibre_channel\u0027,"},{"line_number":214,"context_line":"                        \u0027data\u0027: {}}"},{"line_number":215,"context_line":"            else:  # No views found."},{"line_number":216,"context_line":"                LOG.debug(\"No MaskingViews were found. Deleting zone.\")"},{"line_number":217,"context_line":"                data \u003d {\u0027driver_volume_type\u0027: \u0027fibre_channel\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"da86d52c_03b2664b","line":214,"updated":"2015-02-05 23:06:01.000000000","message":"Move initialization of data outside of the \"if mvInstanceName\" block.\n\ndata \u003d {\u0027driver_volume_type\u0027: \u0027fibre_channel\u0027,\n           \u0027data\u0027: {}}","commit_id":"06bde83d4cea37ddc9fec03d7d51db40ae03f3c0"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"fa2c9eaaef291fd50c32e113c37fc5fe8e48a37c","unresolved":false,"context_lines":[{"line_number":224,"context_line":"            LOG.warn(_LW(\"Volume %(volume)s is not in any masking view.\"),"},{"line_number":225,"context_line":"                     {\u0027volume\u0027: volume[\u0027name\u0027]})"},{"line_number":226,"context_line":"            data \u003d {\u0027driver_volume_type\u0027: \u0027fibre_channel\u0027,"},{"line_number":227,"context_line":"                    \u0027data\u0027: {}}"},{"line_number":228,"context_line":"        return data"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    def _build_initiator_target_map(self, storage_system, volume, connector):"}],"source_content_type":"text/x-python","patch_set":12,"id":"da86d52c_a388ba71","line":227,"updated":"2015-02-05 23:06:01.000000000","message":"Remove line 226-227.","commit_id":"06bde83d4cea37ddc9fec03d7d51db40ae03f3c0"}],"cinder/volume/drivers/emc/emc_vmax_masking.py":[{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"54c503ea7e45420f602bd89d5799a29600bdbb4b","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        if sgFromMvInstanceName is None:"},{"line_number":284,"context_line":"            # This may be used in exception hence _ instead of _LE"},{"line_number":285,"context_line":"            msg \u003d (_("},{"line_number":286,"context_line":"                \"Cannot get storage group: %(sgGroupName)s\""},{"line_number":287,"context_line":"                \"from masking view %(maskingViewInstanceName)s.\") %"},{"line_number":288,"context_line":"                {\u0027sgGroupName\u0027: sgGroupName,"},{"line_number":289,"context_line":"                 \u0027maskingViewInstanceName\u0027: maskingViewInstanceName})"}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_ff201a4b","line":286,"updated":"2015-02-03 00:06:53.000000000","message":"Why did you remove the space here?","commit_id":"1a44ccba6e425f47bd7fc255b60eb6d1e2cb6f2f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6524309e643a8f190bda180de946647361ab888f","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        if sgFromMvInstanceName is None:"},{"line_number":284,"context_line":"            # This may be used in exception hence _ instead of _LE"},{"line_number":285,"context_line":"            msg \u003d (_("},{"line_number":286,"context_line":"                \"Cannot get storage group: %(sgGroupName)s\""},{"line_number":287,"context_line":"                \"from masking view %(maskingViewInstanceName)s.\") %"},{"line_number":288,"context_line":"                {\u0027sgGroupName\u0027: sgGroupName,"},{"line_number":289,"context_line":"                 \u0027maskingViewInstanceName\u0027: maskingViewInstanceName})"}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_c1b7d8d6","line":286,"in_reply_to":"da86d52c_ff201a4b","updated":"2015-02-03 16:34:44.000000000","message":"Done","commit_id":"1a44ccba6e425f47bd7fc255b60eb6d1e2cb6f2f"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"54c503ea7e45420f602bd89d5799a29600bdbb4b","unresolved":false,"context_lines":[{"line_number":1496,"context_line":"        \"\"\"Get the associated storage groups from the volume Instance name"},{"line_number":1497,"context_line":""},{"line_number":1498,"context_line":"        Given the volume instance name get the associated storage group"},{"line_number":1499,"context_line":"        instance names"},{"line_number":1500,"context_line":""},{"line_number":1501,"context_line":"        :param conn: connection the the ecom server"},{"line_number":1502,"context_line":"        :param volumeInstanceName: the volume instance name"}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_dfe196ff","line":1499,"updated":"2015-02-03 00:06:53.000000000","message":"Suggest \u0027.\u0027 here","commit_id":"1a44ccba6e425f47bd7fc255b60eb6d1e2cb6f2f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6524309e643a8f190bda180de946647361ab888f","unresolved":false,"context_lines":[{"line_number":1496,"context_line":"        \"\"\"Get the associated storage groups from the volume Instance name"},{"line_number":1497,"context_line":""},{"line_number":1498,"context_line":"        Given the volume instance name get the associated storage group"},{"line_number":1499,"context_line":"        instance names"},{"line_number":1500,"context_line":""},{"line_number":1501,"context_line":"        :param conn: connection the the ecom server"},{"line_number":1502,"context_line":"        :param volumeInstanceName: the volume instance name"}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_21b514cd","line":1499,"in_reply_to":"da86d52c_dfe196ff","updated":"2015-02-03 16:34:44.000000000","message":"Done","commit_id":"1a44ccba6e425f47bd7fc255b60eb6d1e2cb6f2f"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"54c503ea7e45420f602bd89d5799a29600bdbb4b","unresolved":false,"context_lines":[{"line_number":1711,"context_line":"                               \u0027maskingview\u0027: foundMVInstanceName})"},{"line_number":1712,"context_line":"                    break"},{"line_number":1713,"context_line":""},{"line_number":1714,"context_line":"        LOG.debug(\"Found Masking View %(mv)s: \", {\u0027mv\u0027: foundMVInstanceName})"},{"line_number":1715,"context_line":"        return foundMVInstanceName"},{"line_number":1716,"context_line":""},{"line_number":1717,"context_line":"    def get_masking_views_by_port_group(self, conn, portGroupInstanceName):"}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_bf830203","line":1714,"updated":"2015-02-03 00:06:53.000000000","message":"Suggest:  Found Masking View: %(mv)s","commit_id":"1a44ccba6e425f47bd7fc255b60eb6d1e2cb6f2f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6524309e643a8f190bda180de946647361ab888f","unresolved":false,"context_lines":[{"line_number":1711,"context_line":"                               \u0027maskingview\u0027: foundMVInstanceName})"},{"line_number":1712,"context_line":"                    break"},{"line_number":1713,"context_line":""},{"line_number":1714,"context_line":"        LOG.debug(\"Found Masking View %(mv)s: \", {\u0027mv\u0027: foundMVInstanceName})"},{"line_number":1715,"context_line":"        return foundMVInstanceName"},{"line_number":1716,"context_line":""},{"line_number":1717,"context_line":"    def get_masking_views_by_port_group(self, conn, portGroupInstanceName):"}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_c1def810","line":1714,"in_reply_to":"da86d52c_bf830203","updated":"2015-02-03 16:34:44.000000000","message":"Done","commit_id":"1a44ccba6e425f47bd7fc255b60eb6d1e2cb6f2f"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"54c503ea7e45420f602bd89d5799a29600bdbb4b","unresolved":false,"context_lines":[{"line_number":1881,"context_line":"        initiatorGroupInstanceNames \u003d conn.AssociatorNames("},{"line_number":1882,"context_line":"            maskingViewInstanceName, ResultClass\u003d\u0027SE_InitiatorMaskingGroup\u0027)"},{"line_number":1883,"context_line":"        if len(initiatorGroupInstanceNames) \u003e 0:"},{"line_number":1884,"context_line":"            LOG.debug(\"Found initiator group %(pg)s in masking view %(mv)s\","},{"line_number":1885,"context_line":"                      {\u0027pg\u0027: initiatorGroupInstanceNames[0],"},{"line_number":1886,"context_line":"                       \u0027mv\u0027: maskingViewInstanceName})"},{"line_number":1887,"context_line":"            return initiatorGroupInstanceNames[0]"}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_7fb7cad8","line":1884,"updated":"2015-02-03 00:06:53.000000000","message":"Suggest \u0027.\u0027 here.","commit_id":"1a44ccba6e425f47bd7fc255b60eb6d1e2cb6f2f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6524309e643a8f190bda180de946647361ab888f","unresolved":false,"context_lines":[{"line_number":1881,"context_line":"        initiatorGroupInstanceNames \u003d conn.AssociatorNames("},{"line_number":1882,"context_line":"            maskingViewInstanceName, ResultClass\u003d\u0027SE_InitiatorMaskingGroup\u0027)"},{"line_number":1883,"context_line":"        if len(initiatorGroupInstanceNames) \u003e 0:"},{"line_number":1884,"context_line":"            LOG.debug(\"Found initiator group %(pg)s in masking view %(mv)s\","},{"line_number":1885,"context_line":"                      {\u0027pg\u0027: initiatorGroupInstanceNames[0],"},{"line_number":1886,"context_line":"                       \u0027mv\u0027: maskingViewInstanceName})"},{"line_number":1887,"context_line":"            return initiatorGroupInstanceNames[0]"}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_61cd4c5d","line":1884,"in_reply_to":"da86d52c_7fb7cad8","updated":"2015-02-03 16:34:44.000000000","message":"Done","commit_id":"1a44ccba6e425f47bd7fc255b60eb6d1e2cb6f2f"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"54c503ea7e45420f602bd89d5799a29600bdbb4b","unresolved":false,"context_lines":[{"line_number":1886,"context_line":"                       \u0027mv\u0027: maskingViewInstanceName})"},{"line_number":1887,"context_line":"            return initiatorGroupInstanceNames[0]"},{"line_number":1888,"context_line":"        else:"},{"line_number":1889,"context_line":"            LOG.warn(_LW(\"No port group found in masking view %(mv)s\"),"},{"line_number":1890,"context_line":"                     {\u0027mv\u0027: maskingViewInstanceName})"},{"line_number":1891,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_ffa3ba9b","line":1889,"updated":"2015-02-03 00:06:53.000000000","message":"Suggest \u0027.\u0027 here.","commit_id":"1a44ccba6e425f47bd7fc255b60eb6d1e2cb6f2f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6524309e643a8f190bda180de946647361ab888f","unresolved":false,"context_lines":[{"line_number":1886,"context_line":"                       \u0027mv\u0027: maskingViewInstanceName})"},{"line_number":1887,"context_line":"            return initiatorGroupInstanceNames[0]"},{"line_number":1888,"context_line":"        else:"},{"line_number":1889,"context_line":"            LOG.warn(_LW(\"No port group found in masking view %(mv)s\"),"},{"line_number":1890,"context_line":"                     {\u0027mv\u0027: maskingViewInstanceName})"},{"line_number":1891,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_c105187b","line":1889,"in_reply_to":"da86d52c_ffa3ba9b","updated":"2015-02-03 16:34:44.000000000","message":"Done","commit_id":"1a44ccba6e425f47bd7fc255b60eb6d1e2cb6f2f"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"963d79a1ff8057be29c27145dc0aa7794f243f73","unresolved":false,"context_lines":[{"line_number":1680,"context_line":"                conn, storageSystemName))"},{"line_number":1681,"context_line":"        igInstanceNameFromConnector \u003d self._find_initiator_masking_group("},{"line_number":1682,"context_line":"            conn, controllerConfigService, initiatorNames)"},{"line_number":1683,"context_line":"        # a device can be shared by multi-SGs in a multi-host attach case"},{"line_number":1684,"context_line":"        storageGroupInstanceNames \u003d ("},{"line_number":1685,"context_line":"            self.get_associated_masking_groups_from_device("},{"line_number":1686,"context_line":"                conn, volumeInstance.path))"}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_69d50ab8","line":1683,"updated":"2015-02-04 13:55:45.000000000","message":"Please, start comments with upper-case letters","commit_id":"03fdf499ceb6e935f12dc5b3dad62d3ad28c53a2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"db876dc4bb896e45b6c777d687868cfc9b2356ea","unresolved":false,"context_lines":[{"line_number":1680,"context_line":"                conn, storageSystemName))"},{"line_number":1681,"context_line":"        igInstanceNameFromConnector \u003d self._find_initiator_masking_group("},{"line_number":1682,"context_line":"            conn, controllerConfigService, initiatorNames)"},{"line_number":1683,"context_line":"        # a device can be shared by multi-SGs in a multi-host attach case"},{"line_number":1684,"context_line":"        storageGroupInstanceNames \u003d ("},{"line_number":1685,"context_line":"            self.get_associated_masking_groups_from_device("},{"line_number":1686,"context_line":"                conn, volumeInstance.path))"}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_62c98525","line":1683,"in_reply_to":"da86d52c_69d50ab8","updated":"2015-02-05 04:42:27.000000000","message":"Done","commit_id":"03fdf499ceb6e935f12dc5b3dad62d3ad28c53a2"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"963d79a1ff8057be29c27145dc0aa7794f243f73","unresolved":false,"context_lines":[{"line_number":1876,"context_line":"        \"\"\"Get initiator group in a masking view."},{"line_number":1877,"context_line":""},{"line_number":1878,"context_line":"        :param maskingViewInstanceName: masking view instance name"},{"line_number":1879,"context_line":"        :returns: initiatorGroupInstanceName"},{"line_number":1880,"context_line":"        \"\"\""},{"line_number":1881,"context_line":"        initiatorGroupInstanceNames \u003d conn.AssociatorNames("},{"line_number":1882,"context_line":"            maskingViewInstanceName, ResultClass\u003d\u0027SE_InitiatorMaskingGroup\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_a901c239","line":1879,"updated":"2015-02-04 13:55:45.000000000","message":":returns: initiatorGroupInstanceName or None if it is not found","commit_id":"03fdf499ceb6e935f12dc5b3dad62d3ad28c53a2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"db876dc4bb896e45b6c777d687868cfc9b2356ea","unresolved":false,"context_lines":[{"line_number":1876,"context_line":"        \"\"\"Get initiator group in a masking view."},{"line_number":1877,"context_line":""},{"line_number":1878,"context_line":"        :param maskingViewInstanceName: masking view instance name"},{"line_number":1879,"context_line":"        :returns: initiatorGroupInstanceName"},{"line_number":1880,"context_line":"        \"\"\""},{"line_number":1881,"context_line":"        initiatorGroupInstanceNames \u003d conn.AssociatorNames("},{"line_number":1882,"context_line":"            maskingViewInstanceName, ResultClass\u003d\u0027SE_InitiatorMaskingGroup\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_4249e1b5","line":1879,"in_reply_to":"da86d52c_a901c239","updated":"2015-02-05 04:42:27.000000000","message":"Done","commit_id":"03fdf499ceb6e935f12dc5b3dad62d3ad28c53a2"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"074036a82da8c5b9367c02f3bd177706d24678c6","unresolved":false,"context_lines":[{"line_number":1563,"context_line":"            self._get_tiering_info(conn, storageSystemInstanceName,"},{"line_number":1564,"context_line":"                                   fastPolicyName))"},{"line_number":1565,"context_line":"        if numVolInMaskingView \u003d\u003d 1:"},{"line_number":1566,"context_line":"            # last volume in the storage group"},{"line_number":1567,"context_line":"            self._last_volume_delete_masking_view("},{"line_number":1568,"context_line":"                conn, storageGroupInstanceName)"},{"line_number":1569,"context_line":"            self._get_and_remove_rule_association("}],"source_content_type":"text/x-python","patch_set":10,"id":"da86d52c_e0148d45","line":1566,"updated":"2015-02-05 06:09:54.000000000","message":"Please start comments uppercase.","commit_id":"c9cf38c2c4f240cd92d2e5fdf67ef54ec6eb2c1b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e1855e36c74498efe40aaace155c8dd654a9c3ac","unresolved":false,"context_lines":[{"line_number":1563,"context_line":"            self._get_tiering_info(conn, storageSystemInstanceName,"},{"line_number":1564,"context_line":"                                   fastPolicyName))"},{"line_number":1565,"context_line":"        if numVolInMaskingView \u003d\u003d 1:"},{"line_number":1566,"context_line":"            # last volume in the storage group"},{"line_number":1567,"context_line":"            self._last_volume_delete_masking_view("},{"line_number":1568,"context_line":"                conn, storageGroupInstanceName)"},{"line_number":1569,"context_line":"            self._get_and_remove_rule_association("}],"source_content_type":"text/x-python","patch_set":10,"id":"da86d52c_deb83c2c","line":1566,"in_reply_to":"da86d52c_e0148d45","updated":"2015-02-05 14:27:12.000000000","message":"Sure.","commit_id":"c9cf38c2c4f240cd92d2e5fdf67ef54ec6eb2c1b"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"074036a82da8c5b9367c02f3bd177706d24678c6","unresolved":false,"context_lines":[{"line_number":1590,"context_line":"                    conn, controllerConfigService, fastPolicyName,"},{"line_number":1591,"context_line":"                    volumeInstance, volumeName)"},{"line_number":1592,"context_line":"        else:"},{"line_number":1593,"context_line":"            # not the last volume so remove it from storage group in"},{"line_number":1594,"context_line":"            # the masking view"},{"line_number":1595,"context_line":"            LOG.debug(\"start: number of volumes in masking storage group: \""},{"line_number":1596,"context_line":"                      \"%(numVol)d\", {\u0027numVol\u0027: len(volumeInstanceNames)})"}],"source_content_type":"text/x-python","patch_set":10,"id":"da86d52c_201b0574","line":1593,"updated":"2015-02-05 06:09:54.000000000","message":"Make starting upper since updating comment.","commit_id":"c9cf38c2c4f240cd92d2e5fdf67ef54ec6eb2c1b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e1855e36c74498efe40aaace155c8dd654a9c3ac","unresolved":false,"context_lines":[{"line_number":1590,"context_line":"                    conn, controllerConfigService, fastPolicyName,"},{"line_number":1591,"context_line":"                    volumeInstance, volumeName)"},{"line_number":1592,"context_line":"        else:"},{"line_number":1593,"context_line":"            # not the last volume so remove it from storage group in"},{"line_number":1594,"context_line":"            # the masking view"},{"line_number":1595,"context_line":"            LOG.debug(\"start: number of volumes in masking storage group: \""},{"line_number":1596,"context_line":"                      \"%(numVol)d\", {\u0027numVol\u0027: len(volumeInstanceNames)})"}],"source_content_type":"text/x-python","patch_set":10,"id":"da86d52c_9e9964c6","line":1593,"in_reply_to":"da86d52c_201b0574","updated":"2015-02-05 14:27:12.000000000","message":"Ok","commit_id":"c9cf38c2c4f240cd92d2e5fdf67ef54ec6eb2c1b"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"074036a82da8c5b9367c02f3bd177706d24678c6","unresolved":false,"context_lines":[{"line_number":1611,"context_line":"                conn, storageGroupInstanceName)"},{"line_number":1612,"context_line":"            LOG.debug("},{"line_number":1613,"context_line":"                \"end: number of volumes in masking storage group: %(numVol)d\","},{"line_number":1614,"context_line":"                {\u0027numVol\u0027: len(volumeInstanceNames)})"},{"line_number":1615,"context_line":""},{"line_number":1616,"context_line":"        return storageGroupInstanceName"},{"line_number":1617,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"da86d52c_0039a1d6","line":1614,"updated":"2015-02-05 06:09:54.000000000","message":"You could use numVolInMaskingView here instead of calculating length again.","commit_id":"c9cf38c2c4f240cd92d2e5fdf67ef54ec6eb2c1b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e1855e36c74498efe40aaace155c8dd654a9c3ac","unresolved":false,"context_lines":[{"line_number":1611,"context_line":"                conn, storageGroupInstanceName)"},{"line_number":1612,"context_line":"            LOG.debug("},{"line_number":1613,"context_line":"                \"end: number of volumes in masking storage group: %(numVol)d\","},{"line_number":1614,"context_line":"                {\u0027numVol\u0027: len(volumeInstanceNames)})"},{"line_number":1615,"context_line":""},{"line_number":1616,"context_line":"        return storageGroupInstanceName"},{"line_number":1617,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"da86d52c_3ef078fd","line":1614,"in_reply_to":"da86d52c_0039a1d6","updated":"2015-02-05 14:27:12.000000000","message":"You are right.","commit_id":"c9cf38c2c4f240cd92d2e5fdf67ef54ec6eb2c1b"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"074036a82da8c5b9367c02f3bd177706d24678c6","unresolved":false,"context_lines":[{"line_number":1761,"context_line":"        initiatorNames \u003d self._find_initiator_names(conn, connector)"},{"line_number":1762,"context_line":"        igInstanceNameFromConnector \u003d self._find_initiator_masking_group("},{"line_number":1763,"context_line":"            conn, controllerConfigService, initiatorNames)"},{"line_number":1764,"context_line":"        # a device can be shared by multi-SGs in a multi-host attach case"},{"line_number":1765,"context_line":"        storageGroupInstanceNames \u003d ("},{"line_number":1766,"context_line":"            self.get_associated_masking_groups_from_device("},{"line_number":1767,"context_line":"                conn, volumeInstanceName))"}],"source_content_type":"text/x-python","patch_set":10,"id":"da86d52c_807bd18a","line":1764,"updated":"2015-02-05 06:09:54.000000000","message":"Upper","commit_id":"c9cf38c2c4f240cd92d2e5fdf67ef54ec6eb2c1b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e1855e36c74498efe40aaace155c8dd654a9c3ac","unresolved":false,"context_lines":[{"line_number":1761,"context_line":"        initiatorNames \u003d self._find_initiator_names(conn, connector)"},{"line_number":1762,"context_line":"        igInstanceNameFromConnector \u003d self._find_initiator_masking_group("},{"line_number":1763,"context_line":"            conn, controllerConfigService, initiatorNames)"},{"line_number":1764,"context_line":"        # a device can be shared by multi-SGs in a multi-host attach case"},{"line_number":1765,"context_line":"        storageGroupInstanceNames \u003d ("},{"line_number":1766,"context_line":"            self.get_associated_masking_groups_from_device("},{"line_number":1767,"context_line":"                conn, volumeInstanceName))"}],"source_content_type":"text/x-python","patch_set":10,"id":"da86d52c_fee1802a","line":1764,"in_reply_to":"da86d52c_807bd18a","updated":"2015-02-05 14:27:12.000000000","message":"Sure.","commit_id":"c9cf38c2c4f240cd92d2e5fdf67ef54ec6eb2c1b"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"074036a82da8c5b9367c02f3bd177706d24678c6","unresolved":false,"context_lines":[{"line_number":1770,"context_line":"                  {\u0027volumeName\u0027: volumeName,"},{"line_number":1771,"context_line":"                   \u0027storageGroups\u0027: storageGroupInstanceNames})"},{"line_number":1772,"context_line":"        if storageGroupInstanceNames:  # not empty"},{"line_number":1773,"context_line":"            # get THE SG by IGs"},{"line_number":1774,"context_line":"            for sgInstanceName in storageGroupInstanceNames:"},{"line_number":1775,"context_line":"                # get maskingview from storage group"},{"line_number":1776,"context_line":"                mvInstanceName \u003d self.get_masking_view_from_storage_group("}],"source_content_type":"text/x-python","patch_set":10,"id":"da86d52c_0067e1e9","line":1773,"updated":"2015-02-05 06:09:54.000000000","message":"Fix multiple casing issues.","commit_id":"c9cf38c2c4f240cd92d2e5fdf67ef54ec6eb2c1b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e1855e36c74498efe40aaace155c8dd654a9c3ac","unresolved":false,"context_lines":[{"line_number":1770,"context_line":"                  {\u0027volumeName\u0027: volumeName,"},{"line_number":1771,"context_line":"                   \u0027storageGroups\u0027: storageGroupInstanceNames})"},{"line_number":1772,"context_line":"        if storageGroupInstanceNames:  # not empty"},{"line_number":1773,"context_line":"            # get THE SG by IGs"},{"line_number":1774,"context_line":"            for sgInstanceName in storageGroupInstanceNames:"},{"line_number":1775,"context_line":"                # get maskingview from storage group"},{"line_number":1776,"context_line":"                mvInstanceName \u003d self.get_masking_view_from_storage_group("}],"source_content_type":"text/x-python","patch_set":10,"id":"da86d52c_9ec7a495","line":1773,"in_reply_to":"da86d52c_0067e1e9","updated":"2015-02-05 14:27:12.000000000","message":"Sure.","commit_id":"c9cf38c2c4f240cd92d2e5fdf67ef54ec6eb2c1b"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"074036a82da8c5b9367c02f3bd177706d24678c6","unresolved":false,"context_lines":[{"line_number":1772,"context_line":"        if storageGroupInstanceNames:  # not empty"},{"line_number":1773,"context_line":"            # get THE SG by IGs"},{"line_number":1774,"context_line":"            for sgInstanceName in storageGroupInstanceNames:"},{"line_number":1775,"context_line":"                # get maskingview from storage group"},{"line_number":1776,"context_line":"                mvInstanceName \u003d self.get_masking_view_from_storage_group("},{"line_number":1777,"context_line":"                    conn, sgInstanceName)"},{"line_number":1778,"context_line":"                LOG.debug(\"Found masking view associated with SG \""}],"source_content_type":"text/x-python","patch_set":10,"id":"da86d52c_206065ce","line":1775,"updated":"2015-02-05 06:09:54.000000000","message":"Upper","commit_id":"c9cf38c2c4f240cd92d2e5fdf67ef54ec6eb2c1b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e1855e36c74498efe40aaace155c8dd654a9c3ac","unresolved":false,"context_lines":[{"line_number":1772,"context_line":"        if storageGroupInstanceNames:  # not empty"},{"line_number":1773,"context_line":"            # get THE SG by IGs"},{"line_number":1774,"context_line":"            for sgInstanceName in storageGroupInstanceNames:"},{"line_number":1775,"context_line":"                # get maskingview from storage group"},{"line_number":1776,"context_line":"                mvInstanceName \u003d self.get_masking_view_from_storage_group("},{"line_number":1777,"context_line":"                    conn, sgInstanceName)"},{"line_number":1778,"context_line":"                LOG.debug(\"Found masking view associated with SG \""}],"source_content_type":"text/x-python","patch_set":10,"id":"da86d52c_feb8a012","line":1775,"in_reply_to":"da86d52c_206065ce","updated":"2015-02-05 14:27:12.000000000","message":"Sure.","commit_id":"c9cf38c2c4f240cd92d2e5fdf67ef54ec6eb2c1b"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"074036a82da8c5b9367c02f3bd177706d24678c6","unresolved":false,"context_lines":[{"line_number":1779,"context_line":"                          \"%(storageGroup)s: %(maskingview)s\","},{"line_number":1780,"context_line":"                          {\u0027maskingview\u0027: mvInstanceName,"},{"line_number":1781,"context_line":"                           \u0027storageGroup\u0027: sgInstanceName})"},{"line_number":1782,"context_line":"                # get initiator group from masking view"},{"line_number":1783,"context_line":"                igInstanceName \u003d ("},{"line_number":1784,"context_line":"                    self.get_initiator_group_from_masking_view("},{"line_number":1785,"context_line":"                        conn, mvInstanceName))"}],"source_content_type":"text/x-python","patch_set":10,"id":"da86d52c_405d5914","line":1782,"updated":"2015-02-05 06:09:54.000000000","message":"Upper","commit_id":"c9cf38c2c4f240cd92d2e5fdf67ef54ec6eb2c1b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e1855e36c74498efe40aaace155c8dd654a9c3ac","unresolved":false,"context_lines":[{"line_number":1779,"context_line":"                          \"%(storageGroup)s: %(maskingview)s\","},{"line_number":1780,"context_line":"                          {\u0027maskingview\u0027: mvInstanceName,"},{"line_number":1781,"context_line":"                           \u0027storageGroup\u0027: sgInstanceName})"},{"line_number":1782,"context_line":"                # get initiator group from masking view"},{"line_number":1783,"context_line":"                igInstanceName \u003d ("},{"line_number":1784,"context_line":"                    self.get_initiator_group_from_masking_view("},{"line_number":1785,"context_line":"                        conn, mvInstanceName))"}],"source_content_type":"text/x-python","patch_set":10,"id":"da86d52c_be49c832","line":1782,"in_reply_to":"da86d52c_405d5914","updated":"2015-02-05 14:27:12.000000000","message":"Sure","commit_id":"c9cf38c2c4f240cd92d2e5fdf67ef54ec6eb2c1b"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"074036a82da8c5b9367c02f3bd177706d24678c6","unresolved":false,"context_lines":[{"line_number":1799,"context_line":""},{"line_number":1800,"context_line":"    def _get_tiering_info("},{"line_number":1801,"context_line":"            self, conn, storageSystemInstanceName, fastPolicyName):"},{"line_number":1802,"context_line":"        \"\"\"get tiering specifics"},{"line_number":1803,"context_line":""},{"line_number":1804,"context_line":"        :param conn: the ecom connection"},{"line_number":1805,"context_line":"        :param storageSystemInstanceName: storage system instance name"}],"source_content_type":"text/x-python","patch_set":10,"id":"da86d52c_e0b00d45","line":1802,"updated":"2015-02-05 06:09:54.000000000","message":"Upper for the rest of these as well.","commit_id":"c9cf38c2c4f240cd92d2e5fdf67ef54ec6eb2c1b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e1855e36c74498efe40aaace155c8dd654a9c3ac","unresolved":false,"context_lines":[{"line_number":1799,"context_line":""},{"line_number":1800,"context_line":"    def _get_tiering_info("},{"line_number":1801,"context_line":"            self, conn, storageSystemInstanceName, fastPolicyName):"},{"line_number":1802,"context_line":"        \"\"\"get tiering specifics"},{"line_number":1803,"context_line":""},{"line_number":1804,"context_line":"        :param conn: the ecom connection"},{"line_number":1805,"context_line":"        :param storageSystemInstanceName: storage system instance name"}],"source_content_type":"text/x-python","patch_set":10,"id":"da86d52c_3e65d8b4","line":1802,"in_reply_to":"da86d52c_e0b00d45","updated":"2015-02-05 14:27:12.000000000","message":"Sure.  And add period too.","commit_id":"c9cf38c2c4f240cd92d2e5fdf67ef54ec6eb2c1b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e1855e36c74498efe40aaace155c8dd654a9c3ac","unresolved":false,"context_lines":[{"line_number":1825,"context_line":""},{"line_number":1826,"context_line":"    def _last_volume_delete_masking_view("},{"line_number":1827,"context_line":"            self, conn, storageGroupInstanceName):"},{"line_number":1828,"context_line":"        \"\"\"delete the masking view"},{"line_number":1829,"context_line":""},{"line_number":1830,"context_line":"        delete the masking view if the volume is the last one in the"},{"line_number":1831,"context_line":"        storage group"}],"source_content_type":"text/x-python","patch_set":10,"id":"da86d52c_fefd00b2","line":1828,"updated":"2015-02-05 14:27:12.000000000","message":"Upper first letter and period.","commit_id":"c9cf38c2c4f240cd92d2e5fdf67ef54ec6eb2c1b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e1855e36c74498efe40aaace155c8dd654a9c3ac","unresolved":false,"context_lines":[{"line_number":1828,"context_line":"        \"\"\"delete the masking view"},{"line_number":1829,"context_line":""},{"line_number":1830,"context_line":"        delete the masking view if the volume is the last one in the"},{"line_number":1831,"context_line":"        storage group"},{"line_number":1832,"context_line":""},{"line_number":1833,"context_line":"        :param conn: the ecom connection"},{"line_number":1834,"context_line":"        :param storageGroupInstanceName: storage group instance name"}],"source_content_type":"text/x-python","patch_set":10,"id":"da86d52c_9e232455","line":1831,"updated":"2015-02-05 14:27:12.000000000","message":"Here too.","commit_id":"c9cf38c2c4f240cd92d2e5fdf67ef54ec6eb2c1b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e1855e36c74498efe40aaace155c8dd654a9c3ac","unresolved":false,"context_lines":[{"line_number":1833,"context_line":"        :param conn: the ecom connection"},{"line_number":1834,"context_line":"        :param storageGroupInstanceName: storage group instance name"},{"line_number":1835,"context_line":"        \"\"\""},{"line_number":1836,"context_line":"        # delete masking view"},{"line_number":1837,"context_line":"        mvInstanceName \u003d self.get_masking_view_from_storage_group("},{"line_number":1838,"context_line":"            conn, storageGroupInstanceName)"},{"line_number":1839,"context_line":"        if mvInstanceName is not None:"}],"source_content_type":"text/x-python","patch_set":10,"id":"da86d52c_9eea44d9","line":1836,"updated":"2015-02-05 14:27:12.000000000","message":"Same","commit_id":"c9cf38c2c4f240cd92d2e5fdf67ef54ec6eb2c1b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e1855e36c74498efe40aaace155c8dd654a9c3ac","unresolved":false,"context_lines":[{"line_number":1847,"context_line":"            self, conn, fastPolicyName, isTieringPolicySupported,"},{"line_number":1848,"context_line":"            tierPolicyServiceInstanceName, storageSystemName,"},{"line_number":1849,"context_line":"            storageGroupInstanceName):"},{"line_number":1850,"context_line":"        \"\"\"remove the storage group from the policy rule"},{"line_number":1851,"context_line":""},{"line_number":1852,"context_line":"        :param conn: the ecom connection"},{"line_number":1853,"context_line":"        :param isTieringPolicySupported: boolean"}],"source_content_type":"text/x-python","patch_set":10,"id":"da86d52c_7eb750f5","line":1850,"updated":"2015-02-05 14:27:12.000000000","message":"Same","commit_id":"c9cf38c2c4f240cd92d2e5fdf67ef54ec6eb2c1b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e1855e36c74498efe40aaace155c8dd654a9c3ac","unresolved":false,"context_lines":[{"line_number":1855,"context_line":"        :param storageSystemName: storage system name"},{"line_number":1856,"context_line":"        :param storageGroupInstanceName: the storage group instance name"},{"line_number":1857,"context_line":"        \"\"\""},{"line_number":1858,"context_line":"        # disassociate storage group from FAST policy"},{"line_number":1859,"context_line":"        if fastPolicyName is not None and isTieringPolicySupported is True:"},{"line_number":1860,"context_line":"            tierPolicyInstanceName \u003d self.fast.get_tier_policy_by_name("},{"line_number":1861,"context_line":"                conn, storageSystemName, fastPolicyName)"}],"source_content_type":"text/x-python","patch_set":10,"id":"da86d52c_1e8c9435","line":1858,"updated":"2015-02-05 14:27:12.000000000","message":"Same","commit_id":"c9cf38c2c4f240cd92d2e5fdf67ef54ec6eb2c1b"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"68a09867180dcd7d258179e07af1ef02a3a24050","unresolved":false,"context_lines":[{"line_number":1510,"context_line":"        if len(maskingGroupInstanceNames) \u003e 0:"},{"line_number":1511,"context_line":"            return maskingGroupInstanceNames"},{"line_number":1512,"context_line":"        else:"},{"line_number":1513,"context_line":"            LOG.debug(\"Volume %(volumeName)s not in any storage group.\","},{"line_number":1514,"context_line":"                      {\u0027volumeName\u0027: volumeInstanceName})"},{"line_number":1515,"context_line":"            return None"},{"line_number":1516,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"da86d52c_72a4ca4a","line":1513,"updated":"2015-02-06 03:00:23.000000000","message":"Should this maybe be LOG.info or LOG.warning?","commit_id":"06bde83d4cea37ddc9fec03d7d51db40ae03f3c0"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"0ed7aff775e8d3f2c30e8660e957ed50e155329b","unresolved":false,"context_lines":[{"line_number":1510,"context_line":"        if len(maskingGroupInstanceNames) \u003e 0:"},{"line_number":1511,"context_line":"            return maskingGroupInstanceNames"},{"line_number":1512,"context_line":"        else:"},{"line_number":1513,"context_line":"            LOG.debug(\"Volume %(volumeName)s not in any storage group.\","},{"line_number":1514,"context_line":"                      {\u0027volumeName\u0027: volumeInstanceName})"},{"line_number":1515,"context_line":"            return None"},{"line_number":1516,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"da86d52c_e6747b69","line":1513,"in_reply_to":"da86d52c_72a4ca4a","updated":"2015-02-06 03:16:28.000000000","message":"Sure, will change to LOG.info.","commit_id":"06bde83d4cea37ddc9fec03d7d51db40ae03f3c0"},{"author":{"_account_id":12802,"name":"Carl Pecinovsky","email":"csky@us.ibm.com","username":"carl-sky"},"change_message_id":"0f4c49fe4ea51ba7bdcab730cf751155eb058b47","unresolved":false,"context_lines":[{"line_number":1707,"context_line":"                if igInstanceName \u003d\u003d igInstanceNameFromConnector:"},{"line_number":1708,"context_line":"                    foundMVInstanceName \u003d mvInstanceName"},{"line_number":1709,"context_line":"                    LOG.debug(\"Found the masking view associated with \""},{"line_number":1710,"context_line":"                              \"connector %(connector)s: %(maskingview)s\","},{"line_number":1711,"context_line":"                              {\u0027connector\u0027: initiatorNames,"},{"line_number":1712,"context_line":"                               \u0027maskingview\u0027: foundMVInstanceName})"},{"line_number":1713,"context_line":"                    break"}],"source_content_type":"text/x-python","patch_set":12,"id":"da86d52c_6baf507e","line":1710,"updated":"2015-02-06 22:50:47.000000000","message":"\"...associated with initiators %(initiators)s:...\" ??","commit_id":"06bde83d4cea37ddc9fec03d7d51db40ae03f3c0"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9afe96578a1959c3ceb70d1449c58f079e631e34","unresolved":false,"context_lines":[{"line_number":1707,"context_line":"                if igInstanceName \u003d\u003d igInstanceNameFromConnector:"},{"line_number":1708,"context_line":"                    foundMVInstanceName \u003d mvInstanceName"},{"line_number":1709,"context_line":"                    LOG.debug(\"Found the masking view associated with \""},{"line_number":1710,"context_line":"                              \"connector %(connector)s: %(maskingview)s\","},{"line_number":1711,"context_line":"                              {\u0027connector\u0027: initiatorNames,"},{"line_number":1712,"context_line":"                               \u0027maskingview\u0027: foundMVInstanceName})"},{"line_number":1713,"context_line":"                    break"}],"source_content_type":"text/x-python","patch_set":12,"id":"da86d52c_6ab578cf","line":1710,"in_reply_to":"da86d52c_6baf507e","updated":"2015-02-08 19:37:29.000000000","message":"Yes, that is more accurate.","commit_id":"06bde83d4cea37ddc9fec03d7d51db40ae03f3c0"},{"author":{"_account_id":12802,"name":"Carl Pecinovsky","email":"csky@us.ibm.com","username":"carl-sky"},"change_message_id":"0f4c49fe4ea51ba7bdcab730cf751155eb058b47","unresolved":false,"context_lines":[{"line_number":1743,"context_line":"            LOG.warning(_LW(\"No port group found in masking view %(mv)s\"),"},{"line_number":1744,"context_line":"                        {\u0027mv\u0027: maskingViewInstanceName})"},{"line_number":1745,"context_line":""},{"line_number":1746,"context_line":"    def _get_sg_associated_with_connector("},{"line_number":1747,"context_line":"            self, conn, controllerConfigService, volumeInstanceName,"},{"line_number":1748,"context_line":"            volumeName, connector):"},{"line_number":1749,"context_line":"        \"\"\"Get storage group associated with connector."}],"source_content_type":"text/x-python","patch_set":12,"id":"da86d52c_ab8788b5","line":1746,"updated":"2015-02-06 22:50:47.000000000","message":"Seems like this method could be consolidated with get_masking_view_by_volume(). But maybe there are reasons to have duplicate code?","commit_id":"06bde83d4cea37ddc9fec03d7d51db40ae03f3c0"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9afe96578a1959c3ceb70d1449c58f079e631e34","unresolved":false,"context_lines":[{"line_number":1743,"context_line":"            LOG.warning(_LW(\"No port group found in masking view %(mv)s\"),"},{"line_number":1744,"context_line":"                        {\u0027mv\u0027: maskingViewInstanceName})"},{"line_number":1745,"context_line":""},{"line_number":1746,"context_line":"    def _get_sg_associated_with_connector("},{"line_number":1747,"context_line":"            self, conn, controllerConfigService, volumeInstanceName,"},{"line_number":1748,"context_line":"            volumeName, connector):"},{"line_number":1749,"context_line":"        \"\"\"Get storage group associated with connector."}],"source_content_type":"text/x-python","patch_set":12,"id":"da86d52c_aa34d04a","line":1746,"in_reply_to":"da86d52c_ab8788b5","updated":"2015-02-08 19:37:29.000000000","message":"It does look at these two functions can be combined. We\u0027ll look more into it.","commit_id":"06bde83d4cea37ddc9fec03d7d51db40ae03f3c0"}]}
