From 7cdd38b38947ea17abe195cfdaad1d37eea9e0c6 Mon Sep 17 00:00:00 2001 From: matst80 Date: Mon, 11 Nov 2024 18:36:54 +0100 Subject: [PATCH] use quorum instead of all --- synced-pool.go | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/synced-pool.go b/synced-pool.go index eb0e104..4db55e5 100644 --- a/synced-pool.go +++ b/synced-pool.go @@ -302,14 +302,23 @@ func (r *RemoteHost) ConfirmChange(id CartId, host string) error { } func (p *SyncedPool) RequestOwnership(id CartId) error { + ok := 0 + all := 0 for _, r := range p.remotes { - log.Printf("Confirming change of %s to %s (me) with %s\n", id, p.Hostname, r.Host) + // log.Printf("Confirming change of %s to %s (me) with %s\n", id, p.Hostname, r.Host) err := r.ConfirmChange(id, p.Hostname) - + all++ if err != nil { log.Printf("Error confirming change: %v from %s\n", err, p.Hostname) - return err + continue } + ok++ + } + if ok == 0 && all > 0 { + return fmt.Errorf("no remotes confirmed change") + } + if ok < (all/2)+1 { + return fmt.Errorf("quorum not reached") } return nil }