fix other batch client rowCache race

This commit is contained in:
Matthew Jaffee 2021-07-20 10:36:17 -05:00
parent e450099579
commit d2e8c5f773

View file

@ -824,6 +824,8 @@ func (b *Batch) doTranslation() error {
rowCache = make(map[string]agedTranslation)
b.rowTranslations[fieldName] = rowCache
}
// create a lock since we're updating this concurrently below
rowCacheLock := &sync.Mutex{}
i, tt := i, tt
eg.Go(func() error {
@ -845,12 +847,14 @@ func (b *Batch) doTranslation() error {
b.log.Debugf("translating %d field keys for %s took %v", len(trans), fieldName, time.Since(start))
// Apply keys to translation cache.
rowCacheLock.Lock()
for key, id := range trans {
rowCache[key] = agedTranslation{
id: id,
lastUsed: b.cycle,
}
}
rowCacheLock.Unlock()
switch ftype := field.Opts().Type(); ftype {
case FieldTypeSet, FieldTypeMutex, FieldTypeTime: