fix: avoid audit log race protection deadlocks (#17168)

This commit is contained in:
Klaus Post 2023-05-09 08:11:32 -07:00 committed by GitHub
parent a7f266c907
commit 99c4ffa34f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 9 additions and 4 deletions

View File

@ -124,7 +124,12 @@ func AuditLog(ctx context.Context, w http.ResponseWriter, r *http.Request, reqCl
entry.API.HeaderBytes = headerBytes
entry.API.TimeToResponse = strconv.FormatInt(timeToResponse.Nanoseconds(), 10) + "ns"
entry.API.TimeToResponseInNS = strconv.FormatInt(timeToResponse.Nanoseconds(), 10)
entry.Tags = reqInfo.GetTagsMap()
// We hold the lock, so we cannot call reqInfo.GetTagsMap().
tags := make(map[string]interface{}, len(reqInfo.tags))
for _, t := range reqInfo.tags {
tags[t.Key] = t.Val
}
entry.Tags = tags
// ignore cases for ttfb when its zero.
if timeToFirstByte != 0 {
entry.API.TimeToFirstByte = strconv.FormatInt(timeToFirstByte.Nanoseconds(), 10) + "ns"

View File

@ -278,9 +278,9 @@ func errToEntry(ctx context.Context, err error, errKind ...interface{}) log.Entr
API = req.API
}
kv := req.GetTags()
tags := make(map[string]interface{}, len(kv))
for _, entry := range kv {
// Copy tags. We hold read lock already.
tags := make(map[string]interface{}, len(req.tags))
for _, entry := range req.tags {
tags[entry.Key] = entry.Val
}