mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-10-31 02:08:13 +00:00 
			
		
		
		
	Merge pull request #44313 from thockin/proxy-healthchecks
Automatic merge from submit-queue Zero-out healthchecks when no endpoints Fixes #44311
This commit is contained in:
		| @@ -196,6 +196,7 @@ func (h hcHandler) ServeHTTP(resp http.ResponseWriter, req *http.Request) { | ||||
| 	h.hcs.lock.Lock() | ||||
| 	count := h.hcs.services[h.name].endpoints | ||||
| 	h.hcs.lock.Unlock() | ||||
|  | ||||
| 	resp.Header().Set("Content-Type", "application/json") | ||||
| 	if count == 0 { | ||||
| 		resp.WriteHeader(http.StatusServiceUnavailable) | ||||
| @@ -225,5 +226,10 @@ func (hcs *server) SyncEndpoints(newEndpoints map[types.NamespacedName]int) erro | ||||
| 		glog.V(3).Infof("Reporting %d endpoints for healthcheck %q", count, nsn.String()) | ||||
| 		hcs.services[nsn].endpoints = count | ||||
| 	} | ||||
| 	for nsn, hci := range hcs.services { | ||||
| 		if _, found := newEndpoints[nsn]; !found { | ||||
| 			hci.endpoints = 0 | ||||
| 		} | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|   | ||||
| @@ -174,6 +174,14 @@ func TestServer(t *testing.T) { | ||||
| 	// test the handler | ||||
| 	testHandler(hcs, nsn, http.StatusServiceUnavailable, 0, t) | ||||
|  | ||||
| 	// put the endpoint back | ||||
| 	hcs.SyncEndpoints(map[types.NamespacedName]int{nsn: 11}) | ||||
| 	if len(hcs.services) != 1 { | ||||
| 		t.Errorf("expected 1 service, got %d", len(hcs.services)) | ||||
| 	} | ||||
| 	if hcs.services[nsn].endpoints != 11 { | ||||
| 		t.Errorf("expected 18 endpoints, got %d", hcs.services[nsn].endpoints) | ||||
| 	} | ||||
| 	// sync nil endpoints | ||||
| 	hcs.SyncEndpoints(nil) | ||||
| 	if len(hcs.services) != 1 { | ||||
| @@ -227,6 +235,7 @@ func TestServer(t *testing.T) { | ||||
| 	// test the handlers | ||||
| 	testHandler(hcs, nsn1, http.StatusServiceUnavailable, 0, t) | ||||
| 	testHandler(hcs, nsn2, http.StatusServiceUnavailable, 0, t) | ||||
| 	testHandler(hcs, nsn3, http.StatusServiceUnavailable, 0, t) | ||||
|  | ||||
| 	// sync endpoints | ||||
| 	hcs.SyncEndpoints(map[types.NamespacedName]int{ | ||||
| @@ -298,6 +307,28 @@ func TestServer(t *testing.T) { | ||||
| 	testHandler(hcs, nsn2, http.StatusOK, 3, t) | ||||
| 	testHandler(hcs, nsn3, http.StatusOK, 7, t) | ||||
| 	testHandler(hcs, nsn4, http.StatusOK, 6, t) | ||||
|  | ||||
| 	// sync endpoints, missing nsn2 | ||||
| 	hcs.SyncEndpoints(map[types.NamespacedName]int{ | ||||
| 		nsn3: 7, | ||||
| 		nsn4: 6, | ||||
| 	}) | ||||
| 	if len(hcs.services) != 3 { | ||||
| 		t.Errorf("expected 3 services, got %d", len(hcs.services)) | ||||
| 	} | ||||
| 	if hcs.services[nsn2].endpoints != 0 { | ||||
| 		t.Errorf("expected 0 endpoints, got %d", hcs.services[nsn2].endpoints) | ||||
| 	} | ||||
| 	if hcs.services[nsn3].endpoints != 7 { | ||||
| 		t.Errorf("expected 7 endpoints, got %d", hcs.services[nsn3].endpoints) | ||||
| 	} | ||||
| 	if hcs.services[nsn4].endpoints != 6 { | ||||
| 		t.Errorf("expected 6 endpoints, got %d", hcs.services[nsn4].endpoints) | ||||
| 	} | ||||
| 	// test the handlers | ||||
| 	testHandler(hcs, nsn2, http.StatusServiceUnavailable, 0, t) | ||||
| 	testHandler(hcs, nsn3, http.StatusOK, 7, t) | ||||
| 	testHandler(hcs, nsn4, http.StatusOK, 6, t) | ||||
| } | ||||
|  | ||||
| func testHandler(hcs *server, nsn types.NamespacedName, status int, endpoints int, t *testing.T) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Kubernetes Submit Queue
					Kubernetes Submit Queue