)]}'
{"cinder/volume/drivers/emc/emc_vmax_common.py":[{"author":{"_account_id":12802,"name":"Carl Pecinovsky","email":"csky@us.ibm.com","username":"carl-sky"},"change_message_id":"d714387d71986880500804cbb61a3c1a5390b8d5","unresolved":false,"context_lines":[{"line_number":1432,"context_line":"                    try:"},{"line_number":1433,"context_line":"                        self.conn.GetInstance(hardwareIdInstance.path)"},{"line_number":1434,"context_line":"                    except Exception:"},{"line_number":1435,"context_line":"                        # hardwareId doesn\u0027t exist any more. Skip it."},{"line_number":1436,"context_line":"                        break"},{"line_number":1437,"context_line":"                    foundHardwareIdList.append(hardwareIdInstance.path)"},{"line_number":1438,"context_line":"                    break"}],"source_content_type":"text/x-python","patch_set":16,"id":"3a961159_8afafcba","line":1435,"updated":"2015-01-07 22:26:45.000000000","message":"Since we are specifically looking for this ID, I think this skip case should be logged.","commit_id":"687a43ea35c0af4f540b38621b77c809fd432e0a"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9129e154ff07623dffcd1fc4cf3d98b9b6ecdda7","unresolved":false,"context_lines":[{"line_number":1432,"context_line":"                    try:"},{"line_number":1433,"context_line":"                        self.conn.GetInstance(hardwareIdInstance.path)"},{"line_number":1434,"context_line":"                    except Exception:"},{"line_number":1435,"context_line":"                        # hardwareId doesn\u0027t exist any more. Skip it."},{"line_number":1436,"context_line":"                        break"},{"line_number":1437,"context_line":"                    foundHardwareIdList.append(hardwareIdInstance.path)"},{"line_number":1438,"context_line":"                    break"}],"source_content_type":"text/x-python","patch_set":16,"id":"3a961159_1bd2d5ff","line":1435,"in_reply_to":"3a961159_8afafcba","updated":"2015-01-08 05:10:59.000000000","message":"Sure. We can add a warning msg in the next patch.","commit_id":"687a43ea35c0af4f540b38621b77c809fd432e0a"}],"cinder/volume/drivers/emc/emc_vmax_masking.py":[{"author":{"_account_id":12802,"name":"Carl Pecinovsky","email":"csky@us.ibm.com","username":"carl-sky"},"change_message_id":"d714387d71986880500804cbb61a3c1a5390b8d5","unresolved":false,"context_lines":[{"line_number":275,"context_line":""},{"line_number":276,"context_line":"        storageSystemInstanceName \u003d self.utils.find_storageSystem("},{"line_number":277,"context_line":"            conn, storageSystemName)"},{"line_number":278,"context_line":"        maskingViewInstances \u003d conn.Associators("},{"line_number":279,"context_line":"            storageSystemInstanceName,"},{"line_number":280,"context_line":"            ResultClass\u003d\u0027EMC_LunMaskingSCSIProtocolController\u0027)"},{"line_number":281,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"3a961159_aaac1836","line":278,"updated":"2015-01-07 22:26:45.000000000","message":"What is the advantage of changing to get Associators in these various methods over enumerating the instances or names?","commit_id":"687a43ea35c0af4f540b38621b77c809fd432e0a"},{"author":{"_account_id":12802,"name":"Carl Pecinovsky","email":"csky@us.ibm.com","username":"carl-sky"},"change_message_id":"65d03548cacefdd43140053c2bfcaf9e143e7078","unresolved":false,"context_lines":[{"line_number":275,"context_line":""},{"line_number":276,"context_line":"        storageSystemInstanceName \u003d self.utils.find_storageSystem("},{"line_number":277,"context_line":"            conn, storageSystemName)"},{"line_number":278,"context_line":"        maskingViewInstances \u003d conn.Associators("},{"line_number":279,"context_line":"            storageSystemInstanceName,"},{"line_number":280,"context_line":"            ResultClass\u003d\u0027EMC_LunMaskingSCSIProtocolController\u0027)"},{"line_number":281,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"3a961159_b3c71397","line":278,"in_reply_to":"3a961159_7bc0394a","updated":"2015-01-08 19:44:57.000000000","message":"In our product environment, if the customer has more than one VMAX array, we require separate SMI-S providers for management (for performance reasons). That\u0027s why this change does not give us an advantage. Thanks for the explanation though.","commit_id":"687a43ea35c0af4f540b38621b77c809fd432e0a"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9129e154ff07623dffcd1fc4cf3d98b9b6ecdda7","unresolved":false,"context_lines":[{"line_number":275,"context_line":""},{"line_number":276,"context_line":"        storageSystemInstanceName \u003d self.utils.find_storageSystem("},{"line_number":277,"context_line":"            conn, storageSystemName)"},{"line_number":278,"context_line":"        maskingViewInstances \u003d conn.Associators("},{"line_number":279,"context_line":"            storageSystemInstanceName,"},{"line_number":280,"context_line":"            ResultClass\u003d\u0027EMC_LunMaskingSCSIProtocolController\u0027)"},{"line_number":281,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"3a961159_7bc0394a","line":278,"in_reply_to":"3a961159_aaac1836","updated":"2015-01-08 05:10:59.000000000","message":"Using Associators will narrow down the query results. If we enumerate over instance names, we\u0027ll get more results and then only continue if the storage system name is what we are looking for.","commit_id":"687a43ea35c0af4f540b38621b77c809fd432e0a"},{"author":{"_account_id":12802,"name":"Carl Pecinovsky","email":"csky@us.ibm.com","username":"carl-sky"},"change_message_id":"d714387d71986880500804cbb61a3c1a5390b8d5","unresolved":false,"context_lines":[{"line_number":279,"context_line":"            storageSystemInstanceName,"},{"line_number":280,"context_line":"            ResultClass\u003d\u0027EMC_LunMaskingSCSIProtocolController\u0027)"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"        for maskingViewInstance in maskingViewInstances:"},{"line_number":283,"context_line":"            if maskingViewName \u003d\u003d maskingViewInstance[\u0027ElementName\u0027]:"},{"line_number":284,"context_line":"                foundMaskingViewInstanceName \u003d maskingViewInstance.path"},{"line_number":285,"context_line":"                break"}],"source_content_type":"text/x-python","patch_set":16,"id":"3a961159_c51a356e","line":282,"updated":"2015-01-07 22:26:45.000000000","message":"General comment for these lookup cases where a pre-determined name is being sought: Why not write code to construct the CIM object path for the instance name being sought? Then attempt GetInstance() on it. If it fails, then you know it doesn\u0027t exist yet. Otherwise it seems a lot unnecessary memory and processing is being spent getting all the instances and checking for an ElementName match each time.","commit_id":"687a43ea35c0af4f540b38621b77c809fd432e0a"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9129e154ff07623dffcd1fc4cf3d98b9b6ecdda7","unresolved":false,"context_lines":[{"line_number":279,"context_line":"            storageSystemInstanceName,"},{"line_number":280,"context_line":"            ResultClass\u003d\u0027EMC_LunMaskingSCSIProtocolController\u0027)"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"        for maskingViewInstance in maskingViewInstances:"},{"line_number":283,"context_line":"            if maskingViewName \u003d\u003d maskingViewInstance[\u0027ElementName\u0027]:"},{"line_number":284,"context_line":"                foundMaskingViewInstanceName \u003d maskingViewInstance.path"},{"line_number":285,"context_line":"                break"}],"source_content_type":"text/x-python","patch_set":16,"id":"3a961159_db7f6d15","line":282,"in_reply_to":"3a961159_c51a356e","updated":"2015-01-08 05:10:59.000000000","message":"Sounds like a good idea, but I don\u0027t think we have enough information to construct an object path. I know \"ElementName\" is not part of the object path for a volume.  The same may apply to masking view.  We\u0027ll look into it to make sure.","commit_id":"687a43ea35c0af4f540b38621b77c809fd432e0a"},{"author":{"_account_id":12802,"name":"Carl Pecinovsky","email":"csky@us.ibm.com","username":"carl-sky"},"change_message_id":"65d03548cacefdd43140053c2bfcaf9e143e7078","unresolved":false,"context_lines":[{"line_number":279,"context_line":"            storageSystemInstanceName,"},{"line_number":280,"context_line":"            ResultClass\u003d\u0027EMC_LunMaskingSCSIProtocolController\u0027)"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"        for maskingViewInstance in maskingViewInstances:"},{"line_number":283,"context_line":"            if maskingViewName \u003d\u003d maskingViewInstance[\u0027ElementName\u0027]:"},{"line_number":284,"context_line":"                foundMaskingViewInstanceName \u003d maskingViewInstance.path"},{"line_number":285,"context_line":"                break"}],"source_content_type":"text/x-python","patch_set":16,"id":"3a961159_b338f3ee","line":282,"in_reply_to":"3a961159_db7f6d15","updated":"2015-01-08 19:44:57.000000000","message":"Here is an example for masking view:\n\n//\u003cecom-IP-addr\u003e/root/emc:Symm_LunMaskingView.CreationClassName\u003d\"Symm_LunMaskingView\",SystemName\u003d\"SYMMETRIX+000198701426\",DeviceID\u003d\"SYMMETRIX+000198701426+OS-GM_NPIV_NPIV_-bb034ed5-00000160-VP_FC10_R53-F-MV\",SystemCreationClassName\u003d\"Symm_StorageSystem\"\n\nThe DeviceID can be constructed from the ElementName string you have and the rest of the data is known. However, it\u0027s possible that future versions of ECOM may construct these instance names differently. But I think it is something to look into in a future update perhaps...because functionally, it is quite advantageous to be able to query for instances with a specific property value (like ElementName), or at least to be able to do as I suggest and manually generate the instance name/object path to lookup existence.","commit_id":"687a43ea35c0af4f540b38621b77c809fd432e0a"},{"author":{"_account_id":12802,"name":"Carl Pecinovsky","email":"csky@us.ibm.com","username":"carl-sky"},"change_message_id":"d714387d71986880500804cbb61a3c1a5390b8d5","unresolved":false,"context_lines":[{"line_number":499,"context_line":"            instance \u003d self.utils.get_existing_instance("},{"line_number":500,"context_line":"                conn, initiatorMaskingGroupInstanceName)"},{"line_number":501,"context_line":"            if instance is None:"},{"line_number":502,"context_line":"                break"},{"line_number":503,"context_line":""},{"line_number":504,"context_line":"            storageHardwareIdInstances \u003d ("},{"line_number":505,"context_line":"                conn.Associators(initiatorMaskingGroupInstanceName,"}],"source_content_type":"text/x-python","patch_set":16,"id":"3a961159_857d8d1e","line":502,"updated":"2015-01-07 22:26:45.000000000","message":"Should be \u0027continue\u0027 instead of break here.","commit_id":"687a43ea35c0af4f540b38621b77c809fd432e0a"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9129e154ff07623dffcd1fc4cf3d98b9b6ecdda7","unresolved":false,"context_lines":[{"line_number":499,"context_line":"            instance \u003d self.utils.get_existing_instance("},{"line_number":500,"context_line":"                conn, initiatorMaskingGroupInstanceName)"},{"line_number":501,"context_line":"            if instance is None:"},{"line_number":502,"context_line":"                break"},{"line_number":503,"context_line":""},{"line_number":504,"context_line":"            storageHardwareIdInstances \u003d ("},{"line_number":505,"context_line":"                conn.Associators(initiatorMaskingGroupInstanceName,"}],"source_content_type":"text/x-python","patch_set":16,"id":"3a961159_fb58a9fa","line":502,"in_reply_to":"3a961159_857d8d1e","updated":"2015-01-08 05:10:59.000000000","message":"You are right. Good catch. Will fix it in the next path.","commit_id":"687a43ea35c0af4f540b38621b77c809fd432e0a"},{"author":{"_account_id":12802,"name":"Carl Pecinovsky","email":"csky@us.ibm.com","username":"carl-sky"},"change_message_id":"d714387d71986880500804cbb61a3c1a5390b8d5","unresolved":false,"context_lines":[{"line_number":501,"context_line":"            if instance is None:"},{"line_number":502,"context_line":"                break"},{"line_number":503,"context_line":""},{"line_number":504,"context_line":"            storageHardwareIdInstances \u003d ("},{"line_number":505,"context_line":"                conn.Associators(initiatorMaskingGroupInstanceName,"},{"line_number":506,"context_line":"                                 ResultClass\u003d\u0027EMC_StorageHardwareID\u0027))"},{"line_number":507,"context_line":"            for storageHardwareIdInstance in storageHardwareIdInstances:"}],"source_content_type":"text/x-python","patch_set":16,"id":"3a961159_a591a953","line":504,"updated":"2015-01-07 22:26:45.000000000","message":"This structure greatly reduces the timing window, but doesn\u0027t close it since the conn.Associators() call below can fail if the instance has been deleted since we last checked the existence above. It seems simpler to put a try/except block covering an iteration of the entire loop and then have common exception processing that handles the Not Found case with a \u0027continue\u0027.","commit_id":"687a43ea35c0af4f540b38621b77c809fd432e0a"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9129e154ff07623dffcd1fc4cf3d98b9b6ecdda7","unresolved":false,"context_lines":[{"line_number":501,"context_line":"            if instance is None:"},{"line_number":502,"context_line":"                break"},{"line_number":503,"context_line":""},{"line_number":504,"context_line":"            storageHardwareIdInstances \u003d ("},{"line_number":505,"context_line":"                conn.Associators(initiatorMaskingGroupInstanceName,"},{"line_number":506,"context_line":"                                 ResultClass\u003d\u0027EMC_StorageHardwareID\u0027))"},{"line_number":507,"context_line":"            for storageHardwareIdInstance in storageHardwareIdInstances:"}],"source_content_type":"text/x-python","patch_set":16,"id":"3a961159_db0ccdee","line":504,"in_reply_to":"3a961159_a591a953","updated":"2015-01-08 05:10:59.000000000","message":"If initiatorMaskingGroupInstanceName doesn\u0027t exist any more, conn.Associators should return nothing.  So foundInitiatorMaskingGroupInstanceName shoud be None. This should work as expected. We\u0027ll double check on this.","commit_id":"687a43ea35c0af4f540b38621b77c809fd432e0a"},{"author":{"_account_id":12802,"name":"Carl Pecinovsky","email":"csky@us.ibm.com","username":"carl-sky"},"change_message_id":"65d03548cacefdd43140053c2bfcaf9e143e7078","unresolved":false,"context_lines":[{"line_number":538,"context_line":"                conn, storageSystemName))"},{"line_number":539,"context_line":""},{"line_number":540,"context_line":"        hardwareIdInstances \u003d ("},{"line_number":541,"context_line":"            self.utils.get_hardware_id_instances_from_array("},{"line_number":542,"context_line":"                conn, hardwareIdManagementService))"},{"line_number":543,"context_line":""},{"line_number":544,"context_line":"        for hardwareIdInstance in hardwareIdInstances:"}],"source_content_type":"text/x-python","patch_set":16,"id":"3a961159_4ee9e8e1","line":541,"updated":"2015-01-08 19:44:57.000000000","message":"I had several other comments that for some reason did not get saved. I believe one was a question on whether you have considered the memory implications of switching to getting all instances in these various methods rather than instance names? For example, if we have 8 NPIV initiator ports per VM and we have 2000 VMs being managed, that is 16,000 hw_id_instances you are retrieving here.","commit_id":"687a43ea35c0af4f540b38621b77c809fd432e0a"},{"author":{"_account_id":12802,"name":"Carl Pecinovsky","email":"csky@us.ibm.com","username":"carl-sky"},"change_message_id":"65d03548cacefdd43140053c2bfcaf9e143e7078","unresolved":false,"context_lines":[{"line_number":544,"context_line":"        for hardwareIdInstance in hardwareIdInstances:"},{"line_number":545,"context_line":"            storageId \u003d hardwareIdInstance[\u0027StorageID\u0027]"},{"line_number":546,"context_line":"            for initiatorName in initiatorNames:"},{"line_number":547,"context_line":"                LOG.debug(\"The storage Id is : %(storageId)s \""},{"line_number":548,"context_line":"                          % {\u0027storageId\u0027: storageId.lower()})"},{"line_number":549,"context_line":"                LOG.debug(\"The initiatorName is : %(initiatorName)s \""},{"line_number":550,"context_line":"                          % {\u0027initiatorName\u0027: initiatorName.lower()})"}],"source_content_type":"text/x-python","patch_set":16,"id":"3a961159_ce35d845","line":547,"updated":"2015-01-08 19:44:57.000000000","message":"These debug log messages should be removed. For the example I gave above of 16000 instances will result in 16000 * 8 (new initiators) * 2 (log messages) \u003d 256,000 log messages for one call to this method. And an attach request generates multiple calls. This is too much noise in the logs and makes DEBUG level collection unworkable.","commit_id":"687a43ea35c0af4f540b38621b77c809fd432e0a"},{"author":{"_account_id":12802,"name":"Carl Pecinovsky","email":"csky@us.ibm.com","username":"carl-sky"},"change_message_id":"65d03548cacefdd43140053c2bfcaf9e143e7078","unresolved":false,"context_lines":[{"line_number":551,"context_line":"                if storageId.lower() \u003d\u003d initiatorName.lower():"},{"line_number":552,"context_line":"                    # Check that the found hardwareId has been delete."},{"line_number":553,"context_line":"                    # If it has, we don\u0027t want to add it to the list."},{"line_number":554,"context_line":"                    instance \u003d self.utils.get_existing_instance("},{"line_number":555,"context_line":"                        conn, hardwareIdInstance.path)"},{"line_number":556,"context_line":"                    if instance is None:"},{"line_number":557,"context_line":"                        # hardwareId doesn\u0027t exist. Skip it."}],"source_content_type":"text/x-python","patch_set":16,"id":"3a961159_eed1b4fb","line":554,"updated":"2015-01-08 19:44:57.000000000","message":"I don\u0027t really see the benefit of checking for instance existence in each of these loops. The resource could go away after you do this check and before the instance gets used (like put into an initiator group) again. Subsequent code needs to handle the case where the instance is gone independently.","commit_id":"687a43ea35c0af4f540b38621b77c809fd432e0a"},{"author":{"_account_id":12802,"name":"Carl Pecinovsky","email":"csky@us.ibm.com","username":"carl-sky"},"change_message_id":"65d03548cacefdd43140053c2bfcaf9e143e7078","unresolved":false,"context_lines":[{"line_number":557,"context_line":"                        # hardwareId doesn\u0027t exist. Skip it."},{"line_number":558,"context_line":"                        break"},{"line_number":559,"context_line":""},{"line_number":560,"context_line":"                    foundHardwardIDsInstanceNames.append("},{"line_number":561,"context_line":"                        hardwareIdInstance.path)"},{"line_number":562,"context_line":"                    break"},{"line_number":563,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"3a961159_2e4bbcb1","line":560,"updated":"2015-01-08 19:44:57.000000000","message":"This whole nested for loop structure seems like it could be replaced with these two statements:\n\ni_wwpns_lower \u003d [i.lower() for i in initiatorNames]\nreturn [x.path for x in hardwareIdInstances if x[\u0027StorageID\u0027].lower() in i_wwpns_lower]","commit_id":"687a43ea35c0af4f540b38621b77c809fd432e0a"},{"author":{"_account_id":12802,"name":"Carl Pecinovsky","email":"csky@us.ibm.com","username":"carl-sky"},"change_message_id":"1140c26cc7b4e02cac5a51b6eff4e2ccd8eb921a","unresolved":false,"context_lines":[{"line_number":494,"context_line":""},{"line_number":495,"context_line":"        for initiatorMaskingGroupInstanceName in \\"},{"line_number":496,"context_line":"                initiatorMaskingGroupInstanceNames:"},{"line_number":497,"context_line":"            # Check that it hasn\u0027t been deleted. If it has, break out"},{"line_number":498,"context_line":"            # of the for loop."},{"line_number":499,"context_line":"            instance \u003d self.utils.get_existing_instance("},{"line_number":500,"context_line":"                conn, initiatorMaskingGroupInstanceName)"}],"source_content_type":"text/x-python","patch_set":17,"id":"3a961159_48a35900","line":497,"updated":"2015-01-12 16:27:00.000000000","message":"\"break out\" --\u003e \"continue to next one in loop\"","commit_id":"451f9a110238cd3297a120762e5987b20e050e47"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"455b7ac29292650ff86dd44c0a5589f4e085cd39","unresolved":false,"context_lines":[{"line_number":494,"context_line":""},{"line_number":495,"context_line":"        for initiatorMaskingGroupInstanceName in \\"},{"line_number":496,"context_line":"                initiatorMaskingGroupInstanceNames:"},{"line_number":497,"context_line":"            # Check that it hasn\u0027t been deleted. If it has, break out"},{"line_number":498,"context_line":"            # of the for loop."},{"line_number":499,"context_line":"            instance \u003d self.utils.get_existing_instance("},{"line_number":500,"context_line":"                conn, initiatorMaskingGroupInstanceName)"}],"source_content_type":"text/x-python","patch_set":17,"id":"3a961159_5d059913","line":497,"in_reply_to":"3a961159_48a35900","updated":"2015-01-14 05:30:17.000000000","message":"Done","commit_id":"451f9a110238cd3297a120762e5987b20e050e47"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"233c384a30bee926e335a1d644789125f555bd00","unresolved":false,"context_lines":[{"line_number":544,"context_line":"            storageId \u003d hardwareIdInstance[\u0027StorageID\u0027]"},{"line_number":545,"context_line":"            for initiatorName in initiatorNames:"},{"line_number":546,"context_line":"                if storageId.lower() \u003d\u003d initiatorName.lower():"},{"line_number":547,"context_line":"                    # Check that the found hardwareId has been delete."},{"line_number":548,"context_line":"                    # If it has, we don\u0027t want to add it to the list."},{"line_number":549,"context_line":"                    instance \u003d self.utils.get_existing_instance("},{"line_number":550,"context_line":"                        conn, hardwareIdInstance.path)"}],"source_content_type":"text/x-python","patch_set":19,"id":"3a961159_f4661028","line":547,"updated":"2015-01-15 21:51:28.000000000","message":"did you mean to say has been deleted here?","commit_id":"4c37a5654e1c62d591d11ffdadeb5eba31206d0f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"3bb5081a0c465bdb7832e64381f5bc73820b58f5","unresolved":false,"context_lines":[{"line_number":544,"context_line":"            storageId \u003d hardwareIdInstance[\u0027StorageID\u0027]"},{"line_number":545,"context_line":"            for initiatorName in initiatorNames:"},{"line_number":546,"context_line":"                if storageId.lower() \u003d\u003d initiatorName.lower():"},{"line_number":547,"context_line":"                    # Check that the found hardwareId has been delete."},{"line_number":548,"context_line":"                    # If it has, we don\u0027t want to add it to the list."},{"line_number":549,"context_line":"                    instance \u003d self.utils.get_existing_instance("},{"line_number":550,"context_line":"                        conn, hardwareIdInstance.path)"}],"source_content_type":"text/x-python","patch_set":19,"id":"3a961159_b759ea2a","line":547,"in_reply_to":"3a961159_f4661028","updated":"2015-01-16 04:17:37.000000000","message":"Done","commit_id":"4c37a5654e1c62d591d11ffdadeb5eba31206d0f"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"233c384a30bee926e335a1d644789125f555bd00","unresolved":false,"context_lines":[{"line_number":663,"context_line":"                         \u0027masking\u0027: foundStorageGroupInstanceName})"},{"line_number":664,"context_line":"        else:"},{"line_number":665,"context_line":"            LOG.warn(\"Unable to find Masking view: %(view)s .\""},{"line_number":666,"context_line":"                     % {\u0027view\u0027: maskingViewName})"},{"line_number":667,"context_line":""},{"line_number":668,"context_line":"        return foundStorageGroupInstanceName"},{"line_number":669,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"3a961159_f4ca9018","line":666,"updated":"2015-01-15 21:51:28.000000000","message":"Need _LW","commit_id":"4c37a5654e1c62d591d11ffdadeb5eba31206d0f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"3bb5081a0c465bdb7832e64381f5bc73820b58f5","unresolved":false,"context_lines":[{"line_number":663,"context_line":"                         \u0027masking\u0027: foundStorageGroupInstanceName})"},{"line_number":664,"context_line":"        else:"},{"line_number":665,"context_line":"            LOG.warn(\"Unable to find Masking view: %(view)s .\""},{"line_number":666,"context_line":"                     % {\u0027view\u0027: maskingViewName})"},{"line_number":667,"context_line":""},{"line_number":668,"context_line":"        return foundStorageGroupInstanceName"},{"line_number":669,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"3a961159_37a5fa02","line":666,"in_reply_to":"3a961159_f4ca9018","updated":"2015-01-16 04:17:37.000000000","message":"Good catch.  Done.","commit_id":"4c37a5654e1c62d591d11ffdadeb5eba31206d0f"}],"cinder/volume/drivers/emc/emc_vmax_utils.py":[{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"233c384a30bee926e335a1d644789125f555bd00","unresolved":false,"context_lines":[{"line_number":1293,"context_line":""},{"line_number":1294,"context_line":"        if foundStorageSystemInstanceName is None:"},{"line_number":1295,"context_line":"            exceptionMessage \u003d (_(\"StorageSystem %(array)s is not found.\")"},{"line_number":1296,"context_line":"                                % {\u0027array\u0027: arrayStr})"},{"line_number":1297,"context_line":"            LOG.error(exceptionMessage)"},{"line_number":1298,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dexceptionMessage)"},{"line_number":1299,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"3a961159_b48ac8b9","line":1296,"updated":"2015-01-15 21:51:28.000000000","message":"suggesting \u0027was not found\u0027 here.","commit_id":"4c37a5654e1c62d591d11ffdadeb5eba31206d0f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"3bb5081a0c465bdb7832e64381f5bc73820b58f5","unresolved":false,"context_lines":[{"line_number":1293,"context_line":""},{"line_number":1294,"context_line":"        if foundStorageSystemInstanceName is None:"},{"line_number":1295,"context_line":"            exceptionMessage \u003d (_(\"StorageSystem %(array)s is not found.\")"},{"line_number":1296,"context_line":"                                % {\u0027array\u0027: arrayStr})"},{"line_number":1297,"context_line":"            LOG.error(exceptionMessage)"},{"line_number":1298,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dexceptionMessage)"},{"line_number":1299,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"3a961159_77aa22d3","line":1296,"in_reply_to":"3a961159_b48ac8b9","updated":"2015-01-16 04:17:37.000000000","message":"Done","commit_id":"4c37a5654e1c62d591d11ffdadeb5eba31206d0f"}]}
