//RestoreServiceProviderLBDb restores provider and servicelb db func RestoreServiceProviderLBDb() { log.Infof("Restoring ProviderDb and ServiceDB cache") svcLBState := &mastercfg.CfgServiceLBState{} stateDriver, err := utils.GetStateDriver() if err != nil { log.Errorf("Error Restoring Service and ProviderDb Err:%s", err) return } svcLBState.StateDriver = stateDriver svcLBCfgs, err := svcLBState.ReadAll() if err == nil { mastercfg.SvcMutex.Lock() for _, svcLBCfg := range svcLBCfgs { svcLB := svcLBCfg.(*mastercfg.CfgServiceLBState) //mastercfg.ServiceLBDb = make(map[string]*mastercfg.ServiceLBInfo) serviceID := GetServiceID(svcLB.ServiceName, svcLB.Tenant) mastercfg.ServiceLBDb[serviceID] = &mastercfg.ServiceLBInfo{ IPAddress: svcLB.IPAddress, Tenant: svcLB.Tenant, ServiceName: svcLB.ServiceName, Network: svcLB.Network, } mastercfg.ServiceLBDb[serviceID].Ports = append(mastercfg.ServiceLBDb[serviceID].Ports, svcLB.Ports...) mastercfg.ServiceLBDb[serviceID].Selectors = make(map[string]string) mastercfg.ServiceLBDb[serviceID].Providers = make(map[string]*mastercfg.Provider) for k, v := range svcLB.Selectors { mastercfg.ServiceLBDb[serviceID].Selectors[k] = v } for providerID, providerInfo := range svcLB.Providers { mastercfg.ServiceLBDb[serviceID].Providers[providerID] = providerInfo providerDBId := providerInfo.ContainerID mastercfg.ProviderDb[providerDBId] = providerInfo } } mastercfg.SvcMutex.Unlock() } //Recover from endpoint state as well . epCfgState := mastercfg.CfgEndpointState{} epCfgState.StateDriver = stateDriver epCfgs, err := epCfgState.ReadAll() if err == nil { for _, epCfg := range epCfgs { ep := epCfg.(*mastercfg.CfgEndpointState) providerDBId := ep.ContainerID if ep.Labels != nil && mastercfg.ProviderDb[providerDBId] == nil { //Create provider info and store it in provider db providerInfo := &mastercfg.Provider{} providerInfo.ContainerID = ep.ContainerID providerInfo.Network = strings.Split(ep.NetID, ".")[0] providerInfo.Tenant = strings.Split(ep.NetID, ".")[1] providerInfo.Labels = make(map[string]string) providerInfo.IPAddress = ep.IPAddress for k, v := range ep.Labels { providerInfo.Labels[k] = v } mastercfg.SvcMutex.Lock() mastercfg.ProviderDb[providerDBId] = providerInfo mastercfg.SvcMutex.Unlock() } } } }