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 @@ -126,6 +126,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;

@Metric(about = "readFromRockDb latency in listKeys")
private MutableRate listKeysReadFromRocksDbLatencyNs;

Expand Down Expand Up @@ -242,6 +257,26 @@ 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 MutableRate getDeleteKeyResolveBucketAndAclCheckLatencyNs() {
return deleteKeyResolveBucketAndAclCheckLatencyNs;
}

public void addListKeysReadFromRocksDbLatencyNs(long latencyInNs) {
listKeysReadFromRocksDbLatencyNs.add(latencyInNs);
}
Expand Down
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 @@ -60,6 +61,7 @@

import static org.apache.hadoop.ozone.om.exceptions.OMException.ResultCodes.KEY_NOT_FOUND;
import static org.apache.hadoop.ozone.om.lock.OzoneManagerLock.Resource.BUCKET_LOCK;
import static org.apache.hadoop.util.MetricUtil.captureLatencyNs;

/**
* Handles DeleteKey request.
Expand Down Expand Up @@ -98,8 +100,9 @@ public OMRequest preExecute(OzoneManager ozoneManager) throws IOException {

protected KeyArgs resolveBucketAndCheckAcls(OzoneManager ozoneManager,
KeyArgs.Builder newKeyArgs) throws IOException {
return resolveBucketAndCheckKeyAcls(newKeyArgs.build(), ozoneManager,
ACLType.DELETE);
return captureLatencyNs(
ozoneManager.getPerfMetrics().getDeleteKeyResolveBucketAndAclCheckLatencyNs(),
() -> resolveBucketAndCheckKeyAcls(newKeyArgs.build(), ozoneManager, ACLType.DELETE));
}

@Override
Expand All @@ -117,7 +120,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 +131,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 +186,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 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 @@ -101,6 +103,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 @@ -126,9 +129,12 @@ public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager, TermIn
.setVolumeName(volumeName).setBucketName(bucketName);

boolean deleteStatus = true;
long startNanos = Time.monotonicNowNanos();
try {
ResolvedBucket bucket =
ozoneManager.resolveBucketLink(Pair.of(volumeName, bucketName), this);
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();
Expand Down Expand Up @@ -159,9 +165,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 @@ -193,7 +201,8 @@ public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager, TermIn
unDeletedKeys, keyToError, 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 @@ -213,7 +222,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 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