12
12
//
13
13
//===----------------------------------------------------------------------===//
14
14
15
+ import Baggage
15
16
import Foundation
16
17
import Logging
17
18
import NIO
@@ -76,7 +77,7 @@ final class ConnectionPool {
76
77
taskEventLoop: EventLoop ,
77
78
deadline: NIODeadline ? ,
78
79
setupComplete: EventLoopFuture < Void > ,
79
- logger : Logger ) -> EventLoopFuture < Connection > {
80
+ context : LoggingContext ) -> EventLoopFuture < Connection > {
80
81
let key = Key ( request)
81
82
82
83
let provider : HTTP1ConnectionProvider = self . lock. withLock {
@@ -95,7 +96,7 @@ final class ConnectionPool {
95
96
}
96
97
}
97
98
98
- return provider. getConnection ( preference: preference, setupComplete: setupComplete, logger : logger )
99
+ return provider. getConnection ( preference: preference, setupComplete: setupComplete, context : context )
99
100
}
100
101
101
102
func delete( _ provider: HTTP1ConnectionProvider ) {
@@ -240,66 +241,65 @@ class HTTP1ConnectionProvider {
240
241
self . state. assertInvariants ( )
241
242
}
242
243
243
- func execute( _ action: Action < Connection > , logger : Logger ) {
244
+ func execute( _ action: Action < Connection > , context : LoggingContext ) {
244
245
switch action {
245
246
case . lease( let connection, let waiter) :
246
247
// if connection is became inactive, we create a new one.
247
248
connection. cancelIdleTimeout ( ) . whenComplete { _ in
248
249
if connection. isActiveEstimation {
249
- logger. trace ( " leasing existing connection " ,
250
+ context . logger. trace ( " leasing existing connection " ,
250
251
metadata: [ " ahc-connection " : " \( connection) " ] )
251
252
waiter. promise. succeed ( connection)
252
253
} else {
253
- logger. trace ( " opening fresh connection (found matching but inactive connection) " ,
254
+ context . logger. trace ( " opening fresh connection (found matching but inactive connection) " ,
254
255
metadata: [ " ahc-dead-connection " : " \( connection) " ] )
255
- self . makeChannel ( preference: waiter. preference,
256
- logger: logger) . whenComplete { result in
257
- self . connect ( result, waiter: waiter, logger: logger)
256
+ self . makeChannel ( preference: waiter. preference, context: context) . whenComplete { result in
257
+ self . connect ( result, waiter: waiter, context: context)
258
258
}
259
259
}
260
260
}
261
261
case . create( let waiter) :
262
- logger. trace ( " opening fresh connection (no connections to reuse available) " )
263
- self . makeChannel ( preference: waiter. preference, logger : logger ) . whenComplete { result in
264
- self . connect ( result, waiter: waiter, logger : logger )
262
+ context . logger. trace ( " opening fresh connection (no connections to reuse available) " )
263
+ self . makeChannel ( preference: waiter. preference, context : context ) . whenComplete { result in
264
+ self . connect ( result, waiter: waiter, context : context )
265
265
}
266
266
case . replace( let connection, let waiter) :
267
267
connection. cancelIdleTimeout ( ) . flatMap {
268
268
connection. close ( )
269
269
} . whenComplete { _ in
270
- logger. trace ( " opening fresh connection (replacing exising connection) " ,
270
+ context . logger. trace ( " opening fresh connection (replacing exising connection) " ,
271
271
metadata: [ " ahc-old-connection " : " \( connection) " ,
272
272
" ahc-waiter " : " \( waiter) " ] )
273
- self . makeChannel ( preference: waiter. preference, logger : logger ) . whenComplete { result in
274
- self . connect ( result, waiter: waiter, logger : logger )
273
+ self . makeChannel ( preference: waiter. preference, context : context ) . whenComplete { result in
274
+ self . connect ( result, waiter: waiter, context : context )
275
275
}
276
276
}
277
277
case . park( let connection) :
278
- logger. trace ( " parking connection " ,
278
+ context . logger. trace ( " parking connection " ,
279
279
metadata: [ " ahc-connection " : " \( connection) " ] )
280
280
connection. setIdleTimeout ( timeout: self . configuration. connectionPool. idleTimeout,
281
- logger : self . backgroundActivityLogger)
281
+ context : DefaultLoggingContext ( context : context ) . withLogger ( backgroundActivityLogger) )
282
282
case . closeProvider:
283
- logger. debug ( " closing provider " ,
283
+ context . logger. debug ( " closing provider " ,
284
284
metadata: [ " ahc-provider " : " \( self ) " ] )
285
285
self . closeAndDelete ( )
286
286
case . none:
287
287
break
288
288
case . parkAnd( let connection, let action) :
289
- logger. trace ( " parking connection & doing further action " ,
289
+ context . logger. trace ( " parking connection & doing further action " ,
290
290
metadata: [ " ahc-connection " : " \( connection) " ,
291
291
" ahc-action " : " \( action) " ] )
292
292
connection. setIdleTimeout ( timeout: self . configuration. connectionPool. idleTimeout,
293
- logger : self . backgroundActivityLogger)
294
- self . execute ( action, logger : logger )
293
+ context : DefaultLoggingContext ( context : context ) . withLogger ( backgroundActivityLogger) )
294
+ self . execute ( action, context : context )
295
295
case . closeAnd( let connection, let action) :
296
- logger. trace ( " closing connection & doing further action " ,
296
+ context . logger. trace ( " closing connection & doing further action " ,
297
297
metadata: [ " ahc-connection " : " \( connection) " ,
298
298
" ahc-action " : " \( action) " ] )
299
299
connection. channel. close ( promise: nil )
300
- self . execute ( action, logger : logger )
300
+ self . execute ( action, context : context )
301
301
case . fail( let waiter, let error) :
302
- logger. debug ( " failing connection for waiter " ,
302
+ context . logger. debug ( " failing connection for waiter " ,
303
303
metadata: [ " ahc-waiter " : " \( waiter) " ,
304
304
" ahc-error " : " \( error) " ] )
305
305
waiter. promise. fail ( error)
@@ -315,23 +315,23 @@ class HTTP1ConnectionProvider {
315
315
316
316
func getConnection( preference: HTTPClient . EventLoopPreference ,
317
317
setupComplete: EventLoopFuture < Void > ,
318
- logger : Logger ) -> EventLoopFuture < Connection > {
318
+ context : LoggingContext ) -> EventLoopFuture < Connection > {
319
319
let waiter = Waiter < Connection > ( promise: self . eventLoop. makePromise ( ) , setupComplete: setupComplete, preference: preference)
320
320
321
321
let action : Action = self . lock. withLock {
322
322
self . state. acquire ( waiter: waiter)
323
323
}
324
324
325
- self . execute ( action, logger : logger )
325
+ self . execute ( action, context : context )
326
326
327
327
return waiter. promise. futureResult
328
328
}
329
329
330
- func connect( _ result: Result < Channel , Error > , waiter: Waiter < Connection > , logger : Logger ) {
330
+ func connect( _ result: Result < Channel , Error > , waiter: Waiter < Connection > , context : LoggingContext ) {
331
331
let action : Action < Connection >
332
332
switch result {
333
333
case . success( let channel) :
334
- logger. trace ( " successfully created connection " ,
334
+ context . logger. trace ( " successfully created connection " ,
335
335
metadata: [ " ahc-connection " : " \( channel) " ] )
336
336
let connection = Connection ( channel: channel, provider: self )
337
337
action = self . lock. withLock {
@@ -341,15 +341,15 @@ class HTTP1ConnectionProvider {
341
341
switch action {
342
342
case . closeAnd:
343
343
// This happens when client was shut down during connect
344
- logger. trace ( " connection cancelled due to client shutdown " ,
344
+ context . logger. trace ( " connection cancelled due to client shutdown " ,
345
345
metadata: [ " ahc-connection " : " \( channel) " ] )
346
346
connection. channel. close ( promise: nil )
347
347
waiter. promise. fail ( HTTPClientError . cancelled)
348
348
default :
349
349
waiter. promise. succeed ( connection)
350
350
}
351
351
case . failure( let error) :
352
- logger. debug ( " connection attempt failed " ,
352
+ context . logger. debug ( " connection attempt failed " ,
353
353
metadata: [ " ahc-error " : " \( error) " ] )
354
354
action = self . lock. withLock {
355
355
self . state. connectFailed ( )
@@ -358,12 +358,12 @@ class HTTP1ConnectionProvider {
358
358
}
359
359
360
360
waiter. setupComplete. whenComplete { _ in
361
- self . execute ( action, logger : logger )
361
+ self . execute ( action, context : context )
362
362
}
363
363
}
364
364
365
- func release( connection: Connection , closing: Bool , logger : Logger ) {
366
- logger. debug ( " releasing connection, request complete " ,
365
+ func release( connection: Connection , closing: Bool , context : LoggingContext ) {
366
+ context . logger. debug ( " releasing connection, request complete " ,
367
367
metadata: [ " ahc-closing " : " \( closing) " ] )
368
368
let action : Action = self . lock. withLock {
369
369
self . state. release ( connection: connection, closing: closing)
@@ -383,31 +383,31 @@ class HTTP1ConnectionProvider {
383
383
case . park, . closeProvider:
384
384
// Since both `.park` and `.deleteProvider` are terminal in terms of execution,
385
385
// we can execute them immediately
386
- self . execute ( action, logger : logger )
386
+ self . execute ( action, context : context )
387
387
case . closeAnd, . create, . fail, . lease, . parkAnd, . replace:
388
388
// This is needed to start a new stack, otherwise, since this is called on a previous
389
389
// future completion handler chain, it will be growing indefinitely until the connection is closed.
390
390
// We might revisit this when https://github.com/apple/swift-nio/issues/970 is resolved.
391
391
connection. eventLoop. execute {
392
- self . execute ( action, logger : logger )
392
+ self . execute ( action, context : context )
393
393
}
394
394
}
395
395
}
396
396
397
- func remoteClosed( connection: Connection , logger : Logger ) {
397
+ func remoteClosed( connection: Connection , context : LoggingContext ) {
398
398
let action : Action = self . lock. withLock {
399
399
self . state. remoteClosed ( connection: connection)
400
400
}
401
401
402
- self . execute ( action, logger : logger )
402
+ self . execute ( action, context : context )
403
403
}
404
404
405
- func timeout( connection: Connection , logger : Logger ) {
405
+ func timeout( connection: Connection , context : LoggingContext ) {
406
406
let action : Action = self . lock. withLock {
407
407
self . state. timeout ( connection: connection)
408
408
}
409
409
410
- self . execute ( action, logger : logger )
410
+ self . execute ( action, context : context )
411
411
}
412
412
413
413
private func closeAndDelete( ) {
@@ -438,14 +438,13 @@ class HTTP1ConnectionProvider {
438
438
return self . closePromise. futureResult. map { true }
439
439
}
440
440
441
- private func makeChannel( preference: HTTPClient . EventLoopPreference ,
442
- logger: Logger ) -> EventLoopFuture < Channel > {
441
+ private func makeChannel( preference: HTTPClient . EventLoopPreference , context: LoggingContext ) -> EventLoopFuture < Channel > {
443
442
return NIOClientTCPBootstrap . makeHTTP1Channel ( destination: self . key,
444
443
eventLoop: self . eventLoop,
445
444
configuration: self . configuration,
446
445
sslContextCache: self . pool. sslContextCache,
447
446
preference: preference,
448
- logger : logger )
447
+ context : context )
449
448
}
450
449
451
450
/// A `Waiter` represents a request that waits for a connection when none is
0 commit comments