/** * Process the mountList which are received from XMLAPI server. * * @param mountList : List of Mount objects. * @param keyMap : keyMap. */ private void processMountList(final List<Object> mountList, Map<String, Object> keyMap) throws VNXFilePluginException { _logger.info("Processing file system mount response...."); final DbClient dbClient = (DbClient) keyMap.get(VNXFileConstants.DBCLIENT); // step -1 get the filesystem capacity map < filesystemid, size> Map<String, Long> fsCapList = (HashMap<String, Long>) keyMap.get(VNXFileConstants.FILE_CAPACITY_MAP); Map<String, Map<String, Long>> snapCapFsMap = (HashMap<String, Map<String, Long>>) keyMap.get(VNXFileConstants.SNAP_CAPACITY_MAP); // step-2 get the snapshot checkpoint size for give filesystem and it is map of filesystem and // map <snapshot, checkpointsize>> AccessProfile profile = (AccessProfile) keyMap.get(Constants.ACCESSPROFILE); // get the storagesystem from db StorageSystem storageSystem = dbClient.queryObject(StorageSystem.class, profile.getSystemId()); List<String> fsList = null; Map<String, List<String>> fsMountvNASMap = new HashMap<String, List<String>>(); Map<String, List<String>> fsMountPhyNASMap = new HashMap<String, List<String>>(); // step -3 we will get filesystem on VDM or DM Iterator<Object> iterator = mountList.iterator(); if (iterator.hasNext()) { Status status = (Status) iterator.next(); if (status.getMaxSeverity() == Severity.OK) { // step -4 get the filesystem list for each mover or VDM in Map while (iterator.hasNext()) { Mount mount = (Mount) iterator.next(); if (mount.isMoverIdIsVdm() == true) { fsList = fsMountvNASMap.get(mount.getMover()); if (null == fsList) { fsList = new ArrayList<String>(); } fsList.add(mount.getFileSystem()); fsMountvNASMap.put(mount.getMover(), fsList); // get filesystem list for VDM or vNAS _logger.debug( "Filestem or Snapshot {} mounted on vdm {} ", mount.getFileSystem(), mount.getMover()); } else { fsList = fsMountPhyNASMap.get(mount.getMover()); if (null == fsList) { fsList = new ArrayList<String>(); } fsList.add(mount.getFileSystem()); fsMountPhyNASMap.put(mount.getMover(), fsList); // get filesystem list for DM or mover _logger.debug( "Filestem or Snapshot {} mounted on data mover {} ", mount.getFileSystem(), mount.getMover()); } } // Log the number of objects mounted on each data mover and virtual data mover!!! for (Entry<String, List<String>> eachVNas : fsMountvNASMap.entrySet()) { _logger.info( " Virtual data mover {} has Filestem or Snapshot mounts {} ", eachVNas.getKey(), eachVNas.getValue().size()); } for (Entry<String, List<String>> eachNas : fsMountPhyNASMap.entrySet()) { _logger.info( " Data mover {} has Filestem or Snapshot mounts {} ", eachNas.getKey(), eachNas.getValue().size()); } Map<String, Long> vdmCapacityMap = new HashMap<String, Long>(); Map<String, Long> dmCapacityMap = new HashMap<String, Long>(); vdmCapacityMap = computeMoverCapacity(fsMountvNASMap, fsCapList, snapCapFsMap); dmCapacityMap = computeMoverCapacity(fsMountPhyNASMap, fsCapList, snapCapFsMap); prepareDBMetrics( storageSystem, dbClient, fsMountPhyNASMap, dmCapacityMap, fsMountvNASMap, vdmCapacityMap); } else { throw new VNXFilePluginException( "Fault response received from XMLAPI Server.", VNXFilePluginException.ERRORCODE_INVALID_RESPONSE); } } }