SCB-1627 Package Alpha's metadata with AlphaMetas
diff --git a/omega/omega-context/src/main/java/org/apache/servicecomb/pack/omega/context/AlphaMetas.java b/omega/omega-context/src/main/java/org/apache/servicecomb/pack/omega/context/AlphaMetas.java
new file mode 100644
index 0000000..a1a043f
--- /dev/null
+++ b/omega/omega-context/src/main/java/org/apache/servicecomb/pack/omega/context/AlphaMetas.java
@@ -0,0 +1,54 @@
+/*
+ * 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.servicecomb.pack.omega.context;
+
+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 @@
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 @@
return localTxId.get();
}
- public boolean isAlphaFeatureAkkaEnabled() {
- return alphaFeatureAkkaEnabled;
+ public AlphaMetas getAlphaMetas() {
+ return alphaMetas;
}
public TransactionContext getTransactionContext() {
@@ -85,7 +85,7 @@
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.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 @@
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 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 @@
@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 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 @@
@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