Skip to content

Commit bff88a0

Browse files
committed
Provide access to context locals.
Motivation: Expose the list of registered context locals of the vertx instance, so it gives knowledge for interacting with context locals.
1 parent 3030490 commit bff88a0

File tree

4 files changed

+29
-0
lines changed

4 files changed

+29
-0
lines changed

src/main/java/io/vertx/core/impl/VertxImpl.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ private static ThreadFactory virtualThreadFactory() {
137137
private final Map<ServerID, HttpServerImpl> sharedHttpServers = new HashMap<>();
138138
private final Map<ServerID, NetServerImpl> sharedNetServers = new HashMap<>();
139139
private final ContextLocal<?>[] contextLocals;
140+
private final List<ContextLocal<?>> contextLocalsList;
140141
final WorkerPool workerPool;
141142
final WorkerPool internalWorkerPool;
142143
final WorkerPool virtualThreaWorkerPool;
@@ -194,6 +195,7 @@ private static ThreadFactory virtualThreadFactory() {
194195
ThreadFactory virtualThreadFactory = virtualThreadFactory();
195196

196197
contextLocals = LocalSeq.get();
198+
contextLocalsList = Collections.unmodifiableList(Arrays.asList(contextLocals));
197199
closeFuture = new CloseFuture(log);
198200
maxEventLoopExecTime = maxEventLoopExecuteTime;
199201
maxEventLoopExecTimeUnit = maxEventLoopExecuteTimeUnit;
@@ -994,6 +996,11 @@ public AddressResolverGroup<InetSocketAddress> nettyAddressResolverGroup() {
994996
return addressResolver.nettyAddressResolverGroup();
995997
}
996998

999+
@Override
1000+
public List<ContextLocal<?>> contextLocals() {
1001+
return contextLocalsList;
1002+
}
1003+
9971004
@Override
9981005
public FileResolver fileResolver() {
9991006
return fileResolver;

src/main/java/io/vertx/core/impl/VertxInternal.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import io.vertx.core.net.impl.NetServerImpl;
2525
import io.vertx.core.net.impl.ServerID;
2626
import io.vertx.core.net.impl.TCPServerBase;
27+
import io.vertx.core.spi.context.storage.ContextLocal;
2728
import io.vertx.core.spi.transport.Transport;
2829
import io.vertx.core.spi.cluster.ClusterManager;
2930
import io.vertx.core.spi.file.FileResolver;
@@ -33,6 +34,7 @@
3334
import java.io.File;
3435
import java.net.InetAddress;
3536
import java.net.InetSocketAddress;
37+
import java.util.List;
3638
import java.util.Map;
3739
import java.util.concurrent.Callable;
3840
import java.util.concurrent.Executor;
@@ -240,6 +242,11 @@ default <T> Future<T> executeBlockingInternal(Callable<T> blockingCodeHandler, b
240242
*/
241243
AddressResolverGroup<InetSocketAddress> nettyAddressResolverGroup();
242244

245+
/**
246+
* @return an immutable list of this vertx instance context locals
247+
*/
248+
List<ContextLocal<?>> contextLocals();
249+
243250
BlockedThreadChecker blockedThreadChecker();
244251

245252
CloseFuture closeFuture();

src/main/java/io/vertx/core/impl/VertxWrapper.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import io.vertx.core.net.impl.NetServerImpl;
3232
import io.vertx.core.net.impl.ServerID;
3333
import io.vertx.core.net.impl.TCPServerBase;
34+
import io.vertx.core.spi.context.storage.ContextLocal;
3435
import io.vertx.core.spi.transport.Transport;
3536
import io.vertx.core.shareddata.SharedData;
3637
import io.vertx.core.spi.VerticleFactory;
@@ -42,6 +43,7 @@
4243
import java.io.File;
4344
import java.net.InetAddress;
4445
import java.net.InetSocketAddress;
46+
import java.util.List;
4547
import java.util.Map;
4648
import java.util.Set;
4749
import java.util.concurrent.Callable;
@@ -506,6 +508,11 @@ public AddressResolverGroup<InetSocketAddress> nettyAddressResolverGroup() {
506508
return delegate.nettyAddressResolverGroup();
507509
}
508510

511+
@Override
512+
public List<ContextLocal<?>> contextLocals() {
513+
return delegate.contextLocals();
514+
}
515+
509516
@Override
510517
public BlockedThreadChecker blockedThreadChecker() {
511518
return delegate.blockedThreadChecker();

src/test/java/io/vertx/core/ContextTest.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1253,4 +1253,12 @@ public void testNestedDuplicate() {
12531253
assertEquals("bar", duplicate.getLocal("foo"));
12541254
assertEquals(expected, duplicate.getLocal(contextLocal));
12551255
}
1256+
1257+
@Test
1258+
public void testContextLocals() {
1259+
List<ContextLocal<?>> locals = ((VertxInternal) vertx).contextLocals();
1260+
assertSame(ContextInternal.LOCAL_MAP, locals.get(0));
1261+
assertSame(contextLocal, locals.get(1));
1262+
assertSame(locals, ((VertxInternal) vertx).contextLocals());
1263+
}
12561264
}

0 commit comments

Comments
 (0)