Merge pull request #580 from mavenugo/discovery
serfJoin doesnt happen if self notification comes later
This commit is contained in:
commit
add63f4247
|
@ -68,13 +68,13 @@ func (d *driver) serfInit() error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *driver) serfJoin() error {
|
func (d *driver) serfJoin(neighIP string) error {
|
||||||
if d.neighIP == "" {
|
if neighIP == "" {
|
||||||
return fmt.Errorf("no neighbor to join")
|
return fmt.Errorf("no neighbor to join")
|
||||||
}
|
}
|
||||||
if _, err := d.serfInstance.Join([]string{d.neighIP}, false); err != nil {
|
if _, err := d.serfInstance.Join([]string{neighIP}, false); err != nil {
|
||||||
return fmt.Errorf("Failed to join the cluster at neigh IP %s: %v",
|
return fmt.Errorf("Failed to join the cluster at neigh IP %s: %v",
|
||||||
d.neighIP, err)
|
neighIP, err)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -152,7 +152,7 @@ func (d *driver) Type() string {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *driver) nodeJoin(node string, self bool) {
|
func (d *driver) nodeJoin(node string, self bool) {
|
||||||
if self && node != "" && !d.isSerfAlive() {
|
if self && !d.isSerfAlive() {
|
||||||
d.Lock()
|
d.Lock()
|
||||||
d.bindAddress = node
|
d.bindAddress = node
|
||||||
d.Unlock()
|
d.Unlock()
|
||||||
|
@ -163,13 +163,17 @@ func (d *driver) nodeJoin(node string, self bool) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if d.serfInstance != nil && !self && node != "" {
|
d.Lock()
|
||||||
|
if !self {
|
||||||
|
d.neighIP = node
|
||||||
|
}
|
||||||
|
neighIP := d.neighIP
|
||||||
|
d.Unlock()
|
||||||
|
|
||||||
|
if d.serfInstance != nil && neighIP != "" {
|
||||||
var err error
|
var err error
|
||||||
d.joinOnce.Do(func() {
|
d.joinOnce.Do(func() {
|
||||||
d.Lock()
|
err = d.serfJoin(neighIP)
|
||||||
d.neighIP = node
|
|
||||||
d.Unlock()
|
|
||||||
err = d.serfJoin()
|
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logrus.Errorf("joining serf neighbor %s failed: %v", node, err)
|
logrus.Errorf("joining serf neighbor %s failed: %v", node, err)
|
||||||
|
@ -185,7 +189,7 @@ func (d *driver) nodeJoin(node string, self bool) {
|
||||||
func (d *driver) DiscoverNew(dType driverapi.DiscoveryType, data interface{}) error {
|
func (d *driver) DiscoverNew(dType driverapi.DiscoveryType, data interface{}) error {
|
||||||
if dType == driverapi.NodeDiscovery {
|
if dType == driverapi.NodeDiscovery {
|
||||||
nodeData, ok := data.(driverapi.NodeDiscoveryData)
|
nodeData, ok := data.(driverapi.NodeDiscoveryData)
|
||||||
if !ok {
|
if !ok || nodeData.Address == "" {
|
||||||
return fmt.Errorf("invalid discovery data")
|
return fmt.Errorf("invalid discovery data")
|
||||||
}
|
}
|
||||||
d.nodeJoin(nodeData.Address, nodeData.Self)
|
d.nodeJoin(nodeData.Address, nodeData.Self)
|
||||||
|
|
Loading…
Reference in New Issue