1919import java .time .Duration ;
2020import java .util .concurrent .Executor ;
2121import java .util .concurrent .ThreadPoolExecutor ;
22- import java .util .concurrent .atomic .LongAdder ;
2322
2423import com .google .common .base .Ticker ;
2524
2928 */
3029abstract class GracefulShutdownSupport {
3130
32- static GracefulShutdownSupport create (Duration quietPeriod , Executor blockingTaskExecutor ) {
33- return create (quietPeriod , blockingTaskExecutor , Ticker .systemTicker ());
31+ private final ServerMetrics serverMetrics ;
32+
33+ /**
34+ * Creates a new instance.
35+ */
36+ public GracefulShutdownSupport (ServerMetrics serverMetrics ) {
37+ this .serverMetrics = serverMetrics ;
3438 }
3539
36- static GracefulShutdownSupport create (Duration quietPeriod , Executor blockingTaskExecutor , Ticker ticker ) {
37- return new DefaultGracefulShutdownSupport (quietPeriod , blockingTaskExecutor , ticker );
40+ static GracefulShutdownSupport create (Duration quietPeriod , Executor blockingTaskExecutor ,
41+ ServerMetrics serverMetrics ) {
42+ return create (quietPeriod , blockingTaskExecutor , Ticker .systemTicker (), serverMetrics );
3843 }
3944
40- static GracefulShutdownSupport createDisabled ( ) {
41- return new DisabledGracefulShutdownSupport ( );
45+ static GracefulShutdownSupport create ( Duration quietPeriod , Executor blockingTaskExecutor , Ticker ticker , ServerMetrics serverMetrics ) {
46+ return new DefaultGracefulShutdownSupport ( quietPeriod , blockingTaskExecutor , ticker , serverMetrics );
4247 }
4348
44- private final LongAdder pendingResponses = new LongAdder ();
49+ static GracefulShutdownSupport createDisabled (ServerMetrics serverMetrics ) {
50+ return new DisabledGracefulShutdownSupport (serverMetrics );
51+ }
4552
4653 /**
4754 * Increases the number of pending responses.
4855 */
4956 final void inc () {
50- pendingResponses . increment ();
57+ serverMetrics . increaseNonTransientRequests ();
5158 }
5259
5360 /**
5461 * Decreases the number of pending responses.
5562 */
5663 void dec () {
57- pendingResponses . decrement ();
64+ serverMetrics . decreaseNonTransientRequests ();
5865 }
5966
6067 /**
6168 * Returns the number of pending responses.
6269 */
63- final long pendingResponses () {
64- return pendingResponses . sum ();
70+ final long activeNonTransientResponses () {
71+ return serverMetrics . activeNonTransientRequests ();
6572 }
6673
6774 /**
@@ -78,6 +85,15 @@ private static final class DisabledGracefulShutdownSupport extends GracefulShutd
7885
7986 private volatile boolean shuttingDown ;
8087
88+ /**
89+ * Creates a new instance.
90+ *
91+ * @param serverMetrics
92+ */
93+ public DisabledGracefulShutdownSupport (ServerMetrics serverMetrics ) {
94+ super (serverMetrics );
95+ }
96+
8197 @ Override
8298 boolean isShuttingDown () {
8399 return shuttingDown ;
@@ -97,12 +113,14 @@ private static final class DefaultGracefulShutdownSupport extends GracefulShutdo
97113 private final Executor blockingTaskExecutor ;
98114
99115 /**
100- * Declared as non-volatile because using {@link #pendingResponses } as a memory barrier.
116+ * Declared as non-volatile because using {@link #activeNonTransientResponses } as a memory barrier.
101117 */
102118 private long lastResTimeNanos ;
103119 private volatile long shutdownStartTimeNanos ;
104120
105- DefaultGracefulShutdownSupport (Duration quietPeriod , Executor blockingTaskExecutor , Ticker ticker ) {
121+ DefaultGracefulShutdownSupport (Duration quietPeriod , Executor blockingTaskExecutor , Ticker ticker ,
122+ ServerMetrics serverMetrics ) {
123+ super (serverMetrics );
106124 quietPeriodNanos = quietPeriod .toNanos ();
107125 this .blockingTaskExecutor = blockingTaskExecutor ;
108126 this .ticker = ticker ;
@@ -125,7 +143,7 @@ boolean completedQuietPeriod() {
125143 shutdownStartTimeNanos = readTicker ();
126144 }
127145
128- if (pendingResponses () != 0 || !completedBlockingTasks ()) {
146+ if (activeNonTransientResponses () != 0 || !completedBlockingTasks ()) {
129147 return false ;
130148 }
131149
0 commit comments