Skip to content
Open
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 @@ -22,9 +22,12 @@

import java.io.IOException;
import java.nio.file.InvalidPathException;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Objects;
import org.apache.hadoop.hdds.utils.db.cache.CacheKey;
import org.apache.hadoop.hdds.utils.db.cache.CacheValue;
import org.apache.hadoop.ozone.OzoneConsts;
import org.apache.hadoop.ozone.audit.OMAction;
import org.apache.hadoop.ozone.om.OMMetadataManager;
import org.apache.hadoop.ozone.om.OMMetrics;
Expand Down Expand Up @@ -57,6 +60,36 @@ public OMVolumeDeleteRequest(OMRequest omRequest) {
super(omRequest);
}

@Override
public OMRequest preExecute(OzoneManager ozoneManager) throws IOException {
super.preExecute(ozoneManager);
DeleteVolumeRequest deleteVolumeRequest =
getOmRequest().getDeleteVolumeRequest();
Objects.requireNonNull(deleteVolumeRequest);
String volume = deleteVolumeRequest.getVolumeName();

// ACL check during preExecute
if (ozoneManager.getAclsEnabled()) {
try {
checkAcls(ozoneManager, OzoneObj.ResourceType.VOLUME,
OzoneObj.StoreType.OZONE, IAccessAuthorizer.ACLType.DELETE, volume,
null, null);
} catch (IOException ex) {
// Ensure audit log captures preExecute failures
Map<String, String> auditMap = new LinkedHashMap<>();
auditMap.put(OzoneConsts.VOLUME, volume);
markForAudit(ozoneManager.getAuditLogger(),
buildAuditMessage(OMAction.DELETE_VOLUME, auditMap, ex,
getOmRequest().getUserInfo()));
throw ex;
}
}

return getOmRequest().toBuilder()
.setUserInfo(getUserIfNotExists(ozoneManager))
.build();
}

@Override
public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager, ExecutionContext context) {
final long transactionLogIndex = context.getIndex();
Expand All @@ -80,13 +113,6 @@ public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager, Execut
String owner = null;
OMClientResponse omClientResponse = null;
try {
// check Acl
if (ozoneManager.getAclsEnabled()) {
checkAcls(ozoneManager, OzoneObj.ResourceType.VOLUME,
OzoneObj.StoreType.OZONE, IAccessAuthorizer.ACLType.DELETE, volume,
null, null);
}

mergeOmLockDetails(omMetadataManager.getLock().acquireWriteLock(
VOLUME_LOCK, volume));
acquiredVolumeLock = getOmLockDetails().isLockAcquired();
Expand Down Expand Up @@ -169,6 +195,4 @@ public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager, Execut
}
return omClientResponse;
}

}

Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@

import java.io.IOException;
import java.nio.file.InvalidPathException;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Objects;
import org.apache.hadoop.hdds.utils.db.cache.CacheKey;
Expand Down Expand Up @@ -61,15 +62,39 @@ public OMVolumeSetOwnerRequest(OMRequest omRequest) {

@Override
public OMRequest preExecute(OzoneManager ozoneManager) throws IOException {
super.preExecute(ozoneManager);

long modificationTime = Time.now();
SetVolumePropertyRequest.Builder setPropertyRequestBuilder = getOmRequest()
.getSetVolumePropertyRequest().toBuilder()
.setModificationTime(modificationTime);

SetVolumePropertyRequest setVolumePropertyRequest =
getOmRequest().getSetVolumePropertyRequest();
String volume = setVolumePropertyRequest.getVolumeName();

// ACL check during preExecute
if (ozoneManager.getAclsEnabled()) {
try {
checkAcls(ozoneManager, OzoneObj.ResourceType.VOLUME,
OzoneObj.StoreType.OZONE, IAccessAuthorizer.ACLType.WRITE_ACL,
volume, null, null);
} catch (IOException ex) {
// Ensure audit log captures preExecute failures
Map<String, String> auditMap = new LinkedHashMap<>();
auditMap.put(OzoneConsts.VOLUME, volume);
auditMap.put(OzoneConsts.OWNER,
setVolumePropertyRequest.getOwnerName());
markForAudit(ozoneManager.getAuditLogger(),
buildAuditMessage(OMAction.SET_OWNER, auditMap, ex,
getOmRequest().getUserInfo()));
throw ex;
}
}

return getOmRequest().toBuilder()
.setSetVolumePropertyRequest(setPropertyRequestBuilder)
.setUserInfo(getUserInfo())
.setUserInfo(getUserIfNotExists(ozoneManager))
.build();
}

Expand Down Expand Up @@ -108,13 +133,6 @@ public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager, Execut
String oldOwner = null;
OMClientResponse omClientResponse = null;
try {
// check Acl
if (ozoneManager.getAclsEnabled()) {
checkAcls(ozoneManager, OzoneObj.ResourceType.VOLUME,
OzoneObj.StoreType.OZONE, IAccessAuthorizer.ACLType.WRITE_ACL,
volume, null, null);
}

long maxUserVolumeCount = ozoneManager.getMaxUserVolumeCount();
OzoneManagerStorageProtos.PersistedUserVolumeInfo oldOwnerVolumeList;
OzoneManagerStorageProtos.PersistedUserVolumeInfo newOwnerVolumeList;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@

import java.io.IOException;
import java.nio.file.InvalidPathException;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
Expand Down Expand Up @@ -63,15 +64,39 @@ public OMVolumeSetQuotaRequest(OMRequest omRequest) {

@Override
public OMRequest preExecute(OzoneManager ozoneManager) throws IOException {
super.preExecute(ozoneManager);

long modificationTime = Time.now();
SetVolumePropertyRequest.Builder setPropertyRequestBuilde = getOmRequest()
SetVolumePropertyRequest.Builder setPropertyRequestBuilder = getOmRequest()
.getSetVolumePropertyRequest().toBuilder()
.setModificationTime(modificationTime);

SetVolumePropertyRequest setVolumePropertyRequest =
getOmRequest().getSetVolumePropertyRequest();
String volume = setVolumePropertyRequest.getVolumeName();

// ACL check during preExecute
if (ozoneManager.getAclsEnabled()) {
try {
checkAcls(ozoneManager, OzoneObj.ResourceType.VOLUME,
OzoneObj.StoreType.OZONE, IAccessAuthorizer.ACLType.WRITE, volume,
null, null);
} catch (IOException ex) {
// Ensure audit log captures preExecute failures
Map<String, String> auditMap = new LinkedHashMap<>();
auditMap.put(OzoneConsts.VOLUME, volume);
auditMap.put(OzoneConsts.QUOTA_IN_BYTES,
String.valueOf(setVolumePropertyRequest.getQuotaInBytes()));
markForAudit(ozoneManager.getAuditLogger(),
buildAuditMessage(OMAction.SET_QUOTA, auditMap, ex,
getOmRequest().getUserInfo()));
throw ex;
}
}

return getOmRequest().toBuilder()
.setSetVolumePropertyRequest(setPropertyRequestBuilde)
.setUserInfo(getUserInfo())
.setSetVolumePropertyRequest(setPropertyRequestBuilder)
.setUserInfo(getUserIfNotExists(ozoneManager))
.build();
}

Expand Down Expand Up @@ -109,13 +134,6 @@ public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager, Execut
boolean acquireVolumeLock = false;
OMClientResponse omClientResponse = null;
try {
// check Acl
if (ozoneManager.getAclsEnabled()) {
checkAcls(ozoneManager, OzoneObj.ResourceType.VOLUME,
OzoneObj.StoreType.OZONE, IAccessAuthorizer.ACLType.WRITE, volume,
null, null);
}

mergeOmLockDetails(omMetadataManager.getLock().acquireWriteLock(
VOLUME_LOCK, volume));
acquireVolumeLock = getOmLockDetails().isLockAcquired();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,15 @@

import java.io.IOException;
import java.nio.file.InvalidPathException;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.apache.hadoop.hdds.utils.db.cache.CacheKey;
import org.apache.hadoop.hdds.utils.db.cache.CacheValue;
import org.apache.hadoop.ozone.OzoneAcl;
import org.apache.hadoop.ozone.OzoneConsts;
import org.apache.hadoop.ozone.audit.AuditLogger;
import org.apache.hadoop.ozone.audit.OMAction;
import org.apache.hadoop.ozone.om.OMMetadataManager;
import org.apache.hadoop.ozone.om.OMMetrics;
import org.apache.hadoop.ozone.om.OzoneManager;
Expand All @@ -53,6 +55,43 @@ public abstract class OMVolumeAclRequest extends OMVolumeRequest {
omVolumeAclOp = aclOp;
}

@Override
public OzoneManagerProtocolProtos.OMRequest preExecute(OzoneManager ozoneManager)
throws IOException {
OzoneManagerProtocolProtos.OMRequest omRequest = super.preExecute(ozoneManager);

// ACL check during preExecute
if (ozoneManager.getAclsEnabled()) {
String volume = getVolumeName();
try {
checkAcls(ozoneManager, OzoneObj.ResourceType.VOLUME,
OzoneObj.StoreType.OZONE, IAccessAuthorizer.ACLType.WRITE_ACL,
volume, null, null);
} catch (IOException ex) {
// Ensure audit log captures preExecute failures
Map<String, String> auditMap = new LinkedHashMap<>();
auditMap.put(OzoneConsts.VOLUME, volume);
List<OzoneAcl> acls = getAcls();
if (acls != null) {
auditMap.put(OzoneConsts.ACL, acls.toString());
}
// Determine which action based on request type
OMAction action = OMAction.SET_ACL;
if (omRequest.hasAddAclRequest()) {
action = OMAction.ADD_ACL;
} else if (omRequest.hasRemoveAclRequest()) {
action = OMAction.REMOVE_ACL;
}
markForAudit(ozoneManager.getAuditLogger(),
buildAuditMessage(action, auditMap, ex,
omRequest.getUserInfo()));
throw ex;
}
}

return omRequest;
}

@Override
public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager, ExecutionContext context) {
final long trxnLogIndex = context.getIndex();
Expand All @@ -71,12 +110,6 @@ public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager, Execut
boolean lockAcquired = false;
Result result;
try {
// check Acl
if (ozoneManager.getAclsEnabled()) {
checkAcls(ozoneManager, OzoneObj.ResourceType.VOLUME,
OzoneObj.StoreType.OZONE, IAccessAuthorizer.ACLType.WRITE_ACL,
volume, null, null);
}
mergeOmLockDetails(omMetadataManager.getLock().acquireWriteLock(
VOLUME_LOCK, volume));
lockAcquired = getOmLockDetails().isLockAcquired();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,14 +58,16 @@ public class OMVolumeAddAclRequest extends OMVolumeAclRequest {

@Override
public OMRequest preExecute(OzoneManager ozoneManager) throws IOException {
// Call parent preExecute to perform ACL check
OMRequest omRequest = super.preExecute(ozoneManager);

long modificationTime = Time.now();
OzoneManagerProtocolProtos.AddAclRequest.Builder addAclRequestBuilder =
getOmRequest().getAddAclRequest().toBuilder()
omRequest.getAddAclRequest().toBuilder()
.setModificationTime(modificationTime);

return getOmRequest().toBuilder()
return omRequest.toBuilder()
.setAddAclRequest(addAclRequestBuilder)
.setUserInfo(getUserInfo())
.build();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,14 +58,16 @@ public class OMVolumeRemoveAclRequest extends OMVolumeAclRequest {

@Override
public OMRequest preExecute(OzoneManager ozoneManager) throws IOException {
// Call parent preExecute to perform ACL check
OMRequest omRequest = super.preExecute(ozoneManager);

long modificationTime = Time.now();
OzoneManagerProtocolProtos.RemoveAclRequest.Builder removeAclRequestBuilder
= getOmRequest().getRemoveAclRequest().toBuilder()
= omRequest.getRemoveAclRequest().toBuilder()
.setModificationTime(modificationTime);

return getOmRequest().toBuilder()
return omRequest.toBuilder()
.setRemoveAclRequest(removeAclRequestBuilder)
.setUserInfo(getUserInfo())
.build();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,14 +57,16 @@ public class OMVolumeSetAclRequest extends OMVolumeAclRequest {

@Override
public OMRequest preExecute(OzoneManager ozoneManager) throws IOException {
// Call parent preExecute to perform ACL check
OMRequest omRequest = super.preExecute(ozoneManager);

long modificationTime = Time.now();
OzoneManagerProtocolProtos.SetAclRequest.Builder setAclRequestBuilder =
getOmRequest().getSetAclRequest().toBuilder()
omRequest.getSetAclRequest().toBuilder()
.setModificationTime(modificationTime);

return getOmRequest().toBuilder()
return omRequest.toBuilder()
.setSetAclRequest(setAclRequestBuilder)
.setUserInfo(getUserInfo())
.build();
}

Expand Down