Bug fix for automatic exit of default context when exiting the entry

Signed-off-by: Eric Zhao <sczyh16@gmail.com>
This commit is contained in:
Eric Zhao 2018-09-20 23:19:50 +08:00
parent 90d5611b23
commit cbaacfda55
2 changed files with 19 additions and 2 deletions

View File

@ -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();

View File

@ -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.
*