diff --git a/api/src/main/java/io/grpc/Server.java b/api/src/main/java/io/grpc/Server.java index 828abb2d0f..fc98fe242e 100644 --- a/api/src/main/java/io/grpc/Server.java +++ b/api/src/main/java/io/grpc/Server.java @@ -107,6 +107,10 @@ public abstract class Server { * After this call returns, this server has released the listening socket(s) and may be reused by * another server. * + *
Note that this method will not wait for preexisting calls to finish before returning. + * {@link #awaitTermination()} or {@link #awaitTermination(long, TimeUnit)} needs to be called to + * wait for existing calls to finish. + * * @return {@code this} object * @since 1.0.0 */ diff --git a/examples/src/main/java/io/grpc/examples/advanced/HelloJsonServer.java b/examples/src/main/java/io/grpc/examples/advanced/HelloJsonServer.java index 09609177eb..0a656dd52b 100644 --- a/examples/src/main/java/io/grpc/examples/advanced/HelloJsonServer.java +++ b/examples/src/main/java/io/grpc/examples/advanced/HelloJsonServer.java @@ -28,6 +28,7 @@ import io.grpc.examples.helloworld.HelloRequest; import io.grpc.stub.ServerCalls.UnaryMethod; import io.grpc.stub.StreamObserver; import java.io.IOException; +import java.util.concurrent.TimeUnit; import java.util.logging.Logger; /** @@ -59,15 +60,19 @@ public class HelloJsonServer { public void run() { // Use stderr here since the logger may have been reset by its JVM shutdown hook. System.err.println("*** shutting down gRPC server since JVM is shutting down"); - HelloJsonServer.this.stop(); + try { + HelloJsonServer.this.stop(); + } catch (InterruptedException e) { + e.printStackTrace(System.err); + } System.err.println("*** server shut down"); } }); } - private void stop() { + private void stop() throws InterruptedException { if (server != null) { - server.shutdown(); + server.shutdown().awaitTermination(30, TimeUnit.SECONDS); } } diff --git a/examples/src/main/java/io/grpc/examples/experimental/CompressingHelloWorldServerAllMethods.java b/examples/src/main/java/io/grpc/examples/experimental/CompressingHelloWorldServerAllMethods.java index 87079099cd..23c51a6d26 100644 --- a/examples/src/main/java/io/grpc/examples/experimental/CompressingHelloWorldServerAllMethods.java +++ b/examples/src/main/java/io/grpc/examples/experimental/CompressingHelloWorldServerAllMethods.java @@ -17,6 +17,7 @@ package io.grpc.examples.experimental; import java.io.IOException; +import java.util.concurrent.TimeUnit; import java.util.logging.Logger; import io.grpc.Metadata; @@ -33,7 +34,7 @@ import io.grpc.stub.StreamObserver; /** * Server that manages startup/shutdown of a {@code Greeter} server - * with an interceptor to enable compression for all responses. + * with an interceptor to enable compression for all responses. */ public class CompressingHelloWorldServerAllMethods { private static final Logger logger = Logger.getLogger(CompressingHelloWorldServerAllMethods.class.getName()); @@ -62,15 +63,19 @@ public class CompressingHelloWorldServerAllMethods { public void run() { // Use stderr here since the logger may have been reset by its JVM shutdown hook. System.err.println("*** shutting down gRPC server since JVM is shutting down"); - CompressingHelloWorldServerAllMethods.this.stop(); + try { + CompressingHelloWorldServerAllMethods.this.stop(); + } catch (InterruptedException e) { + e.printStackTrace(System.err); + } System.err.println("*** server shut down"); } }); } - private void stop() { + private void stop() throws InterruptedException { if (server != null) { - server.shutdown(); + server.shutdown().awaitTermination(30, TimeUnit.SECONDS); } } diff --git a/examples/src/main/java/io/grpc/examples/experimental/CompressingHelloWorldServerPerMethod.java b/examples/src/main/java/io/grpc/examples/experimental/CompressingHelloWorldServerPerMethod.java index 01b4c70330..0ccf38184d 100644 --- a/examples/src/main/java/io/grpc/examples/experimental/CompressingHelloWorldServerPerMethod.java +++ b/examples/src/main/java/io/grpc/examples/experimental/CompressingHelloWorldServerPerMethod.java @@ -17,6 +17,7 @@ package io.grpc.examples.experimental; import java.io.IOException; +import java.util.concurrent.TimeUnit; import java.util.logging.Logger; import io.grpc.Server; @@ -49,15 +50,19 @@ public class CompressingHelloWorldServerPerMethod { public void run() { // Use stderr here since the logger may have been reset by its JVM shutdown hook. System.err.println("*** shutting down gRPC server since JVM is shutting down"); - CompressingHelloWorldServerPerMethod.this.stop(); + try { + CompressingHelloWorldServerPerMethod.this.stop(); + } catch (InterruptedException e) { + e.printStackTrace(System.err); + } System.err.println("*** server shut down"); } }); } - private void stop() { + private void stop() throws InterruptedException { if (server != null) { - server.shutdown(); + server.shutdown().awaitTermination(30, TimeUnit.SECONDS); } } diff --git a/examples/src/main/java/io/grpc/examples/header/CustomHeaderServer.java b/examples/src/main/java/io/grpc/examples/header/CustomHeaderServer.java index 21ad5f2769..ae80045603 100644 --- a/examples/src/main/java/io/grpc/examples/header/CustomHeaderServer.java +++ b/examples/src/main/java/io/grpc/examples/header/CustomHeaderServer.java @@ -24,6 +24,7 @@ import io.grpc.examples.helloworld.HelloReply; import io.grpc.examples.helloworld.HelloRequest; import io.grpc.stub.StreamObserver; import java.io.IOException; +import java.util.concurrent.TimeUnit; import java.util.logging.Logger; /** @@ -48,15 +49,19 @@ public class CustomHeaderServer { public void run() { // Use stderr here since the logger may have been reset by its JVM shutdown hook. System.err.println("*** shutting down gRPC server since JVM is shutting down"); - CustomHeaderServer.this.stop(); + try { + CustomHeaderServer.this.stop(); + } catch (InterruptedException e) { + e.printStackTrace(System.err); + } System.err.println("*** server shut down"); } }); } - private void stop() { + private void stop() throws InterruptedException { if (server != null) { - server.shutdown(); + server.shutdown().awaitTermination(30, TimeUnit.SECONDS); } } diff --git a/examples/src/main/java/io/grpc/examples/hedging/HedgingHelloWorldServer.java b/examples/src/main/java/io/grpc/examples/hedging/HedgingHelloWorldServer.java index 9919944ab4..b934e8514a 100644 --- a/examples/src/main/java/io/grpc/examples/hedging/HedgingHelloWorldServer.java +++ b/examples/src/main/java/io/grpc/examples/hedging/HedgingHelloWorldServer.java @@ -29,6 +29,7 @@ import io.grpc.examples.helloworld.HelloRequest; import io.grpc.stub.StreamObserver; import java.io.IOException; import java.util.Random; +import java.util.concurrent.TimeUnit; import java.util.logging.Logger; /** @@ -53,15 +54,19 @@ public class HedgingHelloWorldServer { public void run() { // Use stderr here since the logger may have been reset by its JVM shutdown hook. System.err.println("*** shutting down gRPC server since JVM is shutting down"); - HedgingHelloWorldServer.this.stop(); + try { + HedgingHelloWorldServer.this.stop(); + } catch (InterruptedException e) { + e.printStackTrace(System.err); + } System.err.println("*** server shut down"); } }); } - private void stop() { + private void stop() throws InterruptedException { if (server != null) { - server.shutdown(); + server.shutdown().awaitTermination(30, TimeUnit.SECONDS); } } diff --git a/examples/src/main/java/io/grpc/examples/helloworld/HelloWorldServer.java b/examples/src/main/java/io/grpc/examples/helloworld/HelloWorldServer.java index 4c021a8a05..12836a4c82 100644 --- a/examples/src/main/java/io/grpc/examples/helloworld/HelloWorldServer.java +++ b/examples/src/main/java/io/grpc/examples/helloworld/HelloWorldServer.java @@ -20,6 +20,7 @@ import io.grpc.Server; import io.grpc.ServerBuilder; import io.grpc.stub.StreamObserver; import java.io.IOException; +import java.util.concurrent.TimeUnit; import java.util.logging.Logger; /** @@ -43,15 +44,19 @@ public class HelloWorldServer { public void run() { // Use stderr here since the logger may have been reset by its JVM shutdown hook. System.err.println("*** shutting down gRPC server since JVM is shutting down"); - HelloWorldServer.this.stop(); + try { + HelloWorldServer.this.stop(); + } catch (InterruptedException e) { + e.printStackTrace(System.err); + } System.err.println("*** server shut down"); } }); } - private void stop() { + private void stop() throws InterruptedException { if (server != null) { - server.shutdown(); + server.shutdown().awaitTermination(30, TimeUnit.SECONDS); } } diff --git a/examples/src/main/java/io/grpc/examples/manualflowcontrol/ManualFlowControlServer.java b/examples/src/main/java/io/grpc/examples/manualflowcontrol/ManualFlowControlServer.java index b3e4aa76c3..abd04fa9ad 100644 --- a/examples/src/main/java/io/grpc/examples/manualflowcontrol/ManualFlowControlServer.java +++ b/examples/src/main/java/io/grpc/examples/manualflowcontrol/ManualFlowControlServer.java @@ -23,6 +23,7 @@ import io.grpc.stub.ServerCallStreamObserver; import io.grpc.stub.StreamObserver; import java.io.IOException; +import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import java.util.logging.Logger; @@ -135,8 +136,13 @@ public class ManualFlowControlServer { Runtime.getRuntime().addShutdownHook(new Thread() { @Override public void run() { - logger.info("Shutting down"); - server.shutdown(); + // Use stderr here since the logger may have been reset by its JVM shutdown hook. + System.err.println("Shutting down"); + try { + server.shutdown().awaitTermination(30, TimeUnit.SECONDS); + } catch (InterruptedException e) { + e.printStackTrace(System.err); + } } }); server.awaitTermination(); diff --git a/examples/src/main/java/io/grpc/examples/routeguide/RouteGuideServer.java b/examples/src/main/java/io/grpc/examples/routeguide/RouteGuideServer.java index 051e2551b2..c91544ae45 100644 --- a/examples/src/main/java/io/grpc/examples/routeguide/RouteGuideServer.java +++ b/examples/src/main/java/io/grpc/examples/routeguide/RouteGuideServer.java @@ -36,6 +36,7 @@ import java.util.Collections; import java.util.List; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.TimeUnit; import java.util.logging.Level; import java.util.logging.Logger; @@ -73,16 +74,20 @@ public class RouteGuideServer { public void run() { // Use stderr here since the logger may have been reset by its JVM shutdown hook. System.err.println("*** shutting down gRPC server since JVM is shutting down"); - RouteGuideServer.this.stop(); + try { + RouteGuideServer.this.stop(); + } catch (InterruptedException e) { + e.printStackTrace(System.err); + } System.err.println("*** server shut down"); } }); } /** Stop serving requests and shutdown resources. */ - public void stop() { + public void stop() throws InterruptedException { if (server != null) { - server.shutdown(); + server.shutdown().awaitTermination(30, TimeUnit.SECONDS); } } diff --git a/examples/src/test/java/io/grpc/examples/routeguide/RouteGuideServerTest.java b/examples/src/test/java/io/grpc/examples/routeguide/RouteGuideServerTest.java index 75b9f63780..5cd60b7376 100644 --- a/examples/src/test/java/io/grpc/examples/routeguide/RouteGuideServerTest.java +++ b/examples/src/test/java/io/grpc/examples/routeguide/RouteGuideServerTest.java @@ -86,7 +86,11 @@ public class RouteGuideServerTest { @After public void tearDown() { - server.stop(); + try { + server.stop(); + } catch (InterruptedException e) { + e.printStackTrace(); + } } @Test