@@ -34,7 +34,6 @@ type CryptoKeyCache struct {
34
34
35
35
mu sync.Mutex
36
36
keys map [int32 ]codersdk.CryptoKey
37
- latest codersdk.CryptoKey
38
37
lastFetch time.Time
39
38
refresher * quartz.Timer
40
39
fetching bool
@@ -57,12 +56,12 @@ func NewCryptoKeyCache(ctx context.Context, log slog.Logger, client Fetcher, opt
57
56
cache .refreshCtx , cache .refreshCancel = context .WithCancel (ctx )
58
57
cache .refresher = cache .Clock .AfterFunc (refreshInterval , cache .refresh )
59
58
60
- m , latest , err := cache .cryptoKeys (ctx )
59
+ keys , err := cache .cryptoKeys (ctx )
61
60
if err != nil {
62
61
cache .refreshCancel ()
63
62
return nil , xerrors .Errorf ("initial fetch: %w" , err )
64
63
}
65
- cache .keys , cache . latest = m , latest
64
+ cache .keys = keys
66
65
67
66
return cache , nil
68
67
}
@@ -100,15 +99,15 @@ func (k *CryptoKeyCache) cryptoKey(ctx context.Context, sequence int32) (codersd
100
99
k .fetching = true
101
100
k .mu .Unlock ()
102
101
103
- keys , latest , err := k .cryptoKeys (ctx )
102
+ keys , err := k .cryptoKeys (ctx )
104
103
if err != nil {
105
104
return codersdk.CryptoKey {}, xerrors .Errorf ("get keys: %w" , err )
106
105
}
107
106
108
107
k .mu .Lock ()
109
108
k .lastFetch = k .Clock .Now ()
110
109
k .refresher .Reset (refreshInterval )
111
- k .keys , k . latest = keys , latest
110
+ k .keys = keys
112
111
k .fetching = false
113
112
k .cond .Broadcast ()
114
113
@@ -122,7 +121,7 @@ func (k *CryptoKeyCache) cryptoKey(ctx context.Context, sequence int32) (codersd
122
121
123
122
func (k * CryptoKeyCache ) key (sequence int32 ) (codersdk.CryptoKey , bool ) {
124
123
if sequence == latestSequence {
125
- return k .latest , k .latest .CanSign (k .Clock .Now ())
124
+ return k .keys [ latestSequence ] , k .keys [ latestSequence ] .CanSign (k .Clock .Now ())
126
125
}
127
126
128
127
key , ok := k .keys [sequence ]
@@ -171,7 +170,7 @@ func (k *CryptoKeyCache) refresh() {
171
170
k .fetching = true
172
171
173
172
k .mu .Unlock ()
174
- keys , latest , err := k .cryptoKeys (k .refreshCtx )
173
+ keys , err := k .cryptoKeys (k .refreshCtx )
175
174
if err != nil {
176
175
k .logger .Error (k .refreshCtx , "fetch crypto keys" , slog .Error (err ))
177
176
return
@@ -182,32 +181,32 @@ func (k *CryptoKeyCache) refresh() {
182
181
183
182
k .lastFetch = k .Clock .Now ()
184
183
k .refresher .Reset (refreshInterval )
185
- k .keys , k . latest = keys , latest
184
+ k .keys = keys
186
185
k .fetching = false
187
186
k .cond .Broadcast ()
188
187
}
189
188
190
189
// cryptoKeys queries the control plane for the crypto keys.
191
190
// Outside of initialization, this should only be called by fetch.
192
- func (k * CryptoKeyCache ) cryptoKeys (ctx context.Context ) (map [int32 ]codersdk.CryptoKey , codersdk. CryptoKey , error ) {
191
+ func (k * CryptoKeyCache ) cryptoKeys (ctx context.Context ) (map [int32 ]codersdk.CryptoKey , error ) {
193
192
keys , err := k .fetcher .Fetch (ctx )
194
193
if err != nil {
195
- return nil , codersdk. CryptoKey {}, xerrors .Errorf ("crypto keys: %w" , err )
194
+ return nil , xerrors .Errorf ("crypto keys: %w" , err )
196
195
}
197
- cache , latest := toKeyMap (keys , k .Clock .Now ())
198
- return cache , latest , nil
196
+ cache := toKeyMap (keys , k .Clock .Now ())
197
+ return cache , nil
199
198
}
200
199
201
- func toKeyMap (keys []codersdk.CryptoKey , now time.Time ) ( map [int32 ]codersdk.CryptoKey , codersdk. CryptoKey ) {
200
+ func toKeyMap (keys []codersdk.CryptoKey , now time.Time ) map [int32 ]codersdk.CryptoKey {
202
201
m := make (map [int32 ]codersdk.CryptoKey )
203
202
var latest codersdk.CryptoKey
204
203
for _ , key := range keys {
205
204
m [key .Sequence ] = key
206
205
if key .Sequence > latest .Sequence && key .CanSign (now ) {
207
- latest = key
206
+ m [ latestSequence ] = key
208
207
}
209
208
}
210
- return m , latest
209
+ return m
211
210
}
212
211
213
212
func (k * CryptoKeyCache ) Close () {
0 commit comments