in apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/CorrelationContext.java [62:94]
public Optional<String> put(String key, String value) {
// key must not null
if (key == null) {
return Optional.empty();
}
// remove and return previous value when value is empty
if (StringUtil.isEmpty(value)) {
return Optional.ofNullable(data.remove(key));
}
// check value length
if (value.length() > Config.Correlation.VALUE_MAX_LENGTH) {
return Optional.empty();
}
// already contain key
if (data.containsKey(key)) {
final String previousValue = data.put(key, value);
return Optional.of(previousValue);
}
// check keys count
if (data.size() >= Config.Correlation.ELEMENT_MAX_NUMBER) {
return Optional.empty();
}
if (AUTO_TAG_KEYS.contains(key) && ContextManager.isActive()) {
ContextManager.activeSpan().tag(new StringTag(key), value);
}
// setting
data.put(key, value);
return Optional.empty();
}