testTaskAddedAfterShutdownNotAbandoned() — netty Function Reference
Architecture documentation for the testTaskAddedAfterShutdownNotAbandoned() function in SingleThreadEventExecutorTest.java from the netty codebase.
Entity Profile
Dependency Diagram
graph TD 2d7ca5ae_567d_f505_46fa_1f2190eed3e0["testTaskAddedAfterShutdownNotAbandoned()"] bbf4ea8d_698f_542a_1559_437b1b237a04["SingleThreadEventExecutorTest"] 2d7ca5ae_567d_f505_46fa_1f2190eed3e0 -->|defined in| bbf4ea8d_698f_542a_1559_437b1b237a04 d1474077_6d3a_87c2_2d11_070af739005b["run()"] 2d7ca5ae_567d_f505_46fa_1f2190eed3e0 -->|calls| d1474077_6d3a_87c2_2d11_070af739005b style 2d7ca5ae_567d_f505_46fa_1f2190eed3e0 fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
common/src/test/java/io/netty/util/concurrent/SingleThreadEventExecutorTest.java lines 482–549
@Test
public void testTaskAddedAfterShutdownNotAbandoned() throws Exception {
// A queue that doesn't support remove, so tasks once added cannot be rejected anymore
LinkedBlockingQueue<Runnable> taskQueue = new LinkedBlockingQueue<Runnable>() {
@Override
public boolean remove(Object o) {
throw new UnsupportedOperationException();
}
};
final Runnable dummyTask = new Runnable() {
@Override
public void run() {
}
};
final LinkedBlockingQueue<Future<?>> submittedTasks = new LinkedBlockingQueue<Future<?>>();
final AtomicInteger attempts = new AtomicInteger();
final AtomicInteger rejects = new AtomicInteger();
ExecutorService executorService = Executors.newSingleThreadExecutor();
final SingleThreadEventExecutor executor = new SingleThreadEventExecutor(null, executorService, false,
taskQueue, RejectedExecutionHandlers.reject()) {
@Override
protected void run() {
while (!confirmShutdown()) {
Runnable task = takeTask();
if (task != null) {
task.run();
}
}
}
@Override
protected boolean confirmShutdown() {
boolean result = super.confirmShutdown();
// After shutdown is confirmed, scheduled one more task and record it
if (result) {
attempts.incrementAndGet();
try {
submittedTasks.add(submit(dummyTask));
} catch (RejectedExecutionException e) {
// ignore, tasks are either accepted or rejected
rejects.incrementAndGet();
}
}
return result;
}
};
// Start the loop
executor.submit(dummyTask).sync();
// Shutdown without any quiet period
executor.shutdownGracefully(0, 100, TimeUnit.MILLISECONDS).sync();
// Ensure there are no user-tasks left.
assertEquals(0, executor.drainTasks());
// Verify that queue is empty and all attempts either succeeded or were rejected
assertTrue(taskQueue.isEmpty());
assertTrue(attempts.get() > 0);
assertEquals(attempts.get(), submittedTasks.size() + rejects.get());
for (Future<?> f : submittedTasks) {
assertTrue(f.isSuccess());
}
}
Domain
Subdomains
Calls
Source
Frequently Asked Questions
What does testTaskAddedAfterShutdownNotAbandoned() do?
testTaskAddedAfterShutdownNotAbandoned() is a function in the netty codebase, defined in common/src/test/java/io/netty/util/concurrent/SingleThreadEventExecutorTest.java.
Where is testTaskAddedAfterShutdownNotAbandoned() defined?
testTaskAddedAfterShutdownNotAbandoned() is defined in common/src/test/java/io/netty/util/concurrent/SingleThreadEventExecutorTest.java at line 482.
What does testTaskAddedAfterShutdownNotAbandoned() call?
testTaskAddedAfterShutdownNotAbandoned() calls 1 function(s): run.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free