13
13
//===----------------------------------------------------------------------===//
14
14
15
15
import Foundation
16
+ import Logging
16
17
import NIO
17
18
import NIOConcurrencyHelpers
18
19
import NIOFoundationCompat
@@ -494,17 +495,19 @@ extension HTTPClient {
494
495
var connection : Connection ?
495
496
var cancelled : Bool
496
497
let lock : Lock
498
+ let logger : Logger // We are okay to store the logger here because a Task is for only ond request.
497
499
498
- init ( eventLoop: EventLoop ) {
500
+ init ( eventLoop: EventLoop , logger : Logger ) {
499
501
self . eventLoop = eventLoop
500
502
self . promise = eventLoop. makePromise ( )
501
503
self . completion = self . promise. futureResult. map { _ in }
502
504
self . cancelled = false
503
505
self . lock = Lock ( )
506
+ self . logger = logger
504
507
}
505
508
506
- static func failedTask( eventLoop: EventLoop , error: Error ) -> Task < Response > {
507
- let task = self . init ( eventLoop: eventLoop)
509
+ static func failedTask( eventLoop: EventLoop , error: Error , logger : Logger ) -> Task < Response > {
510
+ let task = self . init ( eventLoop: eventLoop, logger : logger )
508
511
task. promise. fail ( error)
509
512
return task
510
513
}
@@ -546,13 +549,18 @@ extension HTTPClient {
546
549
}
547
550
}
548
551
549
- func succeed< Delegate: HTTPClientResponseDelegate > ( promise: EventLoopPromise < Response > ? , with value: Response , delegateType: Delegate . Type , closing: Bool ) {
550
- self . releaseAssociatedConnection ( delegateType: delegateType, closing: closing) . whenSuccess {
552
+ func succeed< Delegate: HTTPClientResponseDelegate > ( promise: EventLoopPromise < Response > ? ,
553
+ with value: Response ,
554
+ delegateType: Delegate . Type ,
555
+ closing: Bool ) {
556
+ self . releaseAssociatedConnection ( delegateType: delegateType,
557
+ closing: closing) . whenSuccess {
551
558
promise? . succeed ( value)
552
559
}
553
560
}
554
561
555
- func fail< Delegate: HTTPClientResponseDelegate > ( with error: Error , delegateType: Delegate . Type ) {
562
+ func fail< Delegate: HTTPClientResponseDelegate > ( with error: Error ,
563
+ delegateType: Delegate . Type ) {
556
564
if let connection = self . connection {
557
565
self . releaseAssociatedConnection ( delegateType: delegateType, closing: true )
558
566
. whenSuccess {
@@ -562,13 +570,14 @@ extension HTTPClient {
562
570
}
563
571
}
564
572
565
- func releaseAssociatedConnection< Delegate: HTTPClientResponseDelegate > ( delegateType: Delegate . Type , closing: Bool ) -> EventLoopFuture < Void > {
573
+ func releaseAssociatedConnection< Delegate: HTTPClientResponseDelegate > ( delegateType: Delegate . Type ,
574
+ closing: Bool ) -> EventLoopFuture < Void > {
566
575
if let connection = self . connection {
567
576
// remove read timeout handler
568
577
return connection. removeHandler ( IdleStateHandler . self) . flatMap {
569
578
connection. removeHandler ( TaskHandler< Delegate> . self )
570
579
} . map {
571
- connection. release ( closing: closing)
580
+ connection. release ( closing: closing, logger : self . logger )
572
581
} . flatMapError { error in
573
582
fatalError ( " Couldn't remove taskHandler: \( error) " )
574
583
}
@@ -600,6 +609,7 @@ internal class TaskHandler<Delegate: HTTPClientResponseDelegate>: RemovableChann
600
609
let delegate : Delegate
601
610
let redirectHandler : RedirectHandler < Delegate . Response > ?
602
611
let ignoreUncleanSSLShutdown : Bool
612
+ let logger : Logger // We are okay to store the logger here because a TaskHandler is just for one request.
603
613
604
614
var state : State = . idle
605
615
var pendingRead = false
@@ -617,12 +627,14 @@ internal class TaskHandler<Delegate: HTTPClientResponseDelegate>: RemovableChann
617
627
kind: HTTPClient . Request . Kind ,
618
628
delegate: Delegate ,
619
629
redirectHandler: RedirectHandler < Delegate . Response > ? ,
620
- ignoreUncleanSSLShutdown: Bool ) {
630
+ ignoreUncleanSSLShutdown: Bool ,
631
+ logger: Logger ) {
621
632
self . task = task
622
633
self . delegate = delegate
623
634
self . redirectHandler = redirectHandler
624
635
self . ignoreUncleanSSLShutdown = ignoreUncleanSSLShutdown
625
636
self . kind = kind
637
+ self . logger = logger
626
638
}
627
639
}
628
640
@@ -678,7 +690,10 @@ extension TaskHandler {
678
690
do {
679
691
let result = try body ( self . task)
680
692
681
- self . task. succeed ( promise: promise, with: result, delegateType: Delegate . self, closing: self . closing)
693
+ self . task. succeed ( promise: promise,
694
+ with: result,
695
+ delegateType: Delegate . self,
696
+ closing: self . closing)
682
697
} catch {
683
698
self . task. fail ( with: error, delegateType: Delegate . self)
684
699
}
0 commit comments