You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by gg...@apache.org on 2018/01/23 22:40:15 UTC
logging-log4j2 git commit: [LOG4J2-2214] Unnecessary contention in
DefaultThreadContextMap.
Repository: logging-log4j2
Updated Branches:
refs/heads/master 7fea56d5e -> cc71a2576
[LOG4J2-2214] Unnecessary contention in DefaultThreadContextMap.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/cc71a257
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/cc71a257
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/cc71a257
Branch: refs/heads/master
Commit: cc71a257617a1dd859998de9bd922bb6ea88b42a
Parents: 7fea56d
Author: Gary Gregory <ga...@gmail.com>
Authored: Tue Jan 23 15:40:04 2018 -0700
Committer: Gary Gregory <ga...@gmail.com>
Committed: Tue Jan 23 15:40:04 2018 -0700
----------------------------------------------------------------------
.../log4j/spi/DefaultThreadContextMap.java | 28 +++++++++++++-------
.../log4j/spi/ThreadContextMapFactory.java | 1 +
.../log4j/spi/DefaultThreadContextMapTest.java | 2 ++
src/changes/changes.xml | 3 +++
4 files changed, 24 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/cc71a257/log4j-api/src/main/java/org/apache/logging/log4j/spi/DefaultThreadContextMap.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/spi/DefaultThreadContextMap.java b/log4j-api/src/main/java/org/apache/logging/log4j/spi/DefaultThreadContextMap.java
index 3513074..9f4c351 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/spi/DefaultThreadContextMap.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/spi/DefaultThreadContextMap.java
@@ -42,21 +42,16 @@ public class DefaultThreadContextMap implements ThreadContextMap, ReadOnlyString
private final boolean useMap;
private final ThreadLocal<Map<String, String>> localMap;
- public DefaultThreadContextMap() {
- this(true);
- }
-
- public DefaultThreadContextMap(final boolean useMap) {
- this.useMap = useMap;
- this.localMap = createThreadLocalMap(useMap);
+ private static boolean InheritableMap;
+
+ static {
+ init();
}
// LOG4J2-479: by default, use a plain ThreadLocal, only use InheritableThreadLocal if configured.
// (This method is package protected for JUnit tests.)
static ThreadLocal<Map<String, String>> createThreadLocalMap(final boolean isMapEnabled) {
- final PropertiesUtil managerProps = PropertiesUtil.getProperties();
- final boolean inheritable = managerProps.getBooleanProperty(INHERITABLE_MAP);
- if (inheritable) {
+ if (InheritableMap) {
return new InheritableThreadLocal<Map<String, String>>() {
@Override
protected Map<String, String> childValue(final Map<String, String> parentValue) {
@@ -70,6 +65,19 @@ public class DefaultThreadContextMap implements ThreadContextMap, ReadOnlyString
return new ThreadLocal<>();
}
+ static void init() {
+ InheritableMap = PropertiesUtil.getProperties().getBooleanProperty(INHERITABLE_MAP);
+ }
+
+ public DefaultThreadContextMap() {
+ this(true);
+ }
+
+ public DefaultThreadContextMap(final boolean useMap) {
+ this.useMap = useMap;
+ this.localMap = createThreadLocalMap(useMap);
+ }
+
@Override
public void put(final String key, final String value) {
if (!useMap) {
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/cc71a257/log4j-api/src/main/java/org/apache/logging/log4j/spi/ThreadContextMapFactory.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/spi/ThreadContextMapFactory.java b/log4j-api/src/main/java/org/apache/logging/log4j/spi/ThreadContextMapFactory.java
index 05c0e2d..c67fbcd 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/spi/ThreadContextMapFactory.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/spi/ThreadContextMapFactory.java
@@ -64,6 +64,7 @@ public final class ThreadContextMapFactory {
public static void init() {
CopyOnWriteSortedArrayThreadContextMap.init();
GarbageFreeSortedArrayThreadContextMap.init();
+ DefaultThreadContextMap.init();
initPrivate();
}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/cc71a257/log4j-api/src/test/java/org/apache/logging/log4j/spi/DefaultThreadContextMapTest.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/spi/DefaultThreadContextMapTest.java b/log4j-api/src/test/java/org/apache/logging/log4j/spi/DefaultThreadContextMapTest.java
index 71726f0..e3ad5d6 100644
--- a/log4j-api/src/test/java/org/apache/logging/log4j/spi/DefaultThreadContextMapTest.java
+++ b/log4j-api/src/test/java/org/apache/logging/log4j/spi/DefaultThreadContextMapTest.java
@@ -24,6 +24,7 @@ import static org.junit.Assert.assertTrue;
import java.util.HashMap;
import java.util.Map;
+import org.apache.logging.log4j.ThreadContext;
import org.junit.Test;
/**
@@ -223,6 +224,7 @@ public class DefaultThreadContextMapTest {
@Test
public void testThreadLocalInheritableIfConfigured() {
System.setProperty(DefaultThreadContextMap.INHERITABLE_MAP, "true");
+ ThreadContextMapFactory.init();
try {
final ThreadLocal<Map<String, String>> threadLocal = DefaultThreadContextMap.createThreadLocalMap(true);
assertTrue(threadLocal instanceof InheritableThreadLocal<?>);
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/cc71a257/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index c918d0d..728b0ba 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -137,6 +137,9 @@
<action issue="LOG4J2-2213" dev="ggregory" type="update" due-to="Daniel Feist, Gary Gregory">
Unnecessary contention in GarbageFreeSortedArrayThreadContextMap.
</action>
+ <action issue="LOG4J2-2214" dev="ggregory" type="update" due-to="Daniel Feist, Gary Gregory">
+ Unnecessary contention in DefaultThreadContextMap.
+ </action>
<!--
<action issue="LOG4J2-2205" dev="ggregory" type="update" due-to="Björn Kautler">
New module log4j-mongodb3: Remove use of deprecated MongoDB APIs and code to the Java driver version 3 API.