Github user tillrohrmann commented on a diff in the pull request:
https://github.com/apache/flink/pull/4993#discussion_r150226636
--- Diff:
flink-queryable-state/flink-queryable-state-client-java/src/main/java/org/apache/flink/queryablestate/network/Client.java
---
@@ -166,27 +168,39 @@ public String getClientName() {
*
* <p>After a call to this method, all returned futures will be failed.
*/
- public void shutdown() {
+ public CompletableFuture<Boolean> shutdown() {
+ final CompletableFuture<Boolean> shutdownFuture = new
CompletableFuture<>();
+
if (shutDown.compareAndSet(false, true)) {
+ final List<CompletableFuture<?>> connectionFutures =
new ArrayList<>();
for (Map.Entry<InetSocketAddress,
EstablishedConnection> conn : establishedConnections.entrySet()) {
if
(establishedConnections.remove(conn.getKey(), conn.getValue())) {
- conn.getValue().close();
+
connectionFutures.add(conn.getValue().close());
}
}
for (Map.Entry<InetSocketAddress, PendingConnection>
conn : pendingConnections.entrySet()) {
if (pendingConnections.remove(conn.getKey()) !=
null) {
- conn.getValue().close();
+
connectionFutures.add(conn.getValue().close());
}
}
- if (bootstrap != null) {
- EventLoopGroup group = bootstrap.group();
- if (group != null) {
- group.shutdownGracefully(0L, 10L,
TimeUnit.SECONDS);
- }
- }
+ CompletableFuture.allOf(connectionFutures.toArray(new
CompletableFuture<?>[connectionFutures.size()])).thenRun(
+ () -> {
+ if (bootstrap != null) {
+ EventLoopGroup group =
bootstrap.group();
+ if (group != null) {
+
group.shutdownGracefully(0L, 10L, TimeUnit.SECONDS)
+
.addListener(finished -> shutdownFuture.complete(true));
--- End diff --
result should be considered.
---