same problem in MVHashMap.Write

This commit is contained in:
zhiqiangxu 2024-01-06 21:25:09 +08:00
parent dfe484d6a2
commit aa00c8f96c

View file

@ -121,34 +121,23 @@ func (mv *MVHashMap) Write(k Key, v Version, data interface{}) {
return return
}) })
cells.rw.RLock() cells.rw.Lock()
ci, ok := cells.tm.Get(v.TxnIndex) if ci, ok := cells.tm.Get(v.TxnIndex); !ok {
cells.rw.RUnlock() cells.tm.Put(v.TxnIndex, &WriteCell{
flag: FlagDone,
if ok { incarnation: v.Incarnation,
data: data,
})
} else {
if ci.(*WriteCell).incarnation > v.Incarnation { if ci.(*WriteCell).incarnation > v.Incarnation {
panic(fmt.Errorf("existing transaction value does not have lower incarnation: %v, %v", panic(fmt.Errorf("existing transaction value does not have lower incarnation: %v, %v",
k, v.TxnIndex)) k, v.TxnIndex))
} }
ci.(*WriteCell).flag = FlagDone ci.(*WriteCell).flag = FlagDone
ci.(*WriteCell).incarnation = v.Incarnation ci.(*WriteCell).incarnation = v.Incarnation
ci.(*WriteCell).data = data ci.(*WriteCell).data = data
} else {
cells.rw.Lock()
if ci, ok = cells.tm.Get(v.TxnIndex); !ok {
cells.tm.Put(v.TxnIndex, &WriteCell{
flag: FlagDone,
incarnation: v.Incarnation,
data: data,
})
} else {
ci.(*WriteCell).flag = FlagDone
ci.(*WriteCell).incarnation = v.Incarnation
ci.(*WriteCell).data = data
}
cells.rw.Unlock()
} }
cells.rw.Unlock()
} }
func (mv *MVHashMap) ReadStorage(k Key, fallBack func() any) any { func (mv *MVHashMap) ReadStorage(k Key, fallBack func() any) any {