Commit 55c9857
authored
fix(spanner): fix grpc-gcp affinity cleanup and multiplexed channel usage leaks (#12726)
## Summary
This change fixes two regressions in the Spanner Java client introduced
around multiplexed session initialization and
grpc-gcp affinity handling.
### 1. Fix static `CHANNEL_USAGE` leak in
`MultiplexedSessionDatabaseClient`
Fixes: #12693
`MultiplexedSessionDatabaseClient` stored per-`SpannerImpl` channel
usage state in a static map but never removed
entries on close. After multiplexed client creation became unconditional
in `SpannerImpl.getDatabaseClient()`,
applications that repeatedly created and closed `Spanner` instances
could retain closed `SpannerImpl` objects, gRPC
channels, and related transport state indefinitely.
This change:
- replaces the static `Map<SpannerImpl, BitSet>` with reference-counted
shared state
- removes the map entry when the last `MultiplexedSessionDatabaseClient`
for a given `SpannerImpl` closes
- preserves sharing semantics for multiple database clients created from
the same `SpannerImpl`
### 2. Stop using bitset / bounded `% numChannels` affinity for grpc-gcp
For grpc-gcp-enabled paths, channel affinity should use the raw random
channel hint and rely on explicit unbind /
cleanup, rather than:
- bitset reservation
- collapsing the hint with `% numChannels`
This change:
- keeps grpc-gcp on raw random affinity keys in `GapicSpannerRpc`
- removes `% numChannels` mapping from the grpc-gcp call path
- keeps the old non-grpc-gcp GAX affinity behavior unchanged
### 3. Add explicit grpc-gcp affinity cleanup for multi-use read-only
transaction close
Multi-use read-only transactions reuse a single random channel hint for
the lifetime of the transaction. That hint
should remain stable across all reads in the transaction, then be
explicitly cleaned up when the transaction closes.
This change:
- adds a new RPC cleanup hook that carries both transaction id and
channel hint
- invokes that cleanup from multi-use read-only transaction `close()`
- unbinds grpc-gcp affinity on transaction close without issuing an
`ExecuteSql` RPC to Spanner
- handles both:
- location API disabled: cleanup via the underlying grpc-gcp channel
- location API enabled: cleanup via `KeyAwareChannel`, using the routed
endpoint associated with the transaction
### 4. Apply grpc-gcp affinity cleanup settings without implicitly
enabling DCP
grpc-gcp affinity cleanup settings (`affinityKeyLifetime`,
`cleanupInterval`) should be applied whether or not dynamic channel pool
(DCP) is enabled.
This change:
- always passes grpc-gcp channel-pool options when grpc-gcp is enabled
- preserves full pool settings only when DCP is enabled
- passes cleanup-only channel-pool options when DCP is disabled:
- `affinityKeyLifetime`
- `cleanupInterval`
- dynamic scaling explicitly disabled1 parent b7e34d2 commit 55c9857
File tree
12 files changed
+554
-104
lines changed- java-spanner
- google-cloud-spanner/src
- main/java/com/google/cloud/spanner
- spi/v1
- test/java/com/google/cloud/spanner
- spi/v1
12 files changed
+554
-104
lines changedThis file was deleted.
Lines changed: 1 addition & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
466 | 466 | | |
467 | 467 | | |
468 | 468 | | |
469 | | - | |
| 469 | + | |
470 | 470 | | |
471 | 471 | | |
472 | 472 | | |
| |||
Lines changed: 36 additions & 6 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
161 | 161 | | |
162 | 162 | | |
163 | 163 | | |
164 | | - | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
165 | 175 | | |
166 | 176 | | |
167 | 177 | | |
| |||
182 | 192 | | |
183 | 193 | | |
184 | 194 | | |
| 195 | + | |
| 196 | + | |
185 | 197 | | |
186 | 198 | | |
187 | 199 | | |
| |||
213 | 225 | | |
214 | 226 | | |
215 | 227 | | |
216 | | - | |
| 228 | + | |
| 229 | + | |
217 | 230 | | |
218 | | - | |
219 | | - | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
220 | 238 | | |
221 | 239 | | |
222 | 240 | | |
223 | | - | |
224 | | - | |
| 241 | + | |
225 | 242 | | |
226 | 243 | | |
227 | 244 | | |
| |||
354 | 371 | | |
355 | 372 | | |
356 | 373 | | |
| 374 | + | |
357 | 375 | | |
358 | 376 | | |
359 | 377 | | |
360 | 378 | | |
| 379 | + | |
| 380 | + | |
| 381 | + | |
| 382 | + | |
| 383 | + | |
| 384 | + | |
| 385 | + | |
| 386 | + | |
| 387 | + | |
| 388 | + | |
| 389 | + | |
| 390 | + | |
361 | 391 | | |
362 | 392 | | |
363 | 393 | | |
| |||
Lines changed: 57 additions & 25 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
64 | 64 | | |
65 | 65 | | |
66 | 66 | | |
| 67 | + | |
67 | 68 | | |
68 | 69 | | |
69 | 70 | | |
| |||
301 | 302 | | |
302 | 303 | | |
303 | 304 | | |
| 305 | + | |
304 | 306 | | |
305 | 307 | | |
306 | 308 | | |
| |||
420 | 422 | | |
421 | 423 | | |
422 | 424 | | |
| 425 | + | |
423 | 426 | | |
424 | 427 | | |
425 | 428 | | |
| |||
540 | 543 | | |
541 | 544 | | |
542 | 545 | | |
| 546 | + | |
543 | 547 | | |
544 | 548 | | |
545 | 549 | | |
| |||
589 | 593 | | |
590 | 594 | | |
591 | 595 | | |
| 596 | + | |
| 597 | + | |
| 598 | + | |
| 599 | + | |
| 600 | + | |
| 601 | + | |
| 602 | + | |
| 603 | + | |
| 604 | + | |
| 605 | + | |
| 606 | + | |
| 607 | + | |
592 | 608 | | |
593 | 609 | | |
594 | 610 | | |
595 | 611 | | |
596 | 612 | | |
597 | 613 | | |
598 | 614 | | |
| 615 | + | |
| 616 | + | |
| 617 | + | |
| 618 | + | |
| 619 | + | |
| 620 | + | |
| 621 | + | |
| 622 | + | |
| 623 | + | |
| 624 | + | |
599 | 625 | | |
600 | 626 | | |
601 | 627 | | |
| |||
772 | 798 | | |
773 | 799 | | |
774 | 800 | | |
775 | | - | |
776 | | - | |
777 | | - | |
778 | | - | |
779 | | - | |
| 801 | + | |
| 802 | + | |
| 803 | + | |
| 804 | + | |
| 805 | + | |
780 | 806 | | |
781 | 807 | | |
782 | 808 | | |
783 | 809 | | |
784 | 810 | | |
| 811 | + | |
| 812 | + | |
| 813 | + | |
| 814 | + | |
| 815 | + | |
| 816 | + | |
| 817 | + | |
| 818 | + | |
| 819 | + | |
| 820 | + | |
| 821 | + | |
| 822 | + | |
| 823 | + | |
| 824 | + | |
| 825 | + | |
| 826 | + | |
| 827 | + | |
| 828 | + | |
| 829 | + | |
785 | 830 | | |
786 | 831 | | |
787 | 832 | | |
| |||
793 | 838 | | |
794 | 839 | | |
795 | 840 | | |
796 | | - | |
797 | | - | |
798 | | - | |
799 | | - | |
800 | 841 | | |
801 | 842 | | |
802 | 843 | | |
803 | 844 | | |
804 | 845 | | |
805 | 846 | | |
806 | 847 | | |
| 848 | + | |
| 849 | + | |
| 850 | + | |
807 | 851 | | |
808 | 852 | | |
809 | | - | |
810 | | - | |
| 853 | + | |
811 | 854 | | |
812 | 855 | | |
813 | 856 | | |
| |||
2275 | 2318 | | |
2276 | 2319 | | |
2277 | 2320 | | |
2278 | | - | |
2279 | | - | |
2280 | | - | |
2281 | | - | |
2282 | | - | |
2283 | | - | |
2284 | | - | |
2285 | | - | |
2286 | | - | |
2287 | | - | |
2288 | | - | |
2289 | | - | |
2290 | | - | |
2291 | | - | |
| 2321 | + | |
| 2322 | + | |
| 2323 | + | |
2292 | 2324 | | |
2293 | 2325 | | |
2294 | 2326 | | |
| |||
Lines changed: 46 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
Lines changed: 15 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
304 | 304 | | |
305 | 305 | | |
306 | 306 | | |
| 307 | + | |
| 308 | + | |
| 309 | + | |
| 310 | + | |
| 311 | + | |
| 312 | + | |
| 313 | + | |
| 314 | + | |
| 315 | + | |
| 316 | + | |
| 317 | + | |
| 318 | + | |
| 319 | + | |
| 320 | + | |
| 321 | + | |
307 | 322 | | |
308 | 323 | | |
309 | 324 | | |
| |||
Lines changed: 9 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
199 | 199 | | |
200 | 200 | | |
201 | 201 | | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
202 | 211 | | |
203 | 212 | | |
204 | 213 | | |
| |||
0 commit comments