Commit 4a6103d
authored
feat(bigtable): prime initial channel pool connections in parallel (#20010)
## Summary
- `NewBigtableChannelPool` previously primed each connection serially,
so a pool of N connections waited `N * (dial + Prime + retry-backoff)`
before returning. With Prime() on the order of tens of ms per
connection, that dominates client startup time and scales linearly with
pool size.
- This PR fans the prime calls out across an `errgroup` with
`SetLimit(min(N, 10))`. The cap is intentional: very large pools should
not spawn one dial+Prime goroutine per connection; small pools naturally
use `connPoolSize` workers.
- Failure semantics are preserved: the first prime error cancels the
rest via the derived context, and the existing cleanup loop closes any
populated entries before returning the error.
- The Direct Access "firstConn" path still seats the primed probe
connection at index 0 and skips a worker for that slot.
## Test plan
- [x] `go build ./...`
- [x] `go vet ./...`
- [x] `go test -race -timeout 240s ./bigtable/internal/transport/...`
- [x] New `TestNewBigtableChannelPoolParallelPriming` covers pool sizes
below, at, and above the 10-worker cap. Asserts peak concurrent
in-flight `PingAndWarm` matches expected worker count, and wall time
beats the sequential bound (`N * primeDelay`).
- [x] `fakeService` now tracks peak in-flight `PingAndWarm` so the test
can assert concurrency without timing-only signals.
- [x] `TestNewBigtableChannelPool/DialFailure` updated to use
`atomic.Int64` for its counter (the dial function is now called
concurrently).1 parent 21c4a44 commit 4a6103d
4 files changed
Lines changed: 128 additions & 35 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
23 | 23 | | |
24 | 24 | | |
25 | 25 | | |
| 26 | + | |
26 | 27 | | |
27 | 28 | | |
28 | 29 | | |
| |||
55 | 56 | | |
56 | 57 | | |
57 | 58 | | |
58 | | - | |
59 | 59 | | |
60 | 60 | | |
61 | 61 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
16 | 16 | | |
17 | 17 | | |
18 | 18 | | |
19 | | - | |
20 | 19 | | |
21 | 20 | | |
22 | 21 | | |
| |||
36 | 35 | | |
37 | 36 | | |
38 | 37 | | |
| 38 | + | |
39 | 39 | | |
40 | 40 | | |
41 | 41 | | |
| |||
61 | 61 | | |
62 | 62 | | |
63 | 63 | | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
64 | 69 | | |
65 | 70 | | |
66 | 71 | | |
| |||
502 | 507 | | |
503 | 508 | | |
504 | 509 | | |
505 | | - | |
506 | 510 | | |
507 | 511 | | |
508 | 512 | | |
509 | | - | |
510 | | - | |
511 | | - | |
512 | | - | |
513 | | - | |
514 | | - | |
515 | | - | |
516 | | - | |
517 | | - | |
518 | | - | |
519 | | - | |
520 | | - | |
521 | | - | |
522 | | - | |
523 | | - | |
524 | | - | |
525 | | - | |
526 | | - | |
527 | | - | |
528 | | - | |
529 | | - | |
530 | | - | |
531 | | - | |
532 | | - | |
533 | | - | |
| 513 | + | |
| 514 | + | |
| 515 | + | |
| 516 | + | |
534 | 517 | | |
535 | | - | |
536 | | - | |
537 | | - | |
| 518 | + | |
| 519 | + | |
| 520 | + | |
538 | 521 | | |
539 | 522 | | |
540 | 523 | | |
541 | 524 | | |
542 | 525 | | |
543 | | - | |
| 526 | + | |
544 | 527 | | |
545 | 528 | | |
546 | 529 | | |
| |||
569 | 552 | | |
570 | 553 | | |
571 | 554 | | |
| 555 | + | |
| 556 | + | |
| 557 | + | |
| 558 | + | |
| 559 | + | |
| 560 | + | |
| 561 | + | |
| 562 | + | |
| 563 | + | |
| 564 | + | |
| 565 | + | |
| 566 | + | |
| 567 | + | |
| 568 | + | |
| 569 | + | |
| 570 | + | |
| 571 | + | |
| 572 | + | |
| 573 | + | |
| 574 | + | |
| 575 | + | |
| 576 | + | |
| 577 | + | |
| 578 | + | |
| 579 | + | |
| 580 | + | |
| 581 | + | |
| 582 | + | |
| 583 | + | |
| 584 | + | |
| 585 | + | |
| 586 | + | |
| 587 | + | |
| 588 | + | |
| 589 | + | |
| 590 | + | |
| 591 | + | |
572 | 592 | | |
573 | 593 | | |
574 | 594 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
36 | 36 | | |
37 | 37 | | |
38 | 38 | | |
| 39 | + | |
| 40 | + | |
39 | 41 | | |
40 | 42 | | |
41 | 43 | | |
| |||
122 | 124 | | |
123 | 125 | | |
124 | 126 | | |
| 127 | + | |
| 128 | + | |
125 | 129 | | |
126 | 130 | | |
127 | 131 | | |
| |||
139 | 143 | | |
140 | 144 | | |
141 | 145 | | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
142 | 150 | | |
143 | 151 | | |
144 | 152 | | |
| |||
156 | 164 | | |
157 | 165 | | |
158 | 166 | | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
159 | 174 | | |
160 | 175 | | |
161 | 176 | | |
| |||
170 | 185 | | |
171 | 186 | | |
172 | 187 | | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
173 | 194 | | |
174 | 195 | | |
175 | 196 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
671 | 671 | | |
672 | 672 | | |
673 | 673 | | |
674 | | - | |
| 674 | + | |
675 | 675 | | |
676 | | - | |
677 | | - | |
| 676 | + | |
678 | 677 | | |
679 | 678 | | |
680 | 679 | | |
| |||
689 | 688 | | |
690 | 689 | | |
691 | 690 | | |
| 691 | + | |
| 692 | + | |
| 693 | + | |
| 694 | + | |
| 695 | + | |
| 696 | + | |
| 697 | + | |
| 698 | + | |
| 699 | + | |
| 700 | + | |
| 701 | + | |
| 702 | + | |
| 703 | + | |
| 704 | + | |
| 705 | + | |
| 706 | + | |
| 707 | + | |
| 708 | + | |
| 709 | + | |
| 710 | + | |
| 711 | + | |
| 712 | + | |
| 713 | + | |
| 714 | + | |
| 715 | + | |
| 716 | + | |
| 717 | + | |
| 718 | + | |
| 719 | + | |
| 720 | + | |
| 721 | + | |
| 722 | + | |
| 723 | + | |
| 724 | + | |
| 725 | + | |
| 726 | + | |
| 727 | + | |
| 728 | + | |
| 729 | + | |
| 730 | + | |
| 731 | + | |
| 732 | + | |
| 733 | + | |
| 734 | + | |
| 735 | + | |
| 736 | + | |
| 737 | + | |
| 738 | + | |
| 739 | + | |
| 740 | + | |
| 741 | + | |
| 742 | + | |
| 743 | + | |
692 | 744 | | |
693 | 745 | | |
694 | 746 | | |
| |||
0 commit comments