Commit 63a13ba
feat(wateruse): fetch fanned-out locations concurrently (no backoff needed)
A multi-value `state`/`county`/`huc` selector now fans out over a
`ThreadPoolExecutor` instead of a serial loop. Concurrency is capped by a
module-level `MAX_CONCURRENT_REQUESTS` (default 4; set to 1 for serial) — kept
in this module rather than honoring the OGC engine's `API_USGS_CONCURRENT`, so
wateruse stays decoupled from the engine. The locations are independent single
requests over the synchronous `_get`, so the thread pool needs no shared state;
`pool.map` preserves input order and re-raises the first failure.
Stress-tested against the live NWDC at concurrency 1/2/4/8/16 over 16 distinct
locations: all 200s, zero rate-limit/connection errors, and the rate budget
depletes one token per request regardless of concurrency — so no request
backoff/retry is required. End-to-end results are concurrency-invariant
(byte-identical at conc 1/4/8) with a ~3.6x speedup at the default of 4.
The single-location common path skips the pool entirely. Tests route each
location to its own mocked response so the fan-out assertions are deterministic
under thread races, and cover both the concurrent and serial (cap=1) paths.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Sjb14HkwuCydKSKMsaXsgd1 parent c3c8365 commit 63a13ba
2 files changed
Lines changed: 66 additions & 19 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
42 | 42 | | |
43 | 43 | | |
44 | 44 | | |
| 45 | + | |
45 | 46 | | |
46 | 47 | | |
47 | 48 | | |
| |||
75 | 76 | | |
76 | 77 | | |
77 | 78 | | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
78 | 86 | | |
79 | 87 | | |
80 | 88 | | |
| |||
104 | 112 | | |
105 | 113 | | |
106 | 114 | | |
107 | | - | |
108 | | - | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
109 | 118 | | |
110 | 119 | | |
111 | 120 | | |
| |||
209 | 218 | | |
210 | 219 | | |
211 | 220 | | |
212 | | - | |
213 | | - | |
214 | | - | |
215 | | - | |
216 | | - | |
217 | | - | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
218 | 224 | | |
219 | 225 | | |
220 | | - | |
221 | | - | |
222 | | - | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
223 | 240 | | |
224 | 241 | | |
225 | 242 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
220 | 220 | | |
221 | 221 | | |
222 | 222 | | |
223 | | - | |
224 | | - | |
225 | | - | |
226 | | - | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
227 | 234 | | |
228 | 235 | | |
229 | 236 | | |
230 | | - | |
231 | | - | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
232 | 244 | | |
233 | 245 | | |
234 | | - | |
235 | | - | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
| 253 | + | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
236 | 266 | | |
237 | 267 | | |
238 | 268 | | |
| |||
0 commit comments