mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
Cleanup dangling local endpoints
When we bootup cleanup all dangling local endpoints since they are not needed anymore. The only reason it can happen is when the process went down ungracefully after an endpoint is created but before join is successfull. Signed-off-by: Jana Radhakrishnan <mrjana@docker.com>
This commit is contained in:
parent
9145f18132
commit
33d336ac72
3 changed files with 55 additions and 0 deletions
|
@ -192,6 +192,7 @@ func New(cfgOptions ...config.Option) (NetworkController, error) {
|
|||
}
|
||||
|
||||
c.sandboxCleanup()
|
||||
c.cleanupLocalEndpoints()
|
||||
|
||||
if err := c.startExternalKeyListener(); err != nil {
|
||||
return nil, err
|
||||
|
|
|
@ -708,3 +708,25 @@ func (ep *endpoint) releaseAddress() {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (c *controller) cleanupLocalEndpoints() {
|
||||
nl, err := c.getNetworksForScope(datastore.LocalScope)
|
||||
if err != nil {
|
||||
log.Warnf("Could not get list of networks during endpoint cleanup: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
for _, n := range nl {
|
||||
epl, err := n.getEndpointsFromStore()
|
||||
if err != nil {
|
||||
log.Warnf("Could not get list of endpoints in network %s during endpoint cleanup: %v", n.name, err)
|
||||
continue
|
||||
}
|
||||
|
||||
for _, ep := range epl {
|
||||
if err := ep.Delete(); err != nil {
|
||||
log.Warnf("Could not delete local endpoint %s during endpoint cleanup: %v", ep.name, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -82,6 +82,38 @@ func (c *controller) getNetworkFromStore(nid string) (*network, error) {
|
|||
return nil, fmt.Errorf("network %s not found", nid)
|
||||
}
|
||||
|
||||
func (c *controller) getNetworksForScope(scope string) ([]*network, error) {
|
||||
var nl []*network
|
||||
|
||||
store := c.getStore(scope)
|
||||
if store == nil {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
kvol, err := store.List(datastore.Key(datastore.NetworkKeyPrefix),
|
||||
&network{ctrlr: c})
|
||||
if err != nil && err != datastore.ErrKeyNotFound {
|
||||
return nil, fmt.Errorf("failed to get networks for scope %s: %v",
|
||||
scope, err)
|
||||
}
|
||||
|
||||
for _, kvo := range kvol {
|
||||
n := kvo.(*network)
|
||||
n.ctrlr = c
|
||||
|
||||
ec := &endpointCnt{n: n}
|
||||
err = store.GetObject(datastore.Key(ec.Key()...), ec)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("could not find endpoint count key %s for network %s while listing: %v", datastore.Key(ec.Key()...), n.Name(), err)
|
||||
}
|
||||
|
||||
n.epCnt = ec
|
||||
nl = append(nl, n)
|
||||
}
|
||||
|
||||
return nl, nil
|
||||
}
|
||||
|
||||
func (c *controller) getNetworksFromStore() ([]*network, error) {
|
||||
var nl []*network
|
||||
|
||||
|
|
Loading…
Reference in a new issue