Repository navigation
Commit 46108f4
authored
perf(spanner): stop re-parsing the request id on every RPC (#14353)
RequestIdTargetTracker keys its cache on the logical request key, but it
accepted the x-goog-spanner-request-id header value and derived that key
by calling XGoogSpannerRequestId.of(String), which runs a six-group
regex plus four Long.parseLong calls. Every caller already holds the
parsed XGoogSpannerRequestId in the gRPC CallOptions.
HeaderInterceptor paid this twice per RPC (a get on the first response
and a remove on close). KeyAwareChannel added a third by rendering the
object it already held back into a header string with getHeaderValue(),
only for the tracker to parse it again.
Location-aware routing is the only producer of tracked targets and is
disabled unless the instance type is OMNI, so for most clients the cache
stays empty for the lifetime of the process and all of that work is
wasted. The tracker now accepts the parsed request id (or the logical
key, where the caller already has one) and short circuits on a volatile
flag that is set the first time a target is recorded.
This also fixes a latent bug in KeyAwareChannel.onClose, which passed an
already-normalized key into remove(String). The regex never matched it,
so every RPC on that path constructed and threw an
IllegalStateException, including its concatenated message and stack
trace fill-in, before the catch block fell back to returning the raw
string.
Measured per RPC (JMH, 2 forks x 8 x 1s, -prof gc):
```
before 581.2 ns 1376 B
after, default config 2.0 ns 0 B
after, location-aware on 42.5 ns 56 B
```1 parent 7de24de commit 46108f4
5 files changed
Lines changed: 243 additions & 49 deletions
File tree
- java-spanner/google-cloud-spanner/src
- main/java/com/google/cloud/spanner/spi/v1
- test/java/com/google/cloud/spanner/spi/v1
Lines changed: 12 additions & 4 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
17 | 17 | | |
18 | 18 | | |
19 | 19 | | |
| 20 | + | |
20 | 21 | | |
21 | 22 | | |
22 | 23 | | |
| |||
111 | 112 | | |
112 | 113 | | |
113 | 114 | | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
114 | 118 | | |
115 | 119 | | |
116 | 120 | | |
| |||
133 | 137 | | |
134 | 138 | | |
135 | 139 | | |
136 | | - | |
| 140 | + | |
| 141 | + | |
137 | 142 | | |
138 | 143 | | |
139 | 144 | | |
| |||
170 | 175 | | |
171 | 176 | | |
172 | 177 | | |
173 | | - | |
| 178 | + | |
| 179 | + | |
174 | 180 | | |
175 | 181 | | |
176 | 182 | | |
| |||
183 | 189 | | |
184 | 190 | | |
185 | 191 | | |
186 | | - | |
| 192 | + | |
187 | 193 | | |
188 | 194 | | |
189 | 195 | | |
| |||
263 | 269 | | |
264 | 270 | | |
265 | 271 | | |
266 | | - | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
267 | 275 | | |
268 | 276 | | |
269 | 277 | | |
| |||
Lines changed: 8 additions & 15 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
913 | 913 | | |
914 | 914 | | |
915 | 915 | | |
916 | | - | |
917 | | - | |
918 | | - | |
919 | | - | |
920 | | - | |
921 | | - | |
922 | | - | |
923 | | - | |
924 | | - | |
| 916 | + | |
| 917 | + | |
| 918 | + | |
| 919 | + | |
| 920 | + | |
| 921 | + | |
925 | 922 | | |
926 | 923 | | |
927 | 924 | | |
| |||
1105 | 1102 | | |
1106 | 1103 | | |
1107 | 1104 | | |
1108 | | - | |
1109 | | - | |
1110 | | - | |
1111 | | - | |
1112 | | - | |
| 1105 | + | |
1113 | 1106 | | |
1114 | 1107 | | |
1115 | 1108 | | |
| |||
1326 | 1319 | | |
1327 | 1320 | | |
1328 | 1321 | | |
1329 | | - | |
| 1322 | + | |
1330 | 1323 | | |
1331 | 1324 | | |
1332 | 1325 | | |
| |||
Lines changed: 60 additions & 26 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
23 | 23 | | |
24 | 24 | | |
25 | 25 | | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
26 | 36 | | |
27 | 37 | | |
28 | 38 | | |
| |||
37 | 47 | | |
38 | 48 | | |
39 | 49 | | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
40 | 64 | | |
41 | 65 | | |
42 | 66 | | |
43 | | - | |
| 67 | + | |
44 | 68 | | |
45 | | - | |
| 69 | + | |
46 | 70 | | |
47 | 71 | | |
48 | | - | |
49 | | - | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
50 | 76 | | |
51 | 77 | | |
52 | 78 | | |
53 | | - | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
54 | 84 | | |
55 | 85 | | |
56 | 86 | | |
57 | | - | |
58 | | - | |
59 | | - | |
60 | | - | |
61 | | - | |
62 | | - | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
63 | 94 | | |
64 | 95 | | |
65 | | - | |
66 | | - | |
67 | | - | |
| 96 | + | |
| 97 | + | |
68 | 98 | | |
69 | 99 | | |
70 | | - | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
71 | 111 | | |
72 | 112 | | |
73 | 113 | | |
74 | | - | |
75 | | - | |
| 114 | + | |
| 115 | + | |
76 | 116 | | |
77 | 117 | | |
78 | 118 | | |
79 | | - | |
80 | | - | |
81 | | - | |
82 | | - | |
83 | | - | |
84 | | - | |
85 | | - | |
86 | | - | |
87 | | - | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
88 | 122 | | |
89 | 123 | | |
90 | 124 | | |
| |||
Lines changed: 10 additions & 4 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
17 | 17 | | |
18 | 18 | | |
19 | 19 | | |
| 20 | + | |
20 | 21 | | |
21 | 22 | | |
22 | 23 | | |
| |||
25 | 26 | | |
26 | 27 | | |
27 | 28 | | |
| 29 | + | |
28 | 30 | | |
29 | 31 | | |
30 | 32 | | |
| |||
170 | 172 | | |
171 | 173 | | |
172 | 174 | | |
173 | | - | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
174 | 180 | | |
175 | 181 | | |
176 | 182 | | |
177 | | - | |
178 | | - | |
| 183 | + | |
| 184 | + | |
179 | 185 | | |
180 | 186 | | |
181 | 187 | | |
182 | 188 | | |
183 | 189 | | |
184 | | - | |
| 190 | + | |
185 | 191 | | |
186 | 192 | | |
187 | 193 | | |
| |||
0 commit comments