Skip to content

Commit

Permalink
feat:add metadata transfer for http header via spring.cloud.tencent.m…
Browse files Browse the repository at this point in the history
…etadata.headers. (#1174)

Co-authored-by: wenxuan70 <[email protected]>
  • Loading branch information
SkyeBeFreeman and wenxuan70 authored Oct 16, 2023
1 parent 0523064 commit 7837e21
Show file tree
Hide file tree
Showing 9 changed files with 82 additions and 2 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,4 @@
- [fix:fix retry loadbalancer not working bug.](https://github.com/Tencent/spring-cloud-tencent/pull/1157)
- [fix:fix header validation when using Chinese char.](https://github.com/Tencent/spring-cloud-tencent/pull/1167)
- [feat: add circuit breaker actuator.](https://github.com/Tencent/spring-cloud-tencent/pull/1172)
- [feat: add metadata transfer for http header via spring.cloud.tencent.metadata.headers.](https://github.com/Tencent/spring-cloud-tencent/pull/1174)
Original file line number Diff line number Diff line change
Expand Up @@ -68,8 +68,8 @@ public static MetadataContext get() {
metadataContext.setTransitiveMetadata(staticMetadataManager.getMergedStaticTransitiveMetadata());
metadataContext.setDisposableMetadata(staticMetadataManager.getMergedStaticDisposableMetadata());

if (StringUtils.hasText(staticMetadataManager.getTransHeaderFromEnv())) {
metadataContext.setTransHeaders(staticMetadataManager.getTransHeaderFromEnv(), "");
if (StringUtils.hasText(staticMetadataManager.getTransHeader())) {
metadataContext.setTransHeaders(staticMetadataManager.getTransHeader(), "");
}

METADATA_CONTEXT.set(metadataContext);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,11 @@

package com.tencent.cloud.common.metadata;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
Expand Down Expand Up @@ -71,6 +74,7 @@ public class StaticMetadataManager {
private Map<String, String> configMetadata;
private Map<String, String> configTransitiveMetadata;
private Map<String, String> configDisposableMetadata;
private String configTransHeaders;
private Map<String, String> customSPIMetadata;
private Map<String, String> customSPITransitiveMetadata;
private Map<String, String> customSPIDisposableMetadata;
Expand Down Expand Up @@ -162,6 +166,7 @@ private void parseConfigMetadata(MetadataLocalProperties metadataLocalProperties
Map<String, String> allMetadata = metadataLocalProperties.getContent();
List<String> transitiveKeys = metadataLocalProperties.getTransitive();
List<String> disposableKeys = metadataLocalProperties.getDisposable();
List<String> headers = metadataLocalProperties.getHeaders();

Map<String, String> transitiveResult = new HashMap<>();
for (String key : transitiveKeys) {
Expand All @@ -179,6 +184,7 @@ private void parseConfigMetadata(MetadataLocalProperties metadataLocalProperties

configTransitiveMetadata = Collections.unmodifiableMap(transitiveResult);
configDisposableMetadata = Collections.unmodifiableMap(disposableResult);
configTransHeaders = CollectionUtils.isEmpty(headers) ? null : String.join(",", headers);
configMetadata = Collections.unmodifiableMap(allMetadata);
}

Expand Down Expand Up @@ -313,6 +319,29 @@ public String getTransHeaderFromEnv() {
return envNotReportMetadata.get(ENV_TRAFFIC_CONTENT_RAW_TRANSHEADERS);
}

public String getTransHeaderFromConfig() {
return configTransHeaders;
}

public String getTransHeader() {
Set<String> transHeaderSet = new HashSet<>();

String transHeaderFromEnv = getTransHeaderFromEnv();
String transHeaderFromConfig = getTransHeaderFromConfig();

Set<String> transHeaderFromEnvSet = StringUtils.isNotBlank(transHeaderFromEnv)
? Arrays.stream(transHeaderFromEnv.split(",")).collect(Collectors.toSet())
: Collections.emptySet();
Set<String> transHeaderFromConfigSet = StringUtils.isNotBlank(transHeaderFromConfig)
? Arrays.stream(transHeaderFromConfig.split(",")).collect(Collectors.toSet())
: Collections.emptySet();

transHeaderSet.addAll(transHeaderFromEnvSet);
transHeaderSet.addAll(transHeaderFromConfigSet);

return new ArrayList<>(transHeaderSet).stream().sorted().collect(Collectors.joining(","));
}

public Map<String, String> getEnvTransitiveMetadata() {
return envTransitiveMetadata;
}
Expand Down Expand Up @@ -390,6 +419,7 @@ public String toString() {
", envTransitiveMetadata=" + envTransitiveMetadata +
", configMetadata=" + configMetadata +
", configTransitiveMetadata=" + configTransitiveMetadata +
", configTransHeaders='" + configTransHeaders + '\'' +
", customSPIMetadata=" + customSPIMetadata +
", customSPITransitiveMetadata=" + customSPITransitiveMetadata +
", mergedStaticMetadata=" + mergedStaticMetadata +
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,11 @@ public class MetadataLocalProperties {
*/
private List<String> disposable;

/**
* A transitive http header key list.
*/
private List<String> headers;

public Map<String, String> getContent() {
if (CollectionUtils.isEmpty(content)) {
content = new HashMap<>();
Expand Down Expand Up @@ -80,4 +85,15 @@ public List<String> getDisposable() {
public void setDisposable(List<String> disposable) {
this.disposable = disposable;
}

public List<String> getHeaders() {
if (CollectionUtils.isEmpty(headers)) {
headers = new ArrayList<>();
}
return headers;
}

public void setHeaders(List<String> headers) {
this.headers = headers;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,11 @@
"name": "spring.cloud.tencent.metadata.disposable",
"type": "java.util.List",
"description": "Custom disposable metadata key list."
},
{
"name": "spring.cloud.tencent.metadata.headers",
"type": "java.util.List",
"description": "Custom transitive http header key list."
}
]
}
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,10 @@ public void test1() {
Assertions.assertThat(customMetadata.get("a")).isEqualTo("1");
Assertions.assertThat(customMetadata.get("b")).isEqualTo("2");

Map<String, String> transHeaders = MetadataContextHolder.get().getTransHeaders();
Assertions.assertThat(transHeaders.size()).isEqualTo(1);
Assertions.assertThat(transHeaders.keySet().iterator().next()).isEqualTo("c,d");

MetadataContextHolder.remove();

customMetadata = new HashMap<>();
Expand All @@ -66,6 +70,10 @@ public void test1() {
Assertions.assertThat(customMetadata.get("b")).isEqualTo("22");
Assertions.assertThat(customMetadata.get("c")).isEqualTo("3");
Assertions.assertThat(MetadataContext.LOCAL_NAMESPACE).isEqualTo("default");

transHeaders = MetadataContextHolder.get().getTransHeaders();
Assertions.assertThat(transHeaders.size()).isEqualTo(1);
Assertions.assertThat(transHeaders.keySet().iterator().next()).isEqualTo("c,d");
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@ public void testParseConfigMetadata() {
when(metadataLocalProperties.getContent()).thenReturn(content);
when(metadataLocalProperties.getTransitive()).thenReturn(Collections.singletonList("k1"));
when(metadataLocalProperties.getDisposable()).thenReturn(Collections.singletonList("k1"));
when(metadataLocalProperties.getHeaders()).thenReturn(Arrays.asList("a", "d"));

StaticMetadataManager metadataManager = new StaticMetadataManager(metadataLocalProperties, null);

Expand All @@ -119,6 +120,9 @@ public void testParseConfigMetadata() {
Map<String, String> locationInfo = metadataManager.getLocationMetadata();
assertThat(locationInfo.get("zone")).isEqualTo("zone1");
assertThat(locationInfo.get("region")).isEqualTo("region1");

String transHeaderFromConfig = metadataManager.getTransHeaderFromConfig();
assertThat(transHeaderFromConfig).isEqualTo("a,d");
}

@Test
Expand Down Expand Up @@ -161,6 +165,9 @@ public void testCustomSPIMetadata() {

@Test
public void testMergedMetadata() {
// set environment variables
environmentVariables.set("SCT_TRAFFIC_CONTENT_RAW_TRANSHEADERS", "a,b,c,e");

Map<String, String> content = new HashMap<>();
content.put("k1", "v1");
content.put("k2", "v2");
Expand All @@ -170,6 +177,7 @@ public void testMergedMetadata() {

when(metadataLocalProperties.getContent()).thenReturn(content);
when(metadataLocalProperties.getTransitive()).thenReturn(Collections.singletonList("k1"));
when(metadataLocalProperties.getHeaders()).thenReturn(Arrays.asList("b", "d"));

StaticMetadataManager metadataManager = new StaticMetadataManager(metadataLocalProperties,
Arrays.asList(new MockedMetadataProvider(), new DefaultInstanceMetadataProvider(null)));
Expand Down Expand Up @@ -204,6 +212,9 @@ public void testMergedMetadata() {
assertThat(locationInfo.get("zone")).isEqualTo("zone2");
assertThat(locationInfo.get("region")).isEqualTo("region1");
assertThat(locationInfo.get("campus")).isEqualTo("campus2");

String transHeader = metadataManager.getTransHeader();
assertThat(transHeader).isEqualTo("a,b,c,d,e");
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,12 @@ public void test2() {
.isTrue();
}

@Test
public void test3() {
Assertions.assertThat(metadataLocalProperties.getHeaders().contains("c")).isTrue();
Assertions.assertThat(metadataLocalProperties.getHeaders().contains("d")).isTrue();
}

@SpringBootApplication
protected static class TestApplication {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,6 @@ spring:
b: 2
transitive:
- b
headers:
- c
- d

0 comments on commit 7837e21

Please sign in to comment.