Skip to content

Commit 8340e10

Browse files
committed
libn/d/win/overlay: dedupe NetworkDB definitions
Windows and Linux overlay driver instances are interoperable, working from the same NetworkDB table for peer discovery. As both drivers produce and consume serialized data through the table, they both need to have a shared understanding of the shape and semantics of that data. The Windows overlay driver contains a duplicate copy of the protobuf definitions used for marshaling and unmarshaling the NetworkDB peer entries for dubious reasons. It gives us the flexibility to have the definitions diverge, which is only really useful for shooting ourselves in the foot. Make daemon/libnetwork/drivers/overlay the source of truth for the peer record definitions and the name of the NetworkDB table for distributing peer records. Signed-off-by: Cory Snider <[email protected]>
1 parent c7b9370 commit 8340e10

10 files changed

Lines changed: 15 additions & 499 deletions

File tree

daemon/libnetwork/drivers/overlay/joinleave.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -137,15 +137,15 @@ func (d *driver) Join(ctx context.Context, nid, eid string, sboxKey string, jinf
137137
return err
138138
}
139139

140-
if err := jinfo.AddTableEntry(ovPeerTable, eid, buf); err != nil {
140+
if err := jinfo.AddTableEntry(OverlayPeerTable, eid, buf); err != nil {
141141
log.G(ctx).Errorf("overlay: Failed adding table entry to joininfo: %v", err)
142142
}
143143

144144
return nil
145145
}
146146

147147
func (d *driver) DecodeTableEntry(tablename string, key string, value []byte) (string, map[string]string) {
148-
if tablename != ovPeerTable {
148+
if tablename != OverlayPeerTable {
149149
log.G(context.TODO()).Errorf("DecodeTableEntry: unexpected table name %s", tablename)
150150
return "", nil
151151
}
@@ -162,7 +162,7 @@ func (d *driver) DecodeTableEntry(tablename string, key string, value []byte) (s
162162
}
163163

164164
func (d *driver) EventNotify(etype driverapi.EventType, nid, tableName, key string, value []byte) {
165-
if tableName != ovPeerTable {
165+
if tableName != OverlayPeerTable {
166166
log.G(context.TODO()).Errorf("Unexpected table notification for table %s received", tableName)
167167
return
168168
}

daemon/libnetwork/drivers/overlay/ov_network.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ func (d *driver) CreateNetwork(ctx context.Context, id string, option map[string
198198
}
199199

200200
if nInfo != nil {
201-
if err := nInfo.TableEventRegister(ovPeerTable, driverapi.EndpointObject); err != nil {
201+
if err := nInfo.TableEventRegister(OverlayPeerTable, driverapi.EndpointObject); err != nil {
202202
return err
203203
}
204204
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
package overlay
2+
3+
// OverlayPeerTable is the NetworkDB table for overlay network peer discovery.
4+
const OverlayPeerTable = "overlay_peer_table"

daemon/libnetwork/drivers/overlay/peerdb.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@ import (
1616
"github.com/docker/docker/daemon/libnetwork/osl"
1717
)
1818

19-
const ovPeerTable = "overlay_peer_table"
20-
2119
type peerEntry struct {
2220
eid string
2321
mac hashable.MACAddr

daemon/libnetwork/drivers/windows/overlay/joinleave_windows.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77

88
"github.com/containerd/log"
99
"github.com/docker/docker/daemon/libnetwork/driverapi"
10+
"github.com/docker/docker/daemon/libnetwork/drivers/overlay"
1011
"github.com/docker/docker/daemon/libnetwork/types"
1112
"github.com/gogo/protobuf/proto"
1213
"go.opentelemetry.io/otel"
@@ -36,7 +37,7 @@ func (d *driver) Join(ctx context.Context, nid, eid string, sboxKey string, jinf
3637
return fmt.Errorf("could not find endpoint with id %s", eid)
3738
}
3839

39-
buf, err := proto.Marshal(&PeerRecord{
40+
buf, err := proto.Marshal(&overlay.PeerRecord{
4041
EndpointIP: ep.addr.String(),
4142
EndpointMAC: ep.mac.String(),
4243
TunnelEndpointIP: n.providerAddress,
@@ -45,7 +46,7 @@ func (d *driver) Join(ctx context.Context, nid, eid string, sboxKey string, jinf
4546
return err
4647
}
4748

48-
if err := jinfo.AddTableEntry(ovPeerTable, eid, buf); err != nil {
49+
if err := jinfo.AddTableEntry(overlay.OverlayPeerTable, eid, buf); err != nil {
4950
log.G(ctx).Errorf("overlay: Failed adding table entry to joininfo: %v", err)
5051
}
5152

@@ -57,14 +58,14 @@ func (d *driver) Join(ctx context.Context, nid, eid string, sboxKey string, jinf
5758
}
5859

5960
func (d *driver) EventNotify(etype driverapi.EventType, nid, tableName, key string, value []byte) {
60-
if tableName != ovPeerTable {
61+
if tableName != overlay.OverlayPeerTable {
6162
log.G(context.TODO()).Errorf("Unexpected table notification for table %s received", tableName)
6263
return
6364
}
6465

6566
eid := key
6667

67-
var peer PeerRecord
68+
var peer overlay.PeerRecord
6869
if err := proto.Unmarshal(value, &peer); err != nil {
6970
log.G(context.TODO()).Errorf("Failed to unmarshal peer record: %v", err)
7071
return

daemon/libnetwork/drivers/windows/overlay/ov_network_windows.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"github.com/Microsoft/hcsshim"
1414
"github.com/containerd/log"
1515
"github.com/docker/docker/daemon/libnetwork/driverapi"
16+
"github.com/docker/docker/daemon/libnetwork/drivers/overlay"
1617
"github.com/docker/docker/daemon/libnetwork/netlabel"
1718
"github.com/docker/docker/daemon/libnetwork/portmapper"
1819
"github.com/docker/docker/daemon/libnetwork/types"
@@ -174,7 +175,7 @@ func (d *driver) CreateNetwork(ctx context.Context, id string, option map[string
174175
n.interfaceName = interfaceName
175176

176177
if nInfo != nil {
177-
if err := nInfo.TableEventRegister(ovPeerTable, driverapi.EndpointObject); err != nil {
178+
if err := nInfo.TableEventRegister(overlay.OverlayPeerTable, driverapi.EndpointObject); err != nil {
178179
return err
179180
}
180181
}

0 commit comments

Comments
 (0)