Skip to content

Commit 8f487bc

Browse files
authored
Warn the first time the TCCL fails to be set (#13841)
warn the first time the TCCL fails to be set Signed-off-by: Ludovic Orban <[email protected]>
1 parent d950525 commit 8f487bc

File tree

2 files changed

+18
-4
lines changed

2 files changed

+18
-4
lines changed

jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ContextHandler.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import java.util.Objects;
3030
import java.util.Set;
3131
import java.util.concurrent.CopyOnWriteArrayList;
32+
import java.util.concurrent.atomic.AtomicBoolean;
3233
import java.util.concurrent.atomic.AtomicReference;
3334
import java.util.function.Consumer;
3435
import java.util.function.Predicate;
@@ -136,6 +137,7 @@ public static ContextHandler getContextHandler(Request request)
136137
private final MimeTypes.Mutable _mimeTypes = new MimeTypes.Mutable();
137138
private final List<ContextScopeListener> _contextListeners = new CopyOnWriteArrayList<>();
138139
private final List<VHost> _vhosts = new ArrayList<>();
140+
private final AtomicBoolean _enterScopeSetClassloaderFailed = new AtomicBoolean();
139141

140142
private String _displayName;
141143
private String _contextPath = "/";
@@ -754,8 +756,12 @@ protected ClassLoader enterScope(Request contextRequest)
754756
}
755757
catch (Throwable x)
756758
{
757-
if (LOG.isDebugEnabled())
758-
LOG.debug("error setting a context classloader on thread {}", Thread.currentThread(), x);
759+
// Log as warning the first time it happens.
760+
String msg = "Error setting a context classloader on thread {}";
761+
if (_enterScopeSetClassloaderFailed.compareAndSet(false, true))
762+
LOG.warn(msg, Thread.currentThread(), x);
763+
else if (LOG.isDebugEnabled())
764+
LOG.debug(msg, Thread.currentThread(), x);
759765
}
760766
}
761767
notifyEnterScope(contextRequest);

jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/handler/ContextHandlerTest.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,8 @@ public boolean handle(Request request, Response response, Callback callback) thr
193193
@Override
194194
public void run()
195195
{
196-
try (Blocker.Callback cb = Blocker.callback())
196+
try (StacklessLogging ignore = new StacklessLogging(ContextHandler.class);
197+
Blocker.Callback cb = Blocker.callback())
197198
{
198199
// When a classloader is configured, Response.write() tries to set it as the context classloader.
199200
response.write(true, ByteBuffer.allocate(32), cb);
@@ -209,6 +210,12 @@ public void run()
209210
}
210211
}
211212

213+
@Override
214+
public ClassLoader getContextClassLoader()
215+
{
216+
return null;
217+
}
218+
212219
@Override
213220
public void setContextClassLoader(ClassLoader cl)
214221
{
@@ -258,7 +265,8 @@ public boolean handle(Request request, Response response, Callback callback) thr
258265
@Override
259266
public void completed(Integer result, Object attachment)
260267
{
261-
try (Blocker.Callback cb = Blocker.callback())
268+
try (StacklessLogging ignore = new StacklessLogging(ContextHandler.class);
269+
Blocker.Callback cb = Blocker.callback())
262270
{
263271
// When a classloader is configured, Response.write() tries to set it as the context classloader.
264272
response.write(true, ByteBuffer.allocate(32), cb);

0 commit comments

Comments
 (0)