diff --git a/CHANGELOG.md b/CHANGELOG.md index 7b2f5ff41..00a717f3b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,3 +20,4 @@ - [fix: fix NPE when application context is null #1787](https://github.com/Tencent/spring-cloud-tencent/pull/1787) - [fix: fix lane router property name.](https://github.com/Tencent/spring-cloud-tencent/pull/1789) - [feat: support kafka lane.](https://github.com/Tencent/spring-cloud-tencent/pull/1792) +- [feat: server span support preferIpv6 in tsf.](https://github.com/Tencent/spring-cloud-tencent/pull/1790) diff --git a/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/util/OtUtils.java b/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/util/OtUtils.java index a05278105..105447ba3 100644 --- a/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/util/OtUtils.java +++ b/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/util/OtUtils.java @@ -37,6 +37,11 @@ public final class OtUtils { */ public static final String OTEL_LANE_ID_KEY = "lane-id"; + /** + * Key of prefer ipv6. + */ + public static final String OTEL_PREFER_IPV6_KEY = "prefer.ipv6"; + private static final Logger LOGGER = LoggerFactory.getLogger(OtUtils.class); private static String otServiceName = null; diff --git a/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/util/TsfTagUtils.java b/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/util/TsfTagUtils.java index b61b864a2..63b64f681 100644 --- a/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/util/TsfTagUtils.java +++ b/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/util/TsfTagUtils.java @@ -150,6 +150,9 @@ public final class TsfTagUtils { case TsfMetadataConstants.TSF_NAMESPACE_ID: metadata.setNamespaceId(entry.getValue()); break; + case TsfMetadataConstants.TSF_PREFER_IPV6: + metadata.setPreferIpv6(Boolean.parseBoolean(entry.getValue())); + break; } } tsfMetadataMap.put(MetadataConstant.HeaderName.TSF_METADATA, JacksonUtils.serialize2Json(metadata)); @@ -221,6 +224,7 @@ public final class TsfTagUtils { if (StringUtils.isNotEmpty(metadata.getLocalIp())) { mergedApplicationMetadata.put(MetadataConstants.LOCAL_IP, metadata.getLocalIp()); } + mergedApplicationMetadata.put(TsfMetadataConstants.TSF_PREFER_IPV6, String.valueOf(metadata.isPreferIpv6())); } if (LOGGER.isDebugEnabled()) { diff --git a/spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/attribute/tsf/TsfSpanAttributesProvider.java b/spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/attribute/tsf/TsfSpanAttributesProvider.java index 84c6f0967..79414aae0 100644 --- a/spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/attribute/tsf/TsfSpanAttributesProvider.java +++ b/spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/attribute/tsf/TsfSpanAttributesProvider.java @@ -94,6 +94,11 @@ public class TsfSpanAttributesProvider implements SpanAttributesProvider { } } } + + Map upstreamApplicationAttributes = metadataContext.getFragmentContext(MetadataContext.FRAGMENT_UPSTREAM_APPLICATION); + attributes.put(OtUtils.OTEL_PREFER_IPV6_KEY, + upstreamApplicationAttributes.getOrDefault(TsfMetadataConstants.TSF_PREFER_IPV6, "false")); + return attributes; } diff --git a/spring-cloud-tencent-polaris-context/src/main/java/com/tencent/cloud/polaris/context/config/extend/tsf/TsfCoreProperties.java b/spring-cloud-tencent-polaris-context/src/main/java/com/tencent/cloud/polaris/context/config/extend/tsf/TsfCoreProperties.java index 705a2df1d..74114388e 100644 --- a/spring-cloud-tencent-polaris-context/src/main/java/com/tencent/cloud/polaris/context/config/extend/tsf/TsfCoreProperties.java +++ b/spring-cloud-tencent-polaris-context/src/main/java/com/tencent/cloud/polaris/context/config/extend/tsf/TsfCoreProperties.java @@ -135,6 +135,9 @@ public class TsfCoreProperties { @Value("${tsf_ratelimit_master_port:7000}") private Integer ratelimitMasterPort; + @Value("${tsf_prefer_ipv6:false}") + private Boolean preferIpv6; + public String getAppId() { return appId; } @@ -290,6 +293,14 @@ public class TsfCoreProperties { this.ratelimitMasterPort = ratelimitMasterPort; } + public Boolean getPreferIpv6() { + return preferIpv6; + } + + public void setPreferIpv6(Boolean preferIpv6) { + this.preferIpv6 = preferIpv6; + } + @Override public String toString() { return "TsfCoreProperties{" + @@ -311,6 +322,7 @@ public class TsfCoreProperties { ", eventMasterPort=" + eventMasterPort + ", ratelimitMasterIp='" + ratelimitMasterIp + '\'' + ", ratelimitMasterPort=" + ratelimitMasterPort + + ", preferIpv6=" + preferIpv6 + '}'; } } diff --git a/spring-cloud-tencent-polaris-context/src/main/java/com/tencent/cloud/polaris/context/config/extend/tsf/TsfInstanceMetadataProvider.java b/spring-cloud-tencent-polaris-context/src/main/java/com/tencent/cloud/polaris/context/config/extend/tsf/TsfInstanceMetadataProvider.java index 60b8d9221..626e145ce 100644 --- a/spring-cloud-tencent-polaris-context/src/main/java/com/tencent/cloud/polaris/context/config/extend/tsf/TsfInstanceMetadataProvider.java +++ b/spring-cloud-tencent-polaris-context/src/main/java/com/tencent/cloud/polaris/context/config/extend/tsf/TsfInstanceMetadataProvider.java @@ -82,6 +82,9 @@ public class TsfInstanceMetadataProvider implements InstanceMetadataProvider { if (StringUtils.isNotBlank(ipv6Address)) { tsfMetadata.put(TsfMetadataConstants.TSF_ADDRESS_IPV6, ipv6Address); } + if (tsfCoreProperties.getPreferIpv6() != null) { + tsfMetadata.put(TsfMetadataConstants.TSF_PREFER_IPV6, tsfCoreProperties.getPreferIpv6().toString()); + } return tsfMetadata; } }