From 9758742bd08d3af02c3398eebb866fe03b362290 Mon Sep 17 00:00:00 2001 From: Russole <850905junior@gmail.com> Date: Tue, 31 Mar 2026 01:36:05 +0800 Subject: [PATCH 1/2] HDDS-14922. Define invokeRatisServer or invokeRatisClient methods --- .../DeletedBlockLogStateManagerImpl.java | 2 +- .../hdds/scm/ha/SCMHAInvocationHandler.java | 9 ++++++++- .../apache/hadoop/hdds/scm/ha/ScmInvoker.java | 2 ++ .../DeletedBlockLogStateManagerInvoker.java | 20 ++++++++++++++++++- 4 files changed, 30 insertions(+), 3 deletions(-) diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/DeletedBlockLogStateManagerImpl.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/DeletedBlockLogStateManagerImpl.java index 88a596a14577..7f45f5cb2d19 100644 --- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/DeletedBlockLogStateManagerImpl.java +++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/DeletedBlockLogStateManagerImpl.java @@ -240,7 +240,7 @@ public DeletedBlockLogStateManager build() throws IOException { final DeletedBlockLogStateManager impl = new DeletedBlockLogStateManagerImpl( deletedBlocksTransactionTable, statefulServiceConfigTable, containerManager, transactionBuffer); - return scmRatisServer.getProxyHandler(new DeletedBlockLogStateManagerInvoker(impl)); + return scmRatisServer.getProxyHandler(new DeletedBlockLogStateManagerInvoker(impl, scmRatisServer)); } } } diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMHAInvocationHandler.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMHAInvocationHandler.java index 382f18819205..f19dc0b0243d 100644 --- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMHAInvocationHandler.java +++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMHAInvocationHandler.java @@ -104,13 +104,20 @@ private Object invokeRatis(Method method, Object[] args) if (LOG.isTraceEnabled()) { LOG.trace("Invoking method {} on target {}", method, ratisHandler); } + + final Object[] safeArgs = args != null ? args : new Object[0]; + try { switch (method.getAnnotation(Replicate.class).invocationType()) { case CLIENT: return invokeRatisClient(method, args); case DIRECT: default: - return invokeRatisServer(method, args); + if (invoker != null) { + return invoker.invokeRatisServer( + method.getName(), method.getParameterTypes(), safeArgs); + } + return invokeRatisServer(method, safeArgs); } } catch (Exception e) { throw translateException(e); diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/ScmInvoker.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/ScmInvoker.java index 2bc1202fcd9f..feccb9777875 100644 --- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/ScmInvoker.java +++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/ScmInvoker.java @@ -30,4 +30,6 @@ public interface ScmInvoker { T getImpl(); Object invokeLocal(String methodName, Object[] args) throws Exception; + + Object invokeRatisServer(String methodName, Class[] paramTypes, Object[] args) throws Exception; } diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/invoker/DeletedBlockLogStateManagerInvoker.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/invoker/DeletedBlockLogStateManagerInvoker.java index 9574ac1c0d38..f221fd14f23c 100644 --- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/invoker/DeletedBlockLogStateManagerInvoker.java +++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/invoker/DeletedBlockLogStateManagerInvoker.java @@ -21,6 +21,9 @@ import org.apache.hadoop.hdds.protocol.proto.HddsProtos.DeletedBlocksTransactionSummary; import org.apache.hadoop.hdds.protocol.proto.SCMRatisProtocol.RequestType; import org.apache.hadoop.hdds.scm.block.DeletedBlockLogStateManager; +import org.apache.hadoop.hdds.scm.ha.SCMRatisRequest; +import org.apache.hadoop.hdds.scm.ha.SCMRatisResponse; +import org.apache.hadoop.hdds.scm.ha.SCMRatisServer; import org.apache.hadoop.hdds.scm.ha.ScmInvoker; import org.apache.hadoop.hdds.utils.db.Table; @@ -29,9 +32,11 @@ */ public class DeletedBlockLogStateManagerInvoker implements ScmInvoker { private final DeletedBlockLogStateManager impl; + private final SCMRatisServer ratisHandler; - public DeletedBlockLogStateManagerInvoker(DeletedBlockLogStateManager impl) { + public DeletedBlockLogStateManagerInvoker(DeletedBlockLogStateManager impl, SCMRatisServer ratisHandler) { this.impl = impl; + this.ratisHandler = ratisHandler; } @Override @@ -88,4 +93,17 @@ public Object invokeLocal(String methodName, Object[] params) throws Exception { } } + @Override + public Object invokeRatisServer(String methodName, Class[] paramTypes, + Object[] args) throws Exception { + final SCMRatisRequest scmRatisRequest = SCMRatisRequest.of( + getType(), methodName, paramTypes, args); + final SCMRatisResponse response = ratisHandler.submitRequest( + scmRatisRequest); + if (response.isSuccess()) { + return response.getResult(); + } + throw response.getException(); + } + } From 4a7538a82ebdb79d2f69eb37f0c4403d2a958455 Mon Sep 17 00:00:00 2001 From: Russole <850905junior@gmail.com> Date: Tue, 31 Mar 2026 20:34:40 +0800 Subject: [PATCH 2/2] Remove unnecessary safeArgs handling --- .../apache/hadoop/hdds/scm/ha/SCMHAInvocationHandler.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMHAInvocationHandler.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMHAInvocationHandler.java index f19dc0b0243d..6976b9c6ea98 100644 --- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMHAInvocationHandler.java +++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMHAInvocationHandler.java @@ -105,8 +105,6 @@ private Object invokeRatis(Method method, Object[] args) LOG.trace("Invoking method {} on target {}", method, ratisHandler); } - final Object[] safeArgs = args != null ? args : new Object[0]; - try { switch (method.getAnnotation(Replicate.class).invocationType()) { case CLIENT: @@ -115,9 +113,9 @@ private Object invokeRatis(Method method, Object[] args) default: if (invoker != null) { return invoker.invokeRatisServer( - method.getName(), method.getParameterTypes(), safeArgs); + method.getName(), method.getParameterTypes(), args); } - return invokeRatisServer(method, safeArgs); + return invokeRatisServer(method, args); } } catch (Exception e) { throw translateException(e);