Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit84d9556

Browse files
committed
reduce lock time
1 parent34a77d5 commit84d9556

File tree

1 file changed

+19
-14
lines changed

1 file changed

+19
-14
lines changed

‎coderd/cryptokeys/dbkeycache.go

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,13 @@ func NewDBKeyCache(ctx context.Context, logger slog.Logger, db database.Store, f
4040
opt(d)
4141
}
4242

43-
err:=d.newCache(ctx)
43+
cache,latest,err:=d.newCache(ctx)
4444
iferr!=nil {
4545
returnnil,xerrors.Errorf("new cache: %w",err)
4646
}
47+
d.cache,d.latestKey=cache,latest
4748

48-
god.refreshCache(ctx)
49+
god.refresh(ctx)
4950
returnd,nil
5051
}
5152

@@ -111,38 +112,44 @@ func (d *DBKeyCache) Latest(ctx context.Context) (database.CryptoKey, error) {
111112
returnd.latestKey,nil
112113
}
113114

114-
err:=d.newCache(ctx)
115+
cache,latest,err:=d.newCache(ctx)
115116
iferr!=nil {
116117
return database.CryptoKey{},xerrors.Errorf("new cache: %w",err)
117118
}
118119

119-
iflen(d.cache)==0 {
120+
iflen(cache)==0 {
120121
return database.CryptoKey{},ErrKeyNotFound
121122
}
122123

123-
if!d.latestKey.IsActive(now) {
124+
if!latest.IsActive(now) {
124125
return database.CryptoKey{},ErrKeyInvalid
125126
}
126127

128+
d.cache,d.latestKey=cache,latest
129+
127130
returnd.latestKey,nil
128131
}
129132

130-
func (d*DBKeyCache)refreshCache(ctx context.Context) {
133+
func (d*DBKeyCache)refresh(ctx context.Context) {
131134
d.Clock.TickerFunc(ctx,time.Minute*10,func()error {
132-
d.cacheMu.Lock()
133-
deferd.cacheMu.Unlock()
134-
iferr:=d.newCache(ctx);err!=nil {
135+
cache,latest,err:=d.newCache(ctx)
136+
iferr!=nil {
135137
d.logger.Error(ctx,"failed to refresh cache",slog.Error(err))
138+
returnnil
136139
}
140+
d.cacheMu.Lock()
141+
deferd.cacheMu.Unlock()
142+
143+
d.cache,d.latestKey=cache,latest
137144
returnnil
138145
})
139146
}
140147

141-
func (d*DBKeyCache)newCache(ctx context.Context)error {
148+
func (d*DBKeyCache)newCache(ctx context.Context)(map[int32]database.CryptoKey, database.CryptoKey,error) {
142149
now:=d.Clock.Now().UTC()
143150
keys,err:=d.db.GetCryptoKeysByFeature(ctx,d.feature)
144151
iferr!=nil {
145-
returnxerrors.Errorf("get crypto keys by feature: %w",err)
152+
returnnil, database.CryptoKey{},xerrors.Errorf("get crypto keys by feature: %w",err)
146153
}
147154
cache:=toMap(keys)
148155
varlatest database.CryptoKey
@@ -154,9 +161,7 @@ func (d *DBKeyCache) newCache(ctx context.Context) error {
154161
break
155162
}
156163

157-
d.cache=cache
158-
d.latestKey=latest
159-
returnnil
164+
returncache,latest,nil
160165
}
161166

162167
functoMap(keys []database.CryptoKey)map[int32]database.CryptoKey {

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp