You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by ni...@apache.org on 2019/12/10 02:33:43 UTC

[servicecomb-pack] 10/13: SCB-1627 Package Alpha's metadata with AlphaMetas

This is an automated email from the ASF dual-hosted git repository.

ningjiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-pack.git

commit bda9b4d627f537725091049ea794bd29393cc3f6
Author: Lei Zhang <zh...@apache.org>
AuthorDate: Wed Dec 4 11:06:42 2019 +0800

    SCB-1627 Package Alpha's metadata with AlphaMetas
---
 .../servicecomb/pack/omega/context/AlphaMetas.java | 38 ++++++++++++++++++++--
 .../pack/omega/context/OmegaContext.java           | 14 ++++----
 .../pack/omega/spring/OmegaSpringConfig.java       |  3 +-
 .../transaction/SagaStartAnnotationProcessor.java  |  2 +-
 .../pack/omega/transaction/SagaStartAspect.java    |  2 +-
 .../omega/transaction/SagaStartAspectTest.java     |  3 +-
 .../servicecomb/pack/common/AlphaMetaKeys.java     |  2 +-
 7 files changed, 49 insertions(+), 15 deletions(-)

diff --git a/pack-common/src/main/java/org/apache/servicecomb/pack/common/AlphaMetaKeys.java b/omega/omega-context/src/main/java/org/apache/servicecomb/pack/omega/context/AlphaMetas.java
similarity index 50%
copy from pack-common/src/main/java/org/apache/servicecomb/pack/common/AlphaMetaKeys.java
copy to omega/omega-context/src/main/java/org/apache/servicecomb/pack/omega/context/AlphaMetas.java
index 352dd70..a1a043f 100644
--- a/pack-common/src/main/java/org/apache/servicecomb/pack/common/AlphaMetaKeys.java
+++ b/omega/omega-context/src/main/java/org/apache/servicecomb/pack/omega/context/AlphaMetas.java
@@ -15,8 +15,40 @@
  * limitations under the License.
  */
 
-package org.apache.servicecomb.pack.common;
+package org.apache.servicecomb.pack.omega.context;
 
-public enum AlphaMetaKeys {
-  AkkaEnabled
+public class AlphaMetas {
+
+  private boolean akkaEnabled = false;
+
+  public boolean isAkkaEnabled() {
+    return akkaEnabled;
+  }
+
+  @Override
+  public String toString() {
+    return "AlphaMetas{" +
+        "akkaEnabled=" + akkaEnabled +
+        '}';
+  }
+
+  public static AlphaMetasBuilder builder() {
+    return new AlphaMetasBuilder();
+  }
+
+  public static final class AlphaMetasBuilder {
+
+    private boolean akkaEnabled = false;
+
+    public AlphaMetasBuilder akkaEnabled(boolean akkaEnabled) {
+      this.akkaEnabled = akkaEnabled;
+      return this;
+    }
+
+    public AlphaMetas build() {
+      AlphaMetas alphaMetas = new AlphaMetas();
+      alphaMetas.akkaEnabled = this.akkaEnabled;
+      return alphaMetas;
+    }
+  }
 }
\ No newline at end of file
diff --git a/omega/omega-context/src/main/java/org/apache/servicecomb/pack/omega/context/OmegaContext.java b/omega/omega-context/src/main/java/org/apache/servicecomb/pack/omega/context/OmegaContext.java
index 660b923..fd0487a 100644
--- a/omega/omega-context/src/main/java/org/apache/servicecomb/pack/omega/context/OmegaContext.java
+++ b/omega/omega-context/src/main/java/org/apache/servicecomb/pack/omega/context/OmegaContext.java
@@ -28,15 +28,15 @@ public class OmegaContext {
   private final ThreadLocal<String> localTxId = new InheritableThreadLocal<>();
   private final IdGenerator<String> idGenerator;
 
-  private final boolean alphaFeatureAkkaEnabled;
+  private final AlphaMetas alphaMetas;
 
   public OmegaContext(IdGenerator<String> idGenerator) {
-    this(idGenerator,false);
+    this(idGenerator, AlphaMetas.builder().akkaEnabled(false).build());
   }
 
-  public OmegaContext(IdGenerator<String> idGenerator, boolean alphaFeatureAkkaEnabled) {
+  public OmegaContext(IdGenerator<String> idGenerator, AlphaMetas alphaMetas) {
     this.idGenerator = idGenerator;
-    this.alphaFeatureAkkaEnabled = alphaFeatureAkkaEnabled;
+    this.alphaMetas = alphaMetas;
   }
 
   public String newGlobalTxId() {
@@ -67,8 +67,8 @@ public class OmegaContext {
     return localTxId.get();
   }
 
-  public boolean isAlphaFeatureAkkaEnabled() {
-    return alphaFeatureAkkaEnabled;
+  public AlphaMetas getAlphaMetas() {
+    return alphaMetas;
   }
 
   public TransactionContext getTransactionContext() {
@@ -85,7 +85,7 @@ public class OmegaContext {
     return "OmegaContext{" +
         "globalTxId=" + globalTxId.get() +
         ", localTxId=" + localTxId.get() +
-        ", alphaFeatureAkkaEnabled=" + alphaFeatureAkkaEnabled +
+        ", " + alphaMetas +
         '}';
   }
 
diff --git a/omega/omega-spring-starter/src/main/java/org/apache/servicecomb/pack/omega/spring/OmegaSpringConfig.java b/omega/omega-spring-starter/src/main/java/org/apache/servicecomb/pack/omega/spring/OmegaSpringConfig.java
index 1fd3648..5f54972 100644
--- a/omega/omega-spring-starter/src/main/java/org/apache/servicecomb/pack/omega/spring/OmegaSpringConfig.java
+++ b/omega/omega-spring-starter/src/main/java/org/apache/servicecomb/pack/omega/spring/OmegaSpringConfig.java
@@ -28,6 +28,7 @@ import org.apache.servicecomb.pack.omega.connector.grpc.core.LoadBalanceContextB
 import org.apache.servicecomb.pack.omega.connector.grpc.core.TransactionType;
 import org.apache.servicecomb.pack.omega.connector.grpc.saga.SagaLoadBalanceSender;
 import org.apache.servicecomb.pack.omega.connector.grpc.tcc.TccLoadBalanceSender;
+import org.apache.servicecomb.pack.omega.context.AlphaMetas;
 import org.apache.servicecomb.pack.omega.transaction.CallbackContext;
 import org.apache.servicecomb.pack.omega.context.IdGenerator;
 import org.apache.servicecomb.pack.omega.context.OmegaContext;
@@ -68,7 +69,7 @@ class OmegaSpringConfig {
   OmegaContext omegaContext(@Qualifier("omegaUniqueIdGenerator") IdGenerator<String> idGenerator, SagaMessageSender messageSender) {
     ServerMeta serverMeta = messageSender.onGetServerMeta();
     boolean akkaEnabeld = Boolean.parseBoolean(serverMeta.getMetaMap().get(AlphaMetaKeys.AkkaEnabled.name()));
-    return new OmegaContext(idGenerator,akkaEnabeld);
+    return new OmegaContext(idGenerator, AlphaMetas.builder().akkaEnabled(akkaEnabeld).build());
   }
 
   @Bean(name = {"compensationContext"})
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/pack/omega/transaction/SagaStartAnnotationProcessor.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/pack/omega/transaction/SagaStartAnnotationProcessor.java
index de9aa3f..9f5f268 100644
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/pack/omega/transaction/SagaStartAnnotationProcessor.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/pack/omega/transaction/SagaStartAnnotationProcessor.java
@@ -50,7 +50,7 @@ public class SagaStartAnnotationProcessor {
 
   public void onError(String compensationMethod, Throwable throwable) {
     String globalTxId = omegaContext.globalTxId();
-    if(omegaContext.isAlphaFeatureAkkaEnabled()){
+    if(omegaContext.getAlphaMetas().isAkkaEnabled()){
       sender.send(
           new SagaAbortedEvent(globalTxId, omegaContext.localTxId(), null, compensationMethod,
               throwable));
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/pack/omega/transaction/SagaStartAspect.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/pack/omega/transaction/SagaStartAspect.java
index 650448d..d9a2320 100644
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/pack/omega/transaction/SagaStartAspect.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/pack/omega/transaction/SagaStartAspect.java
@@ -42,7 +42,7 @@ public class SagaStartAspect {
   @Around("execution(@org.apache.servicecomb.pack.omega.context.annotations.SagaStart * *(..)) && @annotation(sagaStart)")
   Object advise(ProceedingJoinPoint joinPoint, SagaStart sagaStart) throws Throwable {
     initializeOmegaContext();
-    if(context.isAlphaFeatureAkkaEnabled() && sagaStart.timeout()>0){
+    if(context.getAlphaMetas().isAkkaEnabled() && sagaStart.timeout()>0){
       SagaStartAnnotationProcessorTimeoutWrapper wrapper = new SagaStartAnnotationProcessorTimeoutWrapper(this.sagaStartAnnotationProcessor);
       return wrapper.apply(joinPoint,sagaStart,context);
     }else{
diff --git a/omega/omega-transaction/src/test/java/org/apache/servicecomb/pack/omega/transaction/SagaStartAspectTest.java b/omega/omega-transaction/src/test/java/org/apache/servicecomb/pack/omega/transaction/SagaStartAspectTest.java
index ba4539c..2226181 100644
--- a/omega/omega-transaction/src/test/java/org/apache/servicecomb/pack/omega/transaction/SagaStartAspectTest.java
+++ b/omega/omega-transaction/src/test/java/org/apache/servicecomb/pack/omega/transaction/SagaStartAspectTest.java
@@ -29,6 +29,7 @@ import java.util.UUID;
 
 import org.apache.servicecomb.pack.common.EventType;
 import org.apache.servicecomb.pack.contract.grpc.ServerMeta;
+import org.apache.servicecomb.pack.omega.context.AlphaMetas;
 import org.apache.servicecomb.pack.omega.context.IdGenerator;
 import org.apache.servicecomb.pack.omega.context.OmegaContext;
 import org.apache.servicecomb.pack.omega.context.annotations.SagaStart;
@@ -169,7 +170,7 @@ public class SagaStartAspectTest {
 
   @Test
   public void clearContextOnSagaStartErrorWithAkka() throws Throwable {
-    omegaContext = new OmegaContext(idGenerator,true);
+    omegaContext = new OmegaContext(idGenerator, AlphaMetas.builder().akkaEnabled(true).build());
     aspect = new SagaStartAspect(sender, omegaContext);
     RuntimeException oops = new RuntimeException("oops");
 
diff --git a/pack-common/src/main/java/org/apache/servicecomb/pack/common/AlphaMetaKeys.java b/pack-common/src/main/java/org/apache/servicecomb/pack/common/AlphaMetaKeys.java
index 352dd70..ce27b80 100644
--- a/pack-common/src/main/java/org/apache/servicecomb/pack/common/AlphaMetaKeys.java
+++ b/pack-common/src/main/java/org/apache/servicecomb/pack/common/AlphaMetaKeys.java
@@ -18,5 +18,5 @@
 package org.apache.servicecomb.pack.common;
 
 public enum AlphaMetaKeys {
-  AkkaEnabled
+  AkkaEnabled // TODO Future expansion to SupportSaga, SupportTcc
 }
\ No newline at end of file