Skip to content

Commit 0499854

Browse files
committed
feat: support kafka lane & THREAD_LOCAL_CONTEXT support TransmittableThreadLocal.
1 parent e368bd0 commit 0499854

File tree

6 files changed

+595
-295
lines changed

6 files changed

+595
-295
lines changed

polaris-common/polaris-metadata/src/main/java/com/tencent/polaris/metadata/core/manager/MetadataContextHolder.java

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,33 @@
2020
import java.util.function.Consumer;
2121
import java.util.function.Supplier;
2222

23+
import com.tencent.polaris.logging.LoggerFactory;
24+
import org.slf4j.Logger;
25+
2326
public class MetadataContextHolder {
2427

25-
private static final ThreadLocal<MetadataContext> THREAD_LOCAL_CONTEXT = new ThreadLocal<>();
28+
private static final Logger LOG = LoggerFactory.getLogger(MetadataContextHolder.class);
29+
30+
private static final ThreadLocal<MetadataContext> THREAD_LOCAL_CONTEXT;
2631

2732
private static Supplier<MetadataContext> initializer;
2833

34+
static {
35+
ThreadLocal<MetadataContext> tempThreadLocalContext;
36+
try {
37+
// the class name need to be excluded in maven shade plugin
38+
Class<?> clazz = Class.forName("com.alibaba.ttl.TransmittableThreadLocal");
39+
tempThreadLocalContext = (ThreadLocal<MetadataContext>) clazz.getDeclaredConstructor(new Class[0]).newInstance();
40+
LOG.info("Use TransmittableThreadLocal for thread local context");
41+
} catch (Exception e) {
42+
LOG.debug("Failed to use TransmittableThreadLocal for thread local context, msg: {}", e.getMessage());
43+
LOG.info("Use standard ThreadLocal for thread local context");
44+
tempThreadLocalContext = new ThreadLocal<>();
45+
}
46+
THREAD_LOCAL_CONTEXT = tempThreadLocalContext;
47+
}
48+
49+
2950
public static MetadataContext getOrCreate() {
3051
MetadataContext metadataContext = THREAD_LOCAL_CONTEXT.get();
3152
if (null != metadataContext) {

polaris-distribution/polaris-all/pom.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,9 @@
171171
<pattern>com.alibaba</pattern>
172172
<shadedPattern>shade.polaris.com.alibaba
173173
</shadedPattern>
174+
<excludes>
175+
<exclude>com.alibaba.ttl.TransmittableThreadLocal</exclude>
176+
</excludes>
174177
</relocation>
175178
<relocation>
176179
<pattern>io.perfmark</pattern>

polaris-plugins/polaris-plugins-connector/connector-consul/src/main/java/com/tencent/polaris/plugins/connector/consul/service/lane/LaneService.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,9 @@
6464
import java.util.concurrent.atomic.AtomicReference;
6565

6666
import static com.tencent.polaris.api.config.plugin.DefaultPlugins.SERVER_CONNECTOR_CONSUL;
67+
import static com.tencent.polaris.metadata.core.constant.TsfMetadataConstants.TSF_APPLICATION_ID;
6768
import static com.tencent.polaris.metadata.core.constant.TsfMetadataConstants.TSF_GROUP_ID;
69+
import static com.tencent.polaris.metadata.core.constant.TsfMetadataConstants.TSF_NAMESPACE_ID;
6870
import static com.tencent.polaris.plugins.connector.consul.service.common.TagConditionUtil.parseMatchStringType;
6971

7072
/**
@@ -216,6 +218,9 @@ private List<LaneProto.LaneGroup> parseResponse(LaneInfoResponse laneInfoRespons
216218
if (laneGroup.isEntrance()) {
217219
entranceList.add(laneGroup.getGroupId());
218220
}
221+
if (StringUtils.isNotEmpty(laneGroup.getNamespaceId()) && StringUtils.isNotEmpty(laneGroup.getApplicationId())) {
222+
laneGroupBuilder.putMetadata(laneGroup.getNamespaceId() + "," + laneGroup.getApplicationId(), TSF_NAMESPACE_ID + "," + TSF_APPLICATION_ID);
223+
}
219224
}
220225
}
221226
for (String entrance : entranceList) {

0 commit comments

Comments
 (0)