diff --git a/libnetwork/agent.go b/libnetwork/agent.go index e7e673f5ec..6e5deb502f 100644 --- a/libnetwork/agent.go +++ b/libnetwork/agent.go @@ -452,18 +452,24 @@ func (n *Network) Services() map[string]ServiceInfo { if agent == nil { return nil } + nwID := n.ID() + d, err := n.driver(true) + if err != nil { + log.G(context.TODO()).Errorf("Could not resolve driver for network %s/%s while fetching services: %v", n.networkType, nwID, err) + return nil + } // Walk through libnetworkEPTable and fetch the driver agnostic endpoint info - entries := agent.networkDB.GetTableByNetwork(libnetworkEPTable, n.id) + entries := agent.networkDB.GetTableByNetwork(libnetworkEPTable, nwID) eps := make(map[string]epRecord) + c := n.getController() for eid, value := range entries { var epRec EndpointRecord - nid := n.ID() if err := proto.Unmarshal(value.Value, &epRec); err != nil { - log.G(context.TODO()).Errorf("Unmarshal of libnetworkEPTable failed for endpoint %s in network %s, %v", eid, nid, err) + log.G(context.TODO()).Errorf("Unmarshal of libnetworkEPTable failed for endpoint %s in network %s, %v", eid, nwID, err) continue } - i := n.getController().getLBIndex(epRec.ServiceID, nid, epRec.IngressPorts) + i := c.getLBIndex(epRec.ServiceID, nwID, epRec.IngressPorts) eps[eid] = epRecord{ ep: epRec, lbIndex: i, @@ -473,16 +479,11 @@ func (n *Network) Services() map[string]ServiceInfo { // Walk through the driver's tables, have the driver decode the entries // and return the tuple {ep ID, value}. value is a string that coveys // relevant info about the endpoint. - d, err := n.driver(true) - if err != nil { - log.G(context.TODO()).Errorf("Could not resolve driver for network %s/%s while fetching services: %v", n.networkType, n.ID(), err) - return nil - } for _, table := range n.driverTables { if table.objType != driverapi.EndpointObject { continue } - entries := agent.networkDB.GetTableByNetwork(table.name, n.id) + entries := agent.networkDB.GetTableByNetwork(table.name, nwID) for key, value := range entries { epID, info := d.DecodeTableEntry(table.name, key, value.Value) if ep, ok := eps[epID]; !ok {