4646import io .grpc .StatusOr ;
4747import io .grpc .SynchronizationContext ;
4848import io .grpc .SynchronizationContext .ScheduledHandle ;
49- import io .grpc .internal .GrpcUtil ;
49+ import io .grpc .internal .FixedObjectPool ;
5050import io .grpc .internal .ObjectPool ;
51- import io .grpc .internal .SharedResourceHolder ;
5251import io .grpc .xds .EnvoyServerProtoData .FilterChain ;
5352import io .grpc .xds .Filter .FilterConfig ;
5453import io .grpc .xds .Filter .FilterContext ;
@@ -103,7 +102,7 @@ public void uncaughtException(Thread t, Throwable e) {
103102 static final long RETRY_DELAY_NANOS = TimeUnit .MINUTES .toNanos (1 );
104103 private final String listenerAddress ;
105104 private final ServerBuilder <?> delegateBuilder ;
106- private boolean sharedTimeService ;
105+ private final ObjectPool < ScheduledExecutorService > timeServicePool ;
107106 private final ScheduledExecutorService timeService ;
108107 private final FilterRegistry filterRegistry ;
109108 private final ThreadSafeRandom random = ThreadSafeRandomImpl .instance ;
@@ -138,98 +137,6 @@ public void uncaughtException(Thread t, Throwable e) {
138137
139138 private final ChannelConfigurator channelConfigurator ;
140139
141- XdsServerWrapper (
142- String listenerAddress ,
143- ServerBuilder <?> delegateBuilder ,
144- XdsServingStatusListener listener ,
145- FilterChainSelectorManager filterChainSelectorManager ,
146- XdsClientPoolFactory xdsClientPoolFactory ,
147- @ Nullable Map <String , ?> bootstrapOverride ,
148- @ Nullable Function <String , String > ldsResourceNameResolver ,
149- FilterRegistry filterRegistry ,
150- ChannelConfigurator channelConfigurator ) {
151- this (
152- listenerAddress ,
153- delegateBuilder ,
154- listener ,
155- filterChainSelectorManager ,
156- xdsClientPoolFactory ,
157- bootstrapOverride ,
158- ldsResourceNameResolver ,
159- filterRegistry ,
160- SharedResourceHolder .get (GrpcUtil .TIMER_SERVICE ),
161- channelConfigurator );
162- sharedTimeService = true ;
163- }
164-
165- XdsServerWrapper (
166- String listenerAddress ,
167- ServerBuilder <?> delegateBuilder ,
168- XdsServingStatusListener listener ,
169- FilterChainSelectorManager filterChainSelectorManager ,
170- XdsClientPoolFactory xdsClientPoolFactory ,
171- @ Nullable Map <String , ?> bootstrapOverride ,
172- FilterRegistry filterRegistry ,
173- ChannelConfigurator channelConfigurator ) {
174- this (
175- listenerAddress ,
176- delegateBuilder ,
177- listener ,
178- filterChainSelectorManager ,
179- xdsClientPoolFactory ,
180- bootstrapOverride ,
181- null ,
182- filterRegistry ,
183- SharedResourceHolder .get (GrpcUtil .TIMER_SERVICE ),
184- channelConfigurator );
185- sharedTimeService = true ;
186- }
187-
188- XdsServerWrapper (
189- String listenerAddress ,
190- ServerBuilder <?> delegateBuilder ,
191- XdsServingStatusListener listener ,
192- FilterChainSelectorManager filterChainSelectorManager ,
193- XdsClientPoolFactory xdsClientPoolFactory ,
194- @ Nullable Map <String , ?> bootstrapOverride ,
195- FilterRegistry filterRegistry ) {
196- this (
197- listenerAddress ,
198- delegateBuilder ,
199- listener ,
200- filterChainSelectorManager ,
201- xdsClientPoolFactory ,
202- bootstrapOverride ,
203- null ,
204- filterRegistry ,
205- SharedResourceHolder .get (GrpcUtil .TIMER_SERVICE ),
206- builder -> { });
207- sharedTimeService = true ;
208- }
209-
210- XdsServerWrapper (
211- String listenerAddress ,
212- ServerBuilder <?> delegateBuilder ,
213- XdsServingStatusListener listener ,
214- FilterChainSelectorManager filterChainSelectorManager ,
215- XdsClientPoolFactory xdsClientPoolFactory ,
216- @ Nullable Map <String , ?> bootstrapOverride ,
217- @ Nullable Function <String , String > ldsResourceNameResolver ,
218- FilterRegistry filterRegistry ) {
219- this (
220- listenerAddress ,
221- delegateBuilder ,
222- listener ,
223- filterChainSelectorManager ,
224- xdsClientPoolFactory ,
225- bootstrapOverride ,
226- ldsResourceNameResolver ,
227- filterRegistry ,
228- SharedResourceHolder .get (GrpcUtil .TIMER_SERVICE ),
229- builder -> { });
230- sharedTimeService = true ;
231- }
232-
233140 @ VisibleForTesting
234141 XdsServerWrapper (
235142 String listenerAddress ,
@@ -249,58 +156,10 @@ public void uncaughtException(Thread t, Throwable e) {
249156 bootstrapOverride ,
250157 null ,
251158 filterRegistry ,
252- timeService ,
253- builder -> { });
254- }
255-
256- @ VisibleForTesting
257- XdsServerWrapper (
258- String listenerAddress ,
259- ServerBuilder <?> delegateBuilder ,
260- XdsServingStatusListener listener ,
261- FilterChainSelectorManager filterChainSelectorManager ,
262- XdsClientPoolFactory xdsClientPoolFactory ,
263- @ Nullable Map <String , ?> bootstrapOverride ,
264- @ Nullable Function <String , String > ldsResourceNameResolver ,
265- FilterRegistry filterRegistry ,
266- ScheduledExecutorService timeService ) {
267- this (
268- listenerAddress ,
269- delegateBuilder ,
270- listener ,
271- filterChainSelectorManager ,
272- xdsClientPoolFactory ,
273- bootstrapOverride ,
274- ldsResourceNameResolver ,
275- filterRegistry ,
276- timeService ,
159+ new FixedObjectPool <>(timeService ),
277160 builder -> { });
278161 }
279162
280- @ VisibleForTesting
281- XdsServerWrapper (
282- String listenerAddress ,
283- ServerBuilder <?> delegateBuilder ,
284- XdsServingStatusListener listener ,
285- FilterChainSelectorManager filterChainSelectorManager ,
286- XdsClientPoolFactory xdsClientPoolFactory ,
287- @ Nullable Map <String , ?> bootstrapOverride ,
288- FilterRegistry filterRegistry ,
289- ScheduledExecutorService timeService ,
290- ChannelConfigurator channelConfigurator ) {
291- this (
292- listenerAddress ,
293- delegateBuilder ,
294- listener ,
295- filterChainSelectorManager ,
296- xdsClientPoolFactory ,
297- bootstrapOverride ,
298- null ,
299- filterRegistry ,
300- timeService ,
301- channelConfigurator );
302- }
303-
304163 @ VisibleForTesting
305164 XdsServerWrapper (
306165 String listenerAddress ,
@@ -311,7 +170,7 @@ public void uncaughtException(Thread t, Throwable e) {
311170 @ Nullable Map <String , ?> bootstrapOverride ,
312171 @ Nullable Function <String , String > ldsResourceNameResolver ,
313172 FilterRegistry filterRegistry ,
314- ScheduledExecutorService timeService ,
173+ ObjectPool < ScheduledExecutorService > timeServicePool ,
315174 ChannelConfigurator channelConfigurator ) {
316175 this .listenerAddress = checkNotNull (listenerAddress , "listenerAddress" );
317176 this .delegateBuilder = checkNotNull (delegateBuilder , "delegateBuilder" );
@@ -322,7 +181,8 @@ public void uncaughtException(Thread t, Throwable e) {
322181 this .xdsClientPoolFactory = checkNotNull (xdsClientPoolFactory , "xdsClientPoolFactory" );
323182 this .bootstrapOverride = bootstrapOverride ;
324183 this .ldsResourceNameResolver = ldsResourceNameResolver ;
325- this .timeService = checkNotNull (timeService , "timeService" );
184+ this .timeServicePool = checkNotNull (timeServicePool , "timeServicePool" );
185+ this .timeService = checkNotNull (timeServicePool .getObject (), "timeService" );
326186 this .filterRegistry = checkNotNull (filterRegistry ,"filterRegistry" );
327187 this .delegate = delegateBuilder .build ();
328188 this .channelConfigurator = checkNotNull (channelConfigurator , "channelConfigurator" );
@@ -439,9 +299,7 @@ private void internalShutdown() {
439299 if (restartTimer != null ) {
440300 restartTimer .cancel ();
441301 }
442- if (sharedTimeService ) {
443- SharedResourceHolder .release (GrpcUtil .TIMER_SERVICE , timeService );
444- }
302+ timeServicePool .returnObject (timeService );
445303 isServing = false ;
446304 internalTerminationLatch .countDown ();
447305 }
0 commit comments