This is an automated email from the ASF dual-hosted git repository.
szetszwo 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 11fddc4191 HDDS-10041. Do not start the daemon inside the
OzoneManagerDoubleBuffer constructor. (#6300)
11fddc4191 is described below
commit 11fddc41911f1cc9ada5d6237439f069318088be
Author: Tsz-Wo Nicholas Sze <[email protected]>
AuthorDate: Fri Mar 1 11:20:25 2024 -0800
HDDS-10041. Do not start the daemon inside the OzoneManagerDoubleBuffer
constructor. (#6300)
---
.../ozone/om/ratis/OzoneManagerDoubleBuffer.java | 6 +++-
.../ozone/om/ratis/OzoneManagerStateMachine.java | 13 ++++----
...OzoneManagerProtocolServerSideTranslatorPB.java | 12 ++++---
.../protocolPB/OzoneManagerRequestHandler.java | 27 +++------------
.../hadoop/ozone/protocolPB/RequestHandler.java | 39 +++++++++++++---------
.../hadoop/ozone/om/TestOMMultiTenantManager.java | 2 +-
.../om/ratis/TestOzoneManagerDoubleBuffer.java | 3 +-
...tOzoneManagerDoubleBufferWithDummyResponse.java | 3 +-
...TestOzoneManagerDoubleBufferWithOMResponse.java | 3 +-
9 files changed, 53 insertions(+), 55 deletions(-)
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/ratis/OzoneManagerDoubleBuffer.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/ratis/OzoneManagerDoubleBuffer.java
index 2c1276c43e..d3db4120e6 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/ratis/OzoneManagerDoubleBuffer.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/ratis/OzoneManagerDoubleBuffer.java
@@ -211,11 +211,15 @@ public final class OzoneManagerDoubleBuffer {
this.isTracingEnabled = b.isTracingEnabled;
- isRunning.set(true);
// Daemon thread which runs in background and flushes transactions to DB.
daemon = new Daemon(this::flushTransactions);
daemon.setName(b.threadPrefix + "OMDoubleBufferFlushThread");
+ }
+
+ public OzoneManagerDoubleBuffer start() {
daemon.start();
+ isRunning.set(true);
+ return this;
}
private boolean isRatisEnabled() {
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 90fcba40f5..ff8e09435a 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
@@ -88,7 +88,7 @@ public class OzoneManagerStateMachine extends
BaseStateMachine {
private final OzoneManager ozoneManager;
private RequestHandler handler;
private RaftGroupId raftGroupId;
- private OzoneManagerDoubleBuffer ozoneManagerDoubleBuffer;
+ private volatile OzoneManagerDoubleBuffer ozoneManagerDoubleBuffer;
private final ExecutorService executorService;
private final ExecutorService installSnapshotExecutor;
private final boolean isTracingEnabled;
@@ -109,9 +109,7 @@ public class OzoneManagerStateMachine extends
BaseStateMachine {
this.threadPrefix = ozoneManager.getThreadNamePrefix();
this.ozoneManagerDoubleBuffer = buildDoubleBufferForRatis();
-
- this.handler = new OzoneManagerRequestHandler(ozoneManager,
- ozoneManagerDoubleBuffer);
+ this.handler = new OzoneManagerRequestHandler(ozoneManager);
ThreadFactory build = new ThreadFactoryBuilder().setDaemon(true)
.setNameFormat(threadPrefix +
@@ -415,7 +413,6 @@ public class OzoneManagerStateMachine extends
BaseStateMachine {
if (statePausedCount.decrementAndGet() == 0) {
getLifeCycle().startAndTransition(() -> {
this.ozoneManagerDoubleBuffer = buildDoubleBufferForRatis();
- handler.updateDoubleBuffer(ozoneManagerDoubleBuffer);
this.setLastAppliedTermIndex(TermIndex.valueOf(
newLastAppliedSnapShotTermIndex, newLastAppliedSnaphsotIndex));
});
@@ -434,7 +431,8 @@ public class OzoneManagerStateMachine extends
BaseStateMachine {
.setS3SecretManager(ozoneManager.getS3SecretManager())
.enableRatis(true)
.enableTracing(isTracingEnabled)
- .build();
+ .build()
+ .start();
}
/**
@@ -524,7 +522,8 @@ public class OzoneManagerStateMachine extends
BaseStateMachine {
*/
private OMResponse runCommand(OMRequest request, TermIndex termIndex) {
try {
- OMClientResponse omClientResponse = handler.handleWriteRequest(request,
termIndex);
+ final OMClientResponse omClientResponse = handler.handleWriteRequest(
+ request, termIndex, ozoneManagerDoubleBuffer);
OMLockDetails omLockDetails = omClientResponse.getOmLockDetails();
OMResponse omResponse = omClientResponse.getOMResponse();
if (omLockDetails != null) {
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 cf9bb4f0bb..11d27913ff 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
@@ -57,6 +57,7 @@ import com.google.protobuf.RpcController;
import com.google.protobuf.ServiceException;
import org.apache.hadoop.ozone.security.S3SecurityUtil;
import org.apache.ratis.protocol.RaftPeerId;
+import org.apache.ratis.server.protocol.TermIndex;
import org.apache.ratis.util.ExitUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -109,8 +110,9 @@ public class OzoneManagerProtocolServerSideTranslatorPB
implements OzoneManagerP
: OzoneManagerDoubleBuffer.newBuilder()
.setOmMetadataManager(ozoneManager.getMetadataManager())
.enableTracing(TracingUtil.isTracingEnabled(ozoneManager.getConfiguration()))
- .build();
- this.handler = new OzoneManagerRequestHandler(impl,
ozoneManagerDoubleBuffer);
+ .build()
+ .start();
+ this.handler = new OzoneManagerRequestHandler(impl);
this.omRatisServer = ratisServer;
dispatcher = new OzoneProtocolMessageDispatcher<>("OzoneProtocol",
metrics, LOG, OMPBHelper::processForDebug,
OMPBHelper::processForDebug);
@@ -278,7 +280,7 @@ public class OzoneManagerProtocolServerSideTranslatorPB
implements OzoneManagerP
* Submits request directly to OM.
*/
private OMResponse submitRequestDirectlyToOM(OMRequest request) {
- OMClientResponse omClientResponse;
+ final OMClientResponse omClientResponse;
try {
if (OmUtils.isReadOnly(request)) {
return handler.handleReadRequest(request);
@@ -286,8 +288,8 @@ public class OzoneManagerProtocolServerSideTranslatorPB
implements OzoneManagerP
OMClientRequest omClientRequest =
createClientRequest(request, ozoneManager);
request = omClientRequest.preExecute(ozoneManager);
- long index = transactionIndex.incrementAndGet();
- omClientResponse = handler.handleWriteRequest(request,
TransactionInfo.getTermIndex(index));
+ final TermIndex termIndex =
TransactionInfo.getTermIndex(transactionIndex.incrementAndGet());
+ omClientResponse = handler.handleWriteRequest(request, termIndex,
ozoneManagerDoubleBuffer);
}
} catch (IOException ex) {
// As some preExecute returns error. So handle here.
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/protocolPB/OzoneManagerRequestHandler.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/protocolPB/OzoneManagerRequestHandler.java
index 2795f3716d..5acb9f3651 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/protocolPB/OzoneManagerRequestHandler.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/protocolPB/OzoneManagerRequestHandler.java
@@ -21,6 +21,7 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
+import java.util.Objects;
import java.util.UUID;
import java.util.stream.Collectors;
@@ -67,7 +68,6 @@ import org.apache.hadoop.ozone.om.helpers.SnapshotInfo;
import org.apache.hadoop.ozone.om.helpers.TenantStateList;
import org.apache.hadoop.ozone.om.helpers.TenantUserInfoValue;
import org.apache.hadoop.ozone.om.helpers.TenantUserList;
-import org.apache.hadoop.ozone.om.ratis.OzoneManagerDoubleBuffer;
import org.apache.hadoop.ozone.om.ratis.utils.OzoneManagerRatisUtils;
import org.apache.hadoop.ozone.om.request.OMClientRequest;
import org.apache.hadoop.ozone.om.request.util.OmResponseUtil;
@@ -159,7 +159,6 @@ import static
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.
import static org.apache.hadoop.util.MetricUtil.captureLatencyNs;
import org.apache.hadoop.ozone.upgrade.UpgradeFinalizer.StatusAndMessages;
-import org.apache.hadoop.util.Preconditions;
import org.apache.hadoop.util.ProtobufUtils;
import org.apache.ratis.server.protocol.TermIndex;
import org.slf4j.Logger;
@@ -173,13 +172,10 @@ public class OzoneManagerRequestHandler implements
RequestHandler {
static final Logger LOG =
LoggerFactory.getLogger(OzoneManagerRequestHandler.class);
private final OzoneManager impl;
- private OzoneManagerDoubleBuffer ozoneManagerDoubleBuffer;
private FaultInjector injector;
- public OzoneManagerRequestHandler(OzoneManager om,
- OzoneManagerDoubleBuffer ozoneManagerDoubleBuffer) {
+ public OzoneManagerRequestHandler(OzoneManager om) {
this.impl = om;
- this.ozoneManagerDoubleBuffer = ozoneManagerDoubleBuffer;
}
//TODO simplify it to make it shorter
@@ -392,27 +388,14 @@ public class OzoneManagerRequestHandler implements
RequestHandler {
}
@Override
- public OMClientResponse handleWriteRequest(OMRequest omRequest, TermIndex
termIndex) throws IOException {
+ public OMClientResponse handleWriteRequestImpl(OMRequest omRequest,
TermIndex termIndex) throws IOException {
injectPause();
OMClientRequest omClientRequest =
OzoneManagerRatisUtils.createClientRequest(omRequest, impl);
return captureLatencyNs(
impl.getPerfMetrics().getValidateAndUpdateCacheLatencyNs(),
- () -> {
- OMClientResponse omClientResponse =
- omClientRequest.validateAndUpdateCache(getOzoneManager(),
termIndex);
- Preconditions.checkNotNull(omClientResponse,
- "omClientResponse returned by validateAndUpdateCache cannot be
null");
- if (omRequest.getCmdType() != Type.Prepare) {
- ozoneManagerDoubleBuffer.add(omClientResponse, termIndex);
- }
- return omClientResponse;
- });
- }
-
- @Override
- public void updateDoubleBuffer(OzoneManagerDoubleBuffer omDoubleBuffer) {
- this.ozoneManagerDoubleBuffer = omDoubleBuffer;
+ () ->
Objects.requireNonNull(omClientRequest.validateAndUpdateCache(getOzoneManager(),
termIndex),
+ "omClientResponse returned by validateAndUpdateCache cannot be
null"));
}
@VisibleForTesting
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/protocolPB/RequestHandler.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/protocolPB/RequestHandler.java
index 17e9f0a7d6..e60362a1eb 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/protocolPB/RequestHandler.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/protocolPB/RequestHandler.java
@@ -20,10 +20,9 @@ package org.apache.hadoop.ozone.protocolPB;
import org.apache.hadoop.ozone.om.exceptions.OMException;
import org.apache.hadoop.ozone.om.ratis.OzoneManagerDoubleBuffer;
import org.apache.hadoop.ozone.om.response.OMClientResponse;
-import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.
- OMRequest;
-import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.
- OMResponse;
+import
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.OMRequest;
+import
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.OMResponse;
+import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.Type;
import org.apache.ratis.server.protocol.TermIndex;
import java.io.IOException;
@@ -50,22 +49,30 @@ public interface RequestHandler {
void validateRequest(OMRequest omRequest) throws OMException;
/**
- * Handle write requests. In HA this will be called from
- * OzoneManagerStateMachine applyTransaction method. In non-HA this will be
- * called from {@link OzoneManagerProtocolServerSideTranslatorPB} for write
- * requests.
+ * Handle write requests.
+ * In HA this will be called from OzoneManagerStateMachine applyTransaction
method.
+ * In non-HA this will be called from {@link
OzoneManagerProtocolServerSideTranslatorPB}.
*
- * @param omRequest
- * @param termIndex - ratis transaction log (term, index)
+ * @param omRequest the write request
+ * @param termIndex - ratis transaction term and index
+ * @param ozoneManagerDoubleBuffer for adding response
* @return OMClientResponse
*/
- OMClientResponse handleWriteRequest(OMRequest omRequest, TermIndex
termIndex) throws IOException;
+ default OMClientResponse handleWriteRequest(OMRequest omRequest, TermIndex
termIndex,
+ OzoneManagerDoubleBuffer ozoneManagerDoubleBuffer) throws IOException {
+ final OMClientResponse response = handleWriteRequestImpl(omRequest,
termIndex);
+ if (omRequest.getCmdType() != Type.Prepare) {
+ ozoneManagerDoubleBuffer.add(response, termIndex);
+ }
+ return response;
+ }
/**
- * Update the OzoneManagerDoubleBuffer. This will be called when
- * stateMachine is unpaused and set with new doublebuffer object.
- * @param ozoneManagerDoubleBuffer
+ * Implementation of {@link #handleWriteRequest(OMRequest, TermIndex,
OzoneManagerDoubleBuffer)}.
+ *
+ * @param omRequest the write request
+ * @param termIndex - ratis transaction term and index
+ * @return OMClientResponse
*/
- void updateDoubleBuffer(OzoneManagerDoubleBuffer ozoneManagerDoubleBuffer);
-
+ OMClientResponse handleWriteRequestImpl(OMRequest omRequest, TermIndex
termIndex) throws IOException;
}
diff --git
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/TestOMMultiTenantManager.java
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/TestOMMultiTenantManager.java
index 0079585a85..a4ced42452 100644
---
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/TestOMMultiTenantManager.java
+++
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/TestOMMultiTenantManager.java
@@ -156,7 +156,7 @@ public class TestOMMultiTenantManager {
// Check that Multi-Tenancy read requests are blocked when not enabled
final OzoneManagerRequestHandler ozoneManagerRequestHandler =
- new OzoneManagerRequestHandler(ozoneManager, null);
+ new OzoneManagerRequestHandler(ozoneManager);
expectReadRequestToFail(ozoneManagerRequestHandler,
OMRequestTestUtils.listUsersInTenantRequest(tenantId));
diff --git
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/ratis/TestOzoneManagerDoubleBuffer.java
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/ratis/TestOzoneManagerDoubleBuffer.java
index 1890958cba..e4dd0ab5ad 100644
---
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/ratis/TestOzoneManagerDoubleBuffer.java
+++
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/ratis/TestOzoneManagerDoubleBuffer.java
@@ -137,7 +137,8 @@ class TestOzoneManagerDoubleBuffer {
.setMaxUnFlushedTransactionCount(1000)
.enableRatis(true)
.setFlushNotifier(spyFlushNotifier)
- .build();
+ .build()
+ .start();
doNothing().when(omKeyCreateResponse).checkAndUpdateDB(any(), any());
doNothing().when(omBucketCreateResponse).checkAndUpdateDB(any(), any());
diff --git
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/ratis/TestOzoneManagerDoubleBufferWithDummyResponse.java
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/ratis/TestOzoneManagerDoubleBufferWithDummyResponse.java
index dd8e642721..61be29eade 100644
---
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/ratis/TestOzoneManagerDoubleBufferWithDummyResponse.java
+++
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/ratis/TestOzoneManagerDoubleBufferWithDummyResponse.java
@@ -79,7 +79,8 @@ public class TestOzoneManagerDoubleBufferWithDummyResponse {
.setOmMetadataManager(omMetadataManager)
.setMaxUnFlushedTransactionCount(10000)
.enableRatis(true)
- .build();
+ .build()
+ .start();
}
@AfterEach
diff --git
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/ratis/TestOzoneManagerDoubleBufferWithOMResponse.java
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/ratis/TestOzoneManagerDoubleBufferWithOMResponse.java
index d0e814a782..54b04260d5 100644
---
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/ratis/TestOzoneManagerDoubleBufferWithOMResponse.java
+++
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/ratis/TestOzoneManagerDoubleBufferWithOMResponse.java
@@ -112,7 +112,8 @@ public class TestOzoneManagerDoubleBufferWithOMResponse {
.setOmMetadataManager(omMetadataManager)
.setMaxUnFlushedTransactionCount(100000)
.enableRatis(true)
- .build();
+ .build()
+ .start();
}
@AfterEach
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]