Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
/**
* A class that encapsulates the OmVolumeArgs Args.
*/
// not yet @Immutable, needs HDDS-13941
public final class OmVolumeArgs extends WithObjectID
implements CopyObject<OmVolumeArgs>, Auditable {
private static final Codec<OmVolumeArgs> CODEC = new DelegatedCodec<>(
Expand All @@ -47,13 +48,13 @@ public final class OmVolumeArgs extends WithObjectID
OmVolumeArgs.class);

private final String adminName;
private String ownerName;
private final String ownerName;
private final String volume;
private long creationTime;
private long modificationTime;
private long quotaInBytes;
private long quotaInNamespace;
private long usedNamespace;
private final long creationTime;
private final long modificationTime;
private final long quotaInBytes;
private final long quotaInNamespace;
private final long usedNamespace;
private final CopyOnWriteArrayList<OzoneAcl> acls;
/**
* Reference count on this Ozone volume.
Expand All @@ -67,7 +68,7 @@ public final class OmVolumeArgs extends WithObjectID
* Volumes created using CLI, ObjectStore API or upgraded from older OM DB
* will have reference count set to zero by default.
*/
private long refCount;
private final long refCount;

private OmVolumeArgs(Builder b) {
super(b);
Expand All @@ -92,42 +93,6 @@ public long getRefCount() {
return refCount;
}

/**
* Increase refCount by 1.
*/
public void incRefCount() {
this.refCount++;
}

/**
* Decrease refCount by 1.
*/
public void decRefCount() {
Preconditions.checkState(this.refCount > 0L,
"refCount should not become negative");
this.refCount--;
}

public void setOwnerName(String newOwner) {
this.ownerName = newOwner;
}

public void setQuotaInBytes(long quotaInBytes) {
this.quotaInBytes = quotaInBytes;
}

public void setQuotaInNamespace(long quotaInNamespace) {
this.quotaInNamespace = quotaInNamespace;
}

public void setCreationTime(long time) {
this.creationTime = time;
}

public void setModificationTime(long time) {
this.modificationTime = time;
}

public boolean addAcl(OzoneAcl ozoneAcl) {
return OzoneAclUtil.addAcl(acls, ozoneAcl);
}
Expand Down Expand Up @@ -210,13 +175,6 @@ public List<OzoneAcl> getDefaultAcls() {
return defaultAcls;
}

/**
* increase used bucket namespace by n.
*/
public void incrUsedNamespace(long n) {
usedNamespace += n;
}

/**
* Returns used bucket namespace.
* @return usedNamespace
Expand Down Expand Up @@ -368,6 +326,14 @@ public Builder setUsedNamespace(long namespaceUsage) {
return this;
}

/**
* increase used bucket namespace by n.
*/
public Builder incrUsedNamespace(long n) {
this.usedNamespace += n;
return this;
}

@Override
public Builder addMetadata(String key, String value) {
super.addMetadata(key, value);
Expand All @@ -386,18 +352,33 @@ public Builder addOzoneAcls(OzoneAcl acl) {
}

public Builder setRefCount(long refCount) {
Preconditions.checkState(refCount >= 0L,
"refCount should not be negative");
this.refCount = refCount;
return this;
}

/**
* Increase refCount by 1.
*/
public Builder incRefCount() {
refCount++;
return this;
}

/**
* Decrease refCount by 1.
*/
public Builder decRefCount() {
refCount--;
return this;
}

@Override
protected void validate() {
super.validate();
Preconditions.checkNotNull(adminName);
Preconditions.checkNotNull(ownerName);
Preconditions.checkNotNull(volume);
Preconditions.checkState(refCount >= 0L, "refCount should not be negative, but was: " + refCount);
}

@Override
Expand Down Expand Up @@ -461,19 +442,6 @@ public String getObjectInfo() {

@Override
public OmVolumeArgs copyObject() {
return new Builder(acls)
.setAdminName(adminName)
.setOwnerName(ownerName)
.setVolume(volume)
.setQuotaInBytes(quotaInBytes)
.setQuotaInNamespace(quotaInNamespace)
.setUsedNamespace(usedNamespace)
.addAllMetadata(getMetadata())
.setCreationTime(creationTime)
.setModificationTime(modificationTime)
.setObjectID(getObjectID())
.setUpdateID(getUpdateID())
.setRefCount(refCount)
.build();
return toBuilder().build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -264,7 +264,9 @@ public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager, Execut
checkQuotaInNamespace(omVolumeArgs, 1L);

// update used namespace for volume
omVolumeArgs.incrUsedNamespace(1L);
omVolumeArgs = omVolumeArgs.toBuilder()
.incrUsedNamespace(1L)
.build();

// Update table cache.
metadataManager.getVolumeTable().addCacheEntry(new CacheKey<>(volumeKey),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,9 @@ public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager, Execut
throw new OMException("Volume " + volumeName + " is not found",
OMException.ResultCodes.VOLUME_NOT_FOUND);
}
omVolumeArgs.incrUsedNamespace(-1L);
omVolumeArgs = omVolumeArgs.toBuilder()
.incrUsedNamespace(-1L)
.build();
// Update table cache.
omMetadataManager.getVolumeTable().addCacheEntry(
new CacheKey<>(volumeKey),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -275,15 +275,14 @@ public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager, Execut
PersistedUserVolumeInfo volumeList = null;
if (!skipVolumeCreation) {
// Create volume. TODO: dedup OMVolumeCreateRequest
omVolumeArgs = OmVolumeArgs.getFromProtobuf(volumeInfo);
omVolumeArgs.setQuotaInBytes(OzoneConsts.QUOTA_RESET);
omVolumeArgs.setQuotaInNamespace(OzoneConsts.QUOTA_RESET);
omVolumeArgs = omVolumeArgs.toBuilder()
omVolumeArgs = OmVolumeArgs.builderFromProtobuf(volumeInfo)
.setQuotaInBytes(OzoneConsts.QUOTA_RESET)
.setQuotaInNamespace(OzoneConsts.QUOTA_RESET)
.setObjectID(ozoneManager.getObjectIdFromTxId(transactionLogIndex))
.setUpdateID(transactionLogIndex)
.incRefCount()
.build();

omVolumeArgs.incRefCount();
// Remove this check when vol ref count is also used by other features
Preconditions.checkState(omVolumeArgs.getRefCount() == 1L,
"refCount should have been set to 1");
Expand All @@ -298,15 +297,17 @@ public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager, Execut
} else {
LOG.info("Skipped volume '{}' creation. "
+ "Will only increment volume refCount", volumeName);
omVolumeArgs = getVolumeInfo(omMetadataManager, volumeName);
omVolumeArgs = getVolumeInfo(omMetadataManager, volumeName)
.toBuilder()
.incRefCount()
.build();

omVolumeArgs.incRefCount();
// Remove this check when vol ref count is also used by other features
Preconditions.checkState(omVolumeArgs.getRefCount() == 1L,
"refCount should have been set to 1");

omMetadataManager.getVolumeTable().addCacheEntry(
new CacheKey<>(omMetadataManager.getVolumeKey(volumeName)),
new CacheKey<>(dbVolumeKey),
CacheValue.get(transactionLogIndex, omVolumeArgs));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -174,9 +174,10 @@ public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager, Execut
volumeName, null, null);
}

omVolumeArgs = getVolumeInfo(omMetadataManager, volumeName);
// Decrement volume ref count
omVolumeArgs.decRefCount();
omVolumeArgs = getVolumeInfo(omMetadataManager, volumeName)
.toBuilder()
.decRefCount()
.build();

// Update omVolumeArgs
final String dbVolumeKey = omMetadataManager.getVolumeKey(volumeName);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -163,19 +163,21 @@ private Map<String, OmVolumeArgs> updateOldVolumeQuotaSupport(
VOLUME_LOCK, omVolumeArgs.getVolume()));
boolean acquiredVolumeLock = getOmLockDetails().isLockAcquired();
try {
OmVolumeArgs.Builder builder = omVolumeArgs.toBuilder();
boolean isQuotaReset = false;
if (omVolumeArgs.getQuotaInBytes() == OLD_QUOTA_DEFAULT) {
omVolumeArgs.setQuotaInBytes(QUOTA_RESET);
builder.setQuotaInBytes(QUOTA_RESET);
isQuotaReset = true;
}
if (omVolumeArgs.getQuotaInNamespace() == OLD_QUOTA_DEFAULT) {
omVolumeArgs.setQuotaInNamespace(QUOTA_RESET);
builder.setQuotaInNamespace(QUOTA_RESET);
isQuotaReset = true;
}
if (isQuotaReset) {
OmVolumeArgs updated = builder.build();
metadataManager.getVolumeTable().addCacheEntry(
new CacheKey<>(entry.getKey()), CacheValue.get(transactionLogIndex, omVolumeArgs));
volUpdateMap.put(entry.getKey(), omVolumeArgs);
new CacheKey<>(entry.getKey()), CacheValue.get(transactionLogIndex, updated));
volUpdateMap.put(entry.getKey(), updated);
}
} finally {
if (acquiredVolumeLock) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -129,14 +129,13 @@ public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager, Execut
boolean acquiredUserLock = false;
Exception exception = null;
OMClientResponse omClientResponse = null;
OmVolumeArgs omVolumeArgs = null;
final OmVolumeArgs omVolumeArgs;
Map<String, String> auditMap = null;
try {
omVolumeArgs = OmVolumeArgs.getFromProtobuf(volumeInfo);
// when you create a volume, we set both Object ID and update ID.
// The Object ID will never change, but update
// ID will be set to transactionID each time we update the object.
omVolumeArgs = omVolumeArgs.toBuilder()
omVolumeArgs = OmVolumeArgs.builderFromProtobuf(volumeInfo)
.setObjectID(ozoneManager.getObjectIdFromTxId(transactionLogIndex))
.setUpdateID(transactionLogIndex)
.build();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -151,15 +151,12 @@ public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager, Execut
maxUserVolumeCount, transactionLogIndex);

// Set owner with new owner name.
omVolumeArgs.setOwnerName(newOwner);
omVolumeArgs = omVolumeArgs.toBuilder()
.setOwnerName(newOwner)
.setModificationTime(setVolumePropertyRequest.getModificationTime())
.setUpdateID(transactionLogIndex)
.build();

// Update modificationTime.
omVolumeArgs.setModificationTime(
setVolumePropertyRequest.getModificationTime());

// Update cache.
omMetadataManager.getUserTable().addCacheEntry(
new CacheKey<>(omMetadataManager.getUserKey(newOwner)),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -120,27 +120,22 @@ public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager, Execut
VOLUME_LOCK, volume));
acquireVolumeLock = getOmLockDetails().isLockAcquired();

OmVolumeArgs omVolumeArgs = getVolumeInfo(omMetadataManager, volume);
OmVolumeArgs.Builder builder = getVolumeInfo(omMetadataManager, volume).toBuilder();
if (checkQuotaBytesValid(omMetadataManager,
setVolumePropertyRequest.getQuotaInBytes(), volume)) {
omVolumeArgs.setQuotaInBytes(
builder.setQuotaInBytes(
setVolumePropertyRequest.getQuotaInBytes());
} else {
omVolumeArgs.setQuotaInBytes(omVolumeArgs.getQuotaInBytes());
}
if (checkQuotaNamespaceValid(omMetadataManager,
setVolumePropertyRequest.getQuotaInNamespace(), volume)) {
omVolumeArgs.setQuotaInNamespace(
builder.setQuotaInNamespace(
setVolumePropertyRequest.getQuotaInNamespace());
} else {
omVolumeArgs.setQuotaInNamespace(omVolumeArgs.getQuotaInNamespace());
}

omVolumeArgs = omVolumeArgs.toBuilder()
OmVolumeArgs omVolumeArgs = builder
.setModificationTime(setVolumePropertyRequest.getModificationTime())
.setUpdateID(transactionLogIndex)
.build();
omVolumeArgs.setModificationTime(
setVolumePropertyRequest.getModificationTime());

// update cache.
omMetadataManager.getVolumeTable().addCacheEntry(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,21 +94,17 @@ public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager, Execut

// Update only when
if (applyAcl) {
OmVolumeArgs.Builder builder = omVolumeArgs.toBuilder();
// Update the modification time when updating ACLs of Volume.
long modificationTime = omVolumeArgs.getModificationTime();
if (getOmRequest().getAddAclRequest().hasObj()) {
modificationTime = getOmRequest().getAddAclRequest()
.getModificationTime();
builder.setModificationTime(getOmRequest().getAddAclRequest().getModificationTime());
} else if (getOmRequest().getSetAclRequest().hasObj()) {
modificationTime = getOmRequest().getSetAclRequest()
.getModificationTime();
builder.setModificationTime(getOmRequest().getSetAclRequest().getModificationTime());
} else if (getOmRequest().getRemoveAclRequest().hasObj()) {
modificationTime = getOmRequest().getRemoveAclRequest()
.getModificationTime();
builder.setModificationTime(getOmRequest().getRemoveAclRequest().getModificationTime());
}
omVolumeArgs.setModificationTime(modificationTime);

omVolumeArgs = omVolumeArgs.toBuilder()
omVolumeArgs = builder
.setUpdateID(trxnLogIndex)
.build();

Expand Down