Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions flannel/discoverd/registry.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"encoding/json"
"errors"
"reflect"
"sync"
"time"

"github.com/flynn/flynn/discoverd/client"
Expand Down Expand Up @@ -89,6 +90,9 @@ func (r *registry) UpdateSubnet(sn, data string, ttl uint64) (*subnet.Response,
return newResponse(net), nil
}

// knownSubnetsMu protects knownSubnets from concurrent access.
var knownSubnetsMu sync.Mutex

// knownSubnets is updated each time we receive a service metadata event so
// that we can calculate which subnets are new and should be returned from
// WatchSubnets
Expand All @@ -111,13 +115,15 @@ func (r *registry) WatchSubnets(since uint64, stop chan bool) (*subnet.Response,
return nil, err
}
subnets := make(map[string][]byte)
knownSubnetsMu.Lock()
for subnet, data := range net.Subnets {
if known, ok := knownSubnets[subnet]; ok && reflect.DeepEqual(known, data) {
continue
}
subnets[subnet] = []byte(*data)
}
knownSubnets = net.Subnets
knownSubnetsMu.Unlock()
if event.ServiceMeta.Index >= since {
return &subnet.Response{Subnets: subnets, Index: event.ServiceMeta.Index}, nil
}
Expand Down
Loading