Skip to content

Commit 94e4e39

Browse files
committed
Introduce discoverapi.Discover interface
- Move DiscoverNew() and DiscoverDelete() methods into the new interface - Add DatastoreUpdate notification - Now this interface can be implemented by any drivers, not only network drivers Signed-off-by: Alessandro Boch <aboch@docker.com>
1 parent 82252ef commit 94e4e39

13 files changed

Lines changed: 79 additions & 48 deletions

File tree

controller.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ import (
5656
"github.com/docker/docker/pkg/stringid"
5757
"github.com/docker/libnetwork/config"
5858
"github.com/docker/libnetwork/datastore"
59+
"github.com/docker/libnetwork/discoverapi"
5960
"github.com/docker/libnetwork/driverapi"
6061
"github.com/docker/libnetwork/hostdiscovery"
6162
"github.com/docker/libnetwork/ipamapi"
@@ -288,12 +289,12 @@ func (c *controller) pushNodeDiscovery(d *driverData, nodes []net.IP, add bool)
288289
return
289290
}
290291
for _, node := range nodes {
291-
nodeData := driverapi.NodeDiscoveryData{Address: node.String(), Self: node.Equal(self)}
292+
nodeData := discoverapi.NodeDiscoveryData{Address: node.String(), Self: node.Equal(self)}
292293
var err error
293294
if add {
294-
err = d.driver.DiscoverNew(driverapi.NodeDiscovery, nodeData)
295+
err = d.driver.DiscoverNew(discoverapi.NodeDiscovery, nodeData)
295296
} else {
296-
err = d.driver.DiscoverDelete(driverapi.NodeDiscovery, nodeData)
297+
err = d.driver.DiscoverDelete(discoverapi.NodeDiscovery, nodeData)
297298
}
298299
if err != nil {
299300
log.Debugf("discovery notification error : %v", err)

discoverapi/discoverapi.go

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package discoverapi
2+
3+
// Discover is an interface to be implemented by the componenet interested in receiving discover events
4+
// like new node joining the cluster or datastore updates
5+
type Discover interface {
6+
// DiscoverNew is a notification for a new discovery event, Example:a new node joining a cluster
7+
DiscoverNew(dType DiscoveryType, data interface{}) error
8+
9+
// DiscoverDelete is a notification for a discovery delete event, Example:a node leaving a cluster
10+
DiscoverDelete(dType DiscoveryType, data interface{}) error
11+
}
12+
13+
// DiscoveryType represents the type of discovery element the DiscoverNew function is invoked on
14+
type DiscoveryType int
15+
16+
const (
17+
// NodeDiscovery represents Node join/leave events provided by discovery
18+
NodeDiscovery = iota + 1
19+
// DatastoreUpdate represents a add/remove datastore event
20+
DatastoreUpdate
21+
)
22+
23+
// NodeDiscoveryData represents the structure backing the node discovery data json string
24+
type NodeDiscoveryData struct {
25+
Address string
26+
Self bool
27+
}
28+
29+
// DatastoreUpdateData is the data for the datastore update event message
30+
type DatastoreUpdateData struct {
31+
Provider string
32+
Address string
33+
Config interface{}
34+
}

driverapi/driverapi.go

Lines changed: 7 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
11
package driverapi
22

3-
import "net"
3+
import (
4+
"net"
5+
6+
"github.com/docker/libnetwork/discoverapi"
7+
)
48

59
// NetworkPluginEndpointType represents the Endpoint Type used by Plugin system
610
const NetworkPluginEndpointType = "NetworkDriver"
711

812
// Driver is an interface that every plugin driver needs to implement.
913
type Driver interface {
14+
discoverapi.Discover
15+
1016
// CreateNetwork invokes the driver method to create a network passing
1117
// the network id and network specific config. The config mechanism will
1218
// eventually be replaced with labels which are yet to be introduced.
@@ -36,12 +42,6 @@ type Driver interface {
3642
// Leave method is invoked when a Sandbox detaches from an endpoint.
3743
Leave(nid, eid string) error
3844

39-
// DiscoverNew is a notification for a new discovery event, Example:a new node joining a cluster
40-
DiscoverNew(dType DiscoveryType, data interface{}) error
41-
42-
// DiscoverDelete is a notification for a discovery delete event, Example:a node leaving a cluster
43-
DiscoverDelete(dType DiscoveryType, data interface{}) error
44-
4545
// Type returns the the type of this driver, the network type this driver manages
4646
Type() string
4747
}
@@ -107,20 +107,6 @@ type Capability struct {
107107
DataScope string
108108
}
109109

110-
// DiscoveryType represents the type of discovery element the DiscoverNew function is invoked on
111-
type DiscoveryType int
112-
113-
const (
114-
// NodeDiscovery represents Node join/leave events provided by discovery
115-
NodeDiscovery = iota + 1
116-
)
117-
118-
// NodeDiscoveryData represents the structure backing the node discovery data json string
119-
type NodeDiscoveryData struct {
120-
Address string
121-
Self bool
122-
}
123-
124110
// IPAMData represents the per-network ip related
125111
// operational information libnetwork will send
126112
// to the network driver during CreateNetwork()

drivers/bridge/bridge.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515

1616
"github.com/Sirupsen/logrus"
1717
"github.com/docker/libnetwork/datastore"
18+
"github.com/docker/libnetwork/discoverapi"
1819
"github.com/docker/libnetwork/driverapi"
1920
"github.com/docker/libnetwork/iptables"
2021
"github.com/docker/libnetwork/netlabel"
@@ -1283,12 +1284,12 @@ func (d *driver) Type() string {
12831284
}
12841285

12851286
// DiscoverNew is a notification for a new discovery event, such as a new node joining a cluster
1286-
func (d *driver) DiscoverNew(dType driverapi.DiscoveryType, data interface{}) error {
1287+
func (d *driver) DiscoverNew(dType discoverapi.DiscoveryType, data interface{}) error {
12871288
return nil
12881289
}
12891290

12901291
// DiscoverDelete is a notification for a discovery delete event, such as a node leaving a cluster
1291-
func (d *driver) DiscoverDelete(dType driverapi.DiscoveryType, data interface{}) error {
1292+
func (d *driver) DiscoverDelete(dType discoverapi.DiscoveryType, data interface{}) error {
12921293
return nil
12931294
}
12941295

drivers/host/host.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"sync"
55

66
"github.com/docker/libnetwork/datastore"
7+
"github.com/docker/libnetwork/discoverapi"
78
"github.com/docker/libnetwork/driverapi"
89
"github.com/docker/libnetwork/types"
910
)
@@ -67,11 +68,11 @@ func (d *driver) Type() string {
6768
}
6869

6970
// DiscoverNew is a notification for a new discovery event, such as a new node joining a cluster
70-
func (d *driver) DiscoverNew(dType driverapi.DiscoveryType, data interface{}) error {
71+
func (d *driver) DiscoverNew(dType discoverapi.DiscoveryType, data interface{}) error {
7172
return nil
7273
}
7374

7475
// DiscoverDelete is a notification for a discovery delete event, such as a node leaving a cluster
75-
func (d *driver) DiscoverDelete(dType driverapi.DiscoveryType, data interface{}) error {
76+
func (d *driver) DiscoverDelete(dType discoverapi.DiscoveryType, data interface{}) error {
7677
return nil
7778
}

drivers/null/null.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"sync"
55

66
"github.com/docker/libnetwork/datastore"
7+
"github.com/docker/libnetwork/discoverapi"
78
"github.com/docker/libnetwork/driverapi"
89
"github.com/docker/libnetwork/types"
910
)
@@ -67,11 +68,11 @@ func (d *driver) Type() string {
6768
}
6869

6970
// DiscoverNew is a notification for a new discovery event, such as a new node joining a cluster
70-
func (d *driver) DiscoverNew(dType driverapi.DiscoveryType, data interface{}) error {
71+
func (d *driver) DiscoverNew(dType discoverapi.DiscoveryType, data interface{}) error {
7172
return nil
7273
}
7374

7475
// DiscoverDelete is a notification for a discovery delete event, such as a node leaving a cluster
75-
func (d *driver) DiscoverDelete(dType driverapi.DiscoveryType, data interface{}) error {
76+
func (d *driver) DiscoverDelete(dType discoverapi.DiscoveryType, data interface{}) error {
7677
return nil
7778
}

drivers/overlay/overlay.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"github.com/Sirupsen/logrus"
99
"github.com/docker/libkv/store"
1010
"github.com/docker/libnetwork/datastore"
11+
"github.com/docker/libnetwork/discoverapi"
1112
"github.com/docker/libnetwork/driverapi"
1213
"github.com/docker/libnetwork/idm"
1314
"github.com/docker/libnetwork/netlabel"
@@ -192,9 +193,9 @@ func (d *driver) pushLocalEndpointEvent(action, nid, eid string) {
192193
}
193194

194195
// DiscoverNew is a notification for a new discovery event, such as a new node joining a cluster
195-
func (d *driver) DiscoverNew(dType driverapi.DiscoveryType, data interface{}) error {
196-
if dType == driverapi.NodeDiscovery {
197-
nodeData, ok := data.(driverapi.NodeDiscoveryData)
196+
func (d *driver) DiscoverNew(dType discoverapi.DiscoveryType, data interface{}) error {
197+
if dType == discoverapi.NodeDiscovery {
198+
nodeData, ok := data.(discoverapi.NodeDiscoveryData)
198199
if !ok || nodeData.Address == "" {
199200
return fmt.Errorf("invalid discovery data")
200201
}
@@ -204,6 +205,6 @@ func (d *driver) DiscoverNew(dType driverapi.DiscoveryType, data interface{}) er
204205
}
205206

206207
// DiscoverDelete is a notification for a discovery delete event, such as a node leaving a cluster
207-
func (d *driver) DiscoverDelete(dType driverapi.DiscoveryType, data interface{}) error {
208+
func (d *driver) DiscoverDelete(dType discoverapi.DiscoveryType, data interface{}) error {
208209
return nil
209210
}

drivers/overlay/overlay_test.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"testing"
66
"time"
77

8+
"github.com/docker/libnetwork/discoverapi"
89
"github.com/docker/libnetwork/driverapi"
910
_ "github.com/docker/libnetwork/testutils"
1011
)
@@ -34,11 +35,11 @@ func setupDriver(t *testing.T) *driverTester {
3435
if err != nil || len(addrs) == 0 {
3536
t.Fatal(err)
3637
}
37-
data := driverapi.NodeDiscoveryData{
38+
data := discoverapi.NodeDiscoveryData{
3839
Address: addrs[0].String(),
3940
Self: true,
4041
}
41-
dt.d.DiscoverNew(driverapi.NodeDiscovery, data)
42+
dt.d.DiscoverNew(discoverapi.NodeDiscovery, data)
4243
return dt
4344
}
4445

drivers/remote/api/api.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ package api
77
import (
88
"net"
99

10+
"github.com/docker/libnetwork/discoverapi"
1011
"github.com/docker/libnetwork/driverapi"
1112
)
1213

@@ -154,7 +155,7 @@ type LeaveResponse struct {
154155

155156
// DiscoveryNotification represents a discovery notification
156157
type DiscoveryNotification struct {
157-
DiscoveryType driverapi.DiscoveryType
158+
DiscoveryType discoverapi.DiscoveryType
158159
DiscoveryData interface{}
159160
}
160161

drivers/remote/driver.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
log "github.com/Sirupsen/logrus"
88
"github.com/docker/docker/pkg/plugins"
99
"github.com/docker/libnetwork/datastore"
10+
"github.com/docker/libnetwork/discoverapi"
1011
"github.com/docker/libnetwork/driverapi"
1112
"github.com/docker/libnetwork/drivers/remote/api"
1213
"github.com/docker/libnetwork/types"
@@ -251,8 +252,8 @@ func (d *driver) Type() string {
251252
}
252253

253254
// DiscoverNew is a notification for a new discovery event, such as a new node joining a cluster
254-
func (d *driver) DiscoverNew(dType driverapi.DiscoveryType, data interface{}) error {
255-
if dType != driverapi.NodeDiscovery {
255+
func (d *driver) DiscoverNew(dType discoverapi.DiscoveryType, data interface{}) error {
256+
if dType != discoverapi.NodeDiscovery {
256257
return fmt.Errorf("Unknown discovery type : %v", dType)
257258
}
258259
notif := &api.DiscoveryNotification{
@@ -263,8 +264,8 @@ func (d *driver) DiscoverNew(dType driverapi.DiscoveryType, data interface{}) er
263264
}
264265

265266
// DiscoverDelete is a notification for a discovery delete event, such as a node leaving a cluster
266-
func (d *driver) DiscoverDelete(dType driverapi.DiscoveryType, data interface{}) error {
267-
if dType != driverapi.NodeDiscovery {
267+
func (d *driver) DiscoverDelete(dType discoverapi.DiscoveryType, data interface{}) error {
268+
if dType != discoverapi.NodeDiscovery {
268269
return fmt.Errorf("Unknown discovery type : %v", dType)
269270
}
270271
notif := &api.DiscoveryNotification{

0 commit comments

Comments
 (0)