Merge pull request #682 from mrjana/epclean

Cleanup dangling local endpoints
This commit is contained in:
Madhu Venugopal 2015-10-19 23:58:14 +02:00
commit 7008ac7948
3 changed files with 55 additions and 0 deletions

View file

@ -192,6 +192,7 @@ func New(cfgOptions ...config.Option) (NetworkController, error) {
}
c.sandboxCleanup()
c.cleanupLocalEndpoints()
if err := c.startExternalKeyListener(); err != nil {
return nil, err

View file

@ -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)
}
}
}
}

View file

@ -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