Commit 2ca31f0
authored
Wait for writes to drain before closing (#183)
Motivation:
The server can drop pending writes during graceful shutdown. The
connection management handler waits for signals from SwiftNIO to
determine which streams are currently open, and importantly for graceful
shutdown, when all streams are closed. However these notifications
happen when the stream is closed in NIOs HTTP/2 state machine, not when
all data for that stream has been written. This is problematic if there
peer is waiting for a WINDOW_UPDATE or the bytes haven't yet been
flushed.
Modifications:
- When the stream count drops to zero, half-close the connection.
- When half-close complete (and thus all previously comitted data has
been written) full close the connection.
Result:
Fewer failed RPCs1 parent 72142e6 commit 2ca31f0
2 files changed
Lines changed: 99 additions & 16 deletions
File tree
- Sources/GRPCNIOTransportCore/Server/Connection
- Tests/GRPCNIOTransportCoreTests/Server/Connection
Lines changed: 22 additions & 16 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
537 | 537 | | |
538 | 538 | | |
539 | 539 | | |
540 | | - | |
| 540 | + | |
| 541 | + | |
| 542 | + | |
541 | 543 | | |
542 | | - | |
543 | | - | |
544 | | - | |
545 | | - | |
546 | | - | |
547 | | - | |
548 | | - | |
549 | | - | |
550 | | - | |
551 | | - | |
552 | | - | |
553 | | - | |
554 | | - | |
555 | | - | |
| 544 | + | |
| 545 | + | |
| 546 | + | |
| 547 | + | |
556 | 548 | | |
557 | 549 | | |
558 | 550 | | |
| |||
654 | 646 | | |
655 | 647 | | |
656 | 648 | | |
657 | | - | |
| 649 | + | |
658 | 650 | | |
659 | 651 | | |
660 | 652 | | |
| |||
666 | 658 | | |
667 | 659 | | |
668 | 660 | | |
| 661 | + | |
| 662 | + | |
| 663 | + | |
| 664 | + | |
| 665 | + | |
| 666 | + | |
| 667 | + | |
| 668 | + | |
| 669 | + | |
| 670 | + | |
| 671 | + | |
| 672 | + | |
| 673 | + | |
| 674 | + | |
669 | 675 | | |
670 | 676 | | |
671 | 677 | | |
| |||
Lines changed: 77 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
140 | 140 | | |
141 | 141 | | |
142 | 142 | | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
143 | 198 | | |
144 | 199 | | |
145 | 200 | | |
| |||
480 | 535 | | |
481 | 536 | | |
482 | 537 | | |
| 538 | + | |
| 539 | + | |
| 540 | + | |
| 541 | + | |
| 542 | + | |
| 543 | + | |
| 544 | + | |
| 545 | + | |
| 546 | + | |
| 547 | + | |
| 548 | + | |
| 549 | + | |
| 550 | + | |
| 551 | + | |
| 552 | + | |
| 553 | + | |
| 554 | + | |
| 555 | + | |
| 556 | + | |
| 557 | + | |
| 558 | + | |
| 559 | + | |
0 commit comments