This is an automated email from the ASF dual-hosted git repository.
sammichen pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozone.git
The following commit(s) were added to refs/heads/master by this push:
new 356071171f HDDS-8974. Introduce detailed lock information (#5020)
356071171f is described below
commit 356071171fffdc905f2a577fc85211668732710b
Author: Symious <[email protected]>
AuthorDate: Mon Nov 20 16:36:12 2023 +0800
HDDS-8974. Introduce detailed lock information (#5020)
---
.../hadoop/ozone/om/lock/IOzoneManagerLock.java | 14 +--
.../apache/hadoop/ozone/om/lock/OMLockDetails.java | 128 +++++++++++++++++++++
.../hadoop/ozone/om/lock/OmReadOnlyLock.java | 21 ++--
.../hadoop/ozone/om/lock/OzoneManagerLock.java | 64 +++++++++--
.../hadoop/fs/ozone/TestOzoneFileSystem.java | 28 ++++-
.../src/main/proto/OmClientProtocol.proto | 8 ++
.../org/apache/hadoop/ozone/om/OzoneManager.java | 19 +--
.../hadoop/ozone/om/SstFilteringService.java | 4 +-
.../apache/hadoop/ozone/om/VolumeManagerImpl.java | 3 +-
.../ozone/om/lock/OBSKeyPathLockStrategy.java | 43 +++----
.../hadoop/ozone/om/lock/OzoneLockStrategy.java | 12 +-
.../ozone/om/lock/RegularBucketLockStrategy.java | 12 +-
.../ozone/om/ratis/OzoneManagerStateMachine.java | 14 ++-
.../hadoop/ozone/om/request/OMClientRequest.java | 12 ++
.../om/request/bucket/OMBucketCreateRequest.java | 22 ++--
.../om/request/bucket/OMBucketDeleteRequest.java | 22 ++--
.../om/request/bucket/OMBucketSetOwnerRequest.java | 12 +-
.../request/bucket/OMBucketSetPropertyRequest.java | 12 +-
.../om/request/bucket/acl/OMBucketAclRequest.java | 13 ++-
.../om/request/file/OMDirectoryCreateRequest.java | 12 +-
.../file/OMDirectoryCreateRequestWithFSO.java | 13 ++-
.../ozone/om/request/file/OMFileCreateRequest.java | 12 +-
.../request/file/OMFileCreateRequestWithFSO.java | 12 +-
.../om/request/file/OMRecoverLeaseRequest.java | 15 ++-
.../om/request/key/OMAllocateBlockRequest.java | 13 ++-
.../request/key/OMAllocateBlockRequestWithFSO.java | 14 ++-
.../ozone/om/request/key/OMKeyCommitRequest.java | 14 ++-
.../om/request/key/OMKeyCommitRequestWithFSO.java | 13 ++-
.../ozone/om/request/key/OMKeyCreateRequest.java | 14 ++-
.../om/request/key/OMKeyCreateRequestWithFSO.java | 12 +-
.../ozone/om/request/key/OMKeyDeleteRequest.java | 12 +-
.../om/request/key/OMKeyDeleteRequestWithFSO.java | 12 +-
.../ozone/om/request/key/OMKeyRenameRequest.java | 12 +-
.../om/request/key/OMKeyRenameRequestWithFSO.java | 12 +-
.../hadoop/ozone/om/request/key/OMKeyRequest.java | 18 +--
.../ozone/om/request/key/OMKeySetTimesRequest.java | 14 ++-
.../request/key/OMKeySetTimesRequestWithFSO.java | 12 +-
.../ozone/om/request/key/OMKeysDeleteRequest.java | 12 +-
.../ozone/om/request/key/OMKeysRenameRequest.java | 14 ++-
.../om/request/key/OMOpenKeysDeleteRequest.java | 12 +-
.../ozone/om/request/key/acl/OMKeyAclRequest.java | 12 +-
.../om/request/key/acl/OMKeyAclRequestWithFSO.java | 12 +-
.../request/key/acl/prefix/OMPrefixAclRequest.java | 12 +-
.../S3ExpiredMultipartUploadsAbortRequest.java | 12 +-
.../S3InitiateMultipartUploadRequest.java | 14 ++-
.../S3InitiateMultipartUploadRequestWithFSO.java | 14 ++-
.../multipart/S3MultipartUploadAbortRequest.java | 14 ++-
.../S3MultipartUploadCommitPartRequest.java | 12 +-
.../S3MultipartUploadCompleteRequest.java | 12 +-
.../s3/tenant/OMTenantAssignAdminRequest.java | 12 +-
.../tenant/OMTenantAssignUserAccessIdRequest.java | 12 +-
.../request/s3/tenant/OMTenantCreateRequest.java | 20 +++-
.../request/s3/tenant/OMTenantDeleteRequest.java | 12 +-
.../s3/tenant/OMTenantRevokeAdminRequest.java | 12 +-
.../tenant/OMTenantRevokeUserAccessIdRequest.java | 14 ++-
.../request/snapshot/OMSnapshotCreateRequest.java | 23 ++--
.../request/snapshot/OMSnapshotDeleteRequest.java | 23 ++--
.../om/request/volume/OMVolumeCreateRequest.java | 19 ++-
.../om/request/volume/OMVolumeDeleteRequest.java | 19 ++-
.../om/request/volume/OMVolumeSetOwnerRequest.java | 11 +-
.../om/request/volume/OMVolumeSetQuotaRequest.java | 11 +-
.../om/request/volume/acl/OMVolumeAclRequest.java | 11 +-
.../hadoop/ozone/om/response/OMClientResponse.java | 11 ++
...OzoneManagerProtocolServerSideTranslatorPB.java | 25 +++-
64 files changed, 800 insertions(+), 286 deletions(-)
diff --git
a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/lock/IOzoneManagerLock.java
b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/lock/IOzoneManagerLock.java
index 3526d947be..d3f6634b29 100644
---
a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/lock/IOzoneManagerLock.java
+++
b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/lock/IOzoneManagerLock.java
@@ -24,26 +24,26 @@ import com.google.common.annotations.VisibleForTesting;
*/
public interface IOzoneManagerLock {
- boolean acquireReadLock(OzoneManagerLock.Resource resource,
- String... resources);
+ OMLockDetails acquireReadLock(OzoneManagerLock.Resource resource,
+ String... resources);
- boolean acquireWriteLock(OzoneManagerLock.Resource resource,
- String... resources);
+ OMLockDetails acquireWriteLock(OzoneManagerLock.Resource resource,
+ String... resources);
boolean acquireMultiUserLock(String firstUser, String secondUser);
void releaseMultiUserLock(String firstUser, String secondUser);
- void releaseWriteLock(OzoneManagerLock.Resource resource,
+ OMLockDetails releaseWriteLock(OzoneManagerLock.Resource resource,
String... resources);
- void releaseReadLock(OzoneManagerLock.Resource resource, String...
resources);
+ OMLockDetails releaseReadLock(OzoneManagerLock.Resource resource,
+ String... resources);
@VisibleForTesting
int getReadHoldCount(OzoneManagerLock.Resource resource,
String... resources);
-
@VisibleForTesting
int getWriteHoldCount(OzoneManagerLock.Resource resource,
String... resources);
diff --git
a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/lock/OMLockDetails.java
b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/lock/OMLockDetails.java
new file mode 100644
index 0000000000..d45ee732a5
--- /dev/null
+++
b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/lock/OMLockDetails.java
@@ -0,0 +1,128 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.hadoop.ozone.om.lock;
+
+import
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.OMLockDetailsProto;
+
+/**
+ * This class is for recording detailed consumed time on Locks.
+ */
+public class OMLockDetails {
+
+ public static final OMLockDetails EMPTY_DETAILS_LOCK_ACQUIRED =
+ new OMLockDetails(true);
+ public static final OMLockDetails EMPTY_DETAILS_LOCK_NOT_ACQUIRED =
+ new OMLockDetails(false);
+ private boolean lockAcquired;
+ private long waitLockNanos;
+ private long readLockNanos;
+ private long writeLockNanos;
+
+ public OMLockDetails() {
+ }
+
+ public OMLockDetails(boolean lockAcquired) {
+ this.lockAcquired = lockAcquired;
+ }
+
+
+ enum LockOpType {
+ WAIT,
+ READ,
+ WRITE
+ }
+
+ public void add(long timeNanos, LockOpType lockOpType) {
+ switch (lockOpType) {
+ case WAIT:
+ waitLockNanos += timeNanos;
+ break;
+ case READ:
+ readLockNanos += timeNanos;
+ break;
+ case WRITE:
+ writeLockNanos += timeNanos;
+ break;
+ default:
+ }
+ }
+
+ public void merge(OMLockDetails omLockDetails) {
+ lockAcquired = omLockDetails.isLockAcquired();
+ waitLockNanos += omLockDetails.getWaitLockNanos();
+ readLockNanos += omLockDetails.getReadLockNanos();
+ writeLockNanos += omLockDetails.getWriteLockNanos();
+ }
+
+ public long getWaitLockNanos() {
+ return waitLockNanos;
+ }
+
+ public void setWaitLockNanos(long waitLockNanos) {
+ this.waitLockNanos = waitLockNanos;
+ }
+
+ public long getReadLockNanos() {
+ return readLockNanos;
+ }
+
+ public void setReadLockNanos(long readLockNanos) {
+ this.readLockNanos = readLockNanos;
+ }
+
+ public long getWriteLockNanos() {
+ return writeLockNanos;
+ }
+
+ public void setWriteLockNanos(long writeLockNanos) {
+ this.writeLockNanos = writeLockNanos;
+ }
+
+ public boolean isLockAcquired() {
+ return lockAcquired;
+ }
+
+ public void setLockAcquired(boolean lockAcquired) {
+ this.lockAcquired = lockAcquired;
+ }
+
+ public OMLockDetailsProto.Builder toProtobufBuilder() {
+ return OMLockDetailsProto.newBuilder()
+ .setIsLockAcquired(isLockAcquired())
+ .setWaitLockNanos(getWaitLockNanos())
+ .setReadLockNanos(getReadLockNanos())
+ .setWriteLockNanos(getWriteLockNanos());
+ }
+
+ @Override
+ public String toString() {
+ return "OMLockDetails{" +
+ "lockAcquired=" + lockAcquired +
+ ", waitLockNanos=" + waitLockNanos +
+ ", readLockNanos=" + readLockNanos +
+ ", writeLockNanos=" + writeLockNanos +
+ '}';
+ }
+
+ public void clear() {
+ lockAcquired = false;
+ waitLockNanos = 0;
+ readLockNanos = 0;
+ writeLockNanos = 0;
+ }
+}
diff --git
a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/lock/OmReadOnlyLock.java
b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/lock/OmReadOnlyLock.java
index c46b494f52..2a1b4ecffe 100644
---
a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/lock/OmReadOnlyLock.java
+++
b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/lock/OmReadOnlyLock.java
@@ -19,6 +19,9 @@ package org.apache.hadoop.ozone.om.lock;
import org.apache.hadoop.ozone.om.lock.OzoneManagerLock.Resource;
+import static
org.apache.hadoop.ozone.om.lock.OMLockDetails.EMPTY_DETAILS_LOCK_ACQUIRED;
+import static
org.apache.hadoop.ozone.om.lock.OMLockDetails.EMPTY_DETAILS_LOCK_NOT_ACQUIRED;
+
/**
* Read only "lock" for snapshots
* Uses no lock. Always returns true when acquiring
@@ -27,13 +30,14 @@ import
org.apache.hadoop.ozone.om.lock.OzoneManagerLock.Resource;
public class OmReadOnlyLock implements IOzoneManagerLock {
@Override
- public boolean acquireReadLock(Resource resource, String... resources) {
- return true;
+ public OMLockDetails acquireReadLock(Resource resource, String... resources)
{
+ return EMPTY_DETAILS_LOCK_ACQUIRED;
}
@Override
- public boolean acquireWriteLock(Resource resource, String... resources) {
- return false;
+ public OMLockDetails acquireWriteLock(Resource resource,
+ String... resources) {
+ return EMPTY_DETAILS_LOCK_NOT_ACQUIRED;
}
@Override
@@ -47,13 +51,14 @@ public class OmReadOnlyLock implements IOzoneManagerLock {
}
@Override
- public void releaseWriteLock(Resource resource, String... resources) {
- // Intentionally empty
+ public OMLockDetails releaseWriteLock(Resource resource,
+ String... resources) {
+ return EMPTY_DETAILS_LOCK_NOT_ACQUIRED;
}
@Override
- public void releaseReadLock(Resource resource, String... resources) {
- // Intentionally empty
+ public OMLockDetails releaseReadLock(Resource resource, String... resources)
{
+ return EMPTY_DETAILS_LOCK_NOT_ACQUIRED;
}
@Override
diff --git
a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/lock/OzoneManagerLock.java
b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/lock/OzoneManagerLock.java
index 975a982842..aadb6c02c7 100644
---
a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/lock/OzoneManagerLock.java
+++
b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/lock/OzoneManagerLock.java
@@ -32,6 +32,8 @@ import java.util.concurrent.locks.ReentrantReadWriteLock;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.util.concurrent.Striped;
import org.apache.hadoop.hdds.utils.SimpleStriped;
+import org.apache.hadoop.ipc.ProcessingDetails.Timing;
+import org.apache.hadoop.ipc.Server;
import org.apache.hadoop.util.Time;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -96,6 +98,9 @@ public class OzoneManagerLock implements IOzoneManagerLock {
private final ThreadLocal<Short> lockSet = ThreadLocal.withInitial(
() -> Short.valueOf((short)0));
+ private ThreadLocal<OMLockDetails> omLockDetails =
+ ThreadLocal.withInitial(OMLockDetails::new);
+
/**
* Creates new OzoneManagerLock instance.
* @param conf Configuration object
@@ -145,7 +150,7 @@ public class OzoneManagerLock implements IOzoneManagerLock {
* be passed.
*/
@Override
- public boolean acquireReadLock(Resource resource, String... keys) {
+ public OMLockDetails acquireReadLock(Resource resource, String... keys) {
return acquireLock(resource, true, keys);
}
@@ -167,12 +172,13 @@ public class OzoneManagerLock implements
IOzoneManagerLock {
* be passed.
*/
@Override
- public boolean acquireWriteLock(Resource resource, String... keys) {
+ public OMLockDetails acquireWriteLock(Resource resource, String... keys) {
return acquireLock(resource, false, keys);
}
- private boolean acquireLock(Resource resource, boolean isReadLock,
+ private OMLockDetails acquireLock(Resource resource, boolean isReadLock,
String... keys) {
+ omLockDetails.get().clear();
if (!resource.canLock(lockSet.get())) {
String errorMessage = getErrorMessage(resource);
LOG.error(errorMessage);
@@ -191,7 +197,8 @@ public class OzoneManagerLock implements IOzoneManagerLock {
}
lockSet.set(resource.setLock(lockSet.get()));
- return true;
+ omLockDetails.get().setLockAcquired(true);
+ return omLockDetails.get();
}
private void updateReadLockMetrics(Resource resource,
@@ -208,6 +215,7 @@ public class OzoneManagerLock implements IOzoneManagerLock {
// Adds a snapshot to the metric readLockWaitingTimeMsStat.
omLockMetrics.setReadLockWaitingTimeMsStat(
TimeUnit.NANOSECONDS.toMillis(readLockWaitingTimeNanos));
+ updateProcessingDetails(Timing.LOCKWAIT, readLockWaitingTimeNanos);
resource.setStartReadHeldTimeNanos(Time.monotonicNowNanos());
}
@@ -228,6 +236,7 @@ public class OzoneManagerLock implements IOzoneManagerLock {
// Adds a snapshot to the metric writeLockWaitingTimeMsStat.
omLockMetrics.setWriteLockWaitingTimeMsStat(
TimeUnit.NANOSECONDS.toMillis(writeLockWaitingTimeNanos));
+ updateProcessingDetails(Timing.LOCKWAIT, writeLockWaitingTimeNanos);
resource.setStartWriteHeldTimeNanos(Time.monotonicNowNanos());
}
@@ -308,8 +317,8 @@ public class OzoneManagerLock implements IOzoneManagerLock {
* be passed.
*/
@Override
- public void releaseWriteLock(Resource resource, String... keys) {
- releaseLock(resource, false, keys);
+ public OMLockDetails releaseWriteLock(Resource resource, String... keys) {
+ return releaseLock(resource, false, keys);
}
/**
@@ -321,13 +330,13 @@ public class OzoneManagerLock implements
IOzoneManagerLock {
* be passed.
*/
@Override
- public void releaseReadLock(Resource resource, String... keys) {
- releaseLock(resource, true, keys);
+ public OMLockDetails releaseReadLock(Resource resource, String... keys) {
+ return releaseLock(resource, true, keys);
}
- private void releaseLock(Resource resource, boolean isReadLock,
+ private OMLockDetails releaseLock(Resource resource, boolean isReadLock,
String... keys) {
-
+ omLockDetails.get().clear();
ReentrantReadWriteLock lock = getLock(resource, keys);
if (isReadLock) {
lock.readLock().unlock();
@@ -339,6 +348,7 @@ public class OzoneManagerLock implements IOzoneManagerLock {
}
lockSet.set(resource.clearLock(lockSet.get()));
+ return omLockDetails.get();
}
private void updateReadUnlockMetrics(Resource resource,
@@ -354,6 +364,7 @@ public class OzoneManagerLock implements IOzoneManagerLock {
// Adds a snapshot to the metric readLockHeldTimeMsStat.
omLockMetrics.setReadLockHeldTimeMsStat(
TimeUnit.NANOSECONDS.toMillis(readLockHeldTimeNanos));
+ updateProcessingDetails(Timing.LOCKSHARED, readLockHeldTimeNanos);
}
}
@@ -371,6 +382,7 @@ public class OzoneManagerLock implements IOzoneManagerLock {
// Adds a snapshot to the metric writeLockHeldTimeMsStat.
omLockMetrics.setWriteLockHeldTimeMsStat(
TimeUnit.NANOSECONDS.toMillis(writeLockHeldTimeNanos));
+ updateProcessingDetails(Timing.LOCKEXCLUSIVE, writeLockHeldTimeNanos);
}
}
@@ -586,4 +598,36 @@ public class OzoneManagerLock implements IOzoneManagerLock
{
return mask;
}
}
+
+
+ /**
+ * Update the processing details.
+ *
+ * If Server.getCurCall() is null, which means it's write operation on Ratis,
+ * then we need to update the omLockDetails.
+ * If not null, it's read operation, or write operation on non-Ratis cluster,
+ * we can update ThreadLocal variable directly.
+ * @param type IPC Timing types
+ * @param deltaNanos consumed time
+ */
+ private void updateProcessingDetails(Timing type, long deltaNanos) {
+ Server.Call call = Server.getCurCall().get();
+ if (call != null) {
+ call.getProcessingDetails().add(type, deltaNanos, TimeUnit.NANOSECONDS);
+ } else {
+ switch (type) {
+ case LOCKWAIT:
+ omLockDetails.get().add(deltaNanos, OMLockDetails.LockOpType.WAIT);
+ break;
+ case LOCKSHARED:
+ omLockDetails.get().add(deltaNanos, OMLockDetails.LockOpType.READ);
+ break;
+ case LOCKEXCLUSIVE:
+ omLockDetails.get().add(deltaNanos, OMLockDetails.LockOpType.WRITE);
+ break;
+ default:
+ LOG.error("Unsupported Timing type {}", type);
+ }
+ }
+ }
}
diff --git
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/fs/ozone/TestOzoneFileSystem.java
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/fs/ozone/TestOzoneFileSystem.java
index 9394df7b73..166084ee2b 100644
---
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/fs/ozone/TestOzoneFileSystem.java
+++
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/fs/ozone/TestOzoneFileSystem.java
@@ -76,6 +76,7 @@ import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.slf4j.event.Level;
import java.io.FileNotFoundException;
import java.io.IOException;
@@ -1733,7 +1734,6 @@ public class TestOzoneFileSystem {
Assert.assertEquals(mtime, fileStatus.getModificationTime());
}
-
@Test
public void testLoopInLinkBuckets() throws Exception {
String linksVolume = UUID.randomUUID().toString();
@@ -1806,4 +1806,30 @@ public class TestOzoneFileSystem {
.setSourceBucket(sourceBucket);
sourceVolume.createBucket(linkBucket, builder.build());
}
+
+ @Test
+ public void testProcessingDetails() throws IOException, InterruptedException
{
+ final Logger log = LoggerFactory.getLogger(
+ "org.apache.hadoop.ipc.ProcessingDetails");
+ GenericTestUtils.setLogLevel(log, Level.DEBUG);
+ GenericTestUtils.LogCapturer logCapturer =
+ GenericTestUtils.LogCapturer.captureLogs(log);
+ int keySize = 1024;
+ TestDataUtil.createKey(ozoneBucket, "key1", new String(new byte[keySize],
+ UTF_8));
+ logCapturer.stopCapturing();
+ String logContent = logCapturer.getOutput();
+
+ int nonZeroLines = 0;
+ for (String s: logContent.split("\n")) {
+ // The following conditions means write operations from Clients.
+ if (!s.contains("lockexclusiveTime=0") &&
+ s.contains("OzoneManagerProtocol")) {
+ nonZeroLines++;
+ }
+ }
+
+ GenericTestUtils.setLogLevel(log, Level.INFO);
+ Assert.assertNotEquals(nonZeroLines, 0);
+ }
}
diff --git
a/hadoop-ozone/interface-client/src/main/proto/OmClientProtocol.proto
b/hadoop-ozone/interface-client/src/main/proto/OmClientProtocol.proto
index fc6ef0f191..54cafbc0ad 100644
--- a/hadoop-ozone/interface-client/src/main/proto/OmClientProtocol.proto
+++ b/hadoop-ozone/interface-client/src/main/proto/OmClientProtocol.proto
@@ -402,6 +402,7 @@ message OMResponse {
optional SetSnapshotPropertyResponse SetSnapshotPropertyResponse =
128;
optional ListStatusLightResponse listStatusLightResponse =
129;
optional SnapshotInfoResponse SnapshotInfoResponse =
130;
+ optional OMLockDetailsProto omLockDetails =
131;
}
enum Status {
@@ -2089,6 +2090,13 @@ message SetSafeModeResponse {
optional bool response = 1;
}
+message OMLockDetailsProto {
+ optional bool isLockAcquired = 1;
+ optional uint64 waitLockNanos = 2;
+ optional uint64 readLockNanos = 3;
+ optional uint64 writeLockNanos = 4;
+}
+
/**
The OM service that takes care of Ozone namespace.
*/
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java
index b1fb9f003f..5fb3872d88 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java
@@ -88,6 +88,7 @@ import org.apache.hadoop.hdds.utils.db.Table.KeyValue;
import org.apache.hadoop.hdds.utils.db.TableIterator;
import org.apache.hadoop.ozone.OzoneManagerVersion;
import org.apache.hadoop.ozone.om.helpers.SnapshotDiffJob;
+import org.apache.hadoop.ozone.om.lock.OMLockDetails;
import org.apache.hadoop.ozone.om.ratis_snapshot.OmRatisSnapshotProvider;
import org.apache.hadoop.ozone.om.ha.OMHAMetrics;
import org.apache.hadoop.ozone.om.helpers.KeyInfoWithVolumeContext;
@@ -2460,8 +2461,9 @@ public final class OzoneManager extends
ServiceRuntimeInfoImpl
}
private String getVolumeOwner(String volume) throws OMException {
- Boolean lockAcquired = metadataManager.getLock().acquireReadLock(
+ OMLockDetails omLockDetails = metadataManager.getLock().acquireReadLock(
VOLUME_LOCK, volume);
+ boolean lockAcquired = omLockDetails.isLockAcquired();
String dbVolumeKey = metadataManager.getVolumeKey(volume);
OmVolumeArgs volumeArgs;
try {
@@ -2505,8 +2507,10 @@ public final class OzoneManager extends
ServiceRuntimeInfoImpl
throws OMException {
OmBucketInfo bucketInfo;
- boolean lockAcquired = metadataManager.getLock().acquireReadLock(
- BUCKET_LOCK, volume, bucket);
+ OMLockDetails omLockDetails = metadataManager.getLock().acquireReadLock(
+ BUCKET_LOCK, volume, bucket);
+ boolean lockAcquired = omLockDetails.isLockAcquired();
+
try {
String dbBucketKey = metadataManager.getBucketKey(volume, bucket);
bucketInfo = metadataManager.getBucketTable().get(dbBucketKey);
@@ -3429,8 +3433,9 @@ public final class OzoneManager extends
ServiceRuntimeInfoImpl
auditMap.put(OzoneConsts.VOLUME, volumeName);
auditMap.put(OzoneConsts.USER_PREFIX, prefix);
- boolean lockAcquired =
+ OMLockDetails omLockDetails =
metadataManager.getLock().acquireReadLock(VOLUME_LOCK, volumeName);
+ boolean lockAcquired = omLockDetails.isLockAcquired();
try {
final UserGroupInformation ugi =
ProtobufRpcEngine.Server.getRemoteUser();
if (!multiTenantManager.isTenantAdmin(ugi, tenantId, false)) {
@@ -3523,9 +3528,9 @@ public final class OzoneManager extends
ServiceRuntimeInfoImpl
s3Volume);
}
- boolean acquiredVolumeLock =
- getMetadataManager().getLock().acquireReadLock(
- VOLUME_LOCK, s3Volume);
+ OMLockDetails omLockDetails = getMetadataManager().getLock()
+ .acquireReadLock(VOLUME_LOCK, s3Volume);
+ boolean acquiredVolumeLock = omLockDetails.isLockAcquired();
try {
// Inject user name to the response to be used for KMS on the client
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/SstFilteringService.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/SstFilteringService.java
index 599928fe6a..cae9bc4b3f 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/SstFilteringService.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/SstFilteringService.java
@@ -31,6 +31,7 @@ import org.apache.hadoop.hdds.utils.db.TableIterator;
import org.apache.hadoop.ozone.lock.BootstrapStateHandler;
import org.apache.hadoop.ozone.om.exceptions.OMException;
import org.apache.hadoop.ozone.om.helpers.SnapshotInfo;
+import org.apache.hadoop.ozone.om.lock.OMLockDetails;
import org.apache.hadoop.ozone.om.snapshot.ReferenceCounted;
import org.apache.hadoop.ozone.om.snapshot.SnapshotCache;
import org.rocksdb.RocksDBException;
@@ -122,8 +123,9 @@ public class SstFilteringService extends BackgroundService
*/
private void markSSTFilteredFlagForSnapshot(String volume, String bucket,
String snapshotName) throws IOException {
- boolean acquiredSnapshotLock =
ozoneManager.getMetadataManager().getLock()
+ OMLockDetails omLockDetails = ozoneManager.getMetadataManager().getLock()
.acquireWriteLock(SNAPSHOT_LOCK, volume, bucket, snapshotName);
+ boolean acquiredSnapshotLock = omLockDetails.isLockAcquired();
if (acquiredSnapshotLock) {
Table<String, SnapshotInfo> snapshotInfoTable =
ozoneManager.getMetadataManager().getSnapshotInfoTable();
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/VolumeManagerImpl.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/VolumeManagerImpl.java
index 086f495612..84258772b4 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/VolumeManagerImpl.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/VolumeManagerImpl.java
@@ -78,7 +78,8 @@ public class VolumeManagerImpl implements VolumeManager {
String prefix, String startKey, int maxKeys) throws IOException {
boolean acquired = false;
if (userName != null) {
- acquired = metadataManager.getLock().acquireReadLock(USER_LOCK,
userName);
+ acquired = metadataManager.getLock().acquireReadLock(USER_LOCK, userName)
+ .isLockAcquired();
}
try {
return metadataManager.listVolumes(userName, prefix, startKey, maxKeys);
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/lock/OBSKeyPathLockStrategy.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/lock/OBSKeyPathLockStrategy.java
index 143e318ada..5d3a2c4cd3 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/lock/OBSKeyPathLockStrategy.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/lock/OBSKeyPathLockStrategy.java
@@ -33,58 +33,61 @@ import static
org.apache.hadoop.ozone.om.lock.OzoneManagerLock.Resource.KEY_PATH
public class OBSKeyPathLockStrategy implements OzoneLockStrategy {
@Override
- public boolean acquireWriteLock(OMMetadataManager omMetadataManager,
+ public OMLockDetails acquireWriteLock(OMMetadataManager omMetadataManager,
String volumeName, String bucketName,
String keyName) throws IOException {
OMFileRequest.validateBucket(omMetadataManager, volumeName, bucketName);
- boolean acquiredLock = omMetadataManager.getLock().acquireReadLock(
+ OMLockDetails omLockDetails = omMetadataManager.getLock().acquireReadLock(
BUCKET_LOCK, volumeName, bucketName);
- Preconditions.checkArgument(acquiredLock,
+ Preconditions.checkArgument(omLockDetails.isLockAcquired(),
"BUCKET_LOCK should be acquired!");
- acquiredLock = omMetadataManager.getLock()
- .acquireWriteLock(KEY_PATH_LOCK, volumeName, bucketName, keyName);
+ omLockDetails.merge(omMetadataManager.getLock()
+ .acquireWriteLock(KEY_PATH_LOCK, volumeName, bucketName, keyName));
- return acquiredLock;
+ return omLockDetails;
}
@Override
- public void releaseWriteLock(OMMetadataManager omMetadataManager,
+ public OMLockDetails releaseWriteLock(OMMetadataManager omMetadataManager,
String volumeName, String bucketName,
String keyName) {
- omMetadataManager.getLock().releaseWriteLock(KEY_PATH_LOCK,
+ OMLockDetails omLockDetails =
+ omMetadataManager.getLock().releaseWriteLock(KEY_PATH_LOCK,
volumeName, bucketName, keyName);
- omMetadataManager.getLock()
- .releaseReadLock(BUCKET_LOCK, volumeName, bucketName);
+ omLockDetails.merge(omMetadataManager.getLock()
+ .releaseReadLock(BUCKET_LOCK, volumeName, bucketName));
+ return omLockDetails;
}
@Override
- public boolean acquireReadLock(OMMetadataManager omMetadataManager,
+ public OMLockDetails acquireReadLock(OMMetadataManager omMetadataManager,
String volumeName, String bucketName,
String keyName) throws IOException {
OMFileRequest.validateBucket(omMetadataManager, volumeName, bucketName);
- boolean acquiredLock = omMetadataManager.getLock().acquireReadLock(
+ OMLockDetails omLockDetails = omMetadataManager.getLock().acquireReadLock(
BUCKET_LOCK, volumeName, bucketName);
- Preconditions.checkArgument(acquiredLock,
+ Preconditions.checkArgument(omLockDetails.isLockAcquired(),
"BUCKET_LOCK should be acquired!");
- acquiredLock = omMetadataManager.getLock()
- .acquireReadLock(KEY_PATH_LOCK, volumeName, bucketName, keyName);
+ omLockDetails.merge(omMetadataManager.getLock()
+ .acquireReadLock(KEY_PATH_LOCK, volumeName, bucketName, keyName));
- return acquiredLock;
+ return omLockDetails;
}
@Override
- public void releaseReadLock(OMMetadataManager omMetadataManager,
+ public OMLockDetails releaseReadLock(OMMetadataManager omMetadataManager,
String volumeName, String bucketName,
String keyName) {
- omMetadataManager.getLock()
+ OMLockDetails omLockDetails = omMetadataManager.getLock()
.releaseReadLock(KEY_PATH_LOCK, volumeName, bucketName, keyName);
- omMetadataManager.getLock()
- .releaseReadLock(BUCKET_LOCK, volumeName, bucketName);
+ omLockDetails.merge(omMetadataManager.getLock()
+ .releaseReadLock(BUCKET_LOCK, volumeName, bucketName));
+ return omLockDetails;
}
}
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/lock/OzoneLockStrategy.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/lock/OzoneLockStrategy.java
index 82591ec4da..923e595431 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/lock/OzoneLockStrategy.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/lock/OzoneLockStrategy.java
@@ -30,17 +30,17 @@ import java.io.IOException;
* locking mechanism at runtime.
*/
public interface OzoneLockStrategy {
- boolean acquireWriteLock(OMMetadataManager omMetadataManager,
+ OMLockDetails acquireWriteLock(OMMetadataManager omMetadataManager,
String volumeName, String bucketName, String
keyName)
throws IOException;
- void releaseWriteLock(OMMetadataManager omMetadataManager, String volumeName,
- String bucketName, String keyName);
+ OMLockDetails releaseWriteLock(OMMetadataManager omMetadataManager,
+ String volumeName, String bucketName, String keyName);
- boolean acquireReadLock(OMMetadataManager omMetadataManager,
+ OMLockDetails acquireReadLock(OMMetadataManager omMetadataManager,
String volumeName, String bucketName, String keyName)
throws IOException;
- void releaseReadLock(OMMetadataManager omMetadataManager, String volumeName,
- String bucketName, String keyName);
+ OMLockDetails releaseReadLock(OMMetadataManager omMetadataManager,
+ String volumeName, String bucketName, String keyName);
}
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/lock/RegularBucketLockStrategy.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/lock/RegularBucketLockStrategy.java
index dd12b1349d..32ee258866 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/lock/RegularBucketLockStrategy.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/lock/RegularBucketLockStrategy.java
@@ -31,7 +31,7 @@ import static
org.apache.hadoop.ozone.om.lock.OzoneManagerLock.Resource.BUCKET_L
public class RegularBucketLockStrategy implements OzoneLockStrategy {
@Override
- public boolean acquireWriteLock(OMMetadataManager omMetadataManager,
+ public OMLockDetails acquireWriteLock(OMMetadataManager omMetadataManager,
String volumeName, String bucketName,
String keyName) throws IOException {
OMFileRequest.validateBucket(omMetadataManager, volumeName, bucketName);
@@ -40,15 +40,15 @@ public class RegularBucketLockStrategy implements
OzoneLockStrategy {
}
@Override
- public void releaseWriteLock(OMMetadataManager omMetadataManager,
+ public OMLockDetails releaseWriteLock(OMMetadataManager omMetadataManager,
String volumeName, String bucketName,
String keyName) {
- omMetadataManager.getLock()
+ return omMetadataManager.getLock()
.releaseWriteLock(BUCKET_LOCK, volumeName, bucketName);
}
@Override
- public boolean acquireReadLock(OMMetadataManager omMetadataManager,
+ public OMLockDetails acquireReadLock(OMMetadataManager omMetadataManager,
String volumeName, String bucketName,
String keyName) throws IOException {
OMFileRequest.validateBucket(omMetadataManager, volumeName, bucketName);
@@ -57,10 +57,10 @@ public class RegularBucketLockStrategy implements
OzoneLockStrategy {
}
@Override
- public void releaseReadLock(OMMetadataManager omMetadataManager,
+ public OMLockDetails releaseReadLock(OMMetadataManager omMetadataManager,
String volumeName, String bucketName,
String keyName) {
- omMetadataManager.getLock()
+ return omMetadataManager.getLock()
.releaseReadLock(BUCKET_LOCK, volumeName, bucketName);
}
}
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/ratis/OzoneManagerStateMachine.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/ratis/OzoneManagerStateMachine.java
index 56526d1478..c8688c7256 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/ratis/OzoneManagerStateMachine.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/ratis/OzoneManagerStateMachine.java
@@ -42,6 +42,8 @@ import org.apache.hadoop.ozone.om.OzoneManagerPrepareState;
import org.apache.hadoop.ozone.om.exceptions.OMException;
import org.apache.hadoop.ozone.om.helpers.OMRatisHelper;
import org.apache.hadoop.ozone.om.ratis.utils.OzoneManagerRatisUtils;
+import org.apache.hadoop.ozone.om.lock.OMLockDetails;
+import org.apache.hadoop.ozone.om.response.OMClientResponse;
import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos;
import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos
.OMRequest;
@@ -575,8 +577,16 @@ public class OzoneManagerStateMachine extends
BaseStateMachine {
*/
private OMResponse runCommand(OMRequest request, long trxLogIndex) {
try {
- return handler.handleWriteRequest(request,
- trxLogIndex).getOMResponse();
+ OMClientResponse omClientResponse =
+ handler.handleWriteRequest(request, trxLogIndex);
+ OMLockDetails omLockDetails = omClientResponse.getOmLockDetails();
+ OMResponse omResponse = omClientResponse.getOMResponse();
+ if (omLockDetails != null) {
+ return omResponse.toBuilder()
+ .setOmLockDetails(omLockDetails.toProtobufBuilder()).build();
+ } else {
+ return omResponse;
+ }
} catch (IOException e) {
LOG.warn("Failed to write, Exception occurred ", e);
return createErrorResponse(request, e);
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/OMClientRequest.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/OMClientRequest.java
index 642faefa05..363a38dc8c 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/OMClientRequest.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/OMClientRequest.java
@@ -35,6 +35,7 @@ import org.apache.hadoop.ozone.om.OzoneManager;
import org.apache.hadoop.ozone.om.OzonePrefixPathImpl;
import org.apache.hadoop.ozone.om.exceptions.OMException;
import org.apache.hadoop.ozone.om.helpers.BucketLayout;
+import org.apache.hadoop.ozone.om.lock.OMLockDetails;
import org.apache.hadoop.ozone.om.protocolPB.grpc.GrpcClientConstants;
import org.apache.hadoop.ozone.om.ratis.utils.OzoneManagerDoubleBufferHelper;
import org.apache.hadoop.ozone.om.ratis.utils.OzoneManagerRatisUtils;
@@ -77,6 +78,8 @@ public abstract class OMClientRequest implements
RequestAuditor {
private UserGroupInformation userGroupInformation;
private InetAddress inetAddress;
+ private final ThreadLocal<OMLockDetails> omLockDetails =
+ ThreadLocal.withInitial(OMLockDetails::new);
/**
* Stores the result of request execution in
@@ -91,6 +94,7 @@ public abstract class OMClientRequest implements
RequestAuditor {
public OMClientRequest(OMRequest omRequest) {
Preconditions.checkNotNull(omRequest);
this.omRequest = omRequest;
+ this.omLockDetails.get().clear();
}
/**
* Perform pre-execute steps on a OMRequest.
@@ -580,4 +584,12 @@ public abstract class OMClientRequest implements
RequestAuditor {
throw new OMException("Invalid KeyPath " + path, INVALID_KEY_NAME);
}
}
+
+ public OMLockDetails getOmLockDetails() {
+ return omLockDetails.get();
+ }
+
+ public void mergeOmLockDetails(OMLockDetails details) {
+ omLockDetails.get().merge(details);
+ }
}
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/OMBucketCreateRequest.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/OMBucketCreateRequest.java
index f9f9a87b6b..58fad4a3d2 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/OMBucketCreateRequest.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/OMBucketCreateRequest.java
@@ -196,10 +196,13 @@ public class OMBucketCreateRequest extends
OMClientRequest {
volumeName, bucketName, null);
}
- acquiredVolumeLock =
- metadataManager.getLock().acquireReadLock(VOLUME_LOCK, volumeName);
- acquiredBucketLock = metadataManager.getLock().acquireWriteLock(
- BUCKET_LOCK, volumeName, bucketName);
+ mergeOmLockDetails(
+ metadataManager.getLock().acquireReadLock(VOLUME_LOCK, volumeName));
+ acquiredVolumeLock = getOmLockDetails().isLockAcquired();
+
+ mergeOmLockDetails(metadataManager.getLock().acquireWriteLock(
+ BUCKET_LOCK, volumeName, bucketName));
+ acquiredBucketLock = getOmLockDetails().isLockAcquired();
OmVolumeArgs omVolumeArgs =
metadataManager.getVolumeTable().getReadCopy(volumeKey);
@@ -254,11 +257,16 @@ public class OMBucketCreateRequest extends
OMClientRequest {
addResponseToDoubleBuffer(transactionLogIndex, omClientResponse,
ozoneManagerDoubleBufferHelper);
if (acquiredBucketLock) {
- metadataManager.getLock().releaseWriteLock(BUCKET_LOCK, volumeName,
- bucketName);
+ mergeOmLockDetails(
+ metadataManager.getLock().releaseWriteLock(BUCKET_LOCK, volumeName,
+ bucketName));
}
if (acquiredVolumeLock) {
- metadataManager.getLock().releaseReadLock(VOLUME_LOCK, volumeName);
+ mergeOmLockDetails(
+ metadataManager.getLock().releaseReadLock(VOLUME_LOCK,
volumeName));
+ }
+ if (omClientResponse != null) {
+ omClientResponse.setOmLockDetails(getOmLockDetails());
}
}
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/OMBucketDeleteRequest.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/OMBucketDeleteRequest.java
index ecdcdc49b3..873cadc2ed 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/OMBucketDeleteRequest.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/OMBucketDeleteRequest.java
@@ -117,11 +117,13 @@ public class OMBucketDeleteRequest extends
OMClientRequest {
}
// acquire lock
- acquiredVolumeLock =
- omMetadataManager.getLock().acquireReadLock(VOLUME_LOCK, volumeName);
- acquiredBucketLock =
- omMetadataManager.getLock().acquireWriteLock(BUCKET_LOCK,
- volumeName, bucketName);
+ mergeOmLockDetails(
+ omMetadataManager.getLock().acquireReadLock(VOLUME_LOCK,
volumeName));
+ acquiredVolumeLock = getOmLockDetails().isLockAcquired();
+ mergeOmLockDetails(
+ omMetadataManager.getLock().acquireWriteLock(BUCKET_LOCK, volumeName,
+ bucketName));
+ acquiredBucketLock = getOmLockDetails().isLockAcquired();
// No need to check volume exists here, as bucket cannot be created
// with out volume creation. Check if bucket exists
@@ -203,11 +205,15 @@ public class OMBucketDeleteRequest extends
OMClientRequest {
addResponseToDoubleBuffer(transactionLogIndex, omClientResponse,
ozoneManagerDoubleBufferHelper);
if (acquiredBucketLock) {
- omMetadataManager.getLock().releaseWriteLock(BUCKET_LOCK, volumeName,
- bucketName);
+ mergeOmLockDetails(omMetadataManager.getLock()
+ .releaseWriteLock(BUCKET_LOCK, volumeName, bucketName));
}
if (acquiredVolumeLock) {
- omMetadataManager.getLock().releaseReadLock(VOLUME_LOCK, volumeName);
+ mergeOmLockDetails(omMetadataManager.getLock()
+ .releaseReadLock(VOLUME_LOCK, volumeName));
+ }
+ if (omClientResponse != null) {
+ omClientResponse.setOmLockDetails(getOmLockDetails());
}
}
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/OMBucketSetOwnerRequest.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/OMBucketSetOwnerRequest.java
index 6c0914bb1d..5824425296 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/OMBucketSetOwnerRequest.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/OMBucketSetOwnerRequest.java
@@ -119,8 +119,9 @@ public class OMBucketSetOwnerRequest extends
OMClientRequest {
}
// acquire lock.
- acquiredBucketLock = omMetadataManager.getLock().acquireWriteLock(
- BUCKET_LOCK, volumeName, bucketName);
+ mergeOmLockDetails(omMetadataManager.getLock().acquireWriteLock(
+ BUCKET_LOCK, volumeName, bucketName));
+ acquiredBucketLock = getOmLockDetails().isLockAcquired();
String bucketKey = omMetadataManager.getBucketKey(volumeName,
bucketName);
OmBucketInfo omBucketInfo =
@@ -176,8 +177,11 @@ public class OMBucketSetOwnerRequest extends
OMClientRequest {
addResponseToDoubleBuffer(transactionLogIndex, omClientResponse,
ozoneManagerDoubleBufferHelper);
if (acquiredBucketLock) {
- omMetadataManager.getLock().releaseWriteLock(BUCKET_LOCK, volumeName,
- bucketName);
+ mergeOmLockDetails(omMetadataManager.getLock()
+ .releaseWriteLock(BUCKET_LOCK, volumeName, bucketName));
+ }
+ if (omClientResponse != null) {
+ omClientResponse.setOmLockDetails(getOmLockDetails());
}
}
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/OMBucketSetPropertyRequest.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/OMBucketSetPropertyRequest.java
index 6f9fbc8aa7..5303870c0e 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/OMBucketSetPropertyRequest.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/OMBucketSetPropertyRequest.java
@@ -129,8 +129,9 @@ public class OMBucketSetPropertyRequest extends
OMClientRequest {
}
// acquire lock.
- acquiredBucketLock = omMetadataManager.getLock().acquireWriteLock(
- BUCKET_LOCK, volumeName, bucketName);
+ mergeOmLockDetails(omMetadataManager.getLock().acquireWriteLock(
+ BUCKET_LOCK, volumeName, bucketName));
+ acquiredBucketLock = getOmLockDetails().isLockAcquired();
String bucketKey = omMetadataManager.getBucketKey(volumeName,
bucketName);
OmBucketInfo dbBucketInfo =
@@ -210,8 +211,11 @@ public class OMBucketSetPropertyRequest extends
OMClientRequest {
addResponseToDoubleBuffer(transactionLogIndex, omClientResponse,
ozoneManagerDoubleBufferHelper);
if (acquiredBucketLock) {
- omMetadataManager.getLock().releaseWriteLock(BUCKET_LOCK, volumeName,
- bucketName);
+ mergeOmLockDetails(omMetadataManager.getLock()
+ .releaseWriteLock(BUCKET_LOCK, volumeName, bucketName));
+ }
+ if (omClientResponse != null) {
+ omClientResponse.setOmLockDetails(getOmLockDetails());
}
}
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/acl/OMBucketAclRequest.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/acl/OMBucketAclRequest.java
index 4c6c60c73d..b6106d3bf4 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/acl/OMBucketAclRequest.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/acl/OMBucketAclRequest.java
@@ -97,9 +97,10 @@ public abstract class OMBucketAclRequest extends
OMClientRequest {
OzoneObj.StoreType.OZONE, IAccessAuthorizer.ACLType.WRITE_ACL,
volume, bucket, null);
}
- lockAcquired =
+ mergeOmLockDetails(
omMetadataManager.getLock().acquireWriteLock(BUCKET_LOCK, volume,
- bucket);
+ bucket));
+ lockAcquired = getOmLockDetails().isLockAcquired();
String dbBucketKey = omMetadataManager.getBucketKey(volume, bucket);
omBucketInfo = omMetadataManager.getBucketTable().get(dbBucketKey);
@@ -142,8 +143,12 @@ public abstract class OMBucketAclRequest extends
OMClientRequest {
addResponseToDoubleBuffer(transactionLogIndex, omClientResponse,
ozoneManagerDoubleBufferHelper);
if (lockAcquired) {
- omMetadataManager.getLock().releaseWriteLock(BUCKET_LOCK, volume,
- bucket);
+ mergeOmLockDetails(
+ omMetadataManager.getLock().releaseWriteLock(BUCKET_LOCK, volume,
+ bucket));
+ }
+ if (omClientResponse != null) {
+ omClientResponse.setOmLockDetails(getOmLockDetails());
}
}
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/file/OMDirectoryCreateRequest.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/file/OMDirectoryCreateRequest.java
index 272c80a5bd..2dc3f7b4bc 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/file/OMDirectoryCreateRequest.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/file/OMDirectoryCreateRequest.java
@@ -174,8 +174,9 @@ public class OMDirectoryCreateRequest extends OMKeyRequest {
OMException.ResultCodes.CANNOT_CREATE_DIRECTORY_AT_ROOT);
}
// acquire lock
- acquiredLock = omMetadataManager.getLock().acquireWriteLock(BUCKET_LOCK,
- volumeName, bucketName);
+ mergeOmLockDetails(omMetadataManager.getLock()
+ .acquireWriteLock(BUCKET_LOCK, volumeName, bucketName));
+ acquiredLock = getOmLockDetails().isLockAcquired();
validateBucketAndVolume(omMetadataManager, volumeName, bucketName);
@@ -236,8 +237,11 @@ public class OMDirectoryCreateRequest extends OMKeyRequest
{
addResponseToDoubleBuffer(trxnLogIndex, omClientResponse,
omDoubleBufferHelper);
if (acquiredLock) {
- omMetadataManager.getLock().releaseWriteLock(BUCKET_LOCK, volumeName,
- bucketName);
+ mergeOmLockDetails(omMetadataManager.getLock()
+ .releaseWriteLock(BUCKET_LOCK, volumeName, bucketName));
+ }
+ if (omClientResponse != null) {
+ omClientResponse.setOmLockDetails(getOmLockDetails());
}
}
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/file/OMDirectoryCreateRequestWithFSO.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/file/OMDirectoryCreateRequestWithFSO.java
index 45be065a6f..6dc025d7ce 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/file/OMDirectoryCreateRequestWithFSO.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/file/OMDirectoryCreateRequestWithFSO.java
@@ -125,8 +125,10 @@ public class OMDirectoryCreateRequestWithFSO extends
OMDirectoryCreateRequest {
OMException.ResultCodes.CANNOT_CREATE_DIRECTORY_AT_ROOT);
}
// acquire lock
- acquiredLock = omMetadataManager.getLock().acquireWriteLock(BUCKET_LOCK,
- volumeName, bucketName);
+ mergeOmLockDetails(
+ omMetadataManager.getLock().acquireWriteLock(BUCKET_LOCK, volumeName,
+ bucketName));
+ acquiredLock = getOmLockDetails().isLockAcquired();
validateBucketAndVolume(omMetadataManager, volumeName, bucketName);
@@ -195,8 +197,11 @@ public class OMDirectoryCreateRequestWithFSO extends
OMDirectoryCreateRequest {
addResponseToDoubleBuffer(trxnLogIndex, omClientResponse,
omDoubleBufferHelper);
if (acquiredLock) {
- omMetadataManager.getLock().releaseWriteLock(BUCKET_LOCK, volumeName,
- bucketName);
+ mergeOmLockDetails(omMetadataManager.getLock()
+ .releaseWriteLock(BUCKET_LOCK, volumeName, bucketName));
+ }
+ if (omClientResponse != null) {
+ omClientResponse.setOmLockDetails(getOmLockDetails());
}
}
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/file/OMFileCreateRequest.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/file/OMFileCreateRequest.java
index fee9a93e19..4809c99f71 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/file/OMFileCreateRequest.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/file/OMFileCreateRequest.java
@@ -212,8 +212,9 @@ public class OMFileCreateRequest extends OMKeyRequest {
IAccessAuthorizer.ACLType.CREATE, OzoneObj.ResourceType.KEY);
// acquire lock
- acquiredLock = omMetadataManager.getLock().acquireWriteLock(BUCKET_LOCK,
- volumeName, bucketName);
+ mergeOmLockDetails(omMetadataManager.getLock()
+ .acquireWriteLock(BUCKET_LOCK, volumeName, bucketName));
+ acquiredLock = getOmLockDetails().isLockAcquired();
validateBucketAndVolume(omMetadataManager, volumeName, bucketName);
@@ -315,8 +316,11 @@ public class OMFileCreateRequest extends OMKeyRequest {
addResponseToDoubleBuffer(trxnLogIndex, omClientResponse,
omDoubleBufferHelper);
if (acquiredLock) {
- omMetadataManager.getLock().releaseWriteLock(BUCKET_LOCK, volumeName,
- bucketName);
+ mergeOmLockDetails(omMetadataManager.getLock()
+ .releaseWriteLock(BUCKET_LOCK, volumeName, bucketName));
+ }
+ if (omClientResponse != null) {
+ omClientResponse.setOmLockDetails(getOmLockDetails());
}
}
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/file/OMFileCreateRequestWithFSO.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/file/OMFileCreateRequestWithFSO.java
index 7520377377..489fec2344 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/file/OMFileCreateRequestWithFSO.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/file/OMFileCreateRequestWithFSO.java
@@ -125,8 +125,9 @@ public class OMFileCreateRequestWithFSO extends
OMFileCreateRequest {
IAccessAuthorizer.ACLType.CREATE, OzoneObj.ResourceType.KEY);
// acquire lock
- acquiredLock = omMetadataManager.getLock().acquireWriteLock(BUCKET_LOCK,
- volumeName, bucketName);
+ mergeOmLockDetails(omMetadataManager.getLock()
+ .acquireWriteLock(BUCKET_LOCK, volumeName, bucketName));
+ acquiredLock = getOmLockDetails().isLockAcquired();
validateBucketAndVolume(omMetadataManager, volumeName, bucketName);
@@ -242,8 +243,11 @@ public class OMFileCreateRequestWithFSO extends
OMFileCreateRequest {
addResponseToDoubleBuffer(trxnLogIndex, omClientResponse,
omDoubleBufferHelper);
if (acquiredLock) {
- omMetadataManager.getLock().releaseWriteLock(BUCKET_LOCK, volumeName,
- bucketName);
+ mergeOmLockDetails(omMetadataManager.getLock()
+ .releaseWriteLock(BUCKET_LOCK, volumeName, bucketName));
+ }
+ if (omClientResponse != null) {
+ omClientResponse.setOmLockDetails(getOmLockDetails());
}
}
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/file/OMRecoverLeaseRequest.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/file/OMRecoverLeaseRequest.java
index 78376f7700..4855d7f7ab 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/file/OMRecoverLeaseRequest.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/file/OMRecoverLeaseRequest.java
@@ -135,9 +135,10 @@ public class OMRecoverLeaseRequest extends OMKeyRequest {
IAccessAuthorizer.ACLType.WRITE, OzoneObj.ResourceType.KEY);
// acquire lock
- acquiredLock = omMetadataManager.getLock().acquireWriteLock(BUCKET_LOCK,
- volumeName, bucketName);
-
+ mergeOmLockDetails(
+ omMetadataManager.getLock().acquireWriteLock(BUCKET_LOCK,
+ volumeName, bucketName));
+ acquiredLock = getOmLockDetails().isLockAcquired();
validateBucketAndVolume(omMetadataManager, volumeName, bucketName);
String openKeyEntryName = doWork(ozoneManager, transactionLogIndex);
@@ -168,8 +169,12 @@ public class OMRecoverLeaseRequest extends OMKeyRequest {
addResponseToDoubleBuffer(transactionLogIndex, omClientResponse,
ozoneManagerDoubleBufferHelper);
if (acquiredLock) {
- omMetadataManager.getLock().releaseWriteLock(BUCKET_LOCK, volumeName,
- bucketName);
+ mergeOmLockDetails(
+ omMetadataManager.getLock().releaseWriteLock(BUCKET_LOCK,
+ volumeName, bucketName));
+ }
+ if (omClientResponse != null) {
+ omClientResponse.setOmLockDetails(getOmLockDetails());
}
}
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMAllocateBlockRequest.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMAllocateBlockRequest.java
index 43301a6ba1..254aafcb50 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMAllocateBlockRequest.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMAllocateBlockRequest.java
@@ -209,8 +209,9 @@ public class OMAllocateBlockRequest extends OMKeyRequest {
List<OmKeyLocationInfo> newLocationList = Collections.singletonList(
OmKeyLocationInfo.getFromProtobuf(blockLocation));
- acquiredLock = omMetadataManager.getLock().acquireWriteLock(BUCKET_LOCK,
- volumeName, bucketName);
+ mergeOmLockDetails(omMetadataManager.getLock()
+ .acquireWriteLock(BUCKET_LOCK, volumeName, bucketName));
+ acquiredLock = getOmLockDetails().isLockAcquired();
omBucketInfo = getBucketInfo(omMetadataManager, volumeName, bucketName);
// check bucket and volume quota
long preAllocatedKeySize = newLocationList.size()
@@ -256,8 +257,12 @@ public class OMAllocateBlockRequest extends OMKeyRequest {
addResponseToDoubleBuffer(trxnLogIndex, omClientResponse,
omDoubleBufferHelper);
if (acquiredLock) {
- omMetadataManager.getLock().releaseWriteLock(BUCKET_LOCK, volumeName,
- bucketName);
+ mergeOmLockDetails(
+ omMetadataManager.getLock().releaseWriteLock(BUCKET_LOCK,
+ volumeName, bucketName));
+ }
+ if (omClientResponse != null) {
+ omClientResponse.setOmLockDetails(getOmLockDetails());
}
}
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMAllocateBlockRequestWithFSO.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMAllocateBlockRequestWithFSO.java
index ae389d7ef4..eb5a9ccb53 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMAllocateBlockRequestWithFSO.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMAllocateBlockRequestWithFSO.java
@@ -140,8 +140,10 @@ public class OMAllocateBlockRequestWithFSO extends
OMAllocateBlockRequest {
List<OmKeyLocationInfo> newLocationList = Collections.singletonList(
OmKeyLocationInfo.getFromProtobuf(blockLocation));
- acquiredLock = omMetadataManager.getLock().acquireWriteLock(BUCKET_LOCK,
- volumeName, bucketName);
+ mergeOmLockDetails(
+ omMetadataManager.getLock().acquireWriteLock(BUCKET_LOCK,
+ volumeName, bucketName));
+ acquiredLock = getOmLockDetails().isLockAcquired();
omBucketInfo = getBucketInfo(omMetadataManager, volumeName, bucketName);
// check bucket and volume quota
long preAllocatedKeySize = newLocationList.size()
@@ -186,8 +188,12 @@ public class OMAllocateBlockRequestWithFSO extends
OMAllocateBlockRequest {
addResponseToDoubleBuffer(trxnLogIndex, omClientResponse,
omDoubleBufferHelper);
if (acquiredLock) {
- omMetadataManager.getLock().releaseWriteLock(BUCKET_LOCK, volumeName,
- bucketName);
+ mergeOmLockDetails(
+ omMetadataManager.getLock().releaseWriteLock(
+ BUCKET_LOCK, volumeName, bucketName));
+ }
+ if (omClientResponse != null) {
+ omClientResponse.setOmLockDetails(getOmLockDetails());
}
}
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyCommitRequest.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyCommitRequest.java
index a9953aca07..ebcb1a040a 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyCommitRequest.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyCommitRequest.java
@@ -187,9 +187,10 @@ public class OMKeyCommitRequest extends OMKeyRequest {
List<OmKeyLocationInfo>
locationInfoList = getOmKeyLocationInfos(ozoneManager,
commitKeyArgs);
- bucketLockAcquired =
- omMetadataManager.getLock().acquireWriteLock(BUCKET_LOCK,
- volumeName, bucketName);
+ mergeOmLockDetails(
+ omMetadataManager.getLock().acquireWriteLock(BUCKET_LOCK, volumeName,
+ bucketName));
+ bucketLockAcquired = getOmLockDetails().isLockAcquired();
validateBucketAndVolume(omMetadataManager, volumeName, bucketName);
omBucketInfo = getBucketInfo(omMetadataManager, volumeName, bucketName);
@@ -340,8 +341,11 @@ public class OMKeyCommitRequest extends OMKeyRequest {
omDoubleBufferHelper);
if (bucketLockAcquired) {
- omMetadataManager.getLock().releaseWriteLock(BUCKET_LOCK, volumeName,
- bucketName);
+ mergeOmLockDetails(omMetadataManager.getLock()
+ .releaseWriteLock(BUCKET_LOCK, volumeName, bucketName));
+ }
+ if (omClientResponse != null) {
+ omClientResponse.setOmLockDetails(getOmLockDetails());
}
}
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyCommitRequestWithFSO.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyCommitRequestWithFSO.java
index bb1bda117e..a4b0b9fa0b 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyCommitRequestWithFSO.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyCommitRequestWithFSO.java
@@ -133,9 +133,9 @@ public class OMKeyCommitRequestWithFSO extends
OMKeyCommitRequest {
List<OmKeyLocationInfo>
locationInfoList = getOmKeyLocationInfos(ozoneManager,
commitKeyArgs);
- bucketLockAcquired =
- omMetadataManager.getLock().acquireWriteLock(BUCKET_LOCK,
- volumeName, bucketName);
+ mergeOmLockDetails(omMetadataManager.getLock()
+ .acquireWriteLock(BUCKET_LOCK, volumeName, bucketName));
+ bucketLockAcquired = getOmLockDetails().isLockAcquired();
validateBucketAndVolume(omMetadataManager, volumeName, bucketName);
@@ -284,8 +284,11 @@ public class OMKeyCommitRequestWithFSO extends
OMKeyCommitRequest {
omDoubleBufferHelper);
if (bucketLockAcquired) {
- omMetadataManager.getLock().releaseWriteLock(BUCKET_LOCK, volumeName,
- bucketName);
+ mergeOmLockDetails(omMetadataManager.getLock()
+ .releaseWriteLock(BUCKET_LOCK, volumeName, bucketName));
+ }
+ if (omClientResponse != null) {
+ omClientResponse.setOmLockDetails(getOmLockDetails());
}
}
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyCreateRequest.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyCreateRequest.java
index 2a03e12c86..484ff1151e 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyCreateRequest.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyCreateRequest.java
@@ -218,8 +218,10 @@ public class OMKeyCreateRequest extends OMKeyRequest {
checkKeyAcls(ozoneManager, volumeName, bucketName, keyName,
IAccessAuthorizer.ACLType.CREATE, OzoneObj.ResourceType.KEY);
- acquireLock = ozoneLockStrategy.acquireWriteLock(omMetadataManager,
- volumeName, bucketName, keyName);
+ mergeOmLockDetails(
+ ozoneLockStrategy.acquireWriteLock(omMetadataManager, volumeName,
+ bucketName, keyName));
+ acquireLock = getOmLockDetails().isLockAcquired();
validateBucketAndVolume(omMetadataManager, volumeName, bucketName);
//TODO: We can optimize this get here, if getKmsProvider is null, then
// bucket encryptionInfo will be not set. If this assumption holds
@@ -343,8 +345,12 @@ public class OMKeyCreateRequest extends OMKeyRequest {
addResponseToDoubleBuffer(trxnLogIndex, omClientResponse,
omDoubleBufferHelper);
if (acquireLock) {
- ozoneLockStrategy.releaseWriteLock(omMetadataManager, volumeName,
- bucketName, keyName);
+ mergeOmLockDetails(ozoneLockStrategy
+ .releaseWriteLock(omMetadataManager, volumeName,
+ bucketName, keyName));
+ }
+ if (omClientResponse != null) {
+ omClientResponse.setOmLockDetails(getOmLockDetails());
}
}
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyCreateRequestWithFSO.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyCreateRequestWithFSO.java
index 2c31afd050..4c359c2d92 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyCreateRequestWithFSO.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyCreateRequestWithFSO.java
@@ -107,8 +107,9 @@ public class OMKeyCreateRequestWithFSO extends
OMKeyCreateRequest {
checkKeyAcls(ozoneManager, volumeName, bucketName, keyName,
IAccessAuthorizer.ACLType.CREATE, OzoneObj.ResourceType.KEY);
- acquireLock = omMetadataManager.getLock().acquireWriteLock(BUCKET_LOCK,
- volumeName, bucketName);
+ mergeOmLockDetails(omMetadataManager.getLock()
+ .acquireWriteLock(BUCKET_LOCK, volumeName, bucketName));
+ acquireLock = getOmLockDetails().isLockAcquired();
validateBucketAndVolume(omMetadataManager, volumeName, bucketName);
final long volumeId = omMetadataManager.getVolumeTable()
@@ -229,8 +230,11 @@ public class OMKeyCreateRequestWithFSO extends
OMKeyCreateRequest {
addResponseToDoubleBuffer(trxnLogIndex, omClientResponse,
omDoubleBufferHelper);
if (acquireLock) {
- omMetadataManager.getLock().releaseWriteLock(BUCKET_LOCK, volumeName,
- bucketName);
+ mergeOmLockDetails(omMetadataManager.getLock()
+ .releaseWriteLock(BUCKET_LOCK, volumeName, bucketName));
+ }
+ if (omClientResponse != null) {
+ omClientResponse.setOmLockDetails(getOmLockDetails());
}
}
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyDeleteRequest.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyDeleteRequest.java
index 54c2a130a6..31cf749215 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyDeleteRequest.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyDeleteRequest.java
@@ -130,8 +130,9 @@ public class OMKeyDeleteRequest extends OMKeyRequest {
String objectKey =
omMetadataManager.getOzoneKey(volumeName, bucketName, keyName);
- acquiredLock = omMetadataManager.getLock()
- .acquireWriteLock(BUCKET_LOCK, volumeName, bucketName);
+ mergeOmLockDetails(omMetadataManager.getLock()
+ .acquireWriteLock(BUCKET_LOCK, volumeName, bucketName));
+ acquiredLock = getOmLockDetails().isLockAcquired();
// Validate bucket and volume exists or not.
validateBucketAndVolume(omMetadataManager, volumeName, bucketName);
@@ -179,8 +180,11 @@ public class OMKeyDeleteRequest extends OMKeyRequest {
addResponseToDoubleBuffer(trxnLogIndex, omClientResponse,
omDoubleBufferHelper);
if (acquiredLock) {
- omMetadataManager.getLock()
- .releaseWriteLock(BUCKET_LOCK, volumeName, bucketName);
+ mergeOmLockDetails(omMetadataManager.getLock()
+ .releaseWriteLock(BUCKET_LOCK, volumeName, bucketName));
+ }
+ if (omClientResponse != null) {
+ omClientResponse.setOmLockDetails(getOmLockDetails());
}
}
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyDeleteRequestWithFSO.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyDeleteRequestWithFSO.java
index 319b34cafa..c1fdd4721f 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyDeleteRequestWithFSO.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyDeleteRequestWithFSO.java
@@ -103,8 +103,9 @@ public class OMKeyDeleteRequestWithFSO extends
OMKeyDeleteRequest {
checkACLsWithFSO(ozoneManager, volumeName, bucketName, keyName,
IAccessAuthorizer.ACLType.DELETE);
- acquiredLock = omMetadataManager.getLock().acquireWriteLock(BUCKET_LOCK,
- volumeName, bucketName);
+ mergeOmLockDetails(omMetadataManager.getLock()
+ .acquireWriteLock(BUCKET_LOCK, volumeName, bucketName));
+ acquiredLock = getOmLockDetails().isLockAcquired();
// Validate bucket and volume exists or not.
validateBucketAndVolume(omMetadataManager, volumeName, bucketName);
@@ -180,8 +181,11 @@ public class OMKeyDeleteRequestWithFSO extends
OMKeyDeleteRequest {
addResponseToDoubleBuffer(trxnLogIndex, omClientResponse,
omDoubleBufferHelper);
if (acquiredLock) {
- omMetadataManager.getLock().releaseWriteLock(BUCKET_LOCK, volumeName,
- bucketName);
+ mergeOmLockDetails(omMetadataManager.getLock()
+ .releaseWriteLock(BUCKET_LOCK, volumeName, bucketName));
+ }
+ if (omClientResponse != null) {
+ omClientResponse.setOmLockDetails(getOmLockDetails());
}
}
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRenameRequest.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRenameRequest.java
index 7a94de8013..3903d565d3 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRenameRequest.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRenameRequest.java
@@ -155,8 +155,9 @@ public class OMKeyRenameRequest extends OMKeyRequest {
checkKeyAcls(ozoneManager, volumeName, bucketName, toKeyName,
IAccessAuthorizer.ACLType.CREATE, OzoneObj.ResourceType.KEY);
- acquiredLock = omMetadataManager.getLock().acquireWriteLock(BUCKET_LOCK,
- volumeName, bucketName);
+ mergeOmLockDetails(omMetadataManager.getLock()
+ .acquireWriteLock(BUCKET_LOCK, volumeName, bucketName));
+ acquiredLock = getOmLockDetails().isLockAcquired();
// Validate bucket and volume exists or not.
validateBucketAndVolume(omMetadataManager, volumeName, bucketName);
@@ -214,8 +215,11 @@ public class OMKeyRenameRequest extends OMKeyRequest {
addResponseToDoubleBuffer(trxnLogIndex, omClientResponse,
omDoubleBufferHelper);
if (acquiredLock) {
- omMetadataManager.getLock().releaseWriteLock(BUCKET_LOCK, volumeName,
- bucketName);
+ mergeOmLockDetails(omMetadataManager.getLock()
+ .releaseWriteLock(BUCKET_LOCK, volumeName, bucketName));
+ }
+ if (omClientResponse != null) {
+ omClientResponse.setOmLockDetails(getOmLockDetails());
}
}
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRenameRequestWithFSO.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRenameRequestWithFSO.java
index a98ba2ad90..6c59a65eb4 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRenameRequestWithFSO.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRenameRequestWithFSO.java
@@ -129,8 +129,9 @@ public class OMKeyRenameRequestWithFSO extends
OMKeyRenameRequest {
IAccessAuthorizer.ACLType.CREATE, OzoneObj.ResourceType.KEY);
}
- acquiredLock = omMetadataManager.getLock().acquireWriteLock(BUCKET_LOCK,
- volumeName, bucketName);
+ mergeOmLockDetails(omMetadataManager.getLock()
+ .acquireWriteLock(BUCKET_LOCK, volumeName, bucketName));
+ acquiredLock = getOmLockDetails().isLockAcquired();
// Validate bucket and volume exists or not.
validateBucketAndVolume(omMetadataManager, volumeName, bucketName);
@@ -232,8 +233,11 @@ public class OMKeyRenameRequestWithFSO extends
OMKeyRenameRequest {
addResponseToDoubleBuffer(trxnLogIndex, omClientResponse,
omDoubleBufferHelper);
if (acquiredLock) {
- omMetadataManager.getLock().releaseWriteLock(BUCKET_LOCK, volumeName,
- bucketName);
+ mergeOmLockDetails(omMetadataManager.getLock()
+ .releaseWriteLock(BUCKET_LOCK, volumeName, bucketName));
+ }
+ if (omClientResponse != null) {
+ omClientResponse.setOmLockDetails(getOmLockDetails());
}
}
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRequest.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRequest.java
index ea97aa68c1..8f9056838e 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRequest.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRequest.java
@@ -469,8 +469,9 @@ public abstract class OMKeyRequest extends OMClientRequest {
OmBucketInfo bucketInfo = null;
if (ozoneManager.getKmsProvider() != null) {
try {
- acquireLock = omMetadataManager.getLock().acquireReadLock(
- BUCKET_LOCK, volumeName, bucketName);
+ mergeOmLockDetails(omMetadataManager.getLock().acquireReadLock(
+ BUCKET_LOCK, volumeName, bucketName));
+ acquireLock = getOmLockDetails().isLockAcquired();
bucketInfo = omMetadataManager.getBucketTable().get(
omMetadataManager.getBucketKey(volumeName,
@@ -489,8 +490,8 @@ public abstract class OMKeyRequest extends OMClientRequest {
} finally {
if (acquireLock) {
- omMetadataManager.getLock().releaseReadLock(
- BUCKET_LOCK, volumeName, bucketName);
+ mergeOmLockDetails(omMetadataManager.getLock().releaseReadLock(
+ BUCKET_LOCK, volumeName, bucketName));
}
}
@@ -525,8 +526,9 @@ public abstract class OMKeyRequest extends OMClientRequest {
OMMetadataManager omMetadataManager = ozoneManager.getMetadataManager();
if (ozoneManager.getKmsProvider() != null) {
- acquireLock = omMetadataManager.getLock().acquireReadLock(
- BUCKET_LOCK, volumeName, bucketName);
+ mergeOmLockDetails(omMetadataManager.getLock().acquireReadLock(
+ BUCKET_LOCK, volumeName, bucketName));
+ acquireLock = getOmLockDetails().isLockAcquired();
try {
ResolvedBucket resolvedBucket = ozoneManager.resolveBucketLink(
Pair.of(keyArgs.getVolumeName(), keyArgs.getBucketName()));
@@ -548,8 +550,8 @@ public abstract class OMKeyRequest extends OMClientRequest {
}
} finally {
if (acquireLock) {
- omMetadataManager.getLock()
- .releaseReadLock(BUCKET_LOCK, volumeName, bucketName);
+ mergeOmLockDetails(omMetadataManager.getLock()
+ .releaseReadLock(BUCKET_LOCK, volumeName, bucketName));
}
}
}
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeySetTimesRequest.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeySetTimesRequest.java
index c056a9c7e0..b898e0c882 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeySetTimesRequest.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeySetTimesRequest.java
@@ -201,8 +201,10 @@ public class OMKeySetTimesRequest extends OMKeyRequest {
OzoneObj.StoreType.OZONE, IAccessAuthorizer.ACLType.WRITE_ACL,
volume, bucket, key);
}
- lockAcquired = omMetadataManager.getLock().acquireWriteLock(
- BUCKET_LOCK, volume, bucket);
+ mergeOmLockDetails(
+ omMetadataManager.getLock().acquireWriteLock(BUCKET_LOCK, volume,
+ bucket));
+ lockAcquired = getOmLockDetails().isLockAcquired();
String dbKey = omMetadataManager.getOzoneKey(volume, bucket, key);
omKeyInfo = omMetadataManager.getKeyTable(getBucketLayout())
@@ -231,8 +233,12 @@ public class OMKeySetTimesRequest extends OMKeyRequest {
addResponseToDoubleBuffer(trxnLogIndex, omClientResponse,
omDoubleBufferHelper);
if (lockAcquired) {
- omMetadataManager.getLock().releaseWriteLock(BUCKET_LOCK, volume,
- bucket);
+ mergeOmLockDetails(
+ omMetadataManager.getLock().releaseWriteLock(BUCKET_LOCK, volume,
+ bucket));
+ }
+ if (omClientResponse != null) {
+ omClientResponse.setOmLockDetails(getOmLockDetails());
}
}
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeySetTimesRequestWithFSO.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeySetTimesRequestWithFSO.java
index eff1187344..dbfb6978e1 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeySetTimesRequestWithFSO.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeySetTimesRequestWithFSO.java
@@ -89,8 +89,9 @@ public class OMKeySetTimesRequestWithFSO extends
OMKeySetTimesRequest {
OzoneObj.StoreType.OZONE, IAccessAuthorizer.ACLType.WRITE_ACL,
volume, bucket, key);
}
- lockAcquired = omMetadataManager.getLock()
- .acquireWriteLock(BUCKET_LOCK, volume, bucket);
+ mergeOmLockDetails(omMetadataManager.getLock()
+ .acquireWriteLock(BUCKET_LOCK, volume, bucket));
+ lockAcquired = getOmLockDetails().isLockAcquired();
OzoneFileStatus keyStatus = OMFileRequest.getOMKeyInfoIfExists(
omMetadataManager, volume, bucket, key, 0,
ozoneManager.getDefaultReplicationConfig());
@@ -132,8 +133,11 @@ public class OMKeySetTimesRequestWithFSO extends
OMKeySetTimesRequest {
addResponseToDoubleBuffer(trxnLogIndex, omClientResponse,
omDoubleBufferHelper);
if (lockAcquired) {
- omMetadataManager.getLock()
- .releaseWriteLock(BUCKET_LOCK, volume, bucket);
+ mergeOmLockDetails(omMetadataManager.getLock()
+ .releaseWriteLock(BUCKET_LOCK, volume, bucket));
+ }
+ if (omClientResponse != null) {
+ omClientResponse.setOmLockDetails(getOmLockDetails());
}
}
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeysDeleteRequest.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeysDeleteRequest.java
index d22c167e89..f7926e8a72 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeysDeleteRequest.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeysDeleteRequest.java
@@ -128,8 +128,9 @@ public class OMKeysDeleteRequest extends OMKeyRequest {
volumeName = bucket.realVolume();
bucketName = bucket.realBucket();
- acquiredLock = omMetadataManager.getLock()
- .acquireWriteLock(BUCKET_LOCK, volumeName, bucketName);
+ mergeOmLockDetails(omMetadataManager.getLock()
+ .acquireWriteLock(BUCKET_LOCK, volumeName, bucketName));
+ acquiredLock = getOmLockDetails().isLockAcquired();
// Validate bucket and volume exists or not.
validateBucketAndVolume(omMetadataManager, volumeName, bucketName);
String volumeOwner = getVolumeOwner(omMetadataManager, volumeName);
@@ -205,11 +206,14 @@ public class OMKeysDeleteRequest extends OMKeyRequest {
} finally {
if (acquiredLock) {
- omMetadataManager.getLock()
- .releaseWriteLock(BUCKET_LOCK, volumeName, bucketName);
+ mergeOmLockDetails(omMetadataManager.getLock()
+ .releaseWriteLock(BUCKET_LOCK, volumeName, bucketName));
}
addResponseToDoubleBuffer(trxnLogIndex, omClientResponse,
omDoubleBufferHelper);
+ if (omClientResponse != null) {
+ omClientResponse.setOmLockDetails(getOmLockDetails());
+ }
}
addDeletedKeys(auditMap, deleteKeys, unDeletedKeys.getKeysList());
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeysRenameRequest.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeysRenameRequest.java
index a9c12d444a..df4bbe256f 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeysRenameRequest.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeysRenameRequest.java
@@ -120,9 +120,10 @@ public class OMKeysRenameRequest extends OMKeyRequest {
bucket.audit(auditMap);
volumeName = bucket.realVolume();
bucketName = bucket.realBucket();
- acquiredLock =
- omMetadataManager.getLock().acquireWriteLock(BUCKET_LOCK,
- volumeName, bucketName);
+ mergeOmLockDetails(
+ omMetadataManager.getLock().acquireWriteLock(BUCKET_LOCK, volumeName,
+ bucketName));
+ acquiredLock = getOmLockDetails().isLockAcquired();
// Validate bucket and volume exists or not.
validateBucketAndVolume(omMetadataManager, volumeName, bucketName);
@@ -237,8 +238,11 @@ public class OMKeysRenameRequest extends OMKeyRequest {
addResponseToDoubleBuffer(trxnLogIndex, omClientResponse,
omDoubleBufferHelper);
if (acquiredLock) {
- omMetadataManager.getLock().releaseWriteLock(BUCKET_LOCK, volumeName,
- bucketName);
+ mergeOmLockDetails(omMetadataManager.getLock()
+ .releaseWriteLock(BUCKET_LOCK, volumeName, bucketName));
+ }
+ if (omClientResponse != null) {
+ omClientResponse.setOmLockDetails(getOmLockDetails());
}
}
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMOpenKeysDeleteRequest.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMOpenKeysDeleteRequest.java
index bef1193bb3..53cfc56142 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMOpenKeysDeleteRequest.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMOpenKeysDeleteRequest.java
@@ -109,6 +109,9 @@ public class OMOpenKeysDeleteRequest extends OMKeyRequest {
} finally {
addResponseToDoubleBuffer(trxnLogIndex, omClientResponse,
omDoubleBufferHelper);
+ if (omClientResponse != null) {
+ omClientResponse.setOmLockDetails(getOmLockDetails());
+ }
}
processResults(omMetrics, numSubmittedOpenKeys, deletedOpenKeys.size(),
@@ -147,8 +150,9 @@ public class OMOpenKeysDeleteRequest extends OMKeyRequest {
OMMetadataManager omMetadataManager = ozoneManager.getMetadataManager();
try {
- acquiredLock = omMetadataManager.getLock().acquireWriteLock(BUCKET_LOCK,
- volumeName, bucketName);
+ mergeOmLockDetails(omMetadataManager.getLock()
+ .acquireWriteLock(BUCKET_LOCK, volumeName, bucketName));
+ acquiredLock = getOmLockDetails().isLockAcquired();
for (OpenKey key: keysPerBucket.getKeysList()) {
String fullKeyName = key.getName();
@@ -189,8 +193,8 @@ public class OMOpenKeysDeleteRequest extends OMKeyRequest {
}
} finally {
if (acquiredLock) {
- omMetadataManager.getLock().releaseWriteLock(BUCKET_LOCK, volumeName,
- bucketName);
+ mergeOmLockDetails(omMetadataManager.getLock()
+ .releaseWriteLock(BUCKET_LOCK, volumeName, bucketName));
}
}
}
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/OMKeyAclRequest.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/OMKeyAclRequest.java
index a230dc9c09..dad0e5f434 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/OMKeyAclRequest.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/OMKeyAclRequest.java
@@ -95,9 +95,10 @@ public abstract class OMKeyAclRequest extends
OMClientRequest {
OzoneObj.StoreType.OZONE, IAccessAuthorizer.ACLType.WRITE_ACL,
volume, bucket, key);
}
- lockAcquired =
+ mergeOmLockDetails(
omMetadataManager.getLock().acquireWriteLock(BUCKET_LOCK, volume,
- bucket);
+ bucket));
+ lockAcquired = getOmLockDetails().isLockAcquired();
String dbKey = omMetadataManager.getOzoneKey(volume, bucket, key);
omKeyInfo = omMetadataManager.getKeyTable(getBucketLayout())
@@ -141,8 +142,11 @@ public abstract class OMKeyAclRequest extends
OMClientRequest {
addResponseToDoubleBuffer(trxnLogIndex, omClientResponse,
omDoubleBufferHelper);
if (lockAcquired) {
- omMetadataManager.getLock().releaseWriteLock(BUCKET_LOCK, volume,
- bucket);
+ mergeOmLockDetails(omMetadataManager.getLock()
+ .releaseWriteLock(BUCKET_LOCK, volume, bucket));
+ }
+ if (omClientResponse != null) {
+ omClientResponse.setOmLockDetails(getOmLockDetails());
}
}
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/OMKeyAclRequestWithFSO.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/OMKeyAclRequestWithFSO.java
index 1f3ccf1077..5b1be12390 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/OMKeyAclRequestWithFSO.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/OMKeyAclRequestWithFSO.java
@@ -88,8 +88,9 @@ public abstract class OMKeyAclRequestWithFSO extends
OMKeyAclRequest {
OzoneObj.StoreType.OZONE, IAccessAuthorizer.ACLType.WRITE_ACL,
volume, bucket, key);
}
- lockAcquired = omMetadataManager.getLock()
- .acquireWriteLock(BUCKET_LOCK, volume, bucket);
+ mergeOmLockDetails(omMetadataManager.getLock()
+ .acquireWriteLock(BUCKET_LOCK, volume, bucket));
+ lockAcquired = getOmLockDetails().isLockAcquired();
OzoneFileStatus keyStatus = OMFileRequest.getOMKeyInfoIfExists(
omMetadataManager, volume, bucket, key, 0,
ozoneManager.getDefaultReplicationConfig());
@@ -143,8 +144,11 @@ public abstract class OMKeyAclRequestWithFSO extends
OMKeyAclRequest {
addResponseToDoubleBuffer(trxnLogIndex, omClientResponse,
omDoubleBufferHelper);
if (lockAcquired) {
- omMetadataManager.getLock()
- .releaseWriteLock(BUCKET_LOCK, volume, bucket);
+ mergeOmLockDetails(omMetadataManager.getLock()
+ .releaseWriteLock(BUCKET_LOCK, volume, bucket));
+ }
+ if (omClientResponse != null) {
+ omClientResponse.setOmLockDetails(getOmLockDetails());
}
}
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/prefix/OMPrefixAclRequest.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/prefix/OMPrefixAclRequest.java
index a246e5ff6b..b2bb1291a9 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/prefix/OMPrefixAclRequest.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/prefix/OMPrefixAclRequest.java
@@ -89,8 +89,9 @@ public abstract class OMPrefixAclRequest extends
OMClientRequest {
volume, bucket, key);
}
- lockAcquired =
- omMetadataManager.getLock().acquireWriteLock(PREFIX_LOCK,
prefixPath);
+ mergeOmLockDetails(omMetadataManager.getLock()
+ .acquireWriteLock(PREFIX_LOCK, prefixPath));
+ lockAcquired = getOmLockDetails().isLockAcquired();
omPrefixInfo = omMetadataManager.getPrefixTable().get(prefixPath);
@@ -140,8 +141,11 @@ public abstract class OMPrefixAclRequest extends
OMClientRequest {
addResponseToDoubleBuffer(trxnLogIndex, omClientResponse,
omDoubleBufferHelper);
if (lockAcquired) {
- omMetadataManager.getLock().releaseWriteLock(PREFIX_LOCK,
- getOzoneObj().getPath());
+ mergeOmLockDetails(omMetadataManager.getLock()
+ .releaseWriteLock(PREFIX_LOCK, getOzoneObj().getPath()));
+ }
+ if (omClientResponse != null) {
+ omClientResponse.setOmLockDetails(getOmLockDetails());
}
}
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3ExpiredMultipartUploadsAbortRequest.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3ExpiredMultipartUploadsAbortRequest.java
index 0898089576..929814685e 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3ExpiredMultipartUploadsAbortRequest.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3ExpiredMultipartUploadsAbortRequest.java
@@ -32,6 +32,7 @@ import org.apache.hadoop.ozone.om.helpers.OmBucketInfo;
import org.apache.hadoop.ozone.om.helpers.OmMultipartAbortInfo;
import org.apache.hadoop.ozone.om.helpers.OmMultipartKeyInfo;
import org.apache.hadoop.ozone.om.helpers.OmMultipartUpload;
+import org.apache.hadoop.ozone.om.lock.OMLockDetails;
import org.apache.hadoop.ozone.om.ratis.utils.OzoneManagerDoubleBufferHelper;
import org.apache.hadoop.ozone.om.request.key.OMKeyRequest;
import org.apache.hadoop.ozone.om.request.util.OMMultipartUploadUtils;
@@ -128,6 +129,9 @@ public class S3ExpiredMultipartUploadsAbortRequest extends
OMKeyRequest {
} finally {
addResponseToDoubleBuffer(trxnLogIndex, omClientResponse,
omDoubleBufferHelper);
+ if (omClientResponse != null) {
+ omClientResponse.setOmLockDetails(getOmLockDetails());
+ }
}
// Only successfully aborted MPUs are included in the audit.
@@ -197,9 +201,11 @@ public class S3ExpiredMultipartUploadsAbortRequest extends
OMKeyRequest {
OMMetadataManager omMetadataManager = ozoneManager.getMetadataManager();
OmBucketInfo omBucketInfo = null;
BucketLayout bucketLayout = null;
+ OMLockDetails omLockDetails = null;
try {
- acquiredLock = omMetadataManager.getLock()
+ omLockDetails = omMetadataManager.getLock()
.acquireWriteLock(BUCKET_LOCK, volumeName, bucketName);
+ acquiredLock = omLockDetails.isLockAcquired();
omBucketInfo = getBucketInfo(omMetadataManager, volumeName, bucketName);
@@ -326,8 +332,8 @@ public class S3ExpiredMultipartUploadsAbortRequest extends
OMKeyRequest {
}
} finally {
if (acquiredLock) {
- omMetadataManager.getLock().releaseWriteLock(BUCKET_LOCK, volumeName,
- bucketName);
+ mergeOmLockDetails(omMetadataManager.getLock()
+ .releaseWriteLock(BUCKET_LOCK, volumeName, bucketName));
}
}
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3InitiateMultipartUploadRequest.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3InitiateMultipartUploadRequest.java
index b271837806..f87cdaae0d 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3InitiateMultipartUploadRequest.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3InitiateMultipartUploadRequest.java
@@ -149,9 +149,10 @@ public class S3InitiateMultipartUploadRequest extends
OMKeyRequest {
checkKeyAcls(ozoneManager, volumeName, bucketName, keyName,
IAccessAuthorizer.ACLType.CREATE, OzoneObj.ResourceType.KEY);
- acquiredBucketLock =
- omMetadataManager.getLock().acquireWriteLock(BUCKET_LOCK,
- volumeName, bucketName);
+ mergeOmLockDetails(
+ omMetadataManager.getLock().acquireWriteLock(BUCKET_LOCK, volumeName,
+ bucketName));
+ acquiredBucketLock = getOmLockDetails().isLockAcquired();
validateBucketAndVolume(omMetadataManager, volumeName, bucketName);
@@ -248,8 +249,11 @@ public class S3InitiateMultipartUploadRequest extends
OMKeyRequest {
addResponseToDoubleBuffer(transactionLogIndex, omClientResponse,
ozoneManagerDoubleBufferHelper);
if (acquiredBucketLock) {
- omMetadataManager.getLock().releaseWriteLock(BUCKET_LOCK,
- volumeName, bucketName);
+ mergeOmLockDetails(omMetadataManager.getLock()
+ .releaseWriteLock(BUCKET_LOCK, volumeName, bucketName));
+ }
+ if (omClientResponse != null) {
+ omClientResponse.setOmLockDetails(getOmLockDetails());
}
}
logResult(ozoneManager, multipartInfoInitiateRequest, auditMap, volumeName,
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3InitiateMultipartUploadRequestWithFSO.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3InitiateMultipartUploadRequestWithFSO.java
index 3df957d60f..adde988d8b 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3InitiateMultipartUploadRequestWithFSO.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3InitiateMultipartUploadRequestWithFSO.java
@@ -105,9 +105,10 @@ public class S3InitiateMultipartUploadRequestWithFSO
bucketName = keyArgs.getBucketName();
// TODO to support S3 ACL later.
- acquiredBucketLock =
- omMetadataManager.getLock().acquireWriteLock(BUCKET_LOCK,
- volumeName, bucketName);
+ mergeOmLockDetails(
+ omMetadataManager.getLock().acquireWriteLock(BUCKET_LOCK, volumeName,
+ bucketName));
+ acquiredBucketLock = getOmLockDetails().isLockAcquired();
validateBucketAndVolume(omMetadataManager, volumeName, bucketName);
@@ -235,8 +236,11 @@ public class S3InitiateMultipartUploadRequestWithFSO
addResponseToDoubleBuffer(transactionLogIndex, omClientResponse,
ozoneManagerDoubleBufferHelper);
if (acquiredBucketLock) {
- omMetadataManager.getLock().releaseWriteLock(BUCKET_LOCK,
- volumeName, bucketName);
+ mergeOmLockDetails(omMetadataManager.getLock()
+ .releaseWriteLock(BUCKET_LOCK, volumeName, bucketName));
+ }
+ if (omClientResponse != null) {
+ omClientResponse.setOmLockDetails(getOmLockDetails());
}
}
logResult(ozoneManager, multipartInfoInitiateRequest, auditMap, volumeName,
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3MultipartUploadAbortRequest.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3MultipartUploadAbortRequest.java
index 0b13b40295..3257f5201e 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3MultipartUploadAbortRequest.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3MultipartUploadAbortRequest.java
@@ -130,9 +130,10 @@ public class S3MultipartUploadAbortRequest extends
OMKeyRequest {
checkKeyAcls(ozoneManager, volumeName, bucketName, keyName,
IAccessAuthorizer.ACLType.WRITE, OzoneObj.ResourceType.KEY);
- acquiredLock =
- omMetadataManager.getLock().acquireWriteLock(BUCKET_LOCK,
- volumeName, bucketName);
+ mergeOmLockDetails(
+ omMetadataManager.getLock().acquireWriteLock(BUCKET_LOCK, volumeName,
+ bucketName));
+ acquiredLock = getOmLockDetails().isLockAcquired();
validateBucketAndVolume(omMetadataManager, volumeName, bucketName);
@@ -199,8 +200,11 @@ public class S3MultipartUploadAbortRequest extends
OMKeyRequest {
addResponseToDoubleBuffer(trxnLogIndex, omClientResponse,
omDoubleBufferHelper);
if (acquiredLock) {
- omMetadataManager.getLock().releaseWriteLock(BUCKET_LOCK,
- volumeName, bucketName);
+ mergeOmLockDetails(omMetadataManager.getLock()
+ .releaseWriteLock(BUCKET_LOCK, volumeName, bucketName));
+ }
+ if (omClientResponse != null) {
+ omClientResponse.setOmLockDetails(getOmLockDetails());
}
}
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3MultipartUploadCommitPartRequest.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3MultipartUploadCommitPartRequest.java
index ac1d7c9b32..e1aacde7e8 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3MultipartUploadCommitPartRequest.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3MultipartUploadCommitPartRequest.java
@@ -140,8 +140,9 @@ public class S3MultipartUploadCommitPartRequest extends
OMKeyRequest {
checkKeyAclsInOpenKeyTable(ozoneManager, volumeName, bucketName, keyName,
IAccessAuthorizer.ACLType.WRITE, clientID);
- acquiredLock = omMetadataManager.getLock().acquireWriteLock(BUCKET_LOCK,
- volumeName, bucketName);
+ mergeOmLockDetails(omMetadataManager.getLock()
+ .acquireWriteLock(BUCKET_LOCK, volumeName, bucketName));
+ acquiredLock = getOmLockDetails().isLockAcquired();
validateBucketAndVolume(omMetadataManager, volumeName, bucketName);
@@ -259,8 +260,11 @@ public class S3MultipartUploadCommitPartRequest extends
OMKeyRequest {
addResponseToDoubleBuffer(trxnLogIndex, omClientResponse,
omDoubleBufferHelper);
if (acquiredLock) {
- omMetadataManager.getLock().releaseWriteLock(BUCKET_LOCK,
- volumeName, bucketName);
+ mergeOmLockDetails(omMetadataManager.getLock()
+ .releaseWriteLock(BUCKET_LOCK, volumeName, bucketName));
+ }
+ if (omClientResponse != null) {
+ omClientResponse.setOmLockDetails(getOmLockDetails());
}
}
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3MultipartUploadCompleteRequest.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3MultipartUploadCompleteRequest.java
index 9fb88af611..26842dbf1e 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3MultipartUploadCompleteRequest.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3MultipartUploadCompleteRequest.java
@@ -145,8 +145,9 @@ public class S3MultipartUploadCompleteRequest extends
OMKeyRequest {
checkKeyAcls(ozoneManager, volumeName, bucketName, keyName,
IAccessAuthorizer.ACLType.WRITE, OzoneObj.ResourceType.KEY);
- acquiredLock = omMetadataManager.getLock().acquireWriteLock(BUCKET_LOCK,
- volumeName, bucketName);
+ mergeOmLockDetails(omMetadataManager.getLock()
+ .acquireWriteLock(BUCKET_LOCK, volumeName, bucketName));
+ acquiredLock = getOmLockDetails().isLockAcquired();
validateBucketAndVolume(omMetadataManager, volumeName, bucketName);
OmBucketInfo omBucketInfo = getBucketInfo(omMetadataManager,
@@ -278,8 +279,11 @@ public class S3MultipartUploadCompleteRequest extends
OMKeyRequest {
addResponseToDoubleBuffer(trxnLogIndex, omClientResponse,
omDoubleBufferHelper);
if (acquiredLock) {
- omMetadataManager.getLock().releaseWriteLock(BUCKET_LOCK,
- volumeName, bucketName);
+ mergeOmLockDetails(omMetadataManager.getLock()
+ .releaseWriteLock(BUCKET_LOCK, volumeName, bucketName));
+ }
+ if (omClientResponse != null) {
+ omClientResponse.setOmLockDetails(getOmLockDetails());
}
}
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/tenant/OMTenantAssignAdminRequest.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/tenant/OMTenantAssignAdminRequest.java
index 379ace4ccc..cfc47c512a 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/tenant/OMTenantAssignAdminRequest.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/tenant/OMTenantAssignAdminRequest.java
@@ -183,8 +183,9 @@ public class OMTenantAssignAdminRequest extends
OMClientRequest {
volumeName = ozoneManager.getMultiTenantManager()
.getTenantVolumeName(tenantId);
- acquiredVolumeLock = omMetadataManager.getLock().acquireWriteLock(
- VOLUME_LOCK, volumeName);
+ mergeOmLockDetails(omMetadataManager.getLock().acquireWriteLock(
+ VOLUME_LOCK, volumeName));
+ acquiredVolumeLock = getOmLockDetails().isLockAcquired();
final OmDBAccessIdInfo dbAccessIdInfo =
omMetadataManager.getTenantAccessIdTable().get(accessId);
@@ -227,10 +228,15 @@ public class OMTenantAssignAdminRequest extends
OMClientRequest {
ozoneManagerDoubleBufferHelper);
if (acquiredVolumeLock) {
Preconditions.checkNotNull(volumeName);
- omMetadataManager.getLock().releaseWriteLock(VOLUME_LOCK, volumeName);
+ mergeOmLockDetails(
+ omMetadataManager.getLock().releaseWriteLock(VOLUME_LOCK,
+ volumeName));
}
// Release authorizer write lock
multiTenantManager.getAuthorizerLock().unlockWriteInOMRequest();
+ if (omClientResponse != null) {
+ omClientResponse.setOmLockDetails(getOmLockDetails());
+ }
}
// Audit
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/tenant/OMTenantAssignUserAccessIdRequest.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/tenant/OMTenantAssignUserAccessIdRequest.java
index 4b85cb228f..27898140e7 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/tenant/OMTenantAssignUserAccessIdRequest.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/tenant/OMTenantAssignUserAccessIdRequest.java
@@ -230,8 +230,9 @@ public class OMTenantAssignUserAccessIdRequest extends
OMClientRequest {
volumeName = ozoneManager.getMultiTenantManager()
.getTenantVolumeName(tenantId);
- acquiredVolumeLock = omMetadataManager.getLock().acquireWriteLock(
- VOLUME_LOCK, volumeName);
+ mergeOmLockDetails(omMetadataManager.getLock().acquireWriteLock(
+ VOLUME_LOCK, volumeName));
+ acquiredVolumeLock = getOmLockDetails().isLockAcquired();
// Expect tenant existence in tenantStateTable
if (!omMetadataManager.getTenantStateTable().isExist(tenantId)) {
@@ -339,10 +340,15 @@ public class OMTenantAssignUserAccessIdRequest extends
OMClientRequest {
ozoneManagerDoubleBufferHelper);
if (acquiredVolumeLock) {
Preconditions.checkNotNull(volumeName);
- omMetadataManager.getLock().releaseWriteLock(VOLUME_LOCK, volumeName);
+ mergeOmLockDetails(
+ omMetadataManager.getLock().releaseWriteLock(VOLUME_LOCK,
+ volumeName));
}
// Release authorizer write lock
multiTenantManager.getAuthorizerLock().unlockWriteInOMRequest();
+ if (omClientResponse != null) {
+ omClientResponse.setOmLockDetails(getOmLockDetails());
+ }
}
// Audit
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/tenant/OMTenantCreateRequest.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/tenant/OMTenantCreateRequest.java
index d176bdf51d..b2791832dd 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/tenant/OMTenantCreateRequest.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/tenant/OMTenantCreateRequest.java
@@ -258,8 +258,9 @@ public class OMTenantCreateRequest extends OMVolumeRequest {
tenantId, null, null);
}
- acquiredVolumeLock = omMetadataManager.getLock().acquireWriteLock(
- VOLUME_LOCK, volumeName);
+ mergeOmLockDetails(omMetadataManager.getLock().acquireWriteLock(
+ VOLUME_LOCK, volumeName));
+ acquiredVolumeLock = getOmLockDetails().isLockAcquired();
boolean skipVolumeCreation = false;
// Check volume existence
@@ -275,8 +276,9 @@ public class OMTenantCreateRequest extends OMVolumeRequest {
}
}
- acquiredUserLock = omMetadataManager.getLock().acquireWriteLock(
- USER_LOCK, owner);
+ mergeOmLockDetails(omMetadataManager.getLock().acquireWriteLock(
+ USER_LOCK, owner));
+ acquiredUserLock = getOmLockDetails().isLockAcquired();
PersistedUserVolumeInfo volumeList = null;
if (!skipVolumeCreation) {
@@ -358,13 +360,19 @@ public class OMTenantCreateRequest extends
OMVolumeRequest {
addResponseToDoubleBuffer(transactionLogIndex, omClientResponse,
ozoneManagerDoubleBufferHelper);
if (acquiredUserLock) {
- omMetadataManager.getLock().releaseWriteLock(USER_LOCK, owner);
+ mergeOmLockDetails(
+ omMetadataManager.getLock().releaseWriteLock(USER_LOCK, owner));
}
if (acquiredVolumeLock) {
- omMetadataManager.getLock().releaseWriteLock(VOLUME_LOCK, volumeName);
+ mergeOmLockDetails(
+ omMetadataManager.getLock().releaseWriteLock(VOLUME_LOCK,
+ volumeName));
}
// Release authorizer write lock
multiTenantManager.getAuthorizerLock().unlockWriteInOMRequest();
+ if (omClientResponse != null) {
+ omClientResponse.setOmLockDetails(getOmLockDetails());
+ }
}
// Perform audit logging
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/tenant/OMTenantDeleteRequest.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/tenant/OMTenantDeleteRequest.java
index 9dba156887..a5877fc9e4 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/tenant/OMTenantDeleteRequest.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/tenant/OMTenantDeleteRequest.java
@@ -148,8 +148,9 @@ public class OMTenantDeleteRequest extends OMVolumeRequest {
decVolumeRefCount = volumeName.length() > 0;
// Acquire the volume lock
- acquiredVolumeLock = omMetadataManager.getLock().acquireWriteLock(
- VOLUME_LOCK, volumeName);
+ mergeOmLockDetails(omMetadataManager.getLock().acquireWriteLock(
+ VOLUME_LOCK, volumeName));
+ acquiredVolumeLock = getOmLockDetails().isLockAcquired();
// Check if there are any accessIds in the tenant
if (!ozoneManager.getMultiTenantManager().isTenantEmpty(tenantId)) {
@@ -215,10 +216,15 @@ public class OMTenantDeleteRequest extends
OMVolumeRequest {
addResponseToDoubleBuffer(transactionLogIndex, omClientResponse,
ozoneManagerDoubleBufferHelper);
if (acquiredVolumeLock) {
- omMetadataManager.getLock().releaseWriteLock(VOLUME_LOCK, volumeName);
+ mergeOmLockDetails(
+ omMetadataManager.getLock().releaseWriteLock(VOLUME_LOCK,
+ volumeName));
}
// Release authorizer write lock
multiTenantManager.getAuthorizerLock().unlockWriteInOMRequest();
+ if (omClientResponse != null) {
+ omClientResponse.setOmLockDetails(getOmLockDetails());
+ }
}
// Perform audit logging
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/tenant/OMTenantRevokeAdminRequest.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/tenant/OMTenantRevokeAdminRequest.java
index b78c959c50..6c60b4b396 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/tenant/OMTenantRevokeAdminRequest.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/tenant/OMTenantRevokeAdminRequest.java
@@ -173,8 +173,9 @@ public class OMTenantRevokeAdminRequest extends
OMClientRequest {
volumeName = ozoneManager.getMultiTenantManager()
.getTenantVolumeName(tenantId);
- acquiredVolumeLock = omMetadataManager.getLock().acquireWriteLock(
- VOLUME_LOCK, volumeName);
+ mergeOmLockDetails(omMetadataManager.getLock().acquireWriteLock(
+ VOLUME_LOCK, volumeName));
+ acquiredVolumeLock = getOmLockDetails().isLockAcquired();
final OmDBAccessIdInfo dbAccessIdInfo =
omMetadataManager.getTenantAccessIdTable().get(accessId);
@@ -217,10 +218,15 @@ public class OMTenantRevokeAdminRequest extends
OMClientRequest {
ozoneManagerDoubleBufferHelper);
if (acquiredVolumeLock) {
Preconditions.checkNotNull(volumeName);
- omMetadataManager.getLock().releaseWriteLock(VOLUME_LOCK, volumeName);
+ mergeOmLockDetails(
+ omMetadataManager.getLock().releaseWriteLock(VOLUME_LOCK,
+ volumeName));
}
// Release authorizer write lock
multiTenantManager.getAuthorizerLock().unlockWriteInOMRequest();
+ if (omClientResponse != null) {
+ omClientResponse.setOmLockDetails(getOmLockDetails());
+ }
}
// Audit
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/tenant/OMTenantRevokeUserAccessIdRequest.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/tenant/OMTenantRevokeUserAccessIdRequest.java
index dffcaa2d65..8bd95fb414 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/tenant/OMTenantRevokeUserAccessIdRequest.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/tenant/OMTenantRevokeUserAccessIdRequest.java
@@ -185,9 +185,10 @@ public class OMTenantRevokeUserAccessIdRequest extends
OMClientRequest {
volumeName = ozoneManager.getMultiTenantManager()
.getTenantVolumeName(tenantId);
- acquiredVolumeLock =
- omMetadataManager.getLock().acquireWriteLock(VOLUME_LOCK,
volumeName);
-
+ mergeOmLockDetails(
+ omMetadataManager.getLock().acquireWriteLock(VOLUME_LOCK,
+ volumeName));
+ acquiredVolumeLock = getOmLockDetails().isLockAcquired();
// Remove accessId from principalToAccessIdsTable
OmDBAccessIdInfo omDBAccessIdInfo =
omMetadataManager.getTenantAccessIdTable().get(accessId);
@@ -234,10 +235,15 @@ public class OMTenantRevokeUserAccessIdRequest extends
OMClientRequest {
ozoneManagerDoubleBufferHelper);
if (acquiredVolumeLock) {
Preconditions.checkNotNull(volumeName);
- omMetadataManager.getLock().releaseWriteLock(VOLUME_LOCK, volumeName);
+ mergeOmLockDetails(
+ omMetadataManager.getLock().releaseWriteLock(VOLUME_LOCK,
+ volumeName));
}
// Release authorizer write lock
multiTenantManager.getAuthorizerLock().unlockWriteInOMRequest();
+ if (omClientResponse != null) {
+ omClientResponse.setOmLockDetails(getOmLockDetails());
+ }
}
// Audit
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/snapshot/OMSnapshotCreateRequest.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/snapshot/OMSnapshotCreateRequest.java
index 4e706e9b90..30236e5f55 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/snapshot/OMSnapshotCreateRequest.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/snapshot/OMSnapshotCreateRequest.java
@@ -146,13 +146,15 @@ public class OMSnapshotCreateRequest extends
OMClientRequest {
try {
// Lock bucket so it doesn't
// get deleted while creating snapshot
- acquiredBucketLock =
+ mergeOmLockDetails(
omMetadataManager.getLock().acquireReadLock(BUCKET_LOCK,
- volumeName, bucketName);
+ volumeName, bucketName));
+ acquiredBucketLock = getOmLockDetails().isLockAcquired();
- acquiredSnapshotLock =
+ mergeOmLockDetails(
omMetadataManager.getLock().acquireWriteLock(SNAPSHOT_LOCK,
- volumeName, bucketName, snapshotName);
+ volumeName, bucketName, snapshotName));
+ acquiredSnapshotLock = getOmLockDetails().isLockAcquired();
// Check if snapshot already exists
if (omMetadataManager.getSnapshotInfoTable().isExist(key)) {
@@ -199,12 +201,17 @@ public class OMSnapshotCreateRequest extends
OMClientRequest {
addResponseToDoubleBuffer(transactionLogIndex, omClientResponse,
ozoneManagerDoubleBufferHelper);
if (acquiredSnapshotLock) {
- omMetadataManager.getLock().releaseWriteLock(SNAPSHOT_LOCK, volumeName,
- bucketName, snapshotName);
+ mergeOmLockDetails(
+ omMetadataManager.getLock().releaseWriteLock(SNAPSHOT_LOCK,
+ volumeName, bucketName, snapshotName));
}
if (acquiredBucketLock) {
- omMetadataManager.getLock().releaseReadLock(BUCKET_LOCK, volumeName,
- bucketName);
+ mergeOmLockDetails(
+ omMetadataManager.getLock().releaseReadLock(BUCKET_LOCK,
volumeName,
+ bucketName));
+ }
+ if (omClientResponse != null) {
+ omClientResponse.setOmLockDetails(getOmLockDetails());
}
}
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/snapshot/OMSnapshotDeleteRequest.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/snapshot/OMSnapshotDeleteRequest.java
index 2e9ff59104..e56d9da173 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/snapshot/OMSnapshotDeleteRequest.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/snapshot/OMSnapshotDeleteRequest.java
@@ -139,13 +139,15 @@ public class OMSnapshotDeleteRequest extends
OMClientRequest {
try {
// Acquire bucket lock
- acquiredBucketLock =
+ mergeOmLockDetails(
omMetadataManager.getLock().acquireWriteLock(BUCKET_LOCK,
- volumeName, bucketName);
+ volumeName, bucketName));
+ acquiredBucketLock = getOmLockDetails().isLockAcquired();
- acquiredSnapshotLock =
+ mergeOmLockDetails(
omMetadataManager.getLock().acquireWriteLock(SNAPSHOT_LOCK,
- volumeName, bucketName, snapshotName);
+ volumeName, bucketName, snapshotName));
+ acquiredSnapshotLock = getOmLockDetails().isLockAcquired();
// Retrieve SnapshotInfo from the table
String tableKey = SnapshotInfo.getTableKey(volumeName, bucketName,
@@ -195,12 +197,17 @@ public class OMSnapshotDeleteRequest extends
OMClientRequest {
addResponseToDoubleBuffer(transactionLogIndex, omClientResponse,
ozoneManagerDoubleBufferHelper);
if (acquiredSnapshotLock) {
- omMetadataManager.getLock().releaseWriteLock(SNAPSHOT_LOCK, volumeName,
- bucketName, snapshotName);
+ mergeOmLockDetails(
+ omMetadataManager.getLock().releaseWriteLock(SNAPSHOT_LOCK,
+ volumeName, bucketName, snapshotName));
}
if (acquiredBucketLock) {
- omMetadataManager.getLock().releaseWriteLock(BUCKET_LOCK, volumeName,
- bucketName);
+ mergeOmLockDetails(
+ omMetadataManager.getLock().releaseWriteLock(BUCKET_LOCK,
+ volumeName, bucketName));
+ }
+ if (omClientResponse != null) {
+ omClientResponse.setOmLockDetails(getOmLockDetails());
}
}
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/volume/OMVolumeCreateRequest.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/volume/OMVolumeCreateRequest.java
index 0606dd663e..37f62262af 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/volume/OMVolumeCreateRequest.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/volume/OMVolumeCreateRequest.java
@@ -141,11 +141,13 @@ public class OMVolumeCreateRequest extends
OMVolumeRequest {
}
// acquire lock.
- acquiredVolumeLock = omMetadataManager.getLock().acquireWriteLock(
- VOLUME_LOCK, volume);
+ mergeOmLockDetails(omMetadataManager.getLock().acquireWriteLock(
+ VOLUME_LOCK, volume));
+ acquiredVolumeLock = getOmLockDetails().isLockAcquired();
- acquiredUserLock =
omMetadataManager.getLock().acquireWriteLock(USER_LOCK,
- owner);
+ mergeOmLockDetails(omMetadataManager.getLock()
+ .acquireWriteLock(USER_LOCK, owner));
+ acquiredUserLock = getOmLockDetails().isLockAcquired();
String dbVolumeKey = omMetadataManager.getVolumeKey(volume);
@@ -180,10 +182,15 @@ public class OMVolumeCreateRequest extends
OMVolumeRequest {
transactionLogIndex));
}
if (acquiredUserLock) {
- omMetadataManager.getLock().releaseWriteLock(USER_LOCK, owner);
+ mergeOmLockDetails(
+ omMetadataManager.getLock().releaseWriteLock(USER_LOCK, owner));
}
if (acquiredVolumeLock) {
- omMetadataManager.getLock().releaseWriteLock(VOLUME_LOCK, volume);
+ mergeOmLockDetails(
+ omMetadataManager.getLock().releaseWriteLock(VOLUME_LOCK, volume));
+ }
+ if (omClientResponse != null) {
+ omClientResponse.setOmLockDetails(getOmLockDetails());
}
}
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/volume/OMVolumeDeleteRequest.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/volume/OMVolumeDeleteRequest.java
index c3a2c66c4d..dd8168c290 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/volume/OMVolumeDeleteRequest.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/volume/OMVolumeDeleteRequest.java
@@ -95,8 +95,9 @@ public class OMVolumeDeleteRequest extends OMVolumeRequest {
null, null);
}
- acquiredVolumeLock = omMetadataManager.getLock().acquireWriteLock(
- VOLUME_LOCK, volume);
+ mergeOmLockDetails(omMetadataManager.getLock().acquireWriteLock(
+ VOLUME_LOCK, volume));
+ acquiredVolumeLock = getOmLockDetails().isLockAcquired();
OmVolumeArgs omVolumeArgs = getVolumeInfo(omMetadataManager, volume);
@@ -111,8 +112,9 @@ public class OMVolumeDeleteRequest extends OMVolumeRequest {
}
owner = omVolumeArgs.getOwnerName();
- acquiredUserLock =
omMetadataManager.getLock().acquireWriteLock(USER_LOCK,
- owner);
+ mergeOmLockDetails(
+ omMetadataManager.getLock().acquireWriteLock(USER_LOCK, owner));
+ acquiredUserLock = getOmLockDetails().isLockAcquired();
String dbUserKey = omMetadataManager.getUserKey(owner);
String dbVolumeKey = omMetadataManager.getVolumeKey(volume);
@@ -149,10 +151,15 @@ public class OMVolumeDeleteRequest extends
OMVolumeRequest {
addResponseToDoubleBuffer(transactionLogIndex, omClientResponse,
ozoneManagerDoubleBufferHelper);
if (acquiredUserLock) {
- omMetadataManager.getLock().releaseWriteLock(USER_LOCK, owner);
+ mergeOmLockDetails(omMetadataManager.getLock()
+ .releaseWriteLock(USER_LOCK, owner));
}
if (acquiredVolumeLock) {
- omMetadataManager.getLock().releaseWriteLock(VOLUME_LOCK, volume);
+ mergeOmLockDetails(omMetadataManager.getLock()
+ .releaseWriteLock(VOLUME_LOCK, volume));
+ }
+ if (omClientResponse != null) {
+ omClientResponse.setOmLockDetails(getOmLockDetails());
}
}
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/volume/OMVolumeSetOwnerRequest.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/volume/OMVolumeSetOwnerRequest.java
index 5955124a40..3a88518326 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/volume/OMVolumeSetOwnerRequest.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/volume/OMVolumeSetOwnerRequest.java
@@ -123,8 +123,9 @@ public class OMVolumeSetOwnerRequest extends
OMVolumeRequest {
OzoneManagerStorageProtos.PersistedUserVolumeInfo newOwnerVolumeList;
OmVolumeArgs omVolumeArgs = null;
- acquiredVolumeLock = omMetadataManager.getLock().acquireWriteLock(
- VOLUME_LOCK, volume);
+ mergeOmLockDetails(omMetadataManager.getLock().acquireWriteLock(
+ VOLUME_LOCK, volume));
+ acquiredVolumeLock = getOmLockDetails().isLockAcquired();
omVolumeArgs = getVolumeInfo(omMetadataManager, volume);
oldOwner = omVolumeArgs.getOwnerName();
@@ -188,7 +189,11 @@ public class OMVolumeSetOwnerRequest extends
OMVolumeRequest {
omMetadataManager.getLock().releaseMultiUserLock(newOwner, oldOwner);
}
if (acquiredVolumeLock) {
- omMetadataManager.getLock().releaseWriteLock(VOLUME_LOCK, volume);
+ mergeOmLockDetails(omMetadataManager.getLock()
+ .releaseWriteLock(VOLUME_LOCK, volume));
+ }
+ if (omClientResponse != null) {
+ omClientResponse.setOmLockDetails(getOmLockDetails());
}
}
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/volume/OMVolumeSetQuotaRequest.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/volume/OMVolumeSetQuotaRequest.java
index ed18318b1d..a5486748db 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/volume/OMVolumeSetQuotaRequest.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/volume/OMVolumeSetQuotaRequest.java
@@ -124,8 +124,9 @@ public class OMVolumeSetQuotaRequest extends
OMVolumeRequest {
null, null);
}
- acquireVolumeLock = omMetadataManager.getLock().acquireWriteLock(
- VOLUME_LOCK, volume);
+ mergeOmLockDetails(omMetadataManager.getLock().acquireWriteLock(
+ VOLUME_LOCK, volume));
+ acquireVolumeLock = getOmLockDetails().isLockAcquired();
OmVolumeArgs omVolumeArgs = getVolumeInfo(omMetadataManager, volume);
if (checkQuotaBytesValid(omMetadataManager,
@@ -165,7 +166,11 @@ public class OMVolumeSetQuotaRequest extends
OMVolumeRequest {
addResponseToDoubleBuffer(transactionLogIndex, omClientResponse,
ozoneManagerDoubleBufferHelper);
if (acquireVolumeLock) {
- omMetadataManager.getLock().releaseWriteLock(VOLUME_LOCK, volume);
+ mergeOmLockDetails(omMetadataManager.getLock()
+ .releaseWriteLock(VOLUME_LOCK, volume));
+ }
+ if (omClientResponse != null) {
+ omClientResponse.setOmLockDetails(getOmLockDetails());
}
}
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/volume/acl/OMVolumeAclRequest.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/volume/acl/OMVolumeAclRequest.java
index 5c36e84926..857eabd737 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/volume/acl/OMVolumeAclRequest.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/volume/acl/OMVolumeAclRequest.java
@@ -89,8 +89,9 @@ public abstract class OMVolumeAclRequest extends
OMVolumeRequest {
OzoneObj.StoreType.OZONE, IAccessAuthorizer.ACLType.WRITE_ACL,
volume, null, null);
}
- lockAcquired = omMetadataManager.getLock().acquireWriteLock(
- VOLUME_LOCK, volume);
+ mergeOmLockDetails(omMetadataManager.getLock().acquireWriteLock(
+ VOLUME_LOCK, volume));
+ lockAcquired = getOmLockDetails().isLockAcquired();
OmVolumeArgs omVolumeArgs = getVolumeInfo(omMetadataManager, volume);
// result is false upon add existing acl or remove non-existing acl
@@ -136,7 +137,11 @@ public abstract class OMVolumeAclRequest extends
OMVolumeRequest {
addResponseToDoubleBuffer(trxnLogIndex, omClientResponse,
omDoubleBufferHelper);
if (lockAcquired) {
- omMetadataManager.getLock().releaseWriteLock(VOLUME_LOCK, volume);
+ mergeOmLockDetails(omMetadataManager.getLock()
+ .releaseWriteLock(VOLUME_LOCK, volume));
+ }
+ if (omClientResponse != null) {
+ omClientResponse.setOmLockDetails(getOmLockDetails());
}
}
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/OMClientResponse.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/OMClientResponse.java
index e4838d1537..2a8af15b6b 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/OMClientResponse.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/OMClientResponse.java
@@ -24,6 +24,7 @@ import java.util.concurrent.CompletableFuture;
import com.google.common.base.Preconditions;
import org.apache.hadoop.ozone.om.OMMetadataManager;
import org.apache.hadoop.ozone.om.helpers.BucketLayout;
+import org.apache.hadoop.ozone.om.lock.OMLockDetails;
import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos;
import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos
.OMResponse;
@@ -38,6 +39,7 @@ public abstract class OMClientResponse {
private OMResponse omResponse;
private CompletableFuture<Void> flushFuture = null;
+ private OMLockDetails omLockDetails;
private static final Logger LOG =
LoggerFactory.getLogger(OMClientResponse.class);
@@ -100,5 +102,14 @@ public abstract class OMClientResponse {
return flushFuture;
}
+
+ public OMLockDetails getOmLockDetails() {
+ return omLockDetails;
+ }
+
+ public void setOmLockDetails(
+ OMLockDetails omLockDetails) {
+ this.omLockDetails = omLockDetails;
+ }
}
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/protocolPB/OzoneManagerProtocolServerSideTranslatorPB.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/protocolPB/OzoneManagerProtocolServerSideTranslatorPB.java
index 59470c823d..11b6cc26c8 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/protocolPB/OzoneManagerProtocolServerSideTranslatorPB.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/protocolPB/OzoneManagerProtocolServerSideTranslatorPB.java
@@ -24,12 +24,15 @@ import static
org.apache.hadoop.util.MetricUtil.captureLatencyNs;
import java.io.IOException;
import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicLong;
import com.google.common.annotations.VisibleForTesting;
import org.apache.hadoop.hdds.server.OzoneProtocolMessageDispatcher;
import org.apache.hadoop.hdds.tracing.TracingUtil;
import org.apache.hadoop.hdds.utils.ProtocolMessageMetrics;
+import org.apache.hadoop.ipc.ProcessingDetails.Timing;
+import org.apache.hadoop.ipc.Server;
import org.apache.hadoop.ozone.OmUtils;
import org.apache.hadoop.ozone.om.OMPerformanceMetrics;
import org.apache.hadoop.ozone.om.OzoneManager;
@@ -45,6 +48,7 @@ import org.apache.hadoop.ozone.om.request.OMClientRequest;
import org.apache.hadoop.ozone.om.request.validation.RequestValidations;
import org.apache.hadoop.ozone.om.request.validation.ValidationContext;
import org.apache.hadoop.ozone.om.response.OMClientResponse;
+import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos;
import
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.OMRequest;
import
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.OMResponse;
@@ -164,6 +168,26 @@ public class OzoneManagerProtocolServerSideTranslatorPB
implements
@VisibleForTesting
public OMResponse processRequest(OMRequest request) throws ServiceException {
+ OMResponse response = internalProcessRequest(request);
+ if (response.hasOmLockDetails()) {
+ OzoneManagerProtocolProtos.OMLockDetailsProto omLockDetailsProto =
+ response.getOmLockDetails();
+ Server.Call call = Server.getCurCall().get();
+ if (call != null) {
+ call.getProcessingDetails().add(Timing.LOCKWAIT,
+ omLockDetailsProto.getWaitLockNanos(), TimeUnit.NANOSECONDS);
+ call.getProcessingDetails().add(Timing.LOCKSHARED,
+ omLockDetailsProto.getReadLockNanos(), TimeUnit.NANOSECONDS);
+ call.getProcessingDetails().add(Timing.LOCKEXCLUSIVE,
+ omLockDetailsProto.getWriteLockNanos(), TimeUnit.NANOSECONDS);
+ }
+ }
+ return response;
+ }
+
+ private OMResponse internalProcessRequest(OMRequest request) throws
+ ServiceException {
+ OMClientRequest omClientRequest = null;
boolean s3Auth = false;
try {
@@ -192,7 +216,6 @@ public class OzoneManagerProtocolServerSideTranslatorPB
implements
if (!s3Auth) {
OzoneManagerRatisUtils.checkLeaderStatus(ozoneManager);
}
- OMClientRequest omClientRequest = null;
OMRequest requestToSubmit;
try {
omClientRequest = createClientRequest(request, ozoneManager);
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]