From bc64c6a12770031478d29e2f19004796584374c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E6=99=9F=20Wu=20Sheng?= Date: Wed, 30 Sep 2020 07:33:23 +0800 Subject: [PATCH] Make the extension header really extendable (#5590) --- .../agent/core/context/ExtensionContext.java | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/ExtensionContext.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/ExtensionContext.java index 8106fa650..e2564a8fe 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/ExtensionContext.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/ExtensionContext.java @@ -18,13 +18,13 @@ package org.apache.skywalking.apm.agent.core.context; -import org.apache.skywalking.apm.agent.core.context.trace.AbstractSpan; - import java.util.Objects; +import org.apache.skywalking.apm.agent.core.context.trace.AbstractSpan; +import org.apache.skywalking.apm.util.StringUtil; /** - * Extension context, It provides the interaction capabilities between the agents - * deployed in upstream and downstream services. + * Extension context, It provides the interaction capabilities between the agents deployed in upstream and downstream + * services. */ public class ExtensionContext { @@ -46,7 +46,15 @@ public class ExtensionContext { * Deserialize data from {@link String} */ void deserialize(String value) { - this.skipAnalysis = Objects.equals(value, "1"); + if (StringUtil.isEmpty(value)) { + return; + } + final String[] extensionParts = value.split("-"); + // All parts of the extension header are optional. + // only try to read it when it exist. + if (extensionParts.length > 0) { + this.skipAnalysis = Objects.equals(extensionParts[0], "1"); + } } /** @@ -87,8 +95,10 @@ public class ExtensionContext { @Override public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; ExtensionContext that = (ExtensionContext) o; return skipAnalysis == that.skipAnalysis; }