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]

Reply via email to