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+ 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 ,
46+ ServerMetrics serverMetrics ) {
47+ return new DefaultGracefulShutdownSupport (quietPeriod , blockingTaskExecutor , ticker , serverMetrics );
4248 }
4349
44- private final LongAdder pendingResponses = new LongAdder ();
50+ static GracefulShutdownSupport createDisabled (ServerMetrics serverMetrics ) {
51+ return new DisabledGracefulShutdownSupport (serverMetrics );
52+ }
4553
4654 /**
4755 * Increases the number of pending responses.
4856 */
4957 final void inc () {
50- pendingResponses . increment ();
58+ serverMetrics . increaseNonTransientRequests ();
5159 }
5260
5361 /**
5462 * Decreases the number of pending responses.
5563 */
5664 void dec () {
57- pendingResponses . decrement ();
65+ serverMetrics . decreaseNonTransientRequests ();
5866 }
5967
6068 /**
6169 * Returns the number of pending responses.
6270 */
63- final long pendingResponses () {
64- return pendingResponses . sum ();
71+ final long activeNonTransientResponses () {
72+ return serverMetrics . activeNonTransientRequests ();
6573 }
6674
6775 /**
@@ -78,6 +86,14 @@ private static final class DisabledGracefulShutdownSupport extends GracefulShutd
7886
7987 private volatile boolean shuttingDown ;
8088
89+ /**
90+ * Creates a new instance.
91+ *
92+ */
93+ 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