fix:fix RestTemplate trace attribute loss bug.

Haotian Zhang 2 months ago
parent 3ccc5eb601
commit 321b7d77fe

@ -11,4 +11,5 @@
- [fix: fix loadbalancer metadata type.](https://github.com/Tencent/spring-cloud-tencent/pull/1624) - [fix: fix loadbalancer metadata type.](https://github.com/Tencent/spring-cloud-tencent/pull/1624)
- [feat:support polaris server nearby backup LB.](https://github.com/Tencent/spring-cloud-tencent/pull/1629) - [feat:support polaris server nearby backup LB.](https://github.com/Tencent/spring-cloud-tencent/pull/1629)
- fix:fix ipv6 instance not found bug. - fix:fix ipv6 instance not found bug.
- fix:fix tsf lossless not working bug. - fix:fix tsf lossless not working bug.
- fix:fix RestTemplate trace attribute loss bug.

@ -18,7 +18,6 @@
package com.tencent.cloud.polaris.circuitbreaker.reporter; package com.tencent.cloud.polaris.circuitbreaker.reporter;
import com.tencent.cloud.common.constant.ContextConstant; import com.tencent.cloud.common.constant.ContextConstant;
import com.tencent.cloud.common.metadata.MetadataContext;
import com.tencent.cloud.common.metadata.MetadataContextHolder; import com.tencent.cloud.common.metadata.MetadataContextHolder;
import com.tencent.cloud.polaris.circuitbreaker.PolarisCircuitBreaker; import com.tencent.cloud.polaris.circuitbreaker.PolarisCircuitBreaker;
import com.tencent.cloud.polaris.circuitbreaker.instrument.resttemplate.PolarisCircuitBreakerHttpResponse; import com.tencent.cloud.polaris.circuitbreaker.instrument.resttemplate.PolarisCircuitBreakerHttpResponse;
@ -28,7 +27,6 @@ import com.tencent.cloud.rpc.enhancement.plugin.EnhancedPluginType;
import com.tencent.cloud.rpc.enhancement.plugin.EnhancedRequestContext; import com.tencent.cloud.rpc.enhancement.plugin.EnhancedRequestContext;
import com.tencent.cloud.rpc.enhancement.plugin.EnhancedResponseContext; import com.tencent.cloud.rpc.enhancement.plugin.EnhancedResponseContext;
import com.tencent.cloud.rpc.enhancement.plugin.reporter.SuccessPolarisReporter; import com.tencent.cloud.rpc.enhancement.plugin.reporter.SuccessPolarisReporter;
import com.tencent.polaris.api.utils.StringUtils;
import com.tencent.polaris.circuitbreak.client.exception.CallAbortedException; import com.tencent.polaris.circuitbreak.client.exception.CallAbortedException;
import com.tencent.polaris.metadata.core.MetadataType; import com.tencent.polaris.metadata.core.MetadataType;
import org.slf4j.Logger; import org.slf4j.Logger;
@ -70,9 +68,9 @@ public class CircuitBreakerPlugin implements EnhancedPlugin {
EnhancedRequestContext request = context.getRequest(); EnhancedRequestContext request = context.getRequest();
EnhancedResponseContext response = context.getResponse(); EnhancedResponseContext response = context.getResponse();
String host = request.getServiceUrl() != null ? request.getServiceUrl().getHost() : request.getUrl().getHost(); String host = request.getHost();
String path = request.getServiceUrl() != null ? request.getServiceUrl().getPath() : request.getUrl().getPath(); String path = request.getPath();
String governanceNamespace = StringUtils.isNotEmpty(request.getGovernanceNamespace()) ? request.getGovernanceNamespace() : MetadataContext.LOCAL_NAMESPACE; String governanceNamespace = request.getGovernanceNamespace();
String httpMethod = request.getHttpMethod().name(); String httpMethod = request.getHttpMethod().name();

@ -84,7 +84,7 @@ public class PolarisSpanAttributesProvider implements SpanAttributesProvider {
} }
attributes.put("http.port", CalleeMetadataContainerGroup.getStaticApplicationMetadataContainer() attributes.put("http.port", CalleeMetadataContainerGroup.getStaticApplicationMetadataContainer()
.getRawMetadataStringValue(MetadataConstants.LOCAL_PORT)); .getRawMetadataStringValue(MetadataConstants.LOCAL_PORT));
attributes.put("net.peer.service", context.getTargetServiceInstance().getServiceId()); attributes.put("net.peer.service", context.getRequest().getHost());
String serviceLane = metadataContext.getMetadataContainer(MetadataType.MESSAGE, false) String serviceLane = metadataContext.getMetadataContainer(MetadataType.MESSAGE, false)
.getRawMetadataMapValue(MessageMetadataContainer.LABEL_MAP_KEY_HEADER, TRAFFIC_STAIN_LABEL); .getRawMetadataMapValue(MessageMetadataContainer.LABEL_MAP_KEY_HEADER, TRAFFIC_STAIN_LABEL);

@ -33,8 +33,8 @@ public class TsfSpanAttributesProvider implements SpanAttributesProvider {
@Override @Override
public Map<String, String> getClientBaggageAttributes(EnhancedPluginContext context) { public Map<String, String> getClientBaggageAttributes(EnhancedPluginContext context) {
Map<String, String> attributes = new HashMap<>(); Map<String, String> attributes = new HashMap<>();
if (null != context.getRequest().getUrl()) { if (context.getRequest() != null && StringUtils.isNotBlank(context.getRequest().getPath())) {
attributes.put("remoteInterface", context.getRequest().getUrl().getPath()); attributes.put("remoteInterface", context.getRequest().getPath());
} }
ServiceInstance targetServiceInstance = context.getTargetServiceInstance(); ServiceInstance targetServiceInstance = context.getTargetServiceInstance();
if (null != targetServiceInstance && CollectionUtils.isNotEmpty(targetServiceInstance.getMetadata())) { if (null != targetServiceInstance && CollectionUtils.isNotEmpty(targetServiceInstance.getMetadata())) {
@ -51,6 +51,9 @@ public class TsfSpanAttributesProvider implements SpanAttributesProvider {
targetServiceInstance.getMetadata().get(TsfMetadataConstants.TSF_APPLICATION_ID))); targetServiceInstance.getMetadata().get(TsfMetadataConstants.TSF_APPLICATION_ID)));
} }
} }
if (StringUtils.isBlank(attributes.get("remote.namespace-id"))) {
attributes.put("remote.namespace-id", context.getRequest().getGovernanceNamespace());
}
return attributes; return attributes;
} }
} }

@ -19,6 +19,9 @@ package com.tencent.cloud.rpc.enhancement.plugin;
import java.net.URI; import java.net.URI;
import com.tencent.cloud.common.metadata.MetadataContext;
import com.tencent.polaris.api.utils.StringUtils;
import org.springframework.http.HttpHeaders; import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod; import org.springframework.http.HttpMethod;
@ -39,6 +42,10 @@ public class EnhancedRequestContext {
private String governanceNamespace; private String governanceNamespace;
public static EnhancedContextRequestBuilder builder() {
return new EnhancedContextRequestBuilder();
}
public HttpMethod getHttpMethod() { public HttpMethod getHttpMethod() {
return httpMethod; return httpMethod;
} }
@ -72,15 +79,31 @@ public class EnhancedRequestContext {
} }
public String getGovernanceNamespace() { public String getGovernanceNamespace() {
return governanceNamespace; return StringUtils.isNotEmpty(governanceNamespace) ? governanceNamespace : MetadataContext.LOCAL_NAMESPACE;
} }
public void setGovernanceNamespace(String governanceNamespace) { public void setGovernanceNamespace(String governanceNamespace) {
this.governanceNamespace = governanceNamespace; this.governanceNamespace = governanceNamespace;
} }
public static EnhancedContextRequestBuilder builder() { public String getHost() {
return new EnhancedContextRequestBuilder(); if (serviceUrl != null) {
return serviceUrl.getHost();
}
if (url != null) {
return url.getHost();
}
return null;
}
public String getPath() {
if (serviceUrl != null) {
return serviceUrl.getPath();
}
if (url != null) {
return url.getPath();
}
return null;
} }
@Override @Override

Loading…
Cancel
Save