Skip to content

Commit 6645ff8

Browse files
committed
Vendoring libnetwork for 1.12.1-rc1
* Fixes moby#25236 * Fixes moby#24789 * Fixes moby#25340 * Fixes moby#25130 * Fixes moby/libnetwork#1387 * Fix external DNS responses > 512 bytes getting dropped * Fix crash when remote plugin returns empty address string * Make service LB work from self * Fixed a few race-conditions Signed-off-by: Madhu Venugopal <[email protected]>
1 parent 2a540c1 commit 6645ff8

33 files changed

+321
-177
lines changed

hack/vendor.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ clone git github.com/RackSec/srslog 259aed10dfa74ea2961eddd1d9847619f6e98837
6666
clone git github.com/imdario/mergo 0.2.1
6767

6868
#get libnetwork packages
69-
clone git github.com/docker/libnetwork 5e7bf83ab07c197d1bef6ec073d9f19ce59e3eb2
69+
clone git github.com/docker/libnetwork f77a0c9f540536c37019cf64d09a9a932dd7b54b
7070
clone git github.com/docker/go-events afb2b9f2c23f33ada1a22b03651775fdc65a5089
7171
clone git github.com/armon/go-radix e39d623f12e8e41c7b5529e9a9dd67a1e2261f80
7272
clone git github.com/armon/go-metrics eb0af217e5e9747e41dd5303755356b62d28e3ec

vendor/src/github.com/docker/libnetwork/agent.go

+23-85
Original file line numberDiff line numberDiff line change
@@ -136,10 +136,16 @@ func (c *controller) handleKeyChange(keys []*types.EncryptionKey) error {
136136
}
137137
}
138138

139-
key, tag := c.getPrimaryKeyTag(subsysGossip)
139+
key, tag, err := c.getPrimaryKeyTag(subsysGossip)
140+
if err != nil {
141+
return err
142+
}
140143
a.networkDB.SetPrimaryKey(key)
141144

142-
key, tag = c.getPrimaryKeyTag(subsysIPSec)
145+
key, tag, err = c.getPrimaryKeyTag(subsysIPSec)
146+
if err != nil {
147+
return err
148+
}
143149
drvEnc.Primary = key
144150
drvEnc.PrimaryTag = tag
145151

@@ -158,82 +164,6 @@ func (c *controller) handleKeyChange(keys []*types.EncryptionKey) error {
158164
return nil
159165
}
160166

161-
func (c *controller) handleKeyChangeV1(keys []*types.EncryptionKey) error {
162-
drvEnc := discoverapi.DriverEncryptionUpdate{}
163-
164-
// Find the new key and add it to the key ring
165-
a := c.agent
166-
for _, key := range keys {
167-
same := false
168-
for _, cKey := range c.keys {
169-
if same = cKey.LamportTime == key.LamportTime; same {
170-
break
171-
}
172-
}
173-
if !same {
174-
c.keys = append(c.keys, key)
175-
if key.Subsystem == subsysGossip {
176-
a.networkDB.SetKey(key.Key)
177-
}
178-
if key.Subsystem == subsysGossip /*subsysIPSec*/ {
179-
drvEnc.Key = key.Key
180-
drvEnc.Tag = key.LamportTime
181-
}
182-
break
183-
}
184-
}
185-
// Find the deleted key. If the deleted key was the primary key,
186-
// a new primary key should be set before removing if from keyring.
187-
deleted := []byte{}
188-
for i, cKey := range c.keys {
189-
same := false
190-
for _, key := range keys {
191-
if same = key.LamportTime == cKey.LamportTime; same {
192-
break
193-
}
194-
}
195-
if !same {
196-
if cKey.Subsystem == subsysGossip {
197-
deleted = cKey.Key
198-
}
199-
if cKey.Subsystem == subsysGossip /*subsysIPSec*/ {
200-
drvEnc.Prune = cKey.Key
201-
drvEnc.PruneTag = cKey.LamportTime
202-
}
203-
c.keys = append(c.keys[:i], c.keys[i+1:]...)
204-
break
205-
}
206-
}
207-
208-
sort.Sort(ByTime(c.keys))
209-
for _, key := range c.keys {
210-
if key.Subsystem == subsysGossip {
211-
a.networkDB.SetPrimaryKey(key.Key)
212-
break
213-
}
214-
}
215-
for _, key := range c.keys {
216-
if key.Subsystem == subsysGossip /*subsysIPSec*/ {
217-
drvEnc.Primary = key.Key
218-
drvEnc.PrimaryTag = key.LamportTime
219-
break
220-
}
221-
}
222-
if len(deleted) > 0 {
223-
a.networkDB.RemoveKey(deleted)
224-
}
225-
226-
c.drvRegistry.WalkDrivers(func(name string, driver driverapi.Driver, capability driverapi.Capability) bool {
227-
err := driver.DiscoverNew(discoverapi.EncryptionKeysUpdate, drvEnc)
228-
if err != nil {
229-
logrus.Warnf("Failed to update datapath keys in driver %s: %v", name, err)
230-
}
231-
return false
232-
})
233-
234-
return nil
235-
}
236-
237167
func (c *controller) agentSetup() error {
238168
clusterProvider := c.cfg.Daemon.ClusterProvider
239169

@@ -281,25 +211,22 @@ func (c *controller) getKeys(subsys string) ([][]byte, []uint64) {
281211
}
282212
}
283213

284-
if len(keys) < keyringSize {
285-
return keys, tags
286-
}
287214
keys[0], keys[1] = keys[1], keys[0]
288215
tags[0], tags[1] = tags[1], tags[0]
289216
return keys, tags
290217
}
291218

292-
// getPrimaryKeyTag returns the primary key for a given subsytem from the
219+
// getPrimaryKeyTag returns the primary key for a given subsystem from the
293220
// list of sorted key and the associated tag
294-
func (c *controller) getPrimaryKeyTag(subsys string) ([]byte, uint64) {
221+
func (c *controller) getPrimaryKeyTag(subsys string) ([]byte, uint64, error) {
295222
sort.Sort(ByTime(c.keys))
296223
keys := []*types.EncryptionKey{}
297224
for _, key := range c.keys {
298225
if key.Subsystem == subsys {
299226
keys = append(keys, key)
300227
}
301228
}
302-
return keys[1].Key, keys[1].LamportTime
229+
return keys[1].Key, keys[1].LamportTime, nil
303230
}
304231

305232
func (c *controller) agentInit(bindAddrOrInterface, advertiseAddr string) error {
@@ -462,6 +389,7 @@ func (ep *endpoint) addToCluster() error {
462389
VirtualIP: ep.virtualIP.String(),
463390
IngressPorts: ingressPorts,
464391
Aliases: ep.svcAliases,
392+
TaskAliases: ep.myAliases,
465393
EndpointIP: ep.Iface().Address().IP.String(),
466394
})
467395

@@ -540,7 +468,10 @@ func (n *network) addDriverWatches() {
540468
}
541469

542470
c.agent.networkDB.WalkTable(tableName, func(nid, key string, value []byte) bool {
543-
d.EventNotify(driverapi.Create, n.ID(), tableName, key, value)
471+
if nid == n.ID() {
472+
d.EventNotify(driverapi.Create, nid, tableName, key, value)
473+
}
474+
544475
return false
545476
})
546477
}
@@ -653,6 +584,7 @@ func (c *controller) handleEpTableEvent(ev events.Event) {
653584
ip := net.ParseIP(epRec.EndpointIP)
654585
ingressPorts := epRec.IngressPorts
655586
aliases := epRec.Aliases
587+
taskaliases := epRec.TaskAliases
656588

657589
if name == "" || ip == nil {
658590
logrus.Errorf("Invalid endpoint name/ip received while handling service table event %s", value)
@@ -668,6 +600,9 @@ func (c *controller) handleEpTableEvent(ev events.Event) {
668600
}
669601

670602
n.addSvcRecords(name, ip, nil, true)
603+
for _, alias := range taskaliases {
604+
n.addSvcRecords(alias, ip, nil, true)
605+
}
671606
} else {
672607
if svcID != "" {
673608
if err := c.rmServiceBinding(svcName, svcID, nid, eid, vip, ingressPorts, aliases, ip); err != nil {
@@ -677,5 +612,8 @@ func (c *controller) handleEpTableEvent(ev events.Event) {
677612
}
678613

679614
n.deleteSvcRecords(name, ip, nil, true)
615+
for _, alias := range taskaliases {
616+
n.deleteSvcRecords(alias, ip, nil, true)
617+
}
680618
}
681619
}

vendor/src/github.com/docker/libnetwork/agent.pb.go

+81-26
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/src/github.com/docker/libnetwork/agent.proto

+3
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@ message EndpointRecord {
3434

3535
// A list of aliases which are alternate names for the service
3636
repeated string aliases = 7;
37+
38+
// List of aliases task specific aliases
39+
repeated string task_aliases = 8;
3740
}
3841

3942
// PortConfig specifies an exposed port which can be

vendor/src/github.com/docker/libnetwork/controller.go

+16-4
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ type NetworkController interface {
9797
// Sandboxes returns the list of Sandbox(s) managed by this controller.
9898
Sandboxes() []Sandbox
9999

100-
// WlakSandboxes uses the provided function to walk the Sandbox(s) managed by this controller.
100+
// WalkSandboxes uses the provided function to walk the Sandbox(s) managed by this controller.
101101
WalkSandboxes(walker SandboxWalker)
102102

103103
// SandboxByID returns the Sandbox which has the passed id. If not found, a types.NotFoundError is returned.
@@ -250,6 +250,21 @@ func (c *controller) SetKeys(keys []*types.EncryptionKey) error {
250250
clusterConfigAvailable := c.clusterConfigAvailable
251251
agent := c.agent
252252
c.Unlock()
253+
254+
subsysKeys := make(map[string]int)
255+
for _, key := range keys {
256+
if key.Subsystem != subsysGossip &&
257+
key.Subsystem != subsysIPSec {
258+
return fmt.Errorf("key received for unrecognized subsystem")
259+
}
260+
subsysKeys[key.Subsystem]++
261+
}
262+
for s, count := range subsysKeys {
263+
if count != keyringSize {
264+
return fmt.Errorf("incorrect number of keys for susbsystem %v", s)
265+
}
266+
}
267+
253268
if len(existingKeys) == 0 {
254269
c.Lock()
255270
c.keys = keys
@@ -269,9 +284,6 @@ func (c *controller) SetKeys(keys []*types.EncryptionKey) error {
269284
c.Unlock()
270285
return nil
271286
}
272-
if len(keys) < keyringSize {
273-
return c.handleKeyChangeV1(keys)
274-
}
275287
return c.handleKeyChange(keys)
276288
}
277289

0 commit comments

Comments
 (0)