ViPR Controller: Provisioning storage to a non-discoverable host that is not in a cluster with preferredPools may fail with Null Pointer Exception

           

   Article Number:     528096                                   Article Version: 4     Article Type:    Break Fix 
   

 


Product:

 

ViPR Controller,ViPR Controller Controller 3.6 SP2

 

Issue:

 

 

The user is unable to provision storage to a non-discoverable host that is not in a cluster where the host has preferredPools.   
   
    The ViPR Controller GUI will show that the volume was successfully created, but shortly after that will show ERROR on the Create Export step.    
    ViPR Controller will roll back the creation and then show the following Null Pointer Exception (NPE):   
        

      [ERROR]    Wed Nov 14 20:17:47 UTC 2018    Create Export    (187 ms)       
                                                  Name: <host name>, HostName: <host name>, Volumes: [urn:storageos:Volume:b38c2ee4-112b-4601-97d2-759axxxxxx:vdc1], HLU: -1
   
   
      ...       
        java.lang.NullPointerException       
            at com.emc.storageos.api.service.impl.response.RestLinkFactory.newLink(RestLinkFactory.java:101)       
            at com.emc.storageos.api.mapper.DbObjectMapper.toLink(DbObjectMapper.java:99)       
            at com.emc.storageos.api.mapper.DbObjectMapper.toRelatedResource(DbObjectMapper.java:112)       
            at com.emc.storageos.api.mapper.HostMapper.map(HostMapper.java:182)       
            at com.emc.sa.service.vipr.block.tasks.CreateExport.isExportForHpuxOnVmax(CreateExport.java:142)       
            at com.emc.sa.service.vipr.block.tasks.CreateExport.setVolumeLun(CreateExport.java:107)       
            at com.emc.sa.service.vipr.block.tasks.CreateExport.doExecute(CreateExport.java:74)       
            at com.emc.sa.service.vipr.tasks.LongRunningTask.executeTask(LongRunningTask.java:31)       
            at com.emc.sa.service.vipr.tasks.LongRunningTask.executeTask(LongRunningTask.java:9)       
            at com.emc.sa.engine.ExecutionUtils.execute(ExecutionUtils.java:92)       
            at com.emc.sa.engine.ExecutionUtils.execute(ExecutionUtils.java:83)       
            at com.emc.sa.service.vipr.ViPRExecutionUtils.execute(ViPRExecutionUtils.java:41)       
            at com.emc.sa.service.vipr.block.BlockStorageUtils.createHostExport(BlockStorageUtils.java:520)       
            at com.emc.sa.service.vipr.block.CreateBlockVolumeForHostHelper.exportVolumes(CreateBlockVolumeForHostHelper.java:123)       
            at com.emc.sa.service.vipr.block.CreateBlockStorageForHostService.execute(CreateBlockStorageForHostService.java:55)       
            at com.emc.sa.engine.ExecutionEngineImpl.execute(ExecutionEngineImpl.java:191)       
            at com.emc.sa.engine.ExecutionEngineImpl.runService(ExecutionEngineImpl.java:129)       
            at com.emc.sa.engine.ExecutionEngineImpl.executeOrder(ExecutionEngineImpl.java:72)       
            at com.emc.sa.engine.ExecutionEngineDispatcher.processOrder(ExecutionEngineDispatcher.java:50)       
            at com.emc.sa.engine.ExecutionEngineDispatcher$Consumer.consumeItem(ExecutionEngineDispatcher.java:91)       
            at com.emc.sa.engine.ExecutionEngineDispatcher$Consumer.consumeItem(ExecutionEngineDispatcher.java:85)       
            at com.emc.storageos.coordinator.client.service.impl.DistributedQueueConsumer$1.run(DistributedQueueConsumer.java:80)       
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)       
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)       
            at java.lang.Thread.run(Thread.java:748)
   
        

          

                                                             

 

 

Cause:

 

 

During the export workflow the preferredPools attribute caused a Null Pointer Exception.                                                           

 

 

Change:

 

 

In this case, the user originally had the Windows host(discoverable) in a cluster.  As part of a reconfiguration, the user removed the volumes & cluster from ViPR, deleted the cluster export group and the cluster project but did not remove the hosts.   
    The user also changed the operating system to Other (non-discoverable).    
                                                           

 

 

Resolution:

 

 

   

      Workaround:     
     
      If the user is able to and there are no host references (Volumes, ExportMasks, ExportGroup, Tasks.. etc..), the host can be removed and re-added to ViPR Controller.  The preferredPools attribute will no longer be in the ViPR C database.     

   
         
  1.         In the ViPR Controller GUI, Physical>Hosts,  check the host to be removed then select Delete.     
  2.      
  3.         In the ViPR Controller GUI, Physical>Hosts,  click add and complete the Add Host form and save.     
  4.      
  5.         In the ViPR Controller GUI, Physical>Hosts,  click on the initiators for your host and add them and save.     
  6.      
  7.         Retry the Volume create order again     
  8.    
   

      OR     
     
      If there are references to the host in the VIPR DB or the customer is unable to remove the host, the values can be manually edited by support.  Support personnel must access your storage system to fix this issue. Contact the EMC Customer Support Center or your service representative for technical assistance and quote this article ID.     
      Include the ViPR Controller Order History text as well as logs covering the time frame when you contact EMC for technical assistance.     
     
      Note: Manual or automatic Array Affinity Discovery can repopulate the preferredPools attribute if it runs after making the above changes.     
     
      Resolution:     
     
      ViPR Controller Engineering is currently addressing this problem, but has not provided a fix in a released patch. This solution will be updated with the patch when it has been released.