Skip to content

Commit 4182f59

Browse files
committed
strengthen tests
1 parent 9b49869 commit 4182f59

File tree

2 files changed

+27
-32
lines changed

2 files changed

+27
-32
lines changed

hivemq-edge/src/main/java/com/hivemq/common/executors/ioc/ExecutorsModule.java

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
import java.util.concurrent.Executors;
2727
import java.util.concurrent.ScheduledExecutorService;
2828
import java.util.concurrent.ThreadFactory;
29-
import java.util.concurrent.TimeUnit;
3029
import java.util.concurrent.atomic.AtomicInteger;
3130

3231
@Module
@@ -54,31 +53,6 @@ public abstract class ExecutorsModule {
5453
return Executors.newCachedThreadPool(new HiveMQEdgeThreadFactory(CACHED_WORKER_GROUP_NAME));
5554
}
5655

57-
public static void shutdownExecutor(
58-
final @NotNull ExecutorService executor,
59-
final @NotNull String name,
60-
final int timeoutSeconds) {
61-
log.debug("Shutting down executor service: {}", name);
62-
if (!executor.isShutdown()) {
63-
executor.shutdown();
64-
}
65-
try {
66-
if (!executor.awaitTermination(timeoutSeconds, TimeUnit.SECONDS)) {
67-
log.warn("Executor service {} did not terminate in {}s, forcing shutdown", name, timeoutSeconds);
68-
executor.shutdownNow();
69-
if (!executor.awaitTermination(2, TimeUnit.SECONDS)) {
70-
log.error("Executor service {} still has running tasks after forced shutdown", name);
71-
}
72-
} else {
73-
log.debug("Executor service {} shut down successfully", name);
74-
}
75-
} catch (final InterruptedException e) {
76-
Thread.currentThread().interrupt();
77-
log.warn("Interrupted while waiting for executor service {} to terminate", name);
78-
executor.shutdownNow();
79-
}
80-
}
81-
8256
private static class HiveMQEdgeThreadFactory implements ThreadFactory {
8357
private final @NotNull String factoryName;
8458
private final @NotNull ThreadGroup group;

hivemq-edge/src/main/java/com/hivemq/protocols/ProtocolAdapterManager.java

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,6 @@
6363
import java.util.function.Supplier;
6464
import java.util.stream.Collectors;
6565

66-
import static com.hivemq.common.executors.ioc.ExecutorsModule.shutdownExecutor;
6766
import static com.hivemq.persistence.domain.DomainTagAddResult.DomainTagPutStatus.ADAPTER_FAILED_TO_START;
6867
import static com.hivemq.persistence.domain.DomainTagAddResult.DomainTagPutStatus.ADAPTER_MISSING;
6968
import static com.hivemq.persistence.domain.DomainTagAddResult.DomainTagPutStatus.ALREADY_EXISTS;
@@ -88,7 +87,7 @@ public class ProtocolAdapterManager {
8887
private final @NotNull NorthboundConsumerFactory northboundConsumerFactory;
8988
private final @NotNull TagManager tagManager;
9089
private final @NotNull ProtocolAdapterExtractor config;
91-
private final @NotNull ExecutorService singleThreadRefreshExecutor;
90+
private final @NotNull ExecutorService refreshExecutor;
9291
private final @NotNull ExecutorService sharedAdapterExecutor;
9392
private final @NotNull AtomicBoolean shutdownInitiated;
9493

@@ -124,7 +123,7 @@ public ProtocolAdapterManager(
124123
this.config = config;
125124
this.sharedAdapterExecutor = sharedAdapterExecutor;
126125
this.protocolAdapters = new ConcurrentHashMap<>();
127-
this.singleThreadRefreshExecutor = Executors.newSingleThreadExecutor();
126+
this.refreshExecutor = Executors.newSingleThreadExecutor();
128127
this.shutdownInitiated = new AtomicBoolean(false);
129128
shutdownHooks.add(new HiveMQShutdownHook() {
130129
@Override
@@ -161,7 +160,7 @@ public void start() {
161160
}
162161

163162
public void refresh(final @NotNull List<ProtocolAdapterEntity> configs) {
164-
singleThreadRefreshExecutor.submit(() -> {
163+
refreshExecutor.submit(() -> {
165164
log.info("Refreshing adapters");
166165

167166
final Map<String, ProtocolAdapterConfig> protocolAdapterConfigs = configs.stream()
@@ -365,7 +364,7 @@ public boolean isWritingEnabled() {
365364

366365
private void shutdown() {
367366
if (shutdownInitiated.compareAndSet(false, true)) {
368-
shutdownExecutor(singleThreadRefreshExecutor, "protocol-adapter-manager-refresh", 5);
367+
shutdownRefreshExecutor();
369368

370369
log.info("Initiating shutdown of Protocol Adapter Manager");
371370
final List<ProtocolAdapterWrapper> adaptersToStop = new ArrayList<>(protocolAdapters.values());
@@ -387,7 +386,7 @@ private void shutdown() {
387386
}
388387
// wait for all adapters to stop, with timeout
389388
try {
390-
CompletableFuture.allOf(stopFutures.toArray(new CompletableFuture[0])).get(20, TimeUnit.SECONDS);
389+
CompletableFuture.allOf(stopFutures.toArray(new CompletableFuture[0])).get(15, TimeUnit.SECONDS);
391390
log.info("All adapters stopped successfully during shutdown");
392391
} catch (final TimeoutException e) {
393392
log.warn("Timeout waiting for adapters to stop during shutdown");
@@ -406,6 +405,28 @@ private void shutdown() {
406405
}
407406
}
408407

408+
private void shutdownRefreshExecutor() {
409+
final String name = "protocol-adapter-manager-refresh";
410+
final int timeoutSeconds = 5;
411+
log.debug("Shutting {} executor service", name);
412+
refreshExecutor.shutdown();
413+
try {
414+
if (!refreshExecutor.awaitTermination(timeoutSeconds, TimeUnit.SECONDS)) {
415+
log.warn("Executor service {} did not terminate in {}s, forcing shutdown", name, timeoutSeconds);
416+
refreshExecutor.shutdownNow();
417+
if (!refreshExecutor.awaitTermination(2, TimeUnit.SECONDS)) {
418+
log.error("Executor service {} still has running tasks after forced shutdown", name);
419+
}
420+
} else {
421+
log.debug("Executor service {} shut down successfully", name);
422+
}
423+
} catch (final InterruptedException e) {
424+
Thread.currentThread().interrupt();
425+
log.warn("Interrupted while waiting for executor service {} to terminate", name);
426+
refreshExecutor.shutdownNow();
427+
}
428+
}
429+
409430
private @NotNull ProtocolAdapterWrapper createAdapterInternal(
410431
final @NotNull ProtocolAdapterConfig config,
411432
final @NotNull String version) {

0 commit comments

Comments
 (0)