Return the dead node when deleting the service
This commit is contained in:
		| @@ -224,9 +224,14 @@ func (cw *consulWatcher) handle(idx uint64, data interface{}) { | |||||||
| 	cw.RUnlock() | 	cw.RUnlock() | ||||||
|  |  | ||||||
| 	// remove unknown services from registry | 	// remove unknown services from registry | ||||||
|  | 	// save the things we want to delete | ||||||
|  | 	deleted := make(map[string][]*registry.Service) | ||||||
|  |  | ||||||
| 	for service, _ := range rservices { | 	for service, _ := range rservices { | ||||||
| 		if _, ok := services[service]; !ok { | 		if _, ok := services[service]; !ok { | ||||||
| 			cw.Lock() | 			cw.Lock() | ||||||
|  | 			// save this before deleting | ||||||
|  | 			deleted[service] = cw.services[service] | ||||||
| 			delete(cw.services, service) | 			delete(cw.services, service) | ||||||
| 			cw.Unlock() | 			cw.Unlock() | ||||||
| 		} | 		} | ||||||
| @@ -237,6 +242,11 @@ func (cw *consulWatcher) handle(idx uint64, data interface{}) { | |||||||
| 		if _, ok := services[service]; !ok { | 		if _, ok := services[service]; !ok { | ||||||
| 			w.Stop() | 			w.Stop() | ||||||
| 			delete(cw.watchers, service) | 			delete(cw.watchers, service) | ||||||
|  | 			for _, oldService := range deleted[service] { | ||||||
|  | 				// send a delete for the service nodes that we're removing | ||||||
|  | 				cw.next <- ®istry.Result{Action: "delete", Service: oldService} | ||||||
|  | 			} | ||||||
|  | 			// sent the empty list as the last resort to indicate to delete the entire service | ||||||
| 			cw.next <- ®istry.Result{Action: "delete", Service: ®istry.Service{Name: service}} | 			cw.next <- ®istry.Result{Action: "delete", Service: ®istry.Service{Name: service}} | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user