diff --git a/synced-pool.go b/synced-pool.go index bf65877..6167c4f 100644 --- a/synced-pool.go +++ b/synced-pool.go @@ -85,6 +85,27 @@ func NewSyncedPool(local *GrainLocalPool, hostname string, d Discovery) (*Synced remotes: make([]*RemoteHost, 0), remoteIndex: make(map[CartId]*RemoteGrainPool), } + pingTimer := time.NewTicker(time.Second) + go func() { + for { + <-pingTimer.C + for i, r := range pool.remotes { + err := DoPing(r.connection) + if err != nil { + r.MissedPings++ + log.Printf("Error pinging remote %s: %v\n, missed pings: %d", r.Host, err, r.MissedPings) + if r.MissedPings > 3 { + log.Printf("Removing remote %s\n", r.Host) + + pool.remotes = append(pool.remotes[:i], pool.remotes[i+1:]...) + + } + } else { + r.MissedPings = 0 + } + } + } + }() if d != nil { discoveryTimer := time.NewTicker(time.Second * 5) go func() { @@ -127,21 +148,7 @@ func NewSyncedPool(local *GrainLocalPool, hostname string, d Discovery) (*Synced log.Printf("Error adding undiscovered remote %s: %v\n", h, err) } } - for i, r := range pool.remotes { - err := DoPing(r.connection) - if err != nil { - r.MissedPings++ - log.Printf("Error pinging remote %s: %v\n, missed pings: %d", r.Host, err, r.MissedPings) - if r.MissedPings > 3 { - log.Printf("Removing remote %s\n", r.Host) - pool.remotes = append(pool.remotes[:i], pool.remotes[i+1:]...) - - } - } else { - r.MissedPings = 0 - } - } }() } go func() {