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 8c53f1541ae HDDS-15191. Add ScmInvoker subclasses for the remaining
SCMHandler(s) (#10252)
8c53f1541ae is described below
commit 8c53f1541ae89f9ade0fb79b8c74421cf724a79f
Author: Bolin Lin <[email protected]>
AuthorDate: Tue May 19 12:49:58 2026 -0400
HDDS-15191. Add ScmInvoker subclasses for the remaining SCMHandler(s)
(#10252)
---
.../hadoop/hdds/scm/ha/SequenceIdGenerator.java | 8 +-
.../hdds/scm/ha/StatefulServiceStateManager.java | 5 +
.../scm/ha/StatefulServiceStateManagerImpl.java | 5 +-
.../invoker/FinalizationStateManagerInvoker.java | 153 +++++++++++++++++++++
.../scm/ha/invoker/ScmInvokerCodeGenerator.java | 11 +-
.../hdds/scm/ha/invoker/SecretKeyStateInvoker.java | 127 +++++++++++++++++
.../SequenceIdGeneratorStateManagerInvoker.java | 112 +++++++++++++++
.../StatefulServiceStateManagerInvoker.java | 123 +++++++++++++++++
.../scm/security/ScmSecretKeyStateBuilder.java | 3 +-
.../server/upgrade/FinalizationStateManager.java | 5 +
.../upgrade/FinalizationStateManagerImpl.java | 4 +-
11 files changed, 549 insertions(+), 7 deletions(-)
diff --git
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SequenceIdGenerator.java
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SequenceIdGenerator.java
index 928032642fd..a224d26f1d0 100644
---
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SequenceIdGenerator.java
+++
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SequenceIdGenerator.java
@@ -39,6 +39,8 @@
import org.apache.hadoop.hdds.scm.container.ContainerID;
import org.apache.hadoop.hdds.scm.container.ContainerInfo;
import org.apache.hadoop.hdds.scm.exceptions.SCMException;
+import org.apache.hadoop.hdds.scm.ha.invoker.ScmInvokerCodeGenerator;
+import
org.apache.hadoop.hdds.scm.ha.invoker.SequenceIdGeneratorStateManagerInvoker;
import org.apache.hadoop.hdds.scm.metadata.DBTransactionBuffer;
import org.apache.hadoop.hdds.scm.metadata.Replicate;
import org.apache.hadoop.hdds.scm.metadata.SCMMetadataStore;
@@ -213,6 +215,10 @@ Boolean allocateBatch(String sequenceIdName,
default RequestType getType() {
return RequestType.SEQUENCE_ID;
}
+
+ static void main(String[] args) {
+ ScmInvokerCodeGenerator.generate(StateManager.class, true);
+ }
}
/**
@@ -321,7 +327,7 @@ public StateManager build() {
final StateManager impl = new StateManagerImpl(table, buffer);
- return ratisServer.getProxyHandler(StateManager.class, impl);
+ return ratisServer.getProxyHandler(new
SequenceIdGeneratorStateManagerInvoker(impl, ratisServer));
}
}
}
diff --git
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/StatefulServiceStateManager.java
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/StatefulServiceStateManager.java
index 108d5be0121..09bf21c4888 100644
---
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/StatefulServiceStateManager.java
+++
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/StatefulServiceStateManager.java
@@ -20,6 +20,7 @@
import com.google.protobuf.ByteString;
import java.io.IOException;
import org.apache.hadoop.hdds.protocol.proto.SCMRatisProtocol.RequestType;
+import org.apache.hadoop.hdds.scm.ha.invoker.ScmInvokerCodeGenerator;
import org.apache.hadoop.hdds.scm.metadata.Replicate;
import org.apache.hadoop.hdds.utils.db.Table;
@@ -71,4 +72,8 @@ void saveConfiguration(String serviceName, ByteString bytes)
default RequestType getType() {
return RequestType.STATEFUL_SERVICE_CONFIG;
}
+
+ static void main(String[] args) {
+ ScmInvokerCodeGenerator.generate(StatefulServiceStateManager.class, true);
+ }
}
diff --git
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/StatefulServiceStateManagerImpl.java
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/StatefulServiceStateManagerImpl.java
index 0a8772c9a74..a8c4ebe70bf 100644
---
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/StatefulServiceStateManagerImpl.java
+++
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/StatefulServiceStateManagerImpl.java
@@ -20,6 +20,7 @@
import com.google.protobuf.ByteString;
import java.io.IOException;
import java.util.Objects;
+import
org.apache.hadoop.hdds.scm.ha.invoker.StatefulServiceStateManagerInvoker;
import org.apache.hadoop.hdds.scm.metadata.DBTransactionBuffer;
import org.apache.hadoop.hdds.utils.db.Table;
import org.slf4j.Logger;
@@ -129,11 +130,11 @@ public StatefulServiceStateManager build() {
Objects.requireNonNull(statefulServiceConfig, "statefulServiceConfig ==
null");
Objects.requireNonNull(transactionBuffer, "transactionBuffer == null");
- final StatefulServiceStateManager stateManager =
+ final StatefulServiceStateManager impl =
new StatefulServiceStateManagerImpl(statefulServiceConfig,
transactionBuffer);
- return scmRatisServer.getProxyHandler(StatefulServiceStateManager.class,
stateManager);
+ return scmRatisServer.getProxyHandler(new
StatefulServiceStateManagerInvoker(impl, scmRatisServer));
}
}
}
diff --git
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/invoker/FinalizationStateManagerInvoker.java
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/invoker/FinalizationStateManagerInvoker.java
new file mode 100644
index 00000000000..ab0dc40fad2
--- /dev/null
+++
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/invoker/FinalizationStateManagerInvoker.java
@@ -0,0 +1,153 @@
+/*
+ * 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
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.hdds.scm.ha.invoker;
+
+import java.io.IOException;
+import org.apache.hadoop.hdds.scm.ha.SCMRatisResponse;
+import org.apache.hadoop.hdds.scm.ha.SCMRatisServer;
+import org.apache.hadoop.hdds.scm.server.upgrade.FinalizationCheckpoint;
+import org.apache.hadoop.hdds.scm.server.upgrade.FinalizationStateManager;
+import org.apache.hadoop.hdds.scm.server.upgrade.SCMUpgradeFinalizationContext;
+import org.apache.hadoop.hdds.utils.db.Table;
+import org.apache.ratis.protocol.Message;
+
+/** Code generated for {@link FinalizationStateManager}. Do not modify. */
+public class FinalizationStateManagerInvoker extends
ScmInvoker<FinalizationStateManager> {
+ enum ReplicateMethod implements NameAndParameterTypes {
+ addFinalizingMark(new Class<?>[][] {
+ new Class<?>[] {}
+ }),
+ finalizeLayoutFeature(new Class<?>[][] {
+ null,
+ new Class<?>[] {Integer.class}
+ }),
+ removeFinalizingMark(new Class<?>[][] {
+ new Class<?>[] {}
+ });
+
+ private final Class<?>[][] parameterTypes;
+
+ ReplicateMethod(Class<?>[][] parameterTypes) {
+ this.parameterTypes = parameterTypes;
+ }
+
+ @Override
+ public Class<?>[] getParameterTypes(int numArgs) {
+ return parameterTypes[numArgs];
+ }
+ }
+
+ public FinalizationStateManagerInvoker(FinalizationStateManager impl,
SCMRatisServer ratis) {
+ super(impl, FinalizationStateManagerInvoker::newProxy, ratis);
+ }
+
+ @Override
+ public Class<FinalizationStateManager> getApi() {
+ return FinalizationStateManager.class;
+ }
+
+ static FinalizationStateManager
newProxy(ScmInvoker<FinalizationStateManager> invoker) {
+ return new FinalizationStateManager() {
+
+ @Override
+ public void addFinalizingMark() throws IOException {
+ final Object[] args = {};
+ invoker.invokeReplicateDirect(ReplicateMethod.addFinalizingMark, args);
+ }
+
+ @Override
+ public boolean crossedCheckpoint(FinalizationCheckpoint arg0) {
+ return invoker.getImpl().crossedCheckpoint(arg0);
+ }
+
+ @Override
+ public void finalizeLayoutFeature(Integer arg0) throws IOException {
+ final Object[] args = {arg0};
+ invoker.invokeReplicateDirect(ReplicateMethod.finalizeLayoutFeature,
args);
+ }
+
+ @Override
+ public FinalizationCheckpoint getFinalizationCheckpoint() {
+ return invoker.getImpl().getFinalizationCheckpoint();
+ }
+
+ @Override
+ public void reinitialize(Table<String, String> arg0) throws IOException {
+ invoker.getImpl().reinitialize(arg0);
+ }
+
+ @Override
+ public void removeFinalizingMark() throws IOException {
+ final Object[] args = {};
+ invoker.invokeReplicateDirect(ReplicateMethod.removeFinalizingMark,
args);
+ }
+
+ @Override
+ public void setUpgradeContext(SCMUpgradeFinalizationContext arg0) {
+ invoker.getImpl().setUpgradeContext(arg0);
+ }
+ };
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public Message invokeLocal(String methodName, Object[] p) throws Exception {
+ final Class<?> returnType;
+ final Object returnValue;
+ switch (methodName) {
+ case "addFinalizingMark":
+ getImpl().addFinalizingMark();
+ return Message.EMPTY;
+
+ case "crossedCheckpoint":
+ final FinalizationCheckpoint arg0 = p.length > 0 ?
(FinalizationCheckpoint) p[0] : null;
+ returnType = boolean.class;
+ returnValue = getImpl().crossedCheckpoint(arg0);
+ break;
+
+ case "finalizeLayoutFeature":
+ final Integer arg1 = p.length > 0 ? (Integer) p[0] : null;
+ getImpl().finalizeLayoutFeature(arg1);
+ return Message.EMPTY;
+
+ case "getFinalizationCheckpoint":
+ returnType = FinalizationCheckpoint.class;
+ returnValue = getImpl().getFinalizationCheckpoint();
+ break;
+
+ case "reinitialize":
+ final Table<String, String> arg2 = p.length > 0 ? (Table<String,
String>) p[0] : null;
+ getImpl().reinitialize(arg2);
+ return Message.EMPTY;
+
+ case "removeFinalizingMark":
+ getImpl().removeFinalizingMark();
+ return Message.EMPTY;
+
+ case "setUpgradeContext":
+ final SCMUpgradeFinalizationContext arg3 = p.length > 0 ?
(SCMUpgradeFinalizationContext) p[0] : null;
+ getImpl().setUpgradeContext(arg3);
+ return Message.EMPTY;
+
+ default:
+ throw new IllegalArgumentException("Method not found: " + methodName + "
in FinalizationStateManager");
+ }
+
+ return SCMRatisResponse.encode(returnValue, returnType);
+ }
+}
diff --git
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/invoker/ScmInvokerCodeGenerator.java
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/invoker/ScmInvokerCodeGenerator.java
index d56cd754806..767cd04457a 100644
---
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/invoker/ScmInvokerCodeGenerator.java
+++
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/invoker/ScmInvokerCodeGenerator.java
@@ -88,8 +88,13 @@ public final class ScmInvokerCodeGenerator {
private ScmInvokerCodeGenerator(Class<?> api) {
this.api = api;
this.apiName = api.getSimpleName();
- this.invokerClassName = apiName + "Invoker";
+ this.invokerClassName = getInvokerClassName(api);
+ }
+ static String getInvokerClassName(Class<?> api) {
+ final String name = api.getSimpleName() + "Invoker";
+ final Class<?> enclosing = api.getEnclosingClass();
+ return enclosing == null ? name : enclosing.getSimpleName() + name;
}
void printf(String format, Object... args) {
@@ -562,12 +567,14 @@ void printProxyClassMethod(Method method) {
final String args = IntStream.range(0, method.getParameterCount())
.mapToObj(i -> "arg" + i)
.reduce("", (a, b) -> a.isEmpty() ? b : a + ", " + b);
- final String returnString = method.getReturnType() == void.class ? "" :
"return ";
+ final Class<?> returnType = method.getReturnType();
if (r != null) {
+ final String returnString = returnType == void.class ? "" : "return ("
+ returnType.getSimpleName() + ")";
final String type = r.invocationType() ==
Replicate.InvocationType.DIRECT ? "Direct" : "Client";
println("final Object[] args = {%s};", args);
println("%sinvoker.invokeReplicate%s(ReplicateMethod.%s, args);",
returnString, type, method.getName());
} else {
+ final String returnString = returnType == void.class ? "" : "return ";
println("%sinvoker.getImpl().%s(%s);", returnString, method.getName(),
args);
}
}
diff --git
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/invoker/SecretKeyStateInvoker.java
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/invoker/SecretKeyStateInvoker.java
new file mode 100644
index 00000000000..3126ec9563d
--- /dev/null
+++
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/invoker/SecretKeyStateInvoker.java
@@ -0,0 +1,127 @@
+/*
+ * 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
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.hdds.scm.ha.invoker;
+
+import java.util.List;
+import java.util.UUID;
+import org.apache.hadoop.hdds.scm.exceptions.SCMException;
+import org.apache.hadoop.hdds.scm.ha.SCMRatisResponse;
+import org.apache.hadoop.hdds.scm.ha.SCMRatisServer;
+import org.apache.hadoop.hdds.security.symmetric.ManagedSecretKey;
+import org.apache.hadoop.hdds.security.symmetric.SecretKeyState;
+import org.apache.ratis.protocol.Message;
+
+/** Code generated for {@link SecretKeyState}. Do not modify. */
+public class SecretKeyStateInvoker extends ScmInvoker<SecretKeyState> {
+ enum ReplicateMethod implements NameAndParameterTypes {
+ updateKeys(new Class<?>[][] {
+ null,
+ new Class<?>[] {List.class}
+ });
+
+ private final Class<?>[][] parameterTypes;
+
+ ReplicateMethod(Class<?>[][] parameterTypes) {
+ this.parameterTypes = parameterTypes;
+ }
+
+ @Override
+ public Class<?>[] getParameterTypes(int numArgs) {
+ return parameterTypes[numArgs];
+ }
+ }
+
+ public SecretKeyStateInvoker(SecretKeyState impl, SCMRatisServer ratis) {
+ super(impl, SecretKeyStateInvoker::newProxy, ratis);
+ }
+
+ @Override
+ public Class<SecretKeyState> getApi() {
+ return SecretKeyState.class;
+ }
+
+ static SecretKeyState newProxy(ScmInvoker<SecretKeyState> invoker) {
+ return new SecretKeyState() {
+
+ @Override
+ public ManagedSecretKey getCurrentKey() {
+ return invoker.getImpl().getCurrentKey();
+ }
+
+ @Override
+ public ManagedSecretKey getKey(UUID arg0) {
+ return invoker.getImpl().getKey(arg0);
+ }
+
+ @Override
+ public List<ManagedSecretKey> getSortedKeys() {
+ return invoker.getImpl().getSortedKeys();
+ }
+
+ @Override
+ public void reinitialize(List<ManagedSecretKey> arg0) {
+ invoker.getImpl().reinitialize(arg0);
+ }
+
+ @Override
+ public void updateKeys(List<ManagedSecretKey> arg0) throws SCMException {
+ final Object[] args = {arg0};
+ invoker.invokeReplicateDirect(ReplicateMethod.updateKeys, args);
+ }
+ };
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public Message invokeLocal(String methodName, Object[] p) throws Exception {
+ final Class<?> returnType;
+ final Object returnValue;
+ switch (methodName) {
+ case "getCurrentKey":
+ returnType = ManagedSecretKey.class;
+ returnValue = getImpl().getCurrentKey();
+ break;
+
+ case "getKey":
+ final UUID arg0 = p.length > 0 ? (UUID) p[0] : null;
+ returnType = ManagedSecretKey.class;
+ returnValue = getImpl().getKey(arg0);
+ break;
+
+ case "getSortedKeys":
+ returnType = List.class;
+ returnValue = getImpl().getSortedKeys();
+ break;
+
+ case "reinitialize":
+ final List<ManagedSecretKey> arg1 = p.length > 0 ?
(List<ManagedSecretKey>) p[0] : null;
+ getImpl().reinitialize(arg1);
+ return Message.EMPTY;
+
+ case "updateKeys":
+ final List<ManagedSecretKey> arg2 = p.length > 0 ?
(List<ManagedSecretKey>) p[0] : null;
+ getImpl().updateKeys(arg2);
+ return Message.EMPTY;
+
+ default:
+ throw new IllegalArgumentException("Method not found: " + methodName + "
in SecretKeyState");
+ }
+
+ return SCMRatisResponse.encode(returnValue, returnType);
+ }
+}
diff --git
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/invoker/SequenceIdGeneratorStateManagerInvoker.java
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/invoker/SequenceIdGeneratorStateManagerInvoker.java
new file mode 100644
index 00000000000..4ffd0cb3aef
--- /dev/null
+++
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/invoker/SequenceIdGeneratorStateManagerInvoker.java
@@ -0,0 +1,112 @@
+/*
+ * 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
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.hdds.scm.ha.invoker;
+
+import java.io.IOException;
+import org.apache.hadoop.hdds.scm.exceptions.SCMException;
+import org.apache.hadoop.hdds.scm.ha.SCMRatisResponse;
+import org.apache.hadoop.hdds.scm.ha.SCMRatisServer;
+import org.apache.hadoop.hdds.scm.ha.SequenceIdGenerator.StateManager;
+import org.apache.hadoop.hdds.utils.db.Table;
+import org.apache.ratis.protocol.Message;
+
+/** Code generated for {@link StateManager}. Do not modify. */
+public class SequenceIdGeneratorStateManagerInvoker extends
ScmInvoker<StateManager> {
+ enum ReplicateMethod implements NameAndParameterTypes {
+ allocateBatch(new Class<?>[][] {
+ null,
+ null,
+ null,
+ new Class<?>[] {String.class, Long.class, Long.class}
+ });
+
+ private final Class<?>[][] parameterTypes;
+
+ ReplicateMethod(Class<?>[][] parameterTypes) {
+ this.parameterTypes = parameterTypes;
+ }
+
+ @Override
+ public Class<?>[] getParameterTypes(int numArgs) {
+ return parameterTypes[numArgs];
+ }
+ }
+
+ public SequenceIdGeneratorStateManagerInvoker(StateManager impl,
SCMRatisServer ratis) {
+ super(impl, SequenceIdGeneratorStateManagerInvoker::newProxy, ratis);
+ }
+
+ @Override
+ public Class<StateManager> getApi() {
+ return StateManager.class;
+ }
+
+ static StateManager newProxy(ScmInvoker<StateManager> invoker) {
+ return new StateManager() {
+
+ @Override
+ public Boolean allocateBatch(String arg0, Long arg1, Long arg2) throws
SCMException {
+ final Object[] args = {arg0, arg1, arg2};
+ return
(Boolean)invoker.invokeReplicateDirect(ReplicateMethod.allocateBatch, args);
+ }
+
+ @Override
+ public Long getLastId(String arg0) {
+ return invoker.getImpl().getLastId(arg0);
+ }
+
+ @Override
+ public void reinitialize(Table arg0) throws IOException {
+ invoker.getImpl().reinitialize(arg0);
+ }
+ };
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public Message invokeLocal(String methodName, Object[] p) throws Exception {
+ final Class<?> returnType;
+ final Object returnValue;
+ switch (methodName) {
+ case "allocateBatch":
+ final String arg0 = p.length > 0 ? (String) p[0] : null;
+ final Long arg1 = p.length > 1 ? (Long) p[1] : null;
+ final Long arg2 = p.length > 2 ? (Long) p[2] : null;
+ returnType = Boolean.class;
+ returnValue = getImpl().allocateBatch(arg0, arg1, arg2);
+ break;
+
+ case "getLastId":
+ final String arg3 = p.length > 0 ? (String) p[0] : null;
+ returnType = Long.class;
+ returnValue = getImpl().getLastId(arg3);
+ break;
+
+ case "reinitialize":
+ final Table arg4 = p.length > 0 ? (Table) p[0] : null;
+ getImpl().reinitialize(arg4);
+ return Message.EMPTY;
+
+ default:
+ throw new IllegalArgumentException("Method not found: " + methodName
+ + " in SequenceIdGenerator.StateManager");
+ }
+
+ return SCMRatisResponse.encode(returnValue, returnType);
+ }
+}
diff --git
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/invoker/StatefulServiceStateManagerInvoker.java
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/invoker/StatefulServiceStateManagerInvoker.java
new file mode 100644
index 00000000000..b94ea2f8d1d
--- /dev/null
+++
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/invoker/StatefulServiceStateManagerInvoker.java
@@ -0,0 +1,123 @@
+/*
+ * 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
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.hdds.scm.ha.invoker;
+
+import com.google.protobuf.ByteString;
+import java.io.IOException;
+import org.apache.hadoop.hdds.scm.ha.SCMRatisResponse;
+import org.apache.hadoop.hdds.scm.ha.SCMRatisServer;
+import org.apache.hadoop.hdds.scm.ha.StatefulServiceStateManager;
+import org.apache.hadoop.hdds.utils.db.Table;
+import org.apache.ratis.protocol.Message;
+
+/** Code generated for {@link StatefulServiceStateManager}. Do not modify. */
+public class StatefulServiceStateManagerInvoker extends
ScmInvoker<StatefulServiceStateManager> {
+ enum ReplicateMethod implements NameAndParameterTypes {
+ deleteConfiguration(new Class<?>[][] {
+ null,
+ new Class<?>[] {String.class}
+ }),
+ saveConfiguration(new Class<?>[][] {
+ null,
+ null,
+ new Class<?>[] {String.class, ByteString.class}
+ });
+
+ private final Class<?>[][] parameterTypes;
+
+ ReplicateMethod(Class<?>[][] parameterTypes) {
+ this.parameterTypes = parameterTypes;
+ }
+
+ @Override
+ public Class<?>[] getParameterTypes(int numArgs) {
+ return parameterTypes[numArgs];
+ }
+ }
+
+ public StatefulServiceStateManagerInvoker(StatefulServiceStateManager impl,
SCMRatisServer ratis) {
+ super(impl, StatefulServiceStateManagerInvoker::newProxy, ratis);
+ }
+
+ @Override
+ public Class<StatefulServiceStateManager> getApi() {
+ return StatefulServiceStateManager.class;
+ }
+
+ static StatefulServiceStateManager
newProxy(ScmInvoker<StatefulServiceStateManager> invoker) {
+ return new StatefulServiceStateManager() {
+
+ @Override
+ public void deleteConfiguration(String arg0) throws IOException {
+ final Object[] args = {arg0};
+ invoker.invokeReplicateDirect(ReplicateMethod.deleteConfiguration,
args);
+ }
+
+ @Override
+ public ByteString readConfiguration(String arg0) throws IOException {
+ return invoker.getImpl().readConfiguration(arg0);
+ }
+
+ @Override
+ public void reinitialize(Table arg0) {
+ invoker.getImpl().reinitialize(arg0);
+ }
+
+ @Override
+ public void saveConfiguration(String arg0, ByteString arg1) throws
IOException {
+ final Object[] args = {arg0, arg1};
+ invoker.invokeReplicateDirect(ReplicateMethod.saveConfiguration, args);
+ }
+ };
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public Message invokeLocal(String methodName, Object[] p) throws Exception {
+ final Class<?> returnType;
+ final Object returnValue;
+ switch (methodName) {
+ case "deleteConfiguration":
+ final String arg0 = p.length > 0 ? (String) p[0] : null;
+ getImpl().deleteConfiguration(arg0);
+ return Message.EMPTY;
+
+ case "readConfiguration":
+ final String arg1 = p.length > 0 ? (String) p[0] : null;
+ returnType = ByteString.class;
+ returnValue = getImpl().readConfiguration(arg1);
+ break;
+
+ case "reinitialize":
+ final Table arg2 = p.length > 0 ? (Table) p[0] : null;
+ getImpl().reinitialize(arg2);
+ return Message.EMPTY;
+
+ case "saveConfiguration":
+ final String arg3 = p.length > 0 ? (String) p[0] : null;
+ final ByteString arg4 = p.length > 1 ? (ByteString) p[1] : null;
+ getImpl().saveConfiguration(arg3, arg4);
+ return Message.EMPTY;
+
+ default:
+ throw new IllegalArgumentException("Method not found: " + methodName + "
in StatefulServiceStateManager");
+ }
+
+ return SCMRatisResponse.encode(returnValue, returnType);
+ }
+}
diff --git
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/security/ScmSecretKeyStateBuilder.java
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/security/ScmSecretKeyStateBuilder.java
index cfd546ab598..74de5e74555 100644
---
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/security/ScmSecretKeyStateBuilder.java
+++
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/security/ScmSecretKeyStateBuilder.java
@@ -18,6 +18,7 @@
package org.apache.hadoop.hdds.scm.security;
import org.apache.hadoop.hdds.scm.ha.SCMRatisServer;
+import org.apache.hadoop.hdds.scm.ha.invoker.SecretKeyStateInvoker;
import org.apache.hadoop.hdds.security.symmetric.SecretKeyState;
import org.apache.hadoop.hdds.security.symmetric.SecretKeyStateImpl;
import org.apache.hadoop.hdds.security.symmetric.SecretKeyStore;
@@ -44,6 +45,6 @@ public ScmSecretKeyStateBuilder setRatisServer(
public SecretKeyState build() {
final SecretKeyState impl = new SecretKeyStateImpl(secretKeyStore);
- return scmRatisServer.getProxyHandler(SecretKeyState.class, impl);
+ return scmRatisServer.getProxyHandler(new SecretKeyStateInvoker(impl,
scmRatisServer));
}
}
diff --git
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/upgrade/FinalizationStateManager.java
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/upgrade/FinalizationStateManager.java
index 096167b89fc..e0d794a6684 100644
---
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/upgrade/FinalizationStateManager.java
+++
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/upgrade/FinalizationStateManager.java
@@ -20,6 +20,7 @@
import java.io.IOException;
import org.apache.hadoop.hdds.protocol.proto.SCMRatisProtocol.RequestType;
import org.apache.hadoop.hdds.scm.ha.SCMHandler;
+import org.apache.hadoop.hdds.scm.ha.invoker.ScmInvokerCodeGenerator;
import org.apache.hadoop.hdds.scm.metadata.Replicate;
import org.apache.hadoop.hdds.utils.db.Table;
@@ -59,4 +60,8 @@ void reinitialize(Table<String, String> newFinalizationStore)
default RequestType getType() {
return RequestType.FINALIZE;
}
+
+ static void main(String[] args) {
+ ScmInvokerCodeGenerator.generate(FinalizationStateManager.class, true);
+ }
}
diff --git
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/upgrade/FinalizationStateManagerImpl.java
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/upgrade/FinalizationStateManagerImpl.java
index ba285cb1d89..c177027a21f 100644
---
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/upgrade/FinalizationStateManagerImpl.java
+++
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/upgrade/FinalizationStateManagerImpl.java
@@ -22,6 +22,7 @@
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
import org.apache.hadoop.hdds.scm.ha.SCMRatisServer;
+import org.apache.hadoop.hdds.scm.ha.invoker.FinalizationStateManagerInvoker;
import org.apache.hadoop.hdds.scm.metadata.DBTransactionBuffer;
import org.apache.hadoop.hdds.scm.metadata.Replicate;
import org.apache.hadoop.hdds.scm.pipeline.PipelineManager;
@@ -326,7 +327,8 @@ public FinalizationStateManager build() throws IOException {
Objects.requireNonNull(transactionBuffer, "transactionBuffer == null");
Objects.requireNonNull(upgradeFinalizer, "upgradeFinalizer == null");
- return scmRatisServer.getProxyHandler(FinalizationStateManager.class,
new FinalizationStateManagerImpl(this));
+ final FinalizationStateManager impl = new
FinalizationStateManagerImpl(this);
+ return scmRatisServer.getProxyHandler(new
FinalizationStateManagerInvoker(impl, scmRatisServer));
}
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]