private BlockVirtualPoolUpdateBuilder apply(BlockVirtualPoolUpdateBuilder builder) { applyCommon(builder); builder.setSnapshots(defaultInt(maxSnapshots)); builder.setContinuousCopies(maxContinuousCopies, uri(continuousCopyVirtualPool)); // Only allow updating these fields if not locked if (!isLocked()) { builder.setMinPaths(defaultInt(minPaths, 1)); builder.setMaxPaths(defaultInt(maxPaths, 1)); builder.setPathsPerInitiator(defaultInt(initiatorPaths, 1)); builder.setAutoTieringPolicyName(autoTierPolicy); builder.setDriveType(driveType); builder.setExpandable(defaultBoolean(expandable)); builder.setFastExpansion(defaultBoolean(fastExpansion)); builder.setThinVolumePreAllocationPercentage(thinPreAllocationPercent); builder.setUniquePolicyNames(defaultBoolean(uniqueAutoTierPolicyNames)); builder.setMultiVolumeConsistency(defaultBoolean(multiVolumeConsistency)); builder.setRaidLevels(defaultSet(raidLevels)); builder.setHostIOLimitBandwidth(defaultInt(hostIOLimitBandwidth, 0)); builder.setHostIOLimitIOPs(defaultInt(hostIOLimitIOPs, 0)); if (ProtectionSystemTypes.isRecoverPoint(remoteProtection)) { builder.setRecoverPointJournalSize( RPCopyForm.formatJournalSize(rpJournalSize, rpJournalSizeUnit)); builder.setRecoverPointRemoteCopyMode(rpRemoteCopyMode); builder.setRecoverPointRpo(rpRpoValue, rpRpoType); Set<VirtualPoolProtectionVirtualArraySettingsParam> copies = Sets.newLinkedHashSet(); for (RPCopyForm rpCopy : rpCopies) { if (rpCopy != null && rpCopy.isEnabled()) { copies.add(rpCopy.write()); } } builder.setRecoverPointCopies(copies); builder.setJournalVarrayAndVpool(uri(sourceJournalVArray), uri(sourceJournalVPool)); } else { builder.disableRecoverPoint(); } if (ProtectionSystemTypes.isSRDF(remoteProtection)) { Set<VirtualPoolRemoteProtectionVirtualArraySettingsParam> copies = Sets.newHashSet(); for (SrdfCopyForm srdfCopyForm : srdfCopies) { if (srdfCopyForm != null && srdfCopyForm.isEnabled()) { copies.add(srdfCopyForm.write(srdfCopyMode)); } } builder.setRemoteCopies(copies); } else { builder.disableRemoteCopies(); } if (HighAvailability.isHighAvailability(highAvailability)) { boolean activeProtectionAtHASite = BooleanUtils.isTrue(protectHASite); boolean metroPoint = false; if (BooleanUtils.isTrue(protectSourceSite) && BooleanUtils.isTrue(protectHASite)) { metroPoint = true; activeProtectionAtHASite = StringUtils.equalsIgnoreCase(activeSite, HighAvailability.VPLEX_HA); builder.setJournalVarrayAndVpool(uri(sourceJournalVArray), uri(sourceJournalVPool)); builder.setStandByJournalVArrayVpool(uri(haJournalVArray), uri(haJournalVPool)); } else { if (activeProtectionAtHASite) { builder.setJournalVarrayAndVpool(uri(haJournalVArray), uri(haJournalVPool)); } else { builder.setJournalVarrayAndVpool(uri(sourceJournalVArray), uri(sourceJournalVPool)); } } builder.setHighAvailability( highAvailability, enableAutoCrossConnExport, uri(haVirtualArray), uri(haVirtualPool), activeProtectionAtHASite, metroPoint); } else { builder.disableHighAvailability(); } } return builder; }