Skip to content

Commit 9e02cf0

Browse files
dounansanjaypujare
authored andcommitted
Gracefully shutdown example servers (#6512)
1 parent 1f64ac9 commit 9e02cf0

File tree

10 files changed

+74
-25
lines changed

10 files changed

+74
-25
lines changed

api/src/main/java/io/grpc/Server.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,10 @@ public List<ServerServiceDefinition> getMutableServices() {
107107
* After this call returns, this server has released the listening socket(s) and may be reused by
108108
* another server.
109109
*
110+
* <p>Note that this method will not wait for preexisting calls to finish before returning.
111+
* {@link #awaitTermination()} or {@link #awaitTermination(long, TimeUnit)} needs to be called to
112+
* wait for existing calls to finish.
113+
*
110114
* @return {@code this} object
111115
* @since 1.0.0
112116
*/

examples/src/main/java/io/grpc/examples/advanced/HelloJsonServer.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import io.grpc.stub.ServerCalls.UnaryMethod;
2929
import io.grpc.stub.StreamObserver;
3030
import java.io.IOException;
31+
import java.util.concurrent.TimeUnit;
3132
import java.util.logging.Logger;
3233

3334
/**
@@ -59,15 +60,19 @@ private void start() throws IOException {
5960
public void run() {
6061
// Use stderr here since the logger may have been reset by its JVM shutdown hook.
6162
System.err.println("*** shutting down gRPC server since JVM is shutting down");
62-
HelloJsonServer.this.stop();
63+
try {
64+
HelloJsonServer.this.stop();
65+
} catch (InterruptedException e) {
66+
e.printStackTrace(System.err);
67+
}
6368
System.err.println("*** server shut down");
6469
}
6570
});
6671
}
6772

68-
private void stop() {
73+
private void stop() throws InterruptedException {
6974
if (server != null) {
70-
server.shutdown();
75+
server.shutdown().awaitTermination(30, TimeUnit.SECONDS);
7176
}
7277
}
7378

examples/src/main/java/io/grpc/examples/experimental/CompressingHelloWorldServerAllMethods.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package io.grpc.examples.experimental;
1818

1919
import java.io.IOException;
20+
import java.util.concurrent.TimeUnit;
2021
import java.util.logging.Logger;
2122

2223
import io.grpc.Metadata;
@@ -33,7 +34,7 @@
3334

3435
/**
3536
* Server that manages startup/shutdown of a {@code Greeter} server
36-
* with an interceptor to enable compression for all responses.
37+
* with an interceptor to enable compression for all responses.
3738
*/
3839
public class CompressingHelloWorldServerAllMethods {
3940
private static final Logger logger = Logger.getLogger(CompressingHelloWorldServerAllMethods.class.getName());
@@ -62,15 +63,19 @@ public <ReqT, RespT> Listener<ReqT> interceptCall(ServerCall<ReqT, RespT> call,
6263
public void run() {
6364
// Use stderr here since the logger may have been reset by its JVM shutdown hook.
6465
System.err.println("*** shutting down gRPC server since JVM is shutting down");
65-
CompressingHelloWorldServerAllMethods.this.stop();
66+
try {
67+
CompressingHelloWorldServerAllMethods.this.stop();
68+
} catch (InterruptedException e) {
69+
e.printStackTrace(System.err);
70+
}
6671
System.err.println("*** server shut down");
6772
}
6873
});
6974
}
7075

71-
private void stop() {
76+
private void stop() throws InterruptedException {
7277
if (server != null) {
73-
server.shutdown();
78+
server.shutdown().awaitTermination(30, TimeUnit.SECONDS);
7479
}
7580
}
7681

examples/src/main/java/io/grpc/examples/experimental/CompressingHelloWorldServerPerMethod.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package io.grpc.examples.experimental;
1818

1919
import java.io.IOException;
20+
import java.util.concurrent.TimeUnit;
2021
import java.util.logging.Logger;
2122

2223
import io.grpc.Server;
@@ -49,15 +50,19 @@ private void start() throws IOException {
4950
public void run() {
5051
// Use stderr here since the logger may have been reset by its JVM shutdown hook.
5152
System.err.println("*** shutting down gRPC server since JVM is shutting down");
52-
CompressingHelloWorldServerPerMethod.this.stop();
53+
try {
54+
CompressingHelloWorldServerPerMethod.this.stop();
55+
} catch (InterruptedException e) {
56+
e.printStackTrace(System.err);
57+
}
5358
System.err.println("*** server shut down");
5459
}
5560
});
5661
}
5762

58-
private void stop() {
63+
private void stop() throws InterruptedException {
5964
if (server != null) {
60-
server.shutdown();
65+
server.shutdown().awaitTermination(30, TimeUnit.SECONDS);
6166
}
6267
}
6368

examples/src/main/java/io/grpc/examples/header/CustomHeaderServer.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import io.grpc.examples.helloworld.HelloRequest;
2525
import io.grpc.stub.StreamObserver;
2626
import java.io.IOException;
27+
import java.util.concurrent.TimeUnit;
2728
import java.util.logging.Logger;
2829

2930
/**
@@ -48,15 +49,19 @@ private void start() throws IOException {
4849
public void run() {
4950
// Use stderr here since the logger may have been reset by its JVM shutdown hook.
5051
System.err.println("*** shutting down gRPC server since JVM is shutting down");
51-
CustomHeaderServer.this.stop();
52+
try {
53+
CustomHeaderServer.this.stop();
54+
} catch (InterruptedException e) {
55+
e.printStackTrace(System.err);
56+
}
5257
System.err.println("*** server shut down");
5358
}
5459
});
5560
}
5661

57-
private void stop() {
62+
private void stop() throws InterruptedException {
5863
if (server != null) {
59-
server.shutdown();
64+
server.shutdown().awaitTermination(30, TimeUnit.SECONDS);
6065
}
6166
}
6267

examples/src/main/java/io/grpc/examples/hedging/HedgingHelloWorldServer.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import io.grpc.stub.StreamObserver;
3030
import java.io.IOException;
3131
import java.util.Random;
32+
import java.util.concurrent.TimeUnit;
3233
import java.util.logging.Logger;
3334

3435
/**
@@ -53,15 +54,19 @@ private void start() throws IOException {
5354
public void run() {
5455
// Use stderr here since the logger may have been reset by its JVM shutdown hook.
5556
System.err.println("*** shutting down gRPC server since JVM is shutting down");
56-
HedgingHelloWorldServer.this.stop();
57+
try {
58+
HedgingHelloWorldServer.this.stop();
59+
} catch (InterruptedException e) {
60+
e.printStackTrace(System.err);
61+
}
5762
System.err.println("*** server shut down");
5863
}
5964
});
6065
}
6166

62-
private void stop() {
67+
private void stop() throws InterruptedException {
6368
if (server != null) {
64-
server.shutdown();
69+
server.shutdown().awaitTermination(30, TimeUnit.SECONDS);
6570
}
6671
}
6772

examples/src/main/java/io/grpc/examples/helloworld/HelloWorldServer.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import io.grpc.ServerBuilder;
2121
import io.grpc.stub.StreamObserver;
2222
import java.io.IOException;
23+
import java.util.concurrent.TimeUnit;
2324
import java.util.logging.Logger;
2425

2526
/**
@@ -43,15 +44,19 @@ private void start() throws IOException {
4344
public void run() {
4445
// Use stderr here since the logger may have been reset by its JVM shutdown hook.
4546
System.err.println("*** shutting down gRPC server since JVM is shutting down");
46-
HelloWorldServer.this.stop();
47+
try {
48+
HelloWorldServer.this.stop();
49+
} catch (InterruptedException e) {
50+
e.printStackTrace(System.err);
51+
}
4752
System.err.println("*** server shut down");
4853
}
4954
});
5055
}
5156

52-
private void stop() {
57+
private void stop() throws InterruptedException {
5358
if (server != null) {
54-
server.shutdown();
59+
server.shutdown().awaitTermination(30, TimeUnit.SECONDS);
5560
}
5661
}
5762

examples/src/main/java/io/grpc/examples/manualflowcontrol/ManualFlowControlServer.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import io.grpc.stub.StreamObserver;
2424

2525
import java.io.IOException;
26+
import java.util.concurrent.TimeUnit;
2627
import java.util.concurrent.atomic.AtomicBoolean;
2728
import java.util.logging.Logger;
2829

@@ -135,8 +136,13 @@ public void onCompleted() {
135136
Runtime.getRuntime().addShutdownHook(new Thread() {
136137
@Override
137138
public void run() {
138-
logger.info("Shutting down");
139-
server.shutdown();
139+
// Use stderr here since the logger may have been reset by its JVM shutdown hook.
140+
System.err.println("Shutting down");
141+
try {
142+
server.shutdown().awaitTermination(30, TimeUnit.SECONDS);
143+
} catch (InterruptedException e) {
144+
e.printStackTrace(System.err);
145+
}
140146
}
141147
});
142148
server.awaitTermination();

examples/src/main/java/io/grpc/examples/routeguide/RouteGuideServer.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import java.util.List;
3737
import java.util.concurrent.ConcurrentHashMap;
3838
import java.util.concurrent.ConcurrentMap;
39+
import java.util.concurrent.TimeUnit;
3940
import java.util.logging.Level;
4041
import java.util.logging.Logger;
4142

@@ -73,16 +74,20 @@ public void start() throws IOException {
7374
public void run() {
7475
// Use stderr here since the logger may have been reset by its JVM shutdown hook.
7576
System.err.println("*** shutting down gRPC server since JVM is shutting down");
76-
RouteGuideServer.this.stop();
77+
try {
78+
RouteGuideServer.this.stop();
79+
} catch (InterruptedException e) {
80+
e.printStackTrace(System.err);
81+
}
7782
System.err.println("*** server shut down");
7883
}
7984
});
8085
}
8186

8287
/** Stop serving requests and shutdown resources. */
83-
public void stop() {
88+
public void stop() throws InterruptedException {
8489
if (server != null) {
85-
server.shutdown();
90+
server.shutdown().awaitTermination(30, TimeUnit.SECONDS);
8691
}
8792
}
8893

examples/src/test/java/io/grpc/examples/routeguide/RouteGuideServerTest.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,11 @@ public void setUp() throws Exception {
8686

8787
@After
8888
public void tearDown() {
89-
server.stop();
89+
try {
90+
server.stop();
91+
} catch (InterruptedException e) {
92+
e.printStackTrace();
93+
}
9094
}
9195

9296
@Test

0 commit comments

Comments
 (0)