From b07bc7743ff53bb03d11f3848d1c86006194b7bb Mon Sep 17 00:00:00 2001 From: Brandon Arp Date: Tue, 7 May 2024 11:12:41 -0700 Subject: [PATCH] Clean shutdowns (#331) * add an async shutdown method to sinks * add a method to shutdown health checks * add connection close on ingest actor --- config/config.conf | 2 + lib/awaitility-4.0.2.jar | Bin 89894 -> 0 bytes lib/hamcrest-2.1.jar | Bin 123103 -> 0 bytes pom.xml | 8 +- .../clusteraggregator/Emitter.java | 54 +++++++- .../GracefulShutdownActor.java | 119 +++++++++++++++++- .../clusteraggregator/GuiceModule.java | 14 ++- .../arpnetworking/clusteraggregator/Main.java | 24 ++-- .../client/HttpSourceActor.java | 25 +++- .../ClusterAggregatorConfiguration.java | 19 +++ .../clusteraggregator/http/Routes.java | 43 +++++-- .../tsdcore/sinks/DimensionFilteringSink.java | 8 +- .../tsdcore/sinks/DimensionInjectingSink.java | 8 +- .../tsdcore/sinks/DomainInjectingSink.java | 8 +- .../tsdcore/sinks/HttpPostSink.java | 15 ++- .../tsdcore/sinks/HttpSinkActor.java | 59 ++++++++- .../sinks/MetricNameFilteringSink.java | 6 + .../tsdcore/sinks/MultiSink.java | 14 +++ .../tsdcore/sinks/PeriodFilteringSink.java | 6 + .../tsdcore/sinks/PeriodicStatisticsSink.java | 17 +++ .../sinks/RandomMetricNameFilterSink.java | 7 ++ .../arpnetworking/tsdcore/sinks/RrdSink.java | 7 ++ .../sinks/ServiceNameFilteringSink.java | 6 + .../com/arpnetworking/tsdcore/sinks/Sink.java | 10 ++ .../arpnetworking/tsdcore/sinks/TcpSink.java | 12 ++ .../tsdcore/sinks/TcpSinkActor.java | 39 ++++++ .../tsdcore/sinks/TimeThresholdSink.java | 6 + .../tsdcore/sinks/UnitMappingSink.java | 6 + .../tsdcore/sinks/circonus/CirconusSink.java | 8 ++ .../clusteraggregator/EmitterTest.java | 1 + .../tsdcore/sinks/BaseSinkTest.java | 8 ++ 31 files changed, 518 insertions(+), 41 deletions(-) delete mode 100644 lib/awaitility-4.0.2.jar delete mode 100644 lib/hamcrest-2.1.jar diff --git a/config/config.conf b/config/config.conf index a33d1c73..47b1b95c 100644 --- a/config/config.conf +++ b/config/config.conf @@ -52,6 +52,7 @@ clusterHostSuffix=".cluster" reaggregationDimensions=["host"] #reaggregationInjectClusterAsHost=True #reaggregationTimeout="PT1M" +healthcheckShutdownDelay="PT5S" # Pekko # ~~~~ @@ -77,6 +78,7 @@ pekkoConfiguration { unhandled="on" } } + coordinated-shutdown.run-by-jvm-shutdown-hook = off cluster { seed-nodes=["pekko://Metrics@127.0.0.1:2551"] downing-provider-class = "org.apache.pekko.cluster.sbr.SplitBrainResolverProvider" diff --git a/lib/awaitility-4.0.2.jar b/lib/awaitility-4.0.2.jar deleted file mode 100644 index 293f83d833b75bbb4c91a4316fb80503a56878b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 89894 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

d% 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 diff --git a/lib/hamcrest-2.1.jar b/lib/hamcrest-2.1.jar deleted file mode 100644 index e323d5e81d08024de75a2f6dead13353895a9bc1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 123103 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 Koskela ville.koskela@inscopemetrics.com Inscope Metrics - http://www.inscopemetrics.com + https://www.inscopemetrics.com developer @@ -191,6 +191,12 @@ src/main/resources true + + config + + **/*.conf + + diff --git a/src/main/java/com/arpnetworking/clusteraggregator/Emitter.java b/src/main/java/com/arpnetworking/clusteraggregator/Emitter.java index 78c81dcd..c50e8f70 100644 --- a/src/main/java/com/arpnetworking/clusteraggregator/Emitter.java +++ b/src/main/java/com/arpnetworking/clusteraggregator/Emitter.java @@ -26,9 +26,11 @@ import com.google.common.collect.ImmutableMap; import org.apache.pekko.actor.AbstractActor; import org.apache.pekko.actor.Props; +import org.apache.pekko.pattern.Patterns; import java.time.Duration; import java.time.ZonedDateTime; +import java.util.concurrent.CompletionStage; /** * Holds the sinks and emits to them. @@ -43,7 +45,7 @@ public class Emitter extends AbstractActor { * @return A new {@link Props}. */ public static Props props(final EmitterConfiguration config) { - return Props.create(Emitter.class, config); + return Props.create(Emitter.class, () -> new Emitter(config)); } /** @@ -62,6 +64,11 @@ public Emitter(final EmitterConfiguration config) { .log(); } + @Override + public void preStart() throws Exception, Exception { + super.preStart(); + } + @SuppressWarnings("deprecation") @Override public Receive createReceive() { @@ -90,6 +97,22 @@ public Receive createReceive() { .log(); _sink.recordAggregateData(periodicData); }) + .match(Shutdown.class, ignored -> { + LOGGER.info() + .setMessage("Shutting down emitter") + .log(); + + final CompletionStage shutdownFuture = _sink.shutdownGracefully() + .thenApply(ignore -> ShutdownComplete.getInstance()); + Patterns.pipe(shutdownFuture, context().dispatcher()).to(self(), sender()); + }) + .match(ShutdownComplete.class, ignored -> { + LOGGER.info() + .setMessage("Emitter shutdown complete") + .log(); + sender().tell("OK", self()); + context().stop(self()); + }) .build(); } @@ -101,4 +124,33 @@ public void postStop() throws Exception { private final Sink _sink; private static final Logger LOGGER = LoggerFactory.getLogger(Emitter.class); + /** + * Message to initiate a graceful shutdown. + */ + public static final class Shutdown { + private Shutdown() {} + + /** + * Get the singleton instance. + * + * @return the singleton instance + */ + public static Shutdown getInstance() { + return INSTANCE; + } + private static final Shutdown INSTANCE = new Shutdown(); + } + private static final class ShutdownComplete { + private ShutdownComplete() {} + + /** + * Get the singleton instance. + * + * @return the singleton instance + */ + public static ShutdownComplete getInstance() { + return INSTANCE; + } + private static final ShutdownComplete INSTANCE = new ShutdownComplete(); + } } diff --git a/src/main/java/com/arpnetworking/clusteraggregator/GracefulShutdownActor.java b/src/main/java/com/arpnetworking/clusteraggregator/GracefulShutdownActor.java index 8fe2c38b..dea6d29a 100644 --- a/src/main/java/com/arpnetworking/clusteraggregator/GracefulShutdownActor.java +++ b/src/main/java/com/arpnetworking/clusteraggregator/GracefulShutdownActor.java @@ -15,6 +15,8 @@ */ package com.arpnetworking.clusteraggregator; +import com.arpnetworking.clusteraggregator.client.HttpSourceActor; +import com.arpnetworking.clusteraggregator.http.Routes; import com.arpnetworking.steno.Logger; import com.arpnetworking.steno.LoggerFactory; import com.google.inject.Inject; @@ -23,9 +25,13 @@ import org.apache.pekko.actor.AbstractActor; import org.apache.pekko.actor.ActorRef; import org.apache.pekko.actor.ActorSystem; -import org.apache.pekko.actor.Terminated; import org.apache.pekko.cluster.Cluster; import org.apache.pekko.cluster.sharding.ShardRegion; +import org.apache.pekko.pattern.Patterns; + +import java.time.Duration; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.CompletionStage; /** * Shuts down the Pekko cluster gracefully. @@ -37,11 +43,27 @@ public class GracefulShutdownActor extends AbstractActor { * Public constructor. * * @param shardRegion aggregator shard region + * @param hostEmitter host emitter + * @param clusterEmitter cluster emitter + * @param routes routes + * @param healthcheckShutdownDelay delay after shutting down healthcheck before shutting down emitters + * @param ingestActor ingest actor */ @Inject @SuppressFBWarnings(value = "MC_OVERRIDABLE_METHOD_CALL_IN_CONSTRUCTOR", justification = "Context is safe to use in constructor.") - public GracefulShutdownActor(@Named("aggregator-shard-region") final ActorRef shardRegion) { + public GracefulShutdownActor( + @Named("aggregator-shard-region") final ActorRef shardRegion, + @Named("host-emitter") final ActorRef hostEmitter, + @Named("cluster-emitter") final ActorRef clusterEmitter, + final Routes routes, + @Named("healthcheck-shutdown-delay") final Duration healthcheckShutdownDelay, + @Named("http-ingest-v1") final ActorRef ingestActor) { _shardRegion = shardRegion; + _hostEmitter = hostEmitter; + _clusterEmitter = clusterEmitter; + _routes = routes; + _healthcheckShutdownDelay = healthcheckShutdownDelay; + _ingestActor = ingestActor; } @Override @@ -52,13 +74,65 @@ public Receive createReceive() { .setMessage("Initiating graceful shutdown") .addData("actor", self()) .log(); - context().watch(_shardRegion); + self().tell(ShutdownHealthcheck.getInstance(), sender()); + }) + .match(ShutdownHealthcheck.class, message -> { + LOGGER.info() + .setMessage("Shutting down healthcheck") + .addData("actor", self()) + .log(); + _routes.shutdownHealthcheck(); + _ingestActor.tell(HttpSourceActor.Shutdown.getInstance(), self()); + LOGGER.info() + .setMessage("Waiting before proceeding with shutdown of emitters") + .addData("delay", _healthcheckShutdownDelay) + .addData("actor", self()) + .log(); + context().system().scheduler().scheduleOnce( + _healthcheckShutdownDelay, + self(), + ShutdownEmitter.getInstance(), + context().dispatcher(), + sender()); + }) + .match(ShutdownEmitter.class, message -> { + LOGGER.info() + .setMessage("Shutting down emitters") + .addData("actor", self()) + .log(); + final CompletionStage host = Patterns.ask(_hostEmitter, + Emitter.Shutdown.getInstance(), + Duration.ofSeconds(30)); + final CompletionStage cluster = Patterns.ask(_clusterEmitter, + Emitter.Shutdown.getInstance(), + Duration.ofSeconds(30)); + final CompletableFuture allShutdown = CompletableFuture.allOf( + host.toCompletableFuture(), + cluster.toCompletableFuture()) + .thenApply(result -> ShutdownShardRegion.getInstance()); + Patterns.pipe(allShutdown, context().dispatcher()).to(self(), sender()); + + }) + .match(ShutdownShardRegion.class, message -> { + LOGGER.info() + .setMessage("Shutting down shard region") + .addData("actor", self()) + .log(); + context().watchWith(_shardRegion, new ShutdownShardRegionComplete(sender())); _shardRegion.tell(ShardRegion.gracefulShutdownInstance(), self()); }) - .match(Terminated.class, terminated -> { + .match(ShutdownShardRegionComplete.class, terminated -> { + terminated._replyTo.tell("OK", self()); _cluster.registerOnMemberRemoved(_system::terminate); _cluster.leave(_cluster.selfAddress()); }) + .matchAny(unhandled -> { + LOGGER.warn() + .setMessage("Received unhandled message") + .addData("message", unhandled) + .addData("actor", self()) + .log(); + }) .build(); } @@ -69,7 +143,12 @@ public void preStart() throws Exception { _system = context().system(); } - private ActorRef _shardRegion; + private final ActorRef _shardRegion; + private final ActorRef _hostEmitter; + private final ActorRef _clusterEmitter; + private final Routes _routes; + private final Duration _healthcheckShutdownDelay; + private final ActorRef _ingestActor; private Cluster _cluster; private ActorSystem _system; private static final Logger LOGGER = LoggerFactory.getLogger(GracefulShutdownActor.class); @@ -83,10 +162,38 @@ private Shutdown() {} * * @return a singleton instance */ - public static Shutdown instance() { + public static Shutdown getInstance() { return SHUTDOWN; } private static final Shutdown SHUTDOWN = new Shutdown(); } + private static final class ShutdownHealthcheck { + private ShutdownHealthcheck() {} + public static ShutdownHealthcheck getInstance() { + return INSTANCE; + } + private static final ShutdownHealthcheck INSTANCE = new ShutdownHealthcheck(); + } + private static final class ShutdownShardRegion { + private ShutdownShardRegion() {} + public static ShutdownShardRegion getInstance() { + return INSTANCE; + } + private static final ShutdownShardRegion INSTANCE = new ShutdownShardRegion(); + } + private static final class ShutdownEmitter { + private ShutdownEmitter() {} + public static ShutdownEmitter getInstance() { + return INSTANCE; + } + private static final ShutdownEmitter INSTANCE = new ShutdownEmitter(); + } + private static final class ShutdownShardRegionComplete { + ShutdownShardRegionComplete(final ActorRef replyTo) { + _replyTo = replyTo; + } + + private final ActorRef _replyTo; + } } diff --git a/src/main/java/com/arpnetworking/clusteraggregator/GuiceModule.java b/src/main/java/com/arpnetworking/clusteraggregator/GuiceModule.java index ab589643..10c588ee 100644 --- a/src/main/java/com/arpnetworking/clusteraggregator/GuiceModule.java +++ b/src/main/java/com/arpnetworking/clusteraggregator/GuiceModule.java @@ -207,7 +207,7 @@ private ActorRef provideHostEmitter(final Injector injector, final ActorSystem s private ActorRef launchEmitter(final Injector injector, final ActorSystem system, final File pipelineFile, final String name) { final ActorRef emitterConfigurationProxy = system.actorOf( - ConfigurableActorProxy.props(new RoundRobinEmitterFactory()), + ConfigurableActorProxy.props(new RoundRobinEmitterFactory(_shutdown)), name); final ActorConfigurator configurator = new ActorConfigurator<>(emitterConfigurationProxy, EmitterConfiguration.class); @@ -384,6 +384,13 @@ private boolean provideReaggregationInjectClusterAsHost(final ClusterAggregatorC return config.getReaggregationInjectClusterAsHost(); } + @Provides + @Named("healthcheck-shutdown-delay") + @SuppressFBWarnings("UPM_UNCALLED_PRIVATE_METHOD") // Invoked reflectively by Guice + private Duration provideHealthCheckShutdownDelay(final ClusterAggregatorConfiguration config) { + return config.getHealthcheckShutdownDelay(); + } + @Provides @Named("reaggregation-timeout") @SuppressFBWarnings("UPM_UNCALLED_PRIVATE_METHOD") // Invoked reflectively by Guice @@ -440,6 +447,11 @@ static List createSinks(final ImmutableList monitoringSinks) { private static final ObjectMapper OBJECT_MAPPER = ObjectMapperFactory.getInstance(); private static final class RoundRobinEmitterFactory implements ConfiguredLaunchableFactory { + /** + * Constructor. + */ + RoundRobinEmitterFactory(final LifecycleRegistration shutdown) { + } @Override public Props create(final EmitterConfiguration config) { diff --git a/src/main/java/com/arpnetworking/clusteraggregator/Main.java b/src/main/java/com/arpnetworking/clusteraggregator/Main.java index 833ab638..83bf4f8d 100644 --- a/src/main/java/com/arpnetworking/clusteraggregator/Main.java +++ b/src/main/java/com/arpnetworking/clusteraggregator/Main.java @@ -37,17 +37,19 @@ import org.apache.pekko.actor.ActorRef; import org.apache.pekko.actor.ActorSystem; import org.apache.pekko.http.javadsl.ServerBinding; +import org.apache.pekko.pattern.Patterns; import org.slf4j.LoggerFactory; -import scala.concurrent.Await; -import scala.concurrent.duration.Duration; import java.io.File; +import java.time.Duration; import java.util.List; import java.util.Locale; import java.util.Optional; import java.util.concurrent.CompletionStage; +import java.util.concurrent.ExecutionException; import java.util.concurrent.Semaphore; import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; /** * Entry point for the pekko-based cluster aggregator. @@ -236,15 +238,21 @@ private void shutdownPekko() { LOGGER.info() .setMessage("Stopping Pekko") .log(); - if (_shutdownActor != null) { - _shutdownActor.tell(GracefulShutdownActor.Shutdown.instance(), ActorRef.noSender()); - } + try { + if (_shutdownActor != null) { + final CompletionStage gracefulShutdown = + Patterns.ask(_shutdownActor, GracefulShutdownActor.Shutdown.getInstance(), Duration.ofMinutes(10)); + gracefulShutdown.toCompletableFuture().join(); + LOGGER.info() + .setMessage("Graceful shutdown actor reported completion") + .log(); + } if (_system != null) { - Await.result(_system.whenTerminated(), SHUTDOWN_TIMEOUT); + _system.getWhenTerminated().toCompletableFuture().get(SHUTDOWN_TIMEOUT.toSeconds(), TimeUnit.SECONDS); } // CHECKSTYLE.OFF: IllegalCatch - Prevent program shutdown - } catch (final Exception e) { + } catch (final InterruptedException | TimeoutException | ExecutionException e) { // CHECKSTYLE.ON: IllegalCatch LOGGER.warn() .setMessage("Interrupted at shutdown") @@ -274,7 +282,7 @@ private static Builder getFileSourceBuilder( private volatile List _databases; private static final Logger LOGGER = com.arpnetworking.steno.LoggerFactory.getLogger(Main.class); - private static final Duration SHUTDOWN_TIMEOUT = Duration.create(3, TimeUnit.MINUTES); + private static final Duration SHUTDOWN_TIMEOUT = Duration.ofMinutes(3); private static final SourceTypeLiteral SOURCE_TYPE_LITERAL = new SourceTypeLiteral(); private static final Semaphore SHUTDOWN_SEMAPHORE = new Semaphore(0); private static final Thread SHUTDOWN_THREAD = new ShutdownThread(); diff --git a/src/main/java/com/arpnetworking/clusteraggregator/client/HttpSourceActor.java b/src/main/java/com/arpnetworking/clusteraggregator/client/HttpSourceActor.java index da6a6193..552d5dda 100644 --- a/src/main/java/com/arpnetworking/clusteraggregator/client/HttpSourceActor.java +++ b/src/main/java/com/arpnetworking/clusteraggregator/client/HttpSourceActor.java @@ -38,6 +38,7 @@ import com.google.inject.name.Named; import com.google.protobuf.GeneratedMessageV3; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; +import org.apache.http.HttpHeaders; import org.apache.pekko.Done; import org.apache.pekko.NotUsed; import org.apache.pekko.actor.AbstractActor; @@ -215,7 +216,12 @@ public Receive createReceive() { .run(_materializer) .whenComplete((done, err) -> { if (err == null) { - sender.tell(HttpResponse.create().withStatus(200), self()); + HttpResponse response = HttpResponse.create().withStatus(200); + if (_closeConnections) { + response = response.withHeaders( + Collections.singletonList(HttpHeader.parse(HttpHeaders.CONNECTION, "close"))); + } + sender.tell(response, self()); } else { if (err instanceof InvalidRecordsException) { BAD_REQUEST_LOGGER.debug() @@ -239,6 +245,9 @@ public Receive createReceive() { } }); }) + .match(Shutdown.class, message -> { + _closeConnections = true; + }) .build(); } @@ -274,7 +283,7 @@ private AggregationRequest parseRecords(final com.arpnetworking.clusteraggregato recordsBuilder.add(message); current = current.drop(message.getLength()); messageOptional = AggregationMessage.deserialize(current); - if (!messageOptional.isPresent() && current.lengthCompare(0) > 0) { + if (messageOptional.isEmpty() && current.lengthCompare(0) > 0) { throw new InvalidRecordsException( String.format("buffer did not deserialize completely, %d leftover bytes", current.size())); } @@ -378,6 +387,7 @@ private Optional buildPeriodicData(final Messages.StatisticSetReco private final Materializer _materializer; private final Sink> _sink; private final Graph, NotUsed> _processGraph; + private boolean _closeConnections = false; private static final StatisticFactory STATISTIC_FACTORY = new StatisticFactory(); private static final Logger BAD_REQUEST_LOGGER = @@ -398,5 +408,16 @@ private static class InvalidRecordsException extends IOException { private static final long serialVersionUID = 1L; } + + /** + * Message to initiate a graceful shutdown. + */ + public static final class Shutdown { + private Shutdown() {} + public static Shutdown getInstance() { + return INSTANCE; + } + private static final Shutdown INSTANCE = new Shutdown(); + } } diff --git a/src/main/java/com/arpnetworking/clusteraggregator/configuration/ClusterAggregatorConfiguration.java b/src/main/java/com/arpnetworking/clusteraggregator/configuration/ClusterAggregatorConfiguration.java index 1a144e4e..a1baebe1 100644 --- a/src/main/java/com/arpnetworking/clusteraggregator/configuration/ClusterAggregatorConfiguration.java +++ b/src/main/java/com/arpnetworking/clusteraggregator/configuration/ClusterAggregatorConfiguration.java @@ -160,6 +160,10 @@ public Duration getClusterStatusInterval() { return _clusterStatusInterval; } + public Duration getHealthcheckShutdownDelay() { + return _healthcheckShutdownDelay; + } + @Override public String toString() { return MoreObjects.toStringHelper(this) @@ -189,6 +193,7 @@ public String toString() { .add("RebalanceConfiguration", _rebalanceConfiguration) .add("ClusterHostSuffix", _clusterHostSuffix) .add("DatabaseConfigurations", _databaseConfigurations) + .add("HealthcheckShutdownDelay", _healthcheckShutdownDelay) .toString(); } @@ -220,6 +225,7 @@ private ClusterAggregatorConfiguration(final Builder builder) { _calculateClusterAggregations = builder._calculateClusterAggregations; _databaseConfigurations = Maps.newHashMap(builder._databaseConfigurations); _clusterStatusInterval = builder._clusterStatusInterval; + _healthcheckShutdownDelay = builder._healthcheckShutdownDelay; } private final String _monitoringCluster; @@ -249,6 +255,7 @@ private ClusterAggregatorConfiguration(final Builder builder) { private final boolean _calculateClusterAggregations; private final Map _databaseConfigurations; private final Duration _clusterStatusInterval; + private final Duration _healthcheckShutdownDelay; private static final ObjectMapper OBJECT_MAPPER = ObjectMapperFactory.getInstance(); @@ -591,6 +598,16 @@ public Builder setClusterStatusInterval(final Duration value) { return this; } + /** + * The time to wait for the healthcheck to shutdown. Optional. Defaults to 30 seconds. + * @param value The time to wait for the healthcheck to shutdown. + * @return This instance of {@link Builder}. + */ + public Builder setHealthcheckShutdownDelay(final Duration value) { + _healthcheckShutdownDelay = value; + return this; + } + @NotNull @NotEmpty private String _monitoringCluster; @@ -655,5 +672,7 @@ public Builder setClusterStatusInterval(final Duration value) { private Map _databaseConfigurations = Maps.newHashMap(); @NotNull private Duration _clusterStatusInterval = Duration.ofSeconds(10); + @NotNull + private Duration _healthcheckShutdownDelay = Duration.ofSeconds(30); } } diff --git a/src/main/java/com/arpnetworking/clusteraggregator/http/Routes.java b/src/main/java/com/arpnetworking/clusteraggregator/http/Routes.java index ded7968f..33a25cee 100644 --- a/src/main/java/com/arpnetworking/clusteraggregator/http/Routes.java +++ b/src/main/java/com/arpnetworking/clusteraggregator/http/Routes.java @@ -56,6 +56,7 @@ import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletionStage; import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicBoolean; import java.util.stream.Collectors; import java.util.stream.StreamSupport; import javax.annotation.Nullable; @@ -163,20 +164,39 @@ public CompletionStage apply(final HttpRequest request) { }); } + /** + * Start failing health checks in preparation for service shutdown. + */ + public void shutdownHealthcheck() { + _healthCheckShutdown.set(true); + } + private CompletionStage process(final HttpRequest request) { if (HttpMethods.GET.equals(request.method())) { if (_healthCheckPath.equals(request.getUri().path())) { - return ask("/user/status", new Status.HealthRequest(), Boolean.FALSE) - .thenApply( - isHealthy -> HttpResponse.create() - .withStatus(isHealthy ? StatusCodes.OK : StatusCodes.INTERNAL_SERVER_ERROR) - .addHeader(PING_CACHE_CONTROL_HEADER) - .withEntity( - JSON_CONTENT_TYPE, - ByteString.fromString( - "{\"status\":\"" - + (isHealthy ? HEALTHY_STATE : UNHEALTHY_STATE) - + "\"}"))); + if (!_healthCheckShutdown.get()) { + return ask("/user/status", new Status.HealthRequest(), Boolean.FALSE) + .thenApply( + isHealthy -> HttpResponse.create() + .withStatus(isHealthy ? StatusCodes.OK : StatusCodes.INTERNAL_SERVER_ERROR) + .addHeader(PING_CACHE_CONTROL_HEADER) + .withEntity( + JSON_CONTENT_TYPE, + ByteString.fromString( + "{\"status\":\"" + + (isHealthy ? HEALTHY_STATE : UNHEALTHY_STATE) + + "\"}"))); + } else { + return CompletableFuture.completedFuture(HttpResponse.create() + .withStatus(StatusCodes.INTERNAL_SERVER_ERROR) + .addHeader(PING_CACHE_CONTROL_HEADER) + .withEntity( + JSON_CONTENT_TYPE, + ByteString.fromString( + "{\"status\":\"" + + UNHEALTHY_STATE + + "\"}"))); + } } else if (_statusPath.equals(request.getUri().path())) { return ask("/user/status", new Status.StatusRequest(), (StatusResponse) null) .thenApply( @@ -264,6 +284,7 @@ private String createMetricName(final HttpRequest request, final int responseSta private final String _statusPath; private final String _versionPath; private final ObjectMapper _objectMapper; + private AtomicBoolean _healthCheckShutdown = new AtomicBoolean(false); private static final Logger LOGGER = LoggerFactory.getLogger(Routes.class); diff --git a/src/main/java/com/arpnetworking/tsdcore/sinks/DimensionFilteringSink.java b/src/main/java/com/arpnetworking/tsdcore/sinks/DimensionFilteringSink.java index 9dbf1dd4..15c40b3f 100644 --- a/src/main/java/com/arpnetworking/tsdcore/sinks/DimensionFilteringSink.java +++ b/src/main/java/com/arpnetworking/tsdcore/sinks/DimensionFilteringSink.java @@ -20,6 +20,7 @@ import net.sf.oval.constraint.NotNull; import java.util.Collections; +import java.util.concurrent.CompletionStage; /** * Filtering sink for excluding data based on dimensions present or absent. @@ -43,7 +44,12 @@ public void recordAggregateData(final PeriodicData data) { @Override public void close() { - // Nothing to do + _sink.close(); + } + + @Override + public CompletionStage shutdownGracefully() { + return _sink.shutdownGracefully(); } private DimensionFilteringSink(final Builder builder) { diff --git a/src/main/java/com/arpnetworking/tsdcore/sinks/DimensionInjectingSink.java b/src/main/java/com/arpnetworking/tsdcore/sinks/DimensionInjectingSink.java index e08621ca..e0202192 100644 --- a/src/main/java/com/arpnetworking/tsdcore/sinks/DimensionInjectingSink.java +++ b/src/main/java/com/arpnetworking/tsdcore/sinks/DimensionInjectingSink.java @@ -21,6 +21,7 @@ import net.sf.oval.constraint.NotNull; import java.util.Map; +import java.util.concurrent.CompletionStage; /** * Sink adds any specified dimensions. @@ -40,7 +41,12 @@ public void recordAggregateData(final PeriodicData data) { @Override public void close() { - // Nothing to do + _sink.close(); + } + + @Override + public CompletionStage shutdownGracefully() { + return _sink.shutdownGracefully(); } private DimensionInjectingSink(final Builder builder) { diff --git a/src/main/java/com/arpnetworking/tsdcore/sinks/DomainInjectingSink.java b/src/main/java/com/arpnetworking/tsdcore/sinks/DomainInjectingSink.java index 018e944f..039cb59f 100644 --- a/src/main/java/com/arpnetworking/tsdcore/sinks/DomainInjectingSink.java +++ b/src/main/java/com/arpnetworking/tsdcore/sinks/DomainInjectingSink.java @@ -21,6 +21,7 @@ import net.sf.oval.constraint.NotNull; import java.util.Optional; +import java.util.concurrent.CompletionStage; import javax.annotation.Nullable; /** @@ -49,7 +50,12 @@ public void recordAggregateData(final PeriodicData data) { @Override public void close() { - // Nothing to do + _sink.close(); + } + + @Override + public CompletionStage shutdownGracefully() { + return _sink.shutdownGracefully(); } private Optional getDomain(@Nullable final String host) { diff --git a/src/main/java/com/arpnetworking/tsdcore/sinks/HttpPostSink.java b/src/main/java/com/arpnetworking/tsdcore/sinks/HttpPostSink.java index 066bd378..83eccf39 100644 --- a/src/main/java/com/arpnetworking/tsdcore/sinks/HttpPostSink.java +++ b/src/main/java/com/arpnetworking/tsdcore/sinks/HttpPostSink.java @@ -33,10 +33,10 @@ import net.sf.oval.context.OValContext; import org.apache.pekko.actor.ActorRef; import org.apache.pekko.actor.ActorSystem; -import org.apache.pekko.actor.PoisonPill; import org.apache.pekko.http.javadsl.model.HttpMethods; import org.apache.pekko.http.javadsl.model.MediaTypes; import org.apache.pekko.http.javadsl.model.StatusCodes; +import org.apache.pekko.pattern.Patterns; import org.asynchttpclient.AsyncHttpClient; import org.asynchttpclient.AsyncHttpClientConfig; import org.asynchttpclient.DefaultAsyncHttpClient; @@ -50,6 +50,7 @@ import java.time.Duration; import java.util.Collection; import java.util.Optional; +import java.util.concurrent.CompletionStage; import java.util.function.Function; /** @@ -71,7 +72,17 @@ public void close() { .addData("sink", getName()) .addData("uri", _uri) .log(); - _sinkActor.tell(PoisonPill.getInstance(), ActorRef.noSender()); + _sinkActor.tell(HttpSinkActor.DrainAndShutdown.getInstance(), ActorRef.noSender()); + } + + @Override + public CompletionStage shutdownGracefully() { + LOGGER.info() + .setMessage("Closing sink") + .addData("sink", getName()) + .log(); + return Patterns.ask(_sinkActor, HttpSinkActor.DrainAndShutdown.getInstance(), Duration.ofSeconds(30)) + .thenApply(response -> null); } @LogValue diff --git a/src/main/java/com/arpnetworking/tsdcore/sinks/HttpSinkActor.java b/src/main/java/com/arpnetworking/tsdcore/sinks/HttpSinkActor.java index 077e1ddb..8f2d193c 100644 --- a/src/main/java/com/arpnetworking/tsdcore/sinks/HttpSinkActor.java +++ b/src/main/java/com/arpnetworking/tsdcore/sinks/HttpSinkActor.java @@ -72,12 +72,13 @@ public static Props props( final PeriodicMetrics periodicMetrics) { return Props.create( HttpSinkActor.class, - client, - sink, - maximumConcurrency, - maximumQueueSize, - spreadPeriod, - periodicMetrics); + () -> new HttpSinkActor( + client, + sink, + maximumConcurrency, + maximumQueueSize, + spreadPeriod, + periodicMetrics)); } /** @@ -249,6 +250,7 @@ public Receive createReceive() { _periodicMetrics.recordCounter(_pendingRequestsQueueSizeName, _pendingRequests.size()); _periodicMetrics.recordCounter(_inflightRequestsCountName, _inflightRequestsCount); }) + .match(DrainAndShutdown.class, this::processDrainMessage) .matchAny(message -> { LOGGER.error() .setMessage("Unexpected message") @@ -391,6 +393,34 @@ private void processEmitAggregation(final EmitAggregation emitMessage) { } } + private void processDrainMessage(final DrainAndShutdown message) { + if (_pendingRequests.isEmpty() && _inflightRequestsCount == 0) { + LOGGER.info() + .setMessage("Stopping actor") + .addContext("actor", self()) + .log(); + context().stop(self()); + sender().tell("OK", self()); + + } else { + LOGGER.info() + .setMessage("Waiting for pending requests to complete") + .addData("pendingRequests", _pendingRequests.size()) + .addData("inflightRequests", _inflightRequestsCount) + .addContext("actor", self()) + .log(); + + context().system() + .scheduler() + .scheduleOnce( + Duration.ofSeconds(1), + self(), + DrainAndShutdown.getInstance(), + context().dispatcher(), + sender()); + } + } + /** * Dispatches the number of pending requests needed to drain the pendingRequests queue or meet the maximum concurrency. */ @@ -663,4 +693,21 @@ private static final class SampleMetrics { private SampleMetrics() { } private static final SampleMetrics INSTANCE = new SampleMetrics(); } + + /** + * Message class to indicate that the actor should drain and shutdown. + */ + public static final class DrainAndShutdown { + private DrainAndShutdown() { } + + /** + * Get the singleton instance of this class. + * @return The singleton instance of this class. + */ + public static DrainAndShutdown getInstance() { + return DrainAndShutdown.INSTANCE; + } + + private static final DrainAndShutdown INSTANCE = new DrainAndShutdown(); + } } diff --git a/src/main/java/com/arpnetworking/tsdcore/sinks/MetricNameFilteringSink.java b/src/main/java/com/arpnetworking/tsdcore/sinks/MetricNameFilteringSink.java index 8ebe7c6a..ab2ae68e 100644 --- a/src/main/java/com/arpnetworking/tsdcore/sinks/MetricNameFilteringSink.java +++ b/src/main/java/com/arpnetworking/tsdcore/sinks/MetricNameFilteringSink.java @@ -29,6 +29,7 @@ import java.util.Collections; import java.util.List; +import java.util.concurrent.CompletionStage; import java.util.regex.Pattern; /** @@ -75,6 +76,11 @@ public void close() { _sink.close(); } + @Override + public CompletionStage shutdownGracefully() { + return _sink.shutdownGracefully(); + } + /** * Generate a Steno log compatible representation. * diff --git a/src/main/java/com/arpnetworking/tsdcore/sinks/MultiSink.java b/src/main/java/com/arpnetworking/tsdcore/sinks/MultiSink.java index 716ed48e..1624f3a5 100644 --- a/src/main/java/com/arpnetworking/tsdcore/sinks/MultiSink.java +++ b/src/main/java/com/arpnetworking/tsdcore/sinks/MultiSink.java @@ -24,6 +24,9 @@ import net.sf.oval.constraint.NotNull; import java.util.Collection; +import java.util.List; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.CompletionStage; /** * A publisher that wraps multiple others and publishes to all of them. This @@ -60,6 +63,17 @@ public void close() { } } + @Override + @SuppressWarnings({"unchecked", "rawtypes"}) + public CompletionStage shutdownGracefully() { + final List> futures = _sinks.stream() + .map(Sink::shutdownGracefully) + .map(CompletionStage::toCompletableFuture) + .toList(); + + return CompletableFuture.allOf(futures.>toArray(new CompletableFuture[0])); + } + /** * Generate a Steno log compatible representation. * diff --git a/src/main/java/com/arpnetworking/tsdcore/sinks/PeriodFilteringSink.java b/src/main/java/com/arpnetworking/tsdcore/sinks/PeriodFilteringSink.java index 6b67baa6..5403974a 100644 --- a/src/main/java/com/arpnetworking/tsdcore/sinks/PeriodFilteringSink.java +++ b/src/main/java/com/arpnetworking/tsdcore/sinks/PeriodFilteringSink.java @@ -28,6 +28,7 @@ import java.util.Collections; import java.util.Optional; import java.util.Set; +import java.util.concurrent.CompletionStage; /** * A publisher that wraps another, filters the metrics with specific periods, @@ -50,6 +51,11 @@ public void close() { _sink.close(); } + @Override + public CompletionStage shutdownGracefully() { + return _sink.shutdownGracefully(); + } + /** * Generate a Steno log compatible representation. * diff --git a/src/main/java/com/arpnetworking/tsdcore/sinks/PeriodicStatisticsSink.java b/src/main/java/com/arpnetworking/tsdcore/sinks/PeriodicStatisticsSink.java index f2015fe3..af9f8f24 100644 --- a/src/main/java/com/arpnetworking/tsdcore/sinks/PeriodicStatisticsSink.java +++ b/src/main/java/com/arpnetworking/tsdcore/sinks/PeriodicStatisticsSink.java @@ -45,6 +45,8 @@ import java.util.Objects; import java.util.Optional; import java.util.Set; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.CompletionStage; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentLinkedDeque; import java.util.concurrent.Executors; @@ -112,6 +114,21 @@ public void close() { flushMetrics(); } + @Override + public CompletionStage shutdownGracefully() { + _executor.shutdown(); + return CompletableFuture.runAsync(() -> { + try { + _executor.awaitTermination(EXECUTOR_TIMEOUT_IN_SECONDS, TimeUnit.SECONDS); + this.flushMetrics(); + } catch (final InterruptedException e) { + Thread.interrupted(); + throw new RuntimeException(e); + } + }); + + } + @LogValue @Override public Object toLogValue() { diff --git a/src/main/java/com/arpnetworking/tsdcore/sinks/RandomMetricNameFilterSink.java b/src/main/java/com/arpnetworking/tsdcore/sinks/RandomMetricNameFilterSink.java index f336ed5b..d775513a 100644 --- a/src/main/java/com/arpnetworking/tsdcore/sinks/RandomMetricNameFilterSink.java +++ b/src/main/java/com/arpnetworking/tsdcore/sinks/RandomMetricNameFilterSink.java @@ -24,6 +24,8 @@ import net.sf.oval.constraint.Min; import net.sf.oval.constraint.NotNull; +import java.util.concurrent.CompletionStage; + /** * A {@link com.arpnetworking.tsdcore.sinks.Sink} that only allows a percentage of data through to the wrapped * {@link com.arpnetworking.tsdcore.sinks.Sink}. @@ -51,6 +53,11 @@ public void close() { _sink.close(); } + @Override + public CompletionStage shutdownGracefully() { + return _sink.shutdownGracefully(); + } + /** * Generate a Steno log compatible representation. * diff --git a/src/main/java/com/arpnetworking/tsdcore/sinks/RrdSink.java b/src/main/java/com/arpnetworking/tsdcore/sinks/RrdSink.java index 9f863c8e..94eb314c 100644 --- a/src/main/java/com/arpnetworking/tsdcore/sinks/RrdSink.java +++ b/src/main/java/com/arpnetworking/tsdcore/sinks/RrdSink.java @@ -33,6 +33,8 @@ import java.io.InputStreamReader; import java.time.Duration; import java.util.HashMap; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.CompletionStage; /** * RRD publisher that maintains all the rrd databases for a cluster. This class @@ -75,6 +77,11 @@ public void recordAggregateData(final PeriodicData periodicData) { @Override public void close() {} + @Override + public CompletionStage shutdownGracefully() { + return CompletableFuture.completedFuture(null); + } + /** * Generate a Steno log compatible representation. * diff --git a/src/main/java/com/arpnetworking/tsdcore/sinks/ServiceNameFilteringSink.java b/src/main/java/com/arpnetworking/tsdcore/sinks/ServiceNameFilteringSink.java index b5bb3725..f323075d 100644 --- a/src/main/java/com/arpnetworking/tsdcore/sinks/ServiceNameFilteringSink.java +++ b/src/main/java/com/arpnetworking/tsdcore/sinks/ServiceNameFilteringSink.java @@ -29,6 +29,7 @@ import java.util.Collections; import java.util.List; +import java.util.concurrent.CompletionStage; import java.util.regex.Pattern; /** @@ -76,6 +77,11 @@ public void close() { _sink.close(); } + @Override + public CompletionStage shutdownGracefully() { + return _sink.shutdownGracefully(); + } + /** * Generate a Steno log compatible representation. * diff --git a/src/main/java/com/arpnetworking/tsdcore/sinks/Sink.java b/src/main/java/com/arpnetworking/tsdcore/sinks/Sink.java index 84884634..d8ca8d24 100644 --- a/src/main/java/com/arpnetworking/tsdcore/sinks/Sink.java +++ b/src/main/java/com/arpnetworking/tsdcore/sinks/Sink.java @@ -18,6 +18,8 @@ import com.arpnetworking.tsdcore.model.PeriodicData; import com.fasterxml.jackson.annotation.JsonTypeInfo; +import java.util.concurrent.CompletionStage; + /** * Interface to describe a class that publishes {@link PeriodicData}. * @@ -42,4 +44,12 @@ public interface Sink { * recordAggregation will be made after a call to close. */ void close(); + + /** + * Called to allow the publisher to clean-up. No further calls to + * recordAggregation will be made after a call to close. + * + * @return A {@link CompletionStage} that completes when the sink is closed. + */ + CompletionStage shutdownGracefully(); } diff --git a/src/main/java/com/arpnetworking/tsdcore/sinks/TcpSink.java b/src/main/java/com/arpnetworking/tsdcore/sinks/TcpSink.java index 1ad5ae9e..31d8215f 100644 --- a/src/main/java/com/arpnetworking/tsdcore/sinks/TcpSink.java +++ b/src/main/java/com/arpnetworking/tsdcore/sinks/TcpSink.java @@ -28,9 +28,11 @@ import org.apache.pekko.actor.ActorRef; import org.apache.pekko.actor.ActorSystem; import org.apache.pekko.actor.PoisonPill; +import org.apache.pekko.pattern.Patterns; import org.apache.pekko.util.ByteString; import java.time.Duration; +import java.util.concurrent.CompletionStage; import java.util.function.Function; /** @@ -53,6 +55,16 @@ public void close() { _sinkActor.tell(PoisonPill.getInstance(), ActorRef.noSender()); } + @Override + public CompletionStage shutdownGracefully() { + LOGGER.info() + .setMessage("Closing sink") + .addData("sink", getName()) + .log(); + return Patterns.ask(_sinkActor, TcpSinkActor.DrainAndShutdown.getInstance(), Duration.ofSeconds(30)) + .thenApply(response -> null); + } + /** * {@inheritDoc} */ diff --git a/src/main/java/com/arpnetworking/tsdcore/sinks/TcpSinkActor.java b/src/main/java/com/arpnetworking/tsdcore/sinks/TcpSinkActor.java index 8e1bbe17..d662f5a2 100644 --- a/src/main/java/com/arpnetworking/tsdcore/sinks/TcpSinkActor.java +++ b/src/main/java/com/arpnetworking/tsdcore/sinks/TcpSinkActor.java @@ -177,6 +177,28 @@ public Receive createReceive() { connect(); }) .match(Connect.class, connect -> connect()) + .match(TcpSinkActor.DrainAndShutdown.class, message -> { + if (_pendingRequests.isEmpty()) { + LOGGER.info() + .setMessage("Stopping actor") + .addContext("actor", self()) + .log(); + context().stop(self()); + sender().tell("OK", self()); + } else { + LOGGER.info() + .setMessage("Waiting for pending requests to complete") + .addData("pendingRequests", _pendingRequests.size()) + .addContext("actor", self()) + .log(); + context().system().scheduler().scheduleOnce( + Duration.ofSeconds(1), + self(), + TcpSinkActor.DrainAndShutdown.getInstance(), + context().dispatcher(), + sender()); + } + }) .build(); } @@ -293,4 +315,21 @@ public PeriodicData getData() { private final PeriodicData _data; } + + /** + * Message class to drain the queue and shutdown the actor. + */ + public static final class DrainAndShutdown { + private DrainAndShutdown() { } + /** + * Get the singleton instance. + * + * @return The singleton instance. + */ + public static TcpSinkActor.DrainAndShutdown getInstance() { + return TcpSinkActor.DrainAndShutdown.INSTANCE; + } + + private static final TcpSinkActor.DrainAndShutdown INSTANCE = new TcpSinkActor.DrainAndShutdown(); + } } diff --git a/src/main/java/com/arpnetworking/tsdcore/sinks/TimeThresholdSink.java b/src/main/java/com/arpnetworking/tsdcore/sinks/TimeThresholdSink.java index 997d57ff..0905ac10 100644 --- a/src/main/java/com/arpnetworking/tsdcore/sinks/TimeThresholdSink.java +++ b/src/main/java/com/arpnetworking/tsdcore/sinks/TimeThresholdSink.java @@ -29,6 +29,7 @@ import java.time.ZonedDateTime; import java.util.Collections; import java.util.Set; +import java.util.concurrent.CompletionStage; import java.util.function.Consumer; /** @@ -69,6 +70,11 @@ public void close() { _sink.close(); } + @Override + public CompletionStage shutdownGracefully() { + return _sink.shutdownGracefully(); + } + /** * Generate a Steno log compatible representation. * diff --git a/src/main/java/com/arpnetworking/tsdcore/sinks/UnitMappingSink.java b/src/main/java/com/arpnetworking/tsdcore/sinks/UnitMappingSink.java index aa6833e1..d240e74a 100644 --- a/src/main/java/com/arpnetworking/tsdcore/sinks/UnitMappingSink.java +++ b/src/main/java/com/arpnetworking/tsdcore/sinks/UnitMappingSink.java @@ -29,6 +29,7 @@ import java.io.Serializable; import java.util.Map; +import java.util.concurrent.CompletionStage; /** * Implementation of {@link Sink} which maps values in one unit to another. @@ -83,6 +84,11 @@ public void close() { _sink.close(); } + @Override + public CompletionStage shutdownGracefully() { + return _sink.shutdownGracefully(); + } + /** * Generate a Steno log compatible representation. * diff --git a/src/main/java/com/arpnetworking/tsdcore/sinks/circonus/CirconusSink.java b/src/main/java/com/arpnetworking/tsdcore/sinks/circonus/CirconusSink.java index 63e5bd01..2adade37 100644 --- a/src/main/java/com/arpnetworking/tsdcore/sinks/circonus/CirconusSink.java +++ b/src/main/java/com/arpnetworking/tsdcore/sinks/circonus/CirconusSink.java @@ -32,11 +32,13 @@ import org.apache.pekko.actor.ActorRef; import org.apache.pekko.actor.ActorSystem; import org.apache.pekko.actor.PoisonPill; +import org.apache.pekko.pattern.Patterns; import org.apache.pekko.stream.Materializer; import java.net.URI; import java.time.Duration; import java.util.Collection; +import java.util.concurrent.CompletionStage; import java.util.stream.Collectors; /** @@ -72,6 +74,12 @@ public void close() { _sinkActor.tell(PoisonPill.getInstance(), ActorRef.noSender()); } + @Override + public CompletionStage shutdownGracefully() { + return Patterns.gracefulStop(_sinkActor, Duration.ofSeconds(30)) + .thenApply(result -> null); + } + /** * Generate a Steno log compatible representation. * diff --git a/src/test/java/com/arpnetworking/clusteraggregator/EmitterTest.java b/src/test/java/com/arpnetworking/clusteraggregator/EmitterTest.java index bc54d38e..401e9b2d 100644 --- a/src/test/java/com/arpnetworking/clusteraggregator/EmitterTest.java +++ b/src/test/java/com/arpnetworking/clusteraggregator/EmitterTest.java @@ -108,6 +108,7 @@ public void doesNotSwallowUnhandled() { private EmitterConfiguration _config = null; @Mock private Sink _sink = null; + private LifecycleRegistration _shutdown = new AppShutdown(); private static final StatisticFactory STATISTIC_FACTORY = new StatisticFactory(); private static final Statistic MEDIAN_STATISTIC = STATISTIC_FACTORY.getStatistic("median"); diff --git a/src/test/java/com/arpnetworking/tsdcore/sinks/BaseSinkTest.java b/src/test/java/com/arpnetworking/tsdcore/sinks/BaseSinkTest.java index f92e8bb9..dbcc79e0 100644 --- a/src/test/java/com/arpnetworking/tsdcore/sinks/BaseSinkTest.java +++ b/src/test/java/com/arpnetworking/tsdcore/sinks/BaseSinkTest.java @@ -19,6 +19,9 @@ import org.junit.Assert; import org.junit.Test; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.CompletionStage; + /** * Tests for the {@link BaseSink} class. * @@ -55,6 +58,11 @@ public void close() { // Nothing to do } + @Override + public CompletionStage shutdownGracefully() { + return CompletableFuture.completedFuture(null); + } + private TestAggregatedDataSink(final Builder builder) { super(builder); }