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>