Optimize disposable metadata transfer logic .

pull/430/head
misselvexu 3 years ago
parent e83b602250
commit 6d595e4375

@ -97,5 +97,4 @@ public class DecodeTransferMetadataReactiveFilter implements WebFilter, Ordered
return JacksonUtils.deserialize2Map(customMetadataStr);
}
}

@ -71,5 +71,4 @@ public class EncodeTransferMedataFeignInterceptor implements RequestInterceptor,
}
}
}
}

@ -79,5 +79,4 @@ public class EncodeTransferMetadataZuulFilter extends ZuulFilter {
}
return null;
}
}

@ -26,6 +26,12 @@ import org.springframework.core.Ordered;
*/
public final class MetadataConstant {
/**
* Default Private Constructor.
*/
private MetadataConstant() {
}
/**
* sct transitive header prefix.
*/
@ -44,9 +50,11 @@ public final class MetadataConstant {
*/
public static final int POLARIS_TRANSITIVE_HEADER_PREFIX_LENGTH = POLARIS_TRANSITIVE_HEADER_PREFIX.length();
private MetadataConstant() {
/**
* internal metadata disposable status key.
*/
public static final String INTERNAL_METADATA_DISPOSABLE = "internal-disposable-status";
}
/**
* Order of filter, interceptor, ...
*/

@ -40,6 +40,7 @@ public class MetadataContext {
* transitive context.
*/
public static final String FRAGMENT_TRANSITIVE = "transitive";
private static final Logger LOG = LoggerFactory.getLogger(MetadataContext.class);
/**
* Namespace of local instance.

@ -18,6 +18,7 @@
package com.tencent.cloud.common.metadata;
import java.io.UnsupportedEncodingException;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
@ -32,6 +33,11 @@ import org.slf4j.LoggerFactory;
import org.springframework.util.CollectionUtils;
import static com.tencent.cloud.common.constant.ContextConstant.UTF_8;
import static com.tencent.cloud.common.constant.MetadataConstant.INTERNAL_METADATA_DISPOSABLE;
import static com.tencent.cloud.common.util.JacksonUtils.serialize2Json;
import static java.net.URLEncoder.encode;
/**
* manage metadata from env/config file/custom spi.
*
@ -63,7 +69,7 @@ public class StaticMetadataManager {
private Map<String, String> configTransitiveMetadata;
private Map<String, String> customSPIMetadata;
private Map<String, String> customSPITransitiveMetadata;
private Map<String, String> disposableStatusMetadata;
private Map<String, String> mergedStaticMetadata;
private Map<String, String> mergedStaticTransitiveMetadata;
private String zone;
@ -80,6 +86,8 @@ public class StaticMetadataManager {
parseLocationMetadata(metadataLocalProperties, instanceMetadataProvider);
parseDisposableStatusMetadata(metadataLocalProperties);
merge();
LOGGER.info("[SCT] Loaded static metadata info. {}", this);
@ -164,6 +172,19 @@ public class StaticMetadataManager {
customSPITransitiveMetadata = Collections.unmodifiableMap(transitiveMetadata);
}
private void parseDisposableStatusMetadata(MetadataLocalProperties metadataLocalProperties) {
Map<String, String> allMetadata = metadataLocalProperties.getContent();
List<String> disposableKeys = metadataLocalProperties.getDisposable();
Map<String, String> result = new HashMap<>();
for (String key : disposableKeys) {
if (allMetadata.containsKey(key)) {
result.put(key, "false");
}
}
disposableStatusMetadata = Collections.unmodifiableMap(result);
}
private void merge() {
// the priority is : custom > env > config
Map<String, String> mergedMetadataResult = new HashMap<>();
@ -181,6 +202,14 @@ public class StaticMetadataManager {
mergedTransitiveMetadataResult.putAll(envTransitiveMetadata);
mergedTransitiveMetadataResult.putAll(customSPITransitiveMetadata);
// append disposable status
try {
mergedTransitiveMetadataResult.put(INTERNAL_METADATA_DISPOSABLE, encode(serialize2Json(disposableStatusMetadata), UTF_8));
}
catch (UnsupportedEncodingException e) {
LOGGER.error("Runtime system does not support utf-8 coding.", e);
}
this.mergedStaticTransitiveMetadata = Collections.unmodifiableMap(mergedTransitiveMetadataResult);
}

@ -43,6 +43,13 @@ public interface InstanceMetadataProvider {
return Collections.emptySet();
}
/**
* @return the keys of disposable metadata.
*/
default Set<String> getDisposableMetadataKeys() {
return Collections.emptySet();
}
/**
* The region of current instance.
*

Loading…
Cancel
Save