protected BlockVirtualPoolRestRep doSave() { BlockVirtualPoolRestRep virtualPool; if (isNew()) { BlockVirtualPoolBuilder builder = apply(new BlockVirtualPoolBuilder()); virtualPool = VirtualPoolUtils.create(builder.getVirtualPool()); this.id = ResourceUtils.stringId(virtualPool); } else { BlockVirtualPoolRestRep oldVirtualPool = VirtualPoolUtils.getBlockVirtualPool(id); BlockVirtualPoolUpdateBuilder builder = apply(new BlockVirtualPoolUpdateBuilder(oldVirtualPool)); virtualPool = VirtualPoolUtils.update(id, builder.getVirtualPoolUpdate()); List<NamedRelatedResourceRep> matchingPools = VirtualPoolUtils.refreshMatchingPools(virtualPool); Logger.info( "Refreshed Block Virtual Pool '%s' matching pools: %d", virtualPool.getName(), matchingPools.size()); } virtualPool = saveStoragePools(virtualPool); return virtualPool; }
protected void doLoad(BlockVirtualPoolRestRep virtualPool) { loadCommon(virtualPool); minPaths = virtualPool.getMinPaths(); maxPaths = virtualPool.getMaxPaths(); initiatorPaths = virtualPool.getPathsPerInitiator(); driveType = virtualPool.getDriveType(); autoTierPolicy = virtualPool.getAutoTieringPolicyName(); expandable = virtualPool.getExpandable(); fastExpansion = virtualPool.getFastExpansion(); multiVolumeConsistency = virtualPool.getMultiVolumeConsistent(); thinPreAllocationPercent = virtualPool.getThinVolumePreAllocationPercentage(); uniqueAutoTierPolicyNames = virtualPool.getUniquePolicyNames(); raidLevels = defaultSet(virtualPool.getRaidLevels()); hostIOLimitBandwidth = virtualPool.getHostIOLimitBandwidth(); hostIOLimitIOPs = virtualPool.getHostIOLimitIOPs(); VirtualPoolHighAvailabilityParam highAvailabilityType = virtualPool.getHighAvailability(); if (highAvailabilityType != null && HighAvailability.isHighAvailability(highAvailabilityType.getType())) { highAvailability = highAvailabilityType.getType(); if (highAvailability.equals(HighAvailability.VPLEX_LOCAL)) { protectSourceSite = true; } enableAutoCrossConnExport = highAvailabilityType.getAutoCrossConnectExport(); if (highAvailabilityType.getHaVirtualArrayVirtualPool() != null) { haVirtualArray = asString(highAvailabilityType.getHaVirtualArrayVirtualPool().getVirtualArray()); haVirtualPool = asString(highAvailabilityType.getHaVirtualArrayVirtualPool().getVirtualPool()); Boolean activeProtectionAtHASite = Boolean.TRUE.equals( highAvailabilityType.getHaVirtualArrayVirtualPool().getActiveProtectionAtHASite()); Boolean metroPoint = Boolean.TRUE.equals(highAvailabilityType.getMetroPoint()); if (metroPoint) { protectSourceSite = true; protectHASite = true; if (activeProtectionAtHASite) { activeSite = HighAvailability.VPLEX_HA.toString(); } else { activeSite = HighAvailability.VPLEX_SOURCE.toString(); protectSourceSite = true; } } else { protectHASite = activeProtectionAtHASite; protectSourceSite = !protectHASite; } } else { protectSourceSite = true; } } else { protectSourceSite = true; } BlockVirtualPoolProtectionParam protection = virtualPool.getProtection(); if (protection != null) { if (protection.getSnapshots() != null) { maxSnapshots = protection.getSnapshots().getMaxSnapshots(); } if (protection.getContinuousCopies() != null) { maxContinuousCopies = protection.getContinuousCopies().getMaxMirrors(); continuousCopyVirtualPool = asString(protection.getContinuousCopies().getVpool()); } VirtualPoolProtectionRPParam recoverPoint = protection.getRecoverPoint(); if (recoverPoint != null) { remoteProtection = ProtectionSystemTypes.RECOVERPOINT; ProtectionSourcePolicy sourcePolicy = recoverPoint.getSourcePolicy(); if (sourcePolicy != null) { String journalSize = sourcePolicy.getJournalSize(); rpJournalSizeUnit = RPCopyForm.parseJournalSizeUnit(journalSize); rpJournalSize = StringUtils.defaultIfBlank( RPCopyForm.parseJournalSize(journalSize, rpJournalSizeUnit), RPCopyForm.JOURNAL_SIZE_MIN); rpRemoteCopyMode = sourcePolicy.getRemoteCopyMode(); rpRpoValue = sourcePolicy.getRpoValue(); rpRpoType = sourcePolicy.getRpoType(); if (protectHASite != null && protectSourceSite != null && protectHASite && protectSourceSite) { // Backend will take care of swapping // if(activeSite.equalsIgnoreCase(HighAvailability.VPLEX_SOURCE)){ sourceJournalVArray = asString(sourcePolicy.getJournalVarray()); sourceJournalVPool = asString(sourcePolicy.getJournalVpool()); haJournalVArray = asString(sourcePolicy.getStandbyJournalVarray()); haJournalVPool = asString(sourcePolicy.getStandbyJournalVpool()); } else { if (protectHASite != null && protectHASite) { haJournalVArray = asString(sourcePolicy.getJournalVarray()); haJournalVPool = asString(sourcePolicy.getJournalVpool()); } else if (protectSourceSite != null && protectSourceSite) { sourceJournalVArray = asString(sourcePolicy.getJournalVarray()); sourceJournalVPool = asString(sourcePolicy.getJournalVpool()); } } } List<RPCopyForm> rpCopyForms = Lists.newArrayList(); for (VirtualPoolProtectionVirtualArraySettingsParam copy : recoverPoint.getCopies()) { RPCopyForm rpCopy = new RPCopyForm(); rpCopy.load(copy); rpCopyForms.add(rpCopy); } rpCopies = rpCopyForms.toArray(new RPCopyForm[0]); rpCopiesJson = new Gson().toJson(rpCopies); } VirtualPoolRemoteMirrorProtectionParam srdf = protection.getRemoteCopies(); if (srdf != null) { remoteProtection = ProtectionSystemTypes.SRDF; List<SrdfCopyForm> copyForms = Lists.newArrayList(); for (VirtualPoolRemoteProtectionVirtualArraySettingsParam copy : srdf.getRemoteCopySettings()) { srdfCopyMode = copy.getRemoteCopyMode(); SrdfCopyForm srdfCopyForm = new SrdfCopyForm(); srdfCopyForm.load(copy); copyForms.add(srdfCopyForm); } srdfCopies = copyForms.toArray(new SrdfCopyForm[0]); Gson gson = new Gson(); srdfCopiesJson = gson.toJson(srdfCopies); } else { srdfCopiesJson = "[]"; } } }