Messaging service, adapters, refactoring
This commit is contained in:
34
pkg/discovery/discoveryset.go
Normal file
34
pkg/discovery/discoveryset.go
Normal file
@@ -0,0 +1,34 @@
|
||||
package discovery
|
||||
|
||||
// DiscoverySet a slice of initialized discovery services.
|
||||
//
|
||||
//goland:noinspection GoNameStartsWithPackageName
|
||||
type DiscoverySet []*Discovery
|
||||
|
||||
// NewNodes returns channel with newly discovered node ips.
|
||||
func (d DiscoverySet) NewNodes() NewNodes {
|
||||
res := make(chan string, 20)
|
||||
|
||||
for _, discovery := range d {
|
||||
go func(discovery *Discovery) {
|
||||
for node := range discovery.NewNodes() {
|
||||
if len(res) == cap(res) {
|
||||
panic("knownNodes from discovery set not reading!")
|
||||
}
|
||||
|
||||
res <- node
|
||||
}
|
||||
}(discovery)
|
||||
}
|
||||
|
||||
return res
|
||||
}
|
||||
|
||||
// FailNodes accept a channel with ip of nodes, that was failed (lost or canceled connection).
|
||||
func (d DiscoverySet) FailNodes(ch chan string) {
|
||||
for addr := range ch {
|
||||
for _, discovery := range d {
|
||||
discovery.FailNode(addr)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user