Skip to content
Merged
Show file tree
Hide file tree
Changes from 11 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 @@ -119,6 +119,21 @@ public static void unregister() {
@Metric(about = "resolveBucketLink latency in listKeys")
private MutableRate listKeysResolveBucketLatencyNs;

@Metric(about = "deleteKeyFailure latency in nano seconds")
private MutableRate deleteKeyFailureLatencyNs;

@Metric(about = "deleteKeySuccess latency in nano seconds")
private MutableRate deleteKeySuccessLatencyNs;

@Metric(about = "resolveBucketLink latency in deleteKeys")
private MutableRate deleteKeysResolveBucketLatencyNs;

@Metric(about = "ACLs check latency in deleteKeys")
private MutableRate deleteKeysAclCheckLatencyNs;

@Metric(about = "resolveBucketLink and ACLs check latency in deleteKey")
private MutableRate deleteKeyResolveBucketAndAclCheckLatencyNs;

public void addLookupLatency(long latencyInNs) {
lookupLatencyNs.add(latencyInNs);
}
Expand Down Expand Up @@ -223,4 +238,24 @@ MutableRate getListKeysAclCheckLatencyNs() {
MutableRate getListKeysResolveBucketLatencyNs() {
return listKeysResolveBucketLatencyNs;
}

public void setDeleteKeyFailureLatencyNs(long latencyInNs) {
deleteKeyFailureLatencyNs.add(latencyInNs);
}

public void setDeleteKeySuccessLatencyNs(long latencyInNs) {
deleteKeySuccessLatencyNs.add(latencyInNs);
}

public void setDeleteKeysResolveBucketLatencyNs(long latencyInNs) {
deleteKeysResolveBucketLatencyNs.add(latencyInNs);
}

public void setDeleteKeysAclCheckLatencyNs(long latencyInNs) {
deleteKeysAclCheckLatencyNs.add(latencyInNs);
}

public void setDeleteKeyResolveBucketAndAclCheckLatencyNs(long latencyInNs) {
deleteKeyResolveBucketAndAclCheckLatencyNs.add(latencyInNs);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import java.nio.file.InvalidPathException;
import java.util.Map;

import org.apache.hadoop.ozone.om.OMPerformanceMetrics;
import org.apache.hadoop.hdds.utils.db.Table;
import org.apache.hadoop.ozone.OzoneConsts;
import org.apache.ratis.server.protocol.TermIndex;
Expand Down Expand Up @@ -78,6 +79,7 @@ public OMRequest preExecute(OzoneManager ozoneManager) throws IOException {
DeleteKeyRequest deleteKeyRequest = super.preExecute(ozoneManager)
.getDeleteKeyRequest();
Preconditions.checkNotNull(deleteKeyRequest);
OMPerformanceMetrics perfMetrics = ozoneManager.getPerfMetrics();

OzoneManagerProtocolProtos.KeyArgs keyArgs = deleteKeyRequest.getKeyArgs();
String keyPath = keyArgs.getKeyName();
Expand All @@ -89,7 +91,10 @@ public OMRequest preExecute(OzoneManager ozoneManager) throws IOException {
OzoneManagerProtocolProtos.KeyArgs.Builder newKeyArgs =
keyArgs.toBuilder().setModificationTime(Time.now()).setKeyName(keyPath);

long startNanosDeleteKeyResolveBucketAndCheckAclsLatency = Time.monotonicNowNanos();
KeyArgs resolvedArgs = resolveBucketAndCheckAcls(ozoneManager, newKeyArgs);
perfMetrics.setDeleteKeyResolveBucketAndAclCheckLatencyNs(
Time.monotonicNowNanos() - startNanosDeleteKeyResolveBucketAndCheckAclsLatency);
return getOmRequest().toBuilder()
.setDeleteKeyRequest(deleteKeyRequest.toBuilder()
.setKeyArgs(resolvedArgs))
Expand Down Expand Up @@ -117,7 +122,7 @@ public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager, TermIn

OMMetrics omMetrics = ozoneManager.getMetrics();
omMetrics.incNumKeyDeletes();

OMPerformanceMetrics perfMetrics = ozoneManager.getPerfMetrics();
AuditLogger auditLogger = ozoneManager.getAuditLogger();
OzoneManagerProtocolProtos.UserInfo userInfo = getOmRequest().getUserInfo();

Expand All @@ -128,7 +133,7 @@ public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager, TermIn
boolean acquiredLock = false;
OMClientResponse omClientResponse = null;
Result result = null;

long startNanos = Time.monotonicNowNanos();
try {
String objectKey =
omMetadataManager.getOzoneKey(volumeName, bucketName, keyName);
Expand Down Expand Up @@ -183,12 +188,16 @@ public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager, TermIn
omBucketInfo.copyObject(), dbOpenKey);

result = Result.SUCCESS;
long endNanosDeleteKeySuccessLatencyNs = Time.monotonicNowNanos();
perfMetrics.setDeleteKeySuccessLatencyNs(endNanosDeleteKeySuccessLatencyNs - startNanos);
} catch (IOException | InvalidPathException ex) {
result = Result.FAILURE;
exception = ex;
omClientResponse =
new OMKeyDeleteResponse(createErrorOMResponse(omResponse, exception),
getBucketLayout());
long endNanosDeleteKeyFailureLatencyNs = Time.monotonicNowNanos();
perfMetrics.setDeleteKeyFailureLatencyNs(endNanosDeleteKeyFailureLatencyNs - startNanos);
} finally {
if (acquiredLock) {
mergeOmLockDetails(omMetadataManager.getLock()
Expand All @@ -198,7 +207,6 @@ public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager, TermIn
omClientResponse.setOmLockDetails(getOmLockDetails());
}
}

// Performing audit logging outside of the lock.
auditLog(auditLogger,
buildAuditMessage(OMAction.DELETE_KEY, auditMap, exception, userInfo));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,11 @@
import org.apache.ratis.server.protocol.TermIndex;
import org.apache.hadoop.hdds.utils.db.cache.CacheKey;
import org.apache.hadoop.hdds.utils.db.cache.CacheValue;
import org.apache.hadoop.util.Time;
import org.apache.hadoop.ozone.audit.AuditLogger;
import org.apache.hadoop.ozone.om.OMMetadataManager;
import org.apache.hadoop.ozone.om.OMMetrics;
import org.apache.hadoop.ozone.om.OMPerformanceMetrics;
import org.apache.hadoop.ozone.om.OzoneManager;
import org.apache.hadoop.ozone.om.ResolvedBucket;
import org.apache.hadoop.ozone.om.exceptions.OMException;
Expand Down Expand Up @@ -98,6 +100,7 @@ public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager, TermIn

OMMetrics omMetrics = ozoneManager.getMetrics();
omMetrics.incNumKeyDeletes();
OMPerformanceMetrics perfMetrics = ozoneManager.getPerfMetrics();
String volumeName = deleteKeyArgs.getVolumeName();
String bucketName = deleteKeyArgs.getBucketName();
Map<String, String> auditMap = new LinkedHashMap<>();
Expand All @@ -123,13 +126,16 @@ public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager, TermIn
.setVolumeName(volumeName).setBucketName(bucketName);

boolean deleteStatus = true;
long startNanos = Time.monotonicNowNanos();
try {
long startNanosDeleteKeysResolveBucketLatency = Time.monotonicNowNanos();
ResolvedBucket bucket =
ozoneManager.resolveBucketLink(Pair.of(volumeName, bucketName), this);
perfMetrics.setDeleteKeysResolveBucketLatencyNs(
Time.monotonicNowNanos() - startNanosDeleteKeysResolveBucketLatency);
bucket.audit(auditMap);
volumeName = bucket.realVolume();
bucketName = bucket.realBucket();

mergeOmLockDetails(omMetadataManager.getLock()
.acquireWriteLock(BUCKET_LOCK, volumeName, bucketName));
acquiredLock = getOmLockDetails().isLockAcquired();
Expand All @@ -155,9 +161,11 @@ public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager, TermIn

try {
// check Acl
long startNanosDeleteKeysAclCheckLatency = Time.monotonicNowNanos();
checkKeyAcls(ozoneManager, volumeName, bucketName, keyName,
IAccessAuthorizer.ACLType.DELETE, OzoneObj.ResourceType.KEY,
volumeOwner);
perfMetrics.setDeleteKeysAclCheckLatencyNs(Time.monotonicNowNanos() - startNanosDeleteKeysAclCheckLatency);
OzoneFileStatus fileStatus = getOzoneKeyStatus(
ozoneManager, omMetadataManager, volumeName, bucketName, keyName);
addKeyToAppropriateList(omKeyInfoList, omKeyInfo, dirList,
Expand Down Expand Up @@ -188,7 +196,8 @@ public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager, TermIn
unDeletedKeys, deleteStatus, omBucketInfo, volumeId, dbOpenKeys);

result = Result.SUCCESS;

long endNanosDeleteKeySuccessLatencyNs = Time.monotonicNowNanos();
perfMetrics.setDeleteKeySuccessLatencyNs(endNanosDeleteKeySuccessLatencyNs - startNanos);
} catch (IOException | InvalidPathException ex) {
result = Result.FAILURE;
exception = ex;
Expand All @@ -206,7 +215,8 @@ public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager, TermIn
.setUnDeletedKeys(unDeletedKeys).build()).build();
omClientResponse =
new OMKeysDeleteResponse(omResponse.build(), getBucketLayout());

long endNanosDeleteKeyFailureLatencyNs = Time.monotonicNowNanos();
perfMetrics.setDeleteKeyFailureLatencyNs(endNanosDeleteKeyFailureLatencyNs - startNanos);
} finally {
if (acquiredLock) {
mergeOmLockDetails(omMetadataManager.getLock()
Expand All @@ -218,7 +228,6 @@ public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager, TermIn
}

addDeletedKeys(auditMap, deleteKeys, unDeletedKeys.getKeysList());

auditLog(auditLogger,
buildAuditMessage(DELETE_KEYS, auditMap, exception, userInfo));

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,7 @@ public class TestOMKeyRequest {
public void setup() throws Exception {
ozoneManager = mock(OzoneManager.class);
omMetrics = OMMetrics.create();
metrics = OMPerformanceMetrics.register();
OzoneConfiguration ozoneConfiguration = getOzoneConfiguration();
ozoneConfiguration.set(OMConfigKeys.OZONE_OM_DB_DIRS,
folder.toAbsolutePath().toString());
Expand All @@ -130,6 +131,7 @@ public void setup() throws Exception {
omMetadataManager = new OmMetadataManagerImpl(ozoneConfiguration,
ozoneManager);
when(ozoneManager.getMetrics()).thenReturn(omMetrics);
when(ozoneManager.getPerfMetrics()).thenReturn(metrics);
when(ozoneManager.getMetadataManager()).thenReturn(omMetadataManager);
when(ozoneManager.getConfiguration()).thenReturn(ozoneConfiguration);
OMLayoutVersionManager lvm = mock(OMLayoutVersionManager.class);
Expand Down