func pruneShuttleBackends(configStore *config.Store, env, shuttleAddr string) { if client == nil { return } config, err := client.GetConfig() if err != nil { log.Errorf("ERROR: Unable to get shuttle config: %s", err) return } registrations, err := configStore.ListRegistrations(env) if err != nil { log.Errorf("ERROR: Unable to list registrations: %s", err) return } // FIXME: THERE SHOULD HAVE BEEN AN ERROR IF `len(registrations) == 0` IS WRONG! if len(registrations) == 0 { // If there are no registrations, skip pruning it because we might be in a bad state and // don't want to inadvertently unregister everything. Shuttle will handle the down // nodes if they are really down. return } for _, service := range config.Services { app, err := configStore.GetApp(service.Name, env) if err != nil { log.Errorf("ERROR: Unable to load app %s: %s", app, err) continue } pools, err := configStore.ListAssignedPools(env, service.Name) if err != nil { log.Errorf("ERROR: Unable to list pool assignments for %s: %s", service.Name, err) continue } if app == nil || len(pools) == 0 { err := client.RemoveService(service.Name) if err != nil { log.Errorf("ERROR: Unable to remove service %s from shuttle: %s", service.Name, err) } log.Printf("Unregisterred shuttle service %s", service.Name) continue } for _, backend := range service.Backends { backendExists := false for _, r := range registrations { if backend.Name == r.ContainerID[0:12] { backendExists = true break } } if !backendExists { err := client.RemoveBackend(service.Name, backend.Name) if err != nil { log.Errorf("ERROR: Unable to remove backend %s from shuttle: %s", backend.Name, err) } log.Printf("Unregisterred shuttle backend %s", backend.Name) } } } }