Commit aa68b58
Fix GetDefaultProvider bypassing registered config factory (#4740)
* Fix GetDefaultProvider bypassing registered config factory
config.NewDefaultProvider() skips the RegisterProviderFactory hook and
always reads the local XDG config file. Switch to config.NewProvider(),
which checks the registered factory first and falls back to the default
only when no factory is registered.
Without this fix, enterprise builds that register a factory to supply an
EnterpriseProvider (e.g. fetching config from a remote config server)
were silently ignored, causing thv registry commands to use the embedded
registry instead of the configured one.
Add unit tests covering the factory-respected and fall-through cases,
caching semantics, and reset behaviour.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* Fix NewRegistryRoutes constructors bypassing registered config factory
Both NewRegistryRoutes and NewRegistryRoutesForServe called
config.NewDefaultProvider(), which skips the RegisterProviderFactory
hook and always reads the local XDG config file. Switch to
config.NewProvider() so enterprise builds that register a factory
(e.g. to supply a remote config server) are correctly honoured.
Add unit tests covering the regression case and the no-factory fallback
for both constructors.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* Move config.NewProvider() inside sync.Once closure in GetDefaultProvider
Go evaluates function arguments eagerly, so the previous implementation
called config.NewProvider() (and thus any registered ProviderFactory)
on every invocation of GetDefaultProvider, even after sync.Once had
already fired and the resulting provider was discarded.
Move the call inside the Do closure so the factory is invoked at most
once. GetDefaultProvider now owns its sync.Once block directly rather
than delegating to GetDefaultProviderWithConfig.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* Fix data race between ResetDefaultProvider and GetDefaultProviderWithConfig
ResetDefaultProvider assigned defaultProviderOnce = sync.Once{} (a
non-atomic struct write) while GetDefaultProviderWithConfig called
defaultProviderOnce.Do(), which does an atomic load of the internal
done field. Mixed-width concurrent access = data race.
Replace the three separate package-level variables (sync.Once,
Provider, error) with a single providerState struct stored behind an
atomic.Pointer. ResetDefaultProvider now atomically swaps in a fresh
struct instead of writing to one that may be in use. Goroutines that
loaded a pointer before a reset keep a stable reference and complete
safely; goroutines that load after the swap initialise against the new
state. The mutex is no longer needed and is removed.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* Add nolint:paralleltest directives to factory tests
These tests mutate global singletons (config.registeredFactory and
currentProviderState) so they cannot run in parallel. Suppress the
paralleltest linter warning with an explanatory comment on each test.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* Fix gci formatting: move nolint directives after doc comments
gci requires nolint directives to appear immediately before the func
declaration, after the doc comment block.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>1 parent 443d2fa commit aa68b58
4 files changed
Lines changed: 468 additions & 33 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
14 | 14 | | |
15 | 15 | | |
16 | 16 | | |
17 | | - | |
| 17 | + | |
18 | 18 | | |
19 | 19 | | |
20 | 20 | | |
| |||
286 | 286 | | |
287 | 287 | | |
288 | 288 | | |
289 | | - | |
| 289 | + | |
290 | 290 | | |
291 | 291 | | |
292 | 292 | | |
| |||
304 | 304 | | |
305 | 305 | | |
306 | 306 | | |
307 | | - | |
| 307 | + | |
308 | 308 | | |
309 | 309 | | |
310 | 310 | | |
| |||
| 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 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 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 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
10 | 10 | | |
11 | 11 | | |
12 | 12 | | |
| 13 | + | |
13 | 14 | | |
14 | 15 | | |
15 | 16 | | |
16 | 17 | | |
17 | 18 | | |
18 | 19 | | |
19 | | - | |
20 | | - | |
21 | | - | |
22 | | - | |
23 | | - | |
24 | | - | |
25 | | - | |
26 | | - | |
27 | | - | |
28 | | - | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
29 | 37 | | |
30 | 38 | | |
31 | 39 | | |
| |||
79 | 87 | | |
80 | 88 | | |
81 | 89 | | |
82 | | - | |
83 | | - | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
84 | 93 | | |
85 | | - | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
86 | 104 | | |
87 | 105 | | |
88 | 106 | | |
89 | 107 | | |
90 | 108 | | |
91 | 109 | | |
92 | 110 | | |
93 | | - | |
| 111 | + | |
| 112 | + | |
94 | 113 | | |
95 | 114 | | |
96 | | - | |
| 115 | + | |
97 | 116 | | |
98 | 117 | | |
99 | | - | |
| 118 | + | |
100 | 119 | | |
101 | | - | |
102 | | - | |
| 120 | + | |
103 | 121 | | |
104 | 122 | | |
105 | | - | |
106 | | - | |
107 | | - | |
108 | | - | |
109 | | - | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
110 | 128 | | |
111 | | - | |
112 | | - | |
113 | | - | |
114 | | - | |
115 | | - | |
116 | | - | |
117 | | - | |
| 129 | + | |
118 | 130 | | |
119 | 131 | | |
120 | 132 | | |
| |||
0 commit comments