Skip to content

Commit 8b49b2f

Browse files
refactor:adapted to JDK21+ virtual thread implementation, avoiding the uncertainty of InheritableThreadLocal. (#661)
Signed-off-by: Haotian Zhang <[email protected]>
1 parent 66c578f commit 8b49b2f

File tree

6 files changed

+116
-41
lines changed

6 files changed

+116
-41
lines changed

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

Lines changed: 47 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,29 @@ public interface CaseSensitiveMetadataProvider extends MetadataProvider {
2525
* @param keyCaseSensitive 是否区分大小写
2626
* @return 字符串原始值
2727
*/
28-
String getRawMetadataStringValue(String key, boolean keyCaseSensitive);
28+
default String getRawMetadataStringValue(String key, boolean keyCaseSensitive) {
29+
try {
30+
return doGetRawMetadataStringValue(key, keyCaseSensitive);
31+
} catch (Throwable throwable) {
32+
if (LOG.isDebugEnabled()) {
33+
LOG.warn("[{}] get raw metadata string value with key {} and case sensitive {} failed.",
34+
this.getClass(), key, keyCaseSensitive, throwable);
35+
} else {
36+
LOG.warn("[{}] get raw metadata string value with key {} and case sensitive {} failed. Caused by: {}",
37+
this.getClass(), key, keyCaseSensitive, throwable.getMessage());
38+
}
39+
return null;
40+
}
41+
}
42+
43+
/**
44+
* 根据键获取一级字符串型元数据原始值
45+
*
46+
* @param key 元数据键
47+
* @param keyCaseSensitive 是否区分大小写
48+
* @return 字符串原始值
49+
*/
50+
String doGetRawMetadataStringValue(String key, boolean keyCaseSensitive);
2951

3052
/**
3153
* 获取原始二级元数据值
@@ -34,5 +56,28 @@ public interface CaseSensitiveMetadataProvider extends MetadataProvider {
3456
* @param keyCaseSensitive 是否区分大小写
3557
* @return 值
3658
*/
37-
String getRawMetadataMapValue(String key, String mapKey, boolean keyCaseSensitive);
59+
default String getRawMetadataMapValue(String key, String mapKey, boolean keyCaseSensitive) {
60+
try {
61+
return doGetRawMetadataMapValue(key, mapKey, keyCaseSensitive);
62+
} catch (Throwable throwable) {
63+
if (LOG.isDebugEnabled()) {
64+
LOG.warn("[{}] get raw metadata map value with key {} and map key {} and case sensitive {} failed.",
65+
this.getClass(), key, mapKey, keyCaseSensitive, throwable);
66+
} else {
67+
LOG.warn("[{}] get raw metadata map value with key {} and map key {} and case sensitive {} failed. Caused by: {}",
68+
this.getClass(), key, mapKey, keyCaseSensitive, throwable.getMessage());
69+
}
70+
return null;
71+
}
72+
}
73+
74+
/**
75+
* 获取原始二级元数据值
76+
*
77+
* @param key 一级键
78+
* @param mapKey 二级键
79+
* @param keyCaseSensitive 是否区分大小写
80+
* @return 值
81+
*/
82+
String doGetRawMetadataMapValue(String key, String mapKey, boolean keyCaseSensitive);
3883
}

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

Lines changed: 49 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,21 +17,68 @@
1717

1818
package com.tencent.polaris.metadata.core;
1919

20+
import org.slf4j.Logger;
21+
import org.slf4j.LoggerFactory;
22+
2023
public interface MetadataProvider {
2124

25+
Logger LOG = LoggerFactory.getLogger(MetadataProvider.class);
26+
27+
/**
28+
* 根据键获取一级字符串型元数据原始值
29+
* @param key 元数据键
30+
* @return 字符串原始值
31+
*/
32+
default String getRawMetadataStringValue(String key) {
33+
try {
34+
return doGetRawMetadataStringValue(key);
35+
} catch (Throwable throwable) {
36+
if (LOG.isDebugEnabled()) {
37+
LOG.warn("[{}] get raw metadata string value with key {} failed.", this.getClass(), key, throwable);
38+
} else {
39+
LOG.warn("[{}] get raw metadata string value with key {} failed. Caused by: {}",
40+
this.getClass(), key, throwable.getMessage());
41+
}
42+
return null;
43+
}
44+
}
45+
2246
/**
2347
* 根据键获取一级字符串型元数据原始值
48+
*
2449
* @param key 元数据键
2550
* @return 字符串原始值
2651
*/
27-
String getRawMetadataStringValue(String key);
52+
String doGetRawMetadataStringValue(String key);
2853

2954
/**
3055
* 获取原始二级元数据值
3156
* @param key 一级键
3257
* @param mapKey 二级键
3358
* @return 值
3459
*/
35-
String getRawMetadataMapValue(String key, String mapKey);
60+
default String getRawMetadataMapValue(String key, String mapKey) {
61+
try {
62+
return doGetRawMetadataMapValue(key, mapKey);
63+
} catch (Throwable throwable) {
64+
if (LOG.isDebugEnabled()) {
65+
LOG.warn("[{}] get raw metadata map value with key {} and mapKey {} failed.",
66+
this.getClass(), key, mapKey, throwable);
67+
} else {
68+
LOG.warn("[{}] get raw metadata map value with key {} and mapKey {} failed. Caused by: {}",
69+
this.getClass(), key, mapKey, throwable.getMessage());
70+
}
71+
return null;
72+
}
73+
}
74+
75+
/**
76+
* 获取原始二级元数据值
77+
*
78+
* @param key 一级键
79+
* @param mapKey 二级键
80+
* @return 值
81+
*/
82+
String doGetRawMetadataMapValue(String key, String mapKey);
3683

3784
}

polaris-common/polaris-metadata/src/main/java/com/tencent/polaris/metadata/core/impl/MetadataContainerImpl.java

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -17,21 +17,10 @@
1717

1818
package com.tencent.polaris.metadata.core.impl;
1919

20-
import com.tencent.polaris.metadata.core.CaseSensitiveMetadataProvider;
21-
import com.tencent.polaris.metadata.core.MetadataContainer;
22-
import com.tencent.polaris.metadata.core.MetadataMapValue;
23-
import com.tencent.polaris.metadata.core.MetadataProvider;
24-
import com.tencent.polaris.metadata.core.MetadataStringValue;
25-
import com.tencent.polaris.metadata.core.MetadataValue;
26-
import com.tencent.polaris.metadata.core.TransitiveType;
27-
import com.tencent.polaris.metadata.core.Utils;
20+
import com.tencent.polaris.metadata.core.*;
2821
import com.tencent.polaris.metadata.core.manager.ComposeMetadataProvider;
2922

30-
import java.util.ArrayList;
31-
import java.util.Collections;
32-
import java.util.HashMap;
33-
import java.util.List;
34-
import java.util.Map;
23+
import java.util.*;
3524
import java.util.concurrent.ConcurrentHashMap;
3625
import java.util.concurrent.atomic.AtomicReference;
3726
import java.util.function.BiConsumer;
@@ -211,17 +200,17 @@ public MetadataValue apply(String s) {
211200
private class ContainerBasedMetadataProvider implements CaseSensitiveMetadataProvider {
212201

213202
@Override
214-
public String getRawMetadataStringValue(String key) {
203+
public String doGetRawMetadataStringValue(String key) {
215204
return getRawMetadataStringValue(key, Utils.DEFAULT_KEY_CASE_SENSITIVE);
216205
}
217206

218207
@Override
219-
public String getRawMetadataMapValue(String key, String mapKey) {
208+
public String doGetRawMetadataMapValue(String key, String mapKey) {
220209
return getRawMetadataMapValue(key, mapKey, Utils.DEFAULT_KEY_CASE_SENSITIVE);
221210
}
222211

223212
@Override
224-
public String getRawMetadataStringValue(String key, boolean keyCaseSensitive) {
213+
public String doGetRawMetadataStringValue(String key, boolean keyCaseSensitive) {
225214
MetadataValue metadataValue = getMetadataValue(key, keyCaseSensitive);
226215
if (metadataValue instanceof MetadataStringValue) {
227216
return ((MetadataStringValue) metadataValue).getStringValue();
@@ -230,7 +219,7 @@ public String getRawMetadataStringValue(String key, boolean keyCaseSensitive) {
230219
}
231220

232221
@Override
233-
public String getRawMetadataMapValue(String key, String mapKey, boolean keyCaseSensitive) {
222+
public String doGetRawMetadataMapValue(String key, String mapKey, boolean keyCaseSensitive) {
234223
MetadataValue metadataValue = getMetadataValue(key, keyCaseSensitive);
235224
if (metadataValue instanceof MetadataMapValue) {
236225
MetadataMapValue metadataMapValue = (MetadataMapValue) metadataValue;

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,12 @@
1717

1818
package com.tencent.polaris.metadata.core.manager;
1919

20-
import java.util.List;
21-
2220
import com.tencent.polaris.metadata.core.CaseSensitiveMetadataProvider;
2321
import com.tencent.polaris.metadata.core.MetadataProvider;
2422
import com.tencent.polaris.metadata.core.Utils;
2523

24+
import java.util.List;
25+
2626
public class ComposeMetadataProvider implements CaseSensitiveMetadataProvider {
2727

2828
private final List<MetadataProvider> metadataProviders;
@@ -36,7 +36,7 @@ public ComposeMetadataProvider(String transitivePrefix, List<MetadataProvider> m
3636
}
3737

3838
@Override
39-
public String getRawMetadataStringValue(String key) {
39+
public String doGetRawMetadataStringValue(String key) {
4040
// 先获取透传标签
4141
if (null != transitivePrefix && !transitivePrefix.isEmpty()) {
4242
String value = getRawStringValue(Utils.encapsulateMetadataKey(transitivePrefix, key));
@@ -49,7 +49,7 @@ public String getRawMetadataStringValue(String key) {
4949
}
5050

5151
@Override
52-
public String getRawMetadataMapValue(String key, String mapKey) {
52+
public String doGetRawMetadataMapValue(String key, String mapKey) {
5353
// 先获取透传标签
5454
if (null != transitivePrefix && !transitivePrefix.isEmpty()) {
5555
String value = getRawMapValue(key, Utils.encapsulateMetadataKey(transitivePrefix, mapKey));
@@ -83,7 +83,7 @@ private String getRawMapValue(String key, String mapKey) {
8383

8484

8585
@Override
86-
public String getRawMetadataStringValue(String key, boolean keyCaseSensitive) {
86+
public String doGetRawMetadataStringValue(String key, boolean keyCaseSensitive) {
8787
for (MetadataProvider metadataProvider : metadataProviders) {
8888
if (metadataProvider instanceof CaseSensitiveMetadataProvider) {
8989
CaseSensitiveMetadataProvider caseSensitiveMetadataProvider = (CaseSensitiveMetadataProvider) metadataProvider;
@@ -102,7 +102,7 @@ public String getRawMetadataStringValue(String key, boolean keyCaseSensitive) {
102102
}
103103

104104
@Override
105-
public String getRawMetadataMapValue(String key, String mapKey, boolean keyCaseSensitive) {
105+
public String doGetRawMetadataMapValue(String key, String mapKey, boolean keyCaseSensitive) {
106106
for (MetadataProvider metadataProvider : metadataProviders) {
107107
if (metadataProvider instanceof CaseSensitiveMetadataProvider) {
108108
CaseSensitiveMetadataProvider caseSensitiveMetadataProvider = (CaseSensitiveMetadataProvider) metadataProvider;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222

2323
public class MetadataContextHolder {
2424

25-
private static final ThreadLocal<MetadataContext> THREAD_LOCAL_CONTEXT = new InheritableThreadLocal<>();
25+
private static final ThreadLocal<MetadataContext> THREAD_LOCAL_CONTEXT = new ThreadLocal<>();
2626

2727
private static Supplier<MetadataContext> initializer;
2828

polaris-common/polaris-metadata/src/test/java/com/tencent/polaris/metadata/core/test/TestMetadataContainer.java

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,7 @@
1717

1818
package com.tencent.polaris.metadata.core.test;
1919

20-
import com.tencent.polaris.metadata.core.CaseSensitiveMetadataProvider;
21-
import com.tencent.polaris.metadata.core.MetadataContainer;
22-
import com.tencent.polaris.metadata.core.MetadataMapValue;
23-
import com.tencent.polaris.metadata.core.MetadataObjectValue;
24-
import com.tencent.polaris.metadata.core.MetadataProvider;
25-
import com.tencent.polaris.metadata.core.MetadataStringValue;
26-
import com.tencent.polaris.metadata.core.TransitiveType;
20+
import com.tencent.polaris.metadata.core.*;
2721
import com.tencent.polaris.metadata.core.impl.MessageMetadataContainerImpl;
2822
import org.junit.Assert;
2923
import org.junit.Test;
@@ -118,15 +112,15 @@ public void testMetadataProvider() {
118112
metadataContainer.putMetadataMapValue("key1", "mapkey", "222", TransitiveType.NONE);
119113
MetadataProvider metadataProvider1 = new MetadataProvider() {
120114
@Override
121-
public String getRawMetadataStringValue(String key) {
115+
public String doGetRawMetadataStringValue(String key) {
122116
if (key.equalsIgnoreCase("KEY")) {
123117
return "33";
124118
}
125119
return null;
126120
}
127121

128122
@Override
129-
public String getRawMetadataMapValue(String key, String mapKey) {
123+
public String doGetRawMetadataMapValue(String key, String mapKey) {
130124
if (key.equalsIgnoreCase("KEY1") && mapKey.equalsIgnoreCase("MAPKEY")) {
131125
return "333";
132126
}
@@ -149,31 +143,31 @@ public void testCaseSensitiveMetadataProvider() {
149143
metadataContainer.putMetadataMapValue("key1", "mapkey", "222", TransitiveType.NONE);
150144
CaseSensitiveMetadataProvider metadataProvider1 = new CaseSensitiveMetadataProvider() {
151145
@Override
152-
public String getRawMetadataStringValue(String key, boolean keyCaseSensitive) {
146+
public String doGetRawMetadataStringValue(String key, boolean keyCaseSensitive) {
153147
if (key.equals("KEY")) {
154148
return "44";
155149
}
156150
return null;
157151
}
158152

159153
@Override
160-
public String getRawMetadataMapValue(String key, String mapKey, boolean keyCaseSensitive) {
154+
public String doGetRawMetadataMapValue(String key, String mapKey, boolean keyCaseSensitive) {
161155
if (key.equals("KEY1") && mapKey.equals("MAPKey")) {
162156
return "444";
163157
}
164158
return null;
165159
}
166160

167161
@Override
168-
public String getRawMetadataStringValue(String key) {
162+
public String doGetRawMetadataStringValue(String key) {
169163
if (key.equalsIgnoreCase("KEY")) {
170164
return "33";
171165
}
172166
return null;
173167
}
174168

175169
@Override
176-
public String getRawMetadataMapValue(String key, String mapKey) {
170+
public String doGetRawMetadataMapValue(String key, String mapKey) {
177171
if (key.equalsIgnoreCase("KEY1") && mapKey.equalsIgnoreCase("MAPKEY")) {
178172
return "333";
179173
}

0 commit comments

Comments
 (0)