Skip to content

Commit 1513c34

Browse files
HDDS-11883. SCM HA: Move proxy object creation code to SCMRatisServer (apache#7914)
1 parent 8c42c02 commit 1513c34

12 files changed

Lines changed: 46 additions & 101 deletions

File tree

hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/DeletedBlockLogStateManagerImpl.java

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919

2020
import com.google.common.base.Preconditions;
2121
import java.io.IOException;
22-
import java.lang.reflect.Proxy;
2322
import java.util.ArrayList;
2423
import java.util.HashMap;
2524
import java.util.Map;
@@ -28,11 +27,10 @@
2827
import java.util.Set;
2928
import java.util.concurrent.ConcurrentHashMap;
3029
import org.apache.hadoop.hdds.conf.ConfigurationSource;
31-
import org.apache.hadoop.hdds.protocol.proto.SCMRatisProtocol;
30+
import org.apache.hadoop.hdds.protocol.proto.SCMRatisProtocol.RequestType;
3231
import org.apache.hadoop.hdds.protocol.proto.StorageContainerDatanodeProtocolProtos.DeletedBlocksTransaction;
3332
import org.apache.hadoop.hdds.scm.container.ContainerID;
3433
import org.apache.hadoop.hdds.scm.container.ContainerManager;
35-
import org.apache.hadoop.hdds.scm.ha.SCMHAInvocationHandler;
3634
import org.apache.hadoop.hdds.scm.ha.SCMRatisServer;
3735
import org.apache.hadoop.hdds.scm.metadata.DBTransactionBuffer;
3836
import org.apache.hadoop.hdds.utils.db.Table;
@@ -302,18 +300,11 @@ public DeletedBlockLogStateManager build() {
302300
Preconditions.checkNotNull(conf);
303301
Preconditions.checkNotNull(table);
304302

305-
final DeletedBlockLogStateManager impl =
306-
new DeletedBlockLogStateManagerImpl(conf, table, containerManager,
307-
transactionBuffer);
303+
final DeletedBlockLogStateManager impl = new DeletedBlockLogStateManagerImpl(
304+
conf, table, containerManager, transactionBuffer);
308305

309-
final SCMHAInvocationHandler invocationHandler =
310-
new SCMHAInvocationHandler(SCMRatisProtocol.RequestType.BLOCK,
311-
impl, scmRatisServer);
312-
313-
return (DeletedBlockLogStateManager) Proxy.newProxyInstance(
314-
SCMHAInvocationHandler.class.getClassLoader(),
315-
new Class<?>[]{DeletedBlockLogStateManager.class},
316-
invocationHandler);
306+
return scmRatisServer.getProxyHandler(RequestType.BLOCK,
307+
DeletedBlockLogStateManager.class, impl);
317308
}
318309
}
319310
}

hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/ContainerStateManagerImpl.java

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@
3535
import com.google.common.base.Preconditions;
3636
import com.google.common.util.concurrent.Striped;
3737
import java.io.IOException;
38-
import java.lang.reflect.Proxy;
3938
import java.util.EnumMap;
4039
import java.util.HashSet;
4140
import java.util.Map;
@@ -58,7 +57,6 @@
5857
import org.apache.hadoop.hdds.scm.container.states.ContainerState;
5958
import org.apache.hadoop.hdds.scm.container.states.ContainerStateMap;
6059
import org.apache.hadoop.hdds.scm.ha.ExecutionUtil;
61-
import org.apache.hadoop.hdds.scm.ha.SCMHAInvocationHandler;
6260
import org.apache.hadoop.hdds.scm.ha.SCMRatisServer;
6361
import org.apache.hadoop.hdds.scm.metadata.DBTransactionBuffer;
6462
import org.apache.hadoop.hdds.scm.pipeline.PipelineID;
@@ -611,13 +609,8 @@ public ContainerStateManager build() throws IOException {
611609
conf, pipelineMgr, table, transactionBuffer,
612610
containerReplicaPendingOps);
613611

614-
final SCMHAInvocationHandler invocationHandler =
615-
new SCMHAInvocationHandler(RequestType.CONTAINER, csm,
616-
scmRatisServer);
617-
618-
return (ContainerStateManager) Proxy.newProxyInstance(
619-
SCMHAInvocationHandler.class.getClassLoader(),
620-
new Class<?>[]{ContainerStateManager.class}, invocationHandler);
612+
return scmRatisServer.getProxyHandler(RequestType.CONTAINER,
613+
ContainerStateManager.class, csm);
621614
}
622615

623616
}

hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMRatisServer.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
package org.apache.hadoop.hdds.scm.ha;
1919

2020
import java.io.IOException;
21+
import java.lang.reflect.Proxy;
2122
import java.util.List;
2223
import java.util.concurrent.ExecutionException;
2324
import java.util.concurrent.TimeoutException;
@@ -70,4 +71,11 @@ SCMRatisResponse submitRequest(SCMRatisRequest request)
7071

7172
RaftPeerId getLeaderId();
7273

74+
default <T> T getProxyHandler(final RequestType type, final Class<T> intf, final T impl) {
75+
final SCMHAInvocationHandler invocationHandler =
76+
new SCMHAInvocationHandler(type, impl, this);
77+
return intf.cast(Proxy.newProxyInstance(getClass().getClassLoader(),
78+
new Class<?>[] {intf}, invocationHandler));
79+
}
80+
7381
}

hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SequenceIdGenerator.java

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323

2424
import com.google.common.base.Preconditions;
2525
import java.io.IOException;
26-
import java.lang.reflect.Proxy;
2726
import java.math.BigInteger;
2827
import java.security.cert.X509Certificate;
2928
import java.time.LocalDate;
@@ -330,13 +329,7 @@ public StateManager build() {
330329

331330
final StateManager impl = new StateManagerImpl(table, buffer);
332331

333-
final SCMHAInvocationHandler invocationHandler
334-
= new SCMHAInvocationHandler(SEQUENCE_ID, impl, ratisServer);
335-
336-
return (StateManager) Proxy.newProxyInstance(
337-
SCMHAInvocationHandler.class.getClassLoader(),
338-
new Class<?>[]{StateManager.class},
339-
invocationHandler);
332+
return ratisServer.getProxyHandler(SEQUENCE_ID, StateManager.class, impl);
340333
}
341334
}
342335
}

hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/StatefulServiceStateManagerImpl.java

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import com.google.common.base.Preconditions;
2121
import com.google.protobuf.ByteString;
2222
import java.io.IOException;
23-
import java.lang.reflect.Proxy;
2423
import org.apache.hadoop.hdds.protocol.proto.SCMRatisProtocol.RequestType;
2524
import org.apache.hadoop.hdds.scm.metadata.DBTransactionBuffer;
2625
import org.apache.hadoop.hdds.utils.db.Table;
@@ -135,13 +134,8 @@ public StatefulServiceStateManager build() {
135134
new StatefulServiceStateManagerImpl(statefulServiceConfig,
136135
transactionBuffer);
137136

138-
final SCMHAInvocationHandler invocationHandler =
139-
new SCMHAInvocationHandler(RequestType.STATEFUL_SERVICE_CONFIG,
140-
stateManager, scmRatisServer);
141-
142-
return (StatefulServiceStateManager) Proxy.newProxyInstance(
143-
SCMHAInvocationHandler.class.getClassLoader(),
144-
new Class<?>[]{StatefulServiceStateManager.class}, invocationHandler);
137+
return scmRatisServer.getProxyHandler(RequestType.STATEFUL_SERVICE_CONFIG,
138+
StatefulServiceStateManager.class, stateManager);
145139
}
146140
}
147141
}

hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/PipelineStateManagerImpl.java

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919

2020
import com.google.common.base.Preconditions;
2121
import java.io.IOException;
22-
import java.lang.reflect.Proxy;
2322
import java.util.Collection;
2423
import java.util.List;
2524
import java.util.NavigableSet;
@@ -28,9 +27,8 @@
2827
import org.apache.hadoop.hdds.client.ReplicationConfig;
2928
import org.apache.hadoop.hdds.protocol.DatanodeDetails;
3029
import org.apache.hadoop.hdds.protocol.proto.HddsProtos;
31-
import org.apache.hadoop.hdds.protocol.proto.SCMRatisProtocol;
30+
import org.apache.hadoop.hdds.protocol.proto.SCMRatisProtocol.RequestType;
3231
import org.apache.hadoop.hdds.scm.container.ContainerID;
33-
import org.apache.hadoop.hdds.scm.ha.SCMHAInvocationHandler;
3432
import org.apache.hadoop.hdds.scm.ha.SCMRatisServer;
3533
import org.apache.hadoop.hdds.scm.metadata.DBTransactionBuffer;
3634
import org.apache.hadoop.hdds.scm.node.NodeManager;
@@ -380,13 +378,8 @@ public PipelineStateManager build() throws IOException {
380378
new PipelineStateManagerImpl(
381379
pipelineStore, nodeManager, transactionBuffer);
382380

383-
final SCMHAInvocationHandler invocationHandler =
384-
new SCMHAInvocationHandler(SCMRatisProtocol.RequestType.PIPELINE,
385-
pipelineStateManager, scmRatisServer);
386-
387-
return (PipelineStateManager) Proxy.newProxyInstance(
388-
SCMHAInvocationHandler.class.getClassLoader(),
389-
new Class<?>[]{PipelineStateManager.class}, invocationHandler);
381+
return scmRatisServer.getProxyHandler(RequestType.PIPELINE,
382+
PipelineStateManager.class, pipelineStateManager);
390383
}
391384
}
392385
}

hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/security/RootCARotationHandlerImpl.java

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,12 @@
2323

2424
import java.io.File;
2525
import java.io.IOException;
26-
import java.lang.reflect.Proxy;
2726
import java.nio.file.Files;
2827
import java.nio.file.StandardCopyOption;
2928
import java.util.HashSet;
3029
import java.util.Set;
3130
import java.util.concurrent.atomic.AtomicReference;
3231
import org.apache.commons.io.FileUtils;
33-
import org.apache.hadoop.hdds.scm.ha.SCMHAInvocationHandler;
3432
import org.apache.hadoop.hdds.scm.ha.SCMRatisServer;
3533
import org.apache.hadoop.hdds.scm.server.StorageContainerManager;
3634
import org.apache.hadoop.hdds.security.SecurityConfig;
@@ -230,13 +228,8 @@ public RootCARotationHandler build() {
230228
final RootCARotationHandler impl =
231229
new RootCARotationHandlerImpl(scm, rootCARotationManager);
232230

233-
final SCMHAInvocationHandler invocationHandler
234-
= new SCMHAInvocationHandler(CERT_ROTATE, impl, ratisServer);
235-
236-
return (RootCARotationHandler) Proxy.newProxyInstance(
237-
SCMHAInvocationHandler.class.getClassLoader(),
238-
new Class<?>[]{RootCARotationHandler.class},
239-
invocationHandler);
231+
return ratisServer.getProxyHandler(CERT_ROTATE,
232+
RootCARotationHandler.class, impl);
240233
}
241234
}
242235
}

hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/security/ScmSecretKeyStateBuilder.java

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,7 @@
1717

1818
package org.apache.hadoop.hdds.scm.security;
1919

20-
import java.lang.reflect.Proxy;
2120
import org.apache.hadoop.hdds.protocol.proto.SCMRatisProtocol;
22-
import org.apache.hadoop.hdds.scm.ha.SCMHAInvocationHandler;
2321
import org.apache.hadoop.hdds.scm.ha.SCMRatisServer;
2422
import org.apache.hadoop.hdds.security.symmetric.SecretKeyState;
2523
import org.apache.hadoop.hdds.security.symmetric.SecretKeyStateImpl;
@@ -47,13 +45,7 @@ public ScmSecretKeyStateBuilder setRatisServer(
4745

4846
public SecretKeyState build() {
4947
final SecretKeyState impl = new SecretKeyStateImpl(secretKeyStore);
50-
51-
final SCMHAInvocationHandler scmhaInvocationHandler =
52-
new SCMHAInvocationHandler(SCMRatisProtocol.RequestType.SECRET_KEY,
53-
impl, scmRatisServer);
54-
55-
return (SecretKeyState) Proxy.newProxyInstance(
56-
SCMHAInvocationHandler.class.getClassLoader(),
57-
new Class<?>[]{SecretKeyState.class}, scmhaInvocationHandler);
48+
return scmRatisServer.getProxyHandler(SCMRatisProtocol.RequestType.SECRET_KEY,
49+
SecretKeyState.class, impl);
5850
}
5951
}

hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/SCMCertStore.java

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121

2222
import com.google.common.base.Preconditions;
2323
import java.io.IOException;
24-
import java.lang.reflect.Proxy;
2524
import java.math.BigInteger;
2625
import java.security.cert.X509Certificate;
2726
import java.util.ArrayList;
@@ -31,7 +30,6 @@
3130
import java.util.concurrent.locks.ReentrantLock;
3231
import org.apache.hadoop.hdds.protocol.proto.HddsProtos.NodeType;
3332
import org.apache.hadoop.hdds.protocol.proto.SCMRatisProtocol;
34-
import org.apache.hadoop.hdds.scm.ha.SCMHAInvocationHandler;
3533
import org.apache.hadoop.hdds.scm.ha.SCMRatisServer;
3634
import org.apache.hadoop.hdds.scm.metadata.SCMMetadataStore;
3735
import org.apache.hadoop.hdds.security.exception.SCMSecurityException;
@@ -227,17 +225,9 @@ public Builder setRatisServer(final SCMRatisServer ratisServer) {
227225
}
228226

229227
public CertificateStore build() {
230-
final SCMCertStore scmCertStore = new SCMCertStore(metadataStore
231-
);
232-
233-
final SCMHAInvocationHandler scmhaInvocationHandler =
234-
new SCMHAInvocationHandler(SCMRatisProtocol.RequestType.CERT_STORE,
235-
scmCertStore, scmRatisServer);
236-
237-
return (CertificateStore) Proxy.newProxyInstance(
238-
SCMHAInvocationHandler.class.getClassLoader(),
239-
new Class<?>[]{CertificateStore.class}, scmhaInvocationHandler);
240-
228+
final SCMCertStore scmCertStore = new SCMCertStore(metadataStore);
229+
return scmRatisServer.getProxyHandler(SCMRatisProtocol.RequestType.CERT_STORE,
230+
CertificateStore.class, scmCertStore);
241231
}
242232
}
243233
}

hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/upgrade/FinalizationStateManagerImpl.java

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,9 @@
2020
import com.google.common.annotations.VisibleForTesting;
2121
import com.google.common.base.Preconditions;
2222
import java.io.IOException;
23-
import java.lang.reflect.Proxy;
2423
import java.util.concurrent.locks.ReadWriteLock;
2524
import java.util.concurrent.locks.ReentrantReadWriteLock;
2625
import org.apache.hadoop.hdds.protocol.proto.SCMRatisProtocol;
27-
import org.apache.hadoop.hdds.scm.ha.SCMHAInvocationHandler;
2826
import org.apache.hadoop.hdds.scm.ha.SCMRatisServer;
2927
import org.apache.hadoop.hdds.scm.metadata.DBTransactionBuffer;
3028
import org.apache.hadoop.hdds.scm.metadata.Replicate;
@@ -331,14 +329,9 @@ public FinalizationStateManager build() throws IOException {
331329
Preconditions.checkNotNull(finalizationStore);
332330
Preconditions.checkNotNull(transactionBuffer);
333331
Preconditions.checkNotNull(upgradeFinalizer);
334-
final SCMHAInvocationHandler invocationHandler =
335-
new SCMHAInvocationHandler(SCMRatisProtocol.RequestType.FINALIZE,
336-
new FinalizationStateManagerImpl(this),
337-
scmRatisServer);
338-
339-
return (FinalizationStateManager) Proxy.newProxyInstance(
340-
SCMHAInvocationHandler.class.getClassLoader(),
341-
new Class<?>[]{FinalizationStateManager.class}, invocationHandler);
332+
333+
return scmRatisServer.getProxyHandler(SCMRatisProtocol.RequestType.FINALIZE,
334+
FinalizationStateManager.class, new FinalizationStateManagerImpl(this));
342335
}
343336
}
344337
}

0 commit comments

Comments
 (0)