You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by ud...@apache.org on 2020/07/02 18:10:57 UTC
[geode] 21/29: GEODE-8294 - Integrate ModuleService into
HandshakeRequestOperationHandler and ValueSerializer.
This is an automated email from the ASF dual-hosted git repository.
udo pushed a commit to branch feature/GEODE-8294
in repository https://gitbox.apache.org/repos/asf/geode.git
commit 7007188ebf540095de5ba6d9c16ec4bcc9df4883
Author: Patrick Johnson <pj...@pivotal.io>
AuthorDate: Thu Jun 25 15:10:38 2020 -0700
GEODE-8294 - Integrate ModuleService into HandshakeRequestOperationHandler and ValueSerializer.
---
.../geode/internal/cache/GemFireCacheImpl.java | 1 -
geode-protobuf/build.gradle | 1 +
.../protobuf/v1/ProtobufProtocolService.java | 7 +++++-
.../protobuf/v1/ProtobufStreamProcessor.java | 6 ++++--
.../security/HandshakeRequestOperationHandler.java | 25 +++++++++++++++-------
.../registry/ProtobufOperationContextRegistry.java | 10 +++++----
.../protocol/serialization/ValueSerializer.java | 4 ++--
.../protobuf/ProtobufStreamProcessorTest.java | 4 +++-
.../v1/ProtobufProtocolServiceJUnitTest.java | 3 ++-
geode-protobuf/src/test/resources/expected-pom.xml | 5 +++++
10 files changed, 46 insertions(+), 20 deletions(-)
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/GemFireCacheImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/GemFireCacheImpl.java
index 1d9e0c0..77b5a6d 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/GemFireCacheImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/GemFireCacheImpl.java
@@ -1853,7 +1853,6 @@ public class GemFireCacheImpl implements InternalCache, InternalClientCache, Has
ModuleServiceResult<Set<CacheService>> loadedServices =
modulesService.loadService(CacheService.class);
if (loadedServices.isSuccessful()) {
- // ServiceLoader<CacheService> loader = ServiceLoader.load(CacheService.class);
for (CacheService service : loadedServices.getMessage()) {
try {
if (service.init(this)) {
diff --git a/geode-protobuf/build.gradle b/geode-protobuf/build.gradle
index a9c7eed..29a8b78 100644
--- a/geode-protobuf/build.gradle
+++ b/geode-protobuf/build.gradle
@@ -24,6 +24,7 @@ apply from: "${rootDir}/${scriptDir}/warnings.gradle"
dependencies {
compile(platform(project(':boms:geode-all-bom')))
implementation(project(':geode-logging'))
+ implementation(project(':geode-common-services'))
implementation(project(':geode-serialization'))
implementation(project(':geode-tcp-server'))
implementation(project(':geode-membership'))
diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/v1/ProtobufProtocolService.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/v1/ProtobufProtocolService.java
index abdcf32..ed983c4 100644
--- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/v1/ProtobufProtocolService.java
+++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/v1/ProtobufProtocolService.java
@@ -24,10 +24,15 @@ import org.apache.geode.internal.protocol.protobuf.statistics.ClientStatistics;
import org.apache.geode.internal.protocol.protobuf.statistics.NoOpStatistics;
import org.apache.geode.internal.protocol.protobuf.statistics.ProtobufClientStatistics;
import org.apache.geode.internal.security.SecurityService;
+import org.apache.geode.services.module.ModuleService;
public class ProtobufProtocolService implements ClientProtocolService {
private volatile ClientStatistics statistics;
- private final ProtobufStreamProcessor protobufStreamProcessor = new ProtobufStreamProcessor();
+ private final ProtobufStreamProcessor protobufStreamProcessor;
+
+ public ProtobufProtocolService(ModuleService moduleService) {
+ this.protobufStreamProcessor = new ProtobufStreamProcessor(moduleService);;
+ }
@Override
public synchronized void initializeStatistics(String statisticsName, StatisticsFactory factory) {
diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/v1/ProtobufStreamProcessor.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/v1/ProtobufStreamProcessor.java
index a70b851..6202f8d 100644
--- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/v1/ProtobufStreamProcessor.java
+++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/v1/ProtobufStreamProcessor.java
@@ -27,6 +27,7 @@ import org.apache.geode.internal.protocol.protobuf.v1.registry.ProtobufOperation
import org.apache.geode.internal.protocol.protobuf.v1.serializer.ProtobufProtocolSerializer;
import org.apache.geode.internal.protocol.protobuf.v1.serializer.exception.InvalidProtocolMessageException;
import org.apache.geode.logging.internal.log4j.api.LogService;
+import org.apache.geode.services.module.ModuleService;
/**
* This object handles an incoming stream containing protobuf messages. It parses the protobuf
@@ -39,9 +40,10 @@ public class ProtobufStreamProcessor {
private final ProtobufOpsProcessor protobufOpsProcessor;
private static final Logger logger = LogService.getLogger();
- public ProtobufStreamProcessor() {
+ public ProtobufStreamProcessor(ModuleService moduleService) {
protobufProtocolSerializer = new ProtobufProtocolSerializer();
- protobufOpsProcessor = new ProtobufOpsProcessor(new ProtobufOperationContextRegistry());
+ protobufOpsProcessor =
+ new ProtobufOpsProcessor(new ProtobufOperationContextRegistry(moduleService));
}
public void receiveMessage(InputStream inputStream, OutputStream outputStream,
diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/v1/operations/security/HandshakeRequestOperationHandler.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/v1/operations/security/HandshakeRequestOperationHandler.java
index ecfe091..858fef3 100644
--- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/v1/operations/security/HandshakeRequestOperationHandler.java
+++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/v1/operations/security/HandshakeRequestOperationHandler.java
@@ -14,9 +14,8 @@
*/
package org.apache.geode.internal.protocol.protobuf.v1.operations.security;
-import java.util.Iterator;
import java.util.Properties;
-import java.util.ServiceLoader;
+import java.util.Set;
import org.apache.logging.log4j.Logger;
@@ -34,10 +33,17 @@ import org.apache.geode.internal.protocol.protobuf.v1.state.exception.Connection
import org.apache.geode.logging.internal.log4j.api.LogService;
import org.apache.geode.protocol.serialization.ValueSerializer;
import org.apache.geode.security.AuthenticationFailedException;
+import org.apache.geode.services.module.ModuleService;
+import org.apache.geode.services.result.ModuleServiceResult;
public class HandshakeRequestOperationHandler implements
ProtobufOperationHandler<ConnectionAPI.HandshakeRequest, ConnectionAPI.HandshakeResponse> {
private static final Logger logger = LogService.getLogger();
+ private final ModuleService moduleService;
+
+ public HandshakeRequestOperationHandler(ModuleService moduleService) {
+ this.moduleService = moduleService;
+ }
@Override
public Result<ConnectionAPI.HandshakeResponse> process(
@@ -72,12 +78,15 @@ public class HandshakeRequestOperationHandler implements
.of(ConnectionAPI.HandshakeResponse.newBuilder().setAuthenticated(authenticated).build());
}
- private ValueSerializer loadSerializer(String valueFormat) throws ConnectionStateException {
- ServiceLoader<ValueSerializer> serviceLoader = ServiceLoader.load(ValueSerializer.class);
- for (Iterator<ValueSerializer> iterator = serviceLoader.iterator(); iterator.hasNext();) {
- ValueSerializer serializer = iterator.next();
- if (serializer.getID().equals(valueFormat)) {
- return serializer;
+ private ValueSerializer loadSerializer(String valueFormat)
+ throws ConnectionStateException {
+ ModuleServiceResult<Set<ValueSerializer>> valueSerializerServiceResult =
+ moduleService.loadService(ValueSerializer.class);
+ if (valueSerializerServiceResult.isSuccessful()) {
+ for (ValueSerializer serializer : valueSerializerServiceResult.getMessage()) {
+ if (serializer.getID().equals(valueFormat)) {
+ return serializer;
+ }
}
}
diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/v1/registry/ProtobufOperationContextRegistry.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/v1/registry/ProtobufOperationContextRegistry.java
index 8d6a44a..b8fcee8 100644
--- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/v1/registry/ProtobufOperationContextRegistry.java
+++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/v1/registry/ProtobufOperationContextRegistry.java
@@ -40,25 +40,27 @@ import org.apache.geode.internal.protocol.protobuf.v1.operations.PutIfAbsentRequ
import org.apache.geode.internal.protocol.protobuf.v1.operations.PutRequestOperationHandler;
import org.apache.geode.internal.protocol.protobuf.v1.operations.RemoveRequestOperationHandler;
import org.apache.geode.internal.protocol.protobuf.v1.operations.security.HandshakeRequestOperationHandler;
+import org.apache.geode.services.module.ModuleService;
@Experimental
public class ProtobufOperationContextRegistry {
private final Map<MessageTypeCase, ProtobufOperationContext> operationContexts;
- public ProtobufOperationContextRegistry() {
- operationContexts = Collections.unmodifiableMap(generateContexts());
+ public ProtobufOperationContextRegistry(ModuleService moduleService) {
+ operationContexts = Collections.unmodifiableMap(generateContexts(moduleService));
}
public ProtobufOperationContext getOperationContext(MessageTypeCase apiCase) {
return operationContexts.get(apiCase);
}
- private Map<MessageTypeCase, ProtobufOperationContext> generateContexts() {
+ private Map<MessageTypeCase, ProtobufOperationContext> generateContexts(
+ ModuleService moduleService) {
final Map<MessageTypeCase, ProtobufOperationContext> operationContexts = new HashMap<>();
operationContexts.put(MessageTypeCase.HANDSHAKEREQUEST,
new ProtobufOperationContext<>(ClientProtocol.Message::getHandshakeRequest,
- new HandshakeRequestOperationHandler(),
+ new HandshakeRequestOperationHandler(moduleService),
opsResp -> ClientProtocol.Message.newBuilder().setHandshakeResponse(opsResp)));
operationContexts.put(MessageTypeCase.DISCONNECTCLIENTREQUEST,
diff --git a/geode-protobuf/src/main/java/org/apache/geode/protocol/serialization/ValueSerializer.java b/geode-protobuf/src/main/java/org/apache/geode/protocol/serialization/ValueSerializer.java
index 6afaa99..0e35224 100644
--- a/geode-protobuf/src/main/java/org/apache/geode/protocol/serialization/ValueSerializer.java
+++ b/geode-protobuf/src/main/java/org/apache/geode/protocol/serialization/ValueSerializer.java
@@ -15,13 +15,13 @@
package org.apache.geode.protocol.serialization;
import java.io.IOException;
-import java.util.ServiceLoader;
import com.google.protobuf.ByteString;
import org.apache.geode.annotations.Experimental;
import org.apache.geode.cache.Cache;
import org.apache.geode.pdx.PdxInstance;
+import org.apache.geode.services.module.ModuleService;
/**
* Interface for controlling serialization format of all values transmitted using the
@@ -30,7 +30,7 @@ import org.apache.geode.pdx.PdxInstance;
* To use a custom format, implement this interface and register your format by
* adding a META-INF/services/org.apache.geode.protocol.serialization.ValueSerializer file
* that contains the full qualified name of your serializer. It will be loaded and registered
- * using Java's {@link ServiceLoader} mechanism.
+ * using {@link ModuleService} mechanism.
*
* Clients can than elect to use the registered format by sending a HandshakeRequest with
* and setting the valueFormat field in the request to match the string returned by {@link #getID()}
diff --git a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/ProtobufStreamProcessorTest.java b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/ProtobufStreamProcessorTest.java
index 4a1715f..ad5d8c9 100644
--- a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/ProtobufStreamProcessorTest.java
+++ b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/ProtobufStreamProcessorTest.java
@@ -29,6 +29,7 @@ import org.junit.experimental.categories.Category;
import org.apache.geode.internal.cache.InternalCacheForClientAccess;
import org.apache.geode.internal.protocol.TestExecutionContext;
import org.apache.geode.internal.protocol.protobuf.v1.ProtobufStreamProcessor;
+import org.apache.geode.services.module.ModuleService;
import org.apache.geode.test.junit.categories.ClientServerTest;
@Category({ClientServerTest.class})
@@ -38,7 +39,8 @@ public class ProtobufStreamProcessorTest {
InputStream inputStream = new ByteArrayInputStream(new byte[0]);
OutputStream outputStream = new ByteArrayOutputStream(2);
- ProtobufStreamProcessor protobufStreamProcessor = new ProtobufStreamProcessor();
+ ProtobufStreamProcessor protobufStreamProcessor =
+ new ProtobufStreamProcessor(ModuleService.DEFAULT);
InternalCacheForClientAccess mockInternalCache = mock(InternalCacheForClientAccess.class);
when(mockInternalCache.getCacheForProcessingClientRequests()).thenReturn(mockInternalCache);
protobufStreamProcessor.receiveMessage(inputStream, outputStream,
diff --git a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/v1/ProtobufProtocolServiceJUnitTest.java b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/v1/ProtobufProtocolServiceJUnitTest.java
index 5c90301..e995f52 100644
--- a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/v1/ProtobufProtocolServiceJUnitTest.java
+++ b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/v1/ProtobufProtocolServiceJUnitTest.java
@@ -21,13 +21,14 @@ import org.junit.experimental.categories.Category;
import org.apache.geode.internal.protocol.protobuf.statistics.ClientStatistics;
import org.apache.geode.internal.statistics.DummyStatisticsFactory;
+import org.apache.geode.services.module.ModuleService;
import org.apache.geode.test.junit.categories.ClientServerTest;
@Category({ClientServerTest.class})
public class ProtobufProtocolServiceJUnitTest {
@Test
public void initializeStatistics() {
- ProtobufProtocolService service = new ProtobufProtocolService();
+ ProtobufProtocolService service = new ProtobufProtocolService(ModuleService.DEFAULT);
service.initializeStatistics("first", new DummyStatisticsFactory());
ClientStatistics firstStatistics = service.getStatistics();
service.initializeStatistics("second", new DummyStatisticsFactory());
diff --git a/geode-protobuf/src/test/resources/expected-pom.xml b/geode-protobuf/src/test/resources/expected-pom.xml
index 637b69b..93675b2 100644
--- a/geode-protobuf/src/test/resources/expected-pom.xml
+++ b/geode-protobuf/src/test/resources/expected-pom.xml
@@ -63,6 +63,11 @@
</dependency>
<dependency>
<groupId>org.apache.geode</groupId>
+ <artifactId>geode-common-services</artifactId>
+ <scope>runtime</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.geode</groupId>
<artifactId>geode-serialization</artifactId>
<scope>runtime</scope>
</dependency>