diff --git a/synced-pool.go b/synced-pool.go index a120751..193276b 100644 --- a/synced-pool.go +++ b/synced-pool.go @@ -319,16 +319,23 @@ func (p *SyncedPool) RequestOwnership(id CartId) error { ok++ } if ok == 0 && all > 0 { - delete(p.local.grains, id) + p.removeLocalGrain(id) return fmt.Errorf("no remotes confirmed change") } - if ok < (all / 2) { - delete(p.local.grains, id) + if (all < 3 && ok < all) || ok < (all/2) { + p.removeLocalGrain(id) return fmt.Errorf("quorum not reached") } return nil } +func (p *SyncedPool) removeLocalGrain(id CartId) { + p.mu.Lock() + defer p.mu.Unlock() + delete(p.local.grains, id) + delete(p.remoteIndex, id) +} + func (p *SyncedPool) addRemoteHost(address string, remote *RemoteHost) error { known := make([]string, 0, len(p.remotes)) for _, r := range p.remotes {