@Override public void processResult(Operation operation, Object resultObj, Map<String, Object> keyMap) throws BaseCollectionException { EnumerateResponse<CIMInstance> volumeInstanceChunks = (EnumerateResponse<CIMInstance>) resultObj; WBEMClient client = SMICommunicationInterface.getCIMClient(keyMap); _dbClient = (DbClient) keyMap.get(Constants.dbClient); _updateVolumes = new ArrayList<Volume>(); _updateSnapShots = new ArrayList<BlockSnapshot>(); _updateMirrors = new ArrayList<BlockMirror>(); CloseableIterator<CIMInstance> volumeInstances = null; try { _metaVolumeViewPaths = (List<CIMObjectPath>) keyMap.get(Constants.META_VOLUMES_VIEWS); if (_metaVolumeViewPaths == null) { _metaVolumeViewPaths = new ArrayList<CIMObjectPath>(); keyMap.put(Constants.META_VOLUMES_VIEWS, _metaVolumeViewPaths); } // create empty place holder list for meta volume paths (cannot define this in xml) List<CIMObjectPath> metaVolumePaths = (List<CIMObjectPath>) keyMap.get(Constants.META_VOLUMES); if (metaVolumePaths == null) { keyMap.put(Constants.META_VOLUMES, new ArrayList<CIMObjectPath>()); } CIMObjectPath storagePoolPath = getObjectPathfromCIMArgument(_args); volumeInstances = volumeInstanceChunks.getResponses(); processVolumes(volumeInstances, keyMap); while (!volumeInstanceChunks.isEnd()) { _logger.info("Processing Next Volume Chunk of size {}", BATCH_SIZE); volumeInstanceChunks = client.getInstancesWithPath( storagePoolPath, volumeInstanceChunks.getContext(), new UnsignedInteger32(BATCH_SIZE)); processVolumes(volumeInstanceChunks.getResponses(), keyMap); } // if list empty, this method returns back immediately. // partition size might not be used in this context, as batch size < partition size. // TODO metering might need some extra work to push volumes in batches, hence not changing // this method // signature _partitionManager.updateInBatches( _updateVolumes, getPartitionSize(keyMap), _dbClient, VOLUME); _partitionManager.updateInBatches( _updateSnapShots, getPartitionSize(keyMap), _dbClient, BLOCK_SNAPSHOT); _partitionManager.updateInBatches( _updateMirrors, getPartitionSize(keyMap), _dbClient, BLOCK_MIRROR); } catch (Exception e) { _logger.error("Processing Volumes and Snapshots failed", e); } finally { _updateVolumes = null; _updateSnapShots = null; _updateMirrors = null; if (null != volumeInstances) { volumeInstances.close(); } } }
@Override public void processResult(Operation operation, Object resultObj, Map<String, Object> keyMap) throws BaseCollectionException { CloseableIterator<CIMInstance> volumeInstances = null; try { _dbClient = (DbClient) keyMap.get(Constants.dbClient); WBEMClient client = (WBEMClient) keyMap.get(Constants._cimClient); _unManagedVolumesUpdate = new ArrayList<UnManagedVolume>(); CIMObjectPath storagePoolPath = getObjectPathfromCIMArgument(_args); String poolNativeGuid = NativeGUIDGenerator.generateNativeGuidForPool(storagePoolPath); StoragePool pool = checkStoragePoolExistsInDB(poolNativeGuid, _dbClient); if (pool == null) { _logger.error( "Skipping unmanaged volume discovery of Access Sattes as the storage pool with path {} doesn't exist in ViPR", storagePoolPath.toString()); return; } EnumerateResponse<CIMInstance> volumeInstanceChunks = (EnumerateResponse<CIMInstance>) resultObj; volumeInstances = volumeInstanceChunks.getResponses(); processVolumes(volumeInstances, keyMap, operation); while (!volumeInstanceChunks.isEnd()) { _logger.debug("Processing Next Volume Chunk of size {}", BATCH_SIZE); volumeInstanceChunks = client.getInstancesWithPath( storagePoolPath, volumeInstanceChunks.getContext(), new UnsignedInteger32(BATCH_SIZE)); processVolumes(volumeInstanceChunks.getResponses(), keyMap, operation); } if (null != _unManagedVolumesUpdate && _unManagedVolumesUpdate.size() > 0) { _partitionManager.updateInBatches( _unManagedVolumesUpdate, getPartitionSize(keyMap), _dbClient, "UnManagedVolume"); } } catch (Exception e) { _logger.error("Discovering Access States of unManaged Volumes failed", e); } finally { volumeInstances.close(); } }
@Override public void processResult(Operation operation, Object resultObj, Map<String, Object> keyMap) throws BaseCollectionException { CloseableIterator<CIMInstance> volumeInstances = null; EnumerateResponse<CIMInstance> volumeInstanceChunks = null; CIMObjectPath storagePoolPath = null; WBEMClient client = null; try { _dbClient = (DbClient) keyMap.get(Constants.dbClient); client = (WBEMClient) keyMap.get(Constants._cimClient); _profile = (AccessProfile) keyMap.get(Constants.ACCESSPROFILE); Map<String, VolHostIOObject> exportedVolumes = (Map<String, VolHostIOObject>) keyMap.get(Constants.EXPORTED_VOLUMES); Set<String> existingVolumesInCG = (Set<String>) keyMap.get(Constants.VOLUMES_PART_OF_CG); @SuppressWarnings("unchecked") Map<String, RemoteMirrorObject> volumeToRAGroupMap = (Map<String, RemoteMirrorObject>) keyMap.get(Constants.UN_VOLUME_RAGROUP_MAP); @SuppressWarnings("unchecked") Map<String, LocalReplicaObject> volumeToLocalReplicaMap = (Map<String, LocalReplicaObject>) keyMap.get(Constants.UN_VOLUME_LOCAL_REPLICA_MAP); @SuppressWarnings("unchecked") Map<String, Set<String>> vmax2ThinPoolToBoundVolumesMap = (Map<String, Set<String>>) keyMap.get(Constants.VMAX2_THIN_POOL_TO_BOUND_VOLUMES); Set<String> boundVolumes = null; storagePoolPath = getObjectPathfromCIMArgument(_args); String poolNativeGuid = NativeGUIDGenerator.generateNativeGuidForPool(storagePoolPath); StoragePool pool = checkStoragePoolExistsInDB(poolNativeGuid, _dbClient); if (pool == null) { _logger.error( "Skipping unmanaged volume discovery as the storage pool with path {} doesn't exist in ViPR", storagePoolPath.toString()); return; } StorageSystem system = _dbClient.queryObject(StorageSystem.class, _profile.getSystemId()); _unManagedVolumesInsert = new ArrayList<UnManagedVolume>(); _unManagedVolumesUpdate = new ArrayList<UnManagedVolume>(); _unManagedExportMasksUpdate = new ArrayList<UnManagedExportMask>(); // get bound volumes list for VMAX2 Thin pools boundVolumes = vmax2ThinPoolToBoundVolumesMap.get(storagePoolPath.toString()); Set<String> poolSupportedSLONames = (Set<String>) keyMap.get(poolNativeGuid); _logger.debug("Pool Supporting SLO Names:{}", poolSupportedSLONames); _metaVolumeViewPaths = (List<CIMObjectPath>) keyMap.get(Constants.META_VOLUMES_VIEWS); if (_metaVolumeViewPaths == null) { _metaVolumeViewPaths = new ArrayList<CIMObjectPath>(); keyMap.put(Constants.META_VOLUMES_VIEWS, _metaVolumeViewPaths); } // create empty place holder list for meta volume paths (cannot // define this in xml) _metaVolumePaths = (List<CIMObjectPath>) keyMap.get(Constants.META_VOLUMES); if (_metaVolumePaths == null) { _metaVolumePaths = new ArrayList<CIMObjectPath>(); keyMap.put(Constants.META_VOLUMES, _metaVolumePaths); } _volumeToSpaceConsumedMap = (Map<String, String>) keyMap.get(Constants.VOLUME_SPACE_CONSUMED_MAP); // get VolumeInfo Object and inject Fast Policy Name. volumeInstanceChunks = (EnumerateResponse<CIMInstance>) resultObj; volumeInstances = volumeInstanceChunks.getResponses(); processVolumes( volumeInstances, keyMap, operation, pool, system, exportedVolumes, existingVolumesInCG, volumeToRAGroupMap, volumeToLocalReplicaMap, poolSupportedSLONames, boundVolumes); while (!volumeInstanceChunks.isEnd()) { _logger.info("Processing Next Volume Chunk of size {}", BATCH_SIZE); volumeInstanceChunks = client.getInstancesWithPath( storagePoolPath, volumeInstanceChunks.getContext(), new UnsignedInteger32(BATCH_SIZE)); processVolumes( volumeInstanceChunks.getResponses(), keyMap, operation, pool, system, exportedVolumes, existingVolumesInCG, volumeToRAGroupMap, volumeToLocalReplicaMap, poolSupportedSLONames, boundVolumes); } if (null != _unManagedVolumesUpdate && _unManagedVolumesUpdate.size() > 0) { _partitionManager.updateInBatches( _unManagedVolumesUpdate, getPartitionSize(keyMap), _dbClient, UNMANAGED_VOLUME); } if (null != _unManagedVolumesInsert && _unManagedVolumesInsert.size() > 0) { _partitionManager.insertInBatches( _unManagedVolumesInsert, getPartitionSize(keyMap), _dbClient, UNMANAGED_VOLUME); } if (null != _unManagedExportMasksUpdate && _unManagedExportMasksUpdate.size() > 0) { _partitionManager.updateInBatches( _unManagedExportMasksUpdate, getPartitionSize(keyMap), _dbClient, UNMANAGED_EXPORT_MASK); } performStorageUnManagedVolumeBookKeeping(pool.getId()); } catch (Exception e) { _logger.error("Processing Storage Volume Information failed :", e); } finally { _unManagedVolumesInsert = null; _unManagedVolumesUpdate = null; if (null != volumeInstances) { volumeInstances.close(); } if (null != volumeInstanceChunks) { try { client.closeEnumeration(storagePoolPath, volumeInstanceChunks.getContext()); } catch (Exception e) { } } } }