From cbaacfda55fc3f7653f4ac92d3b10d6eb1cc9e76 Mon Sep 17 00:00:00 2001 From: Eric Zhao Date: Thu, 20 Sep 2018 23:19:50 +0800 Subject: [PATCH] Bug fix for automatic exit of default context when exiting the entry Signed-off-by: Eric Zhao --- .../java/com/alibaba/csp/sentinel/CtEntry.java | 5 +++-- .../csp/sentinel/context/ContextUtil.java | 16 ++++++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/CtEntry.java b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/CtEntry.java index 6bc2d42a..d59e52a5 100644 --- a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/CtEntry.java +++ b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/CtEntry.java @@ -89,8 +89,9 @@ class CtEntry extends Entry { } if (parent == null) { // Default context (auto entered) will be exited automatically. - // Note: NullContext won't be exited automatically. - ContextUtil.exit(); + if (ContextUtil.isDefaultContext(context)) { + ContextUtil.exit(); + } } // Clean the reference of context in current entry to avoid duplicate exit. clearEntryContext(); diff --git a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/context/ContextUtil.java b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/context/ContextUtil.java index fab8e4cb..3389750b 100755 --- a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/context/ContextUtil.java +++ b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/context/ContextUtil.java @@ -23,6 +23,7 @@ import com.alibaba.csp.sentinel.Constants; import com.alibaba.csp.sentinel.EntryType; import com.alibaba.csp.sentinel.SphO; import com.alibaba.csp.sentinel.SphU; +import com.alibaba.csp.sentinel.log.RecordLog; import com.alibaba.csp.sentinel.node.DefaultNode; import com.alibaba.csp.sentinel.node.EntranceNode; import com.alibaba.csp.sentinel.node.Node; @@ -73,6 +74,7 @@ public class ContextUtil { */ static void resetContextMap() { if (contextNameNodeMap != null) { + RecordLog.warn("Context map cleared and reset to initial state"); contextNameNodeMap.clear(); initDefaultContext(); } @@ -190,6 +192,20 @@ public class ContextUtil { } } + /** + * Check if provided context is a default auto-created context. + * + * @param context context to check + * @return true if it is a default context, otherwise false + * @since 0.2.0 + */ + public static boolean isDefaultContext(Context context) { + if (context == null) { + return false; + } + return Constants.CONTEXT_DEFAULT_NAME.equals(context.getName()); + } + /** * Get {@link Context} of current thread. *