diff --git a/spring-cloud-kubernetes-leader/src/main/java/org/springframework/cloud/kubernetes/leader/LeaderProperties.java b/spring-cloud-kubernetes-leader/src/main/java/org/springframework/cloud/kubernetes/leader/LeaderProperties.java index 6787df01..b91f09b8 100644 --- a/spring-cloud-kubernetes-leader/src/main/java/org/springframework/cloud/kubernetes/leader/LeaderProperties.java +++ b/spring-cloud-kubernetes-leader/src/main/java/org/springframework/cloud/kubernetes/leader/LeaderProperties.java @@ -91,6 +91,12 @@ public class LeaderProperties { */ private double jitterFactor = DEFAULT_JITTER_FACTOR; + /** + * Enable/disable publishing events in case leadership acquisition fails. + * Default: false + */ + private boolean publishFailedEvents = false; + public boolean isAutoStartup() { return autoStartup; } @@ -170,4 +176,12 @@ public class LeaderProperties { public void setJitterFactor(double jitterFactor) { this.jitterFactor = jitterFactor; } + + public boolean isPublishFailedEvents() { + return publishFailedEvents; + } + + public void setPublishFailedEvents(boolean publishFailedEvents) { + this.publishFailedEvents = publishFailedEvents; + } } diff --git a/spring-cloud-kubernetes-leader/src/main/java/org/springframework/cloud/kubernetes/leader/LeadershipController.java b/spring-cloud-kubernetes-leader/src/main/java/org/springframework/cloud/kubernetes/leader/LeadershipController.java index e423f0f6..9a085e96 100644 --- a/spring-cloud-kubernetes-leader/src/main/java/org/springframework/cloud/kubernetes/leader/LeadershipController.java +++ b/spring-cloud-kubernetes-leader/src/main/java/org/springframework/cloud/kubernetes/leader/LeadershipController.java @@ -192,8 +192,10 @@ public class LeadershipController { } private void handleOnFailed(Candidate candidate) { - Context context = new LeaderContext(candidate, this); - leaderEventPublisher.publishOnFailedToAcquire(this, context, candidate.getRole()); + if (leaderProperties.isPublishFailedEvents()) { + Context context = new LeaderContext(candidate, this); + leaderEventPublisher.publishOnFailedToAcquire(this, context, candidate.getRole()); + } } private Map getLeaderData(Candidate candidate) { diff --git a/spring-cloud-kubernetes-leader/src/test/java/org/springframework/cloud/kubernetes/leader/LeadershipControllerTest.java b/spring-cloud-kubernetes-leader/src/test/java/org/springframework/cloud/kubernetes/leader/LeadershipControllerTest.java index b5271711..3971f083 100644 --- a/spring-cloud-kubernetes-leader/src/test/java/org/springframework/cloud/kubernetes/leader/LeadershipControllerTest.java +++ b/spring-cloud-kubernetes-leader/src/test/java/org/springframework/cloud/kubernetes/leader/LeadershipControllerTest.java @@ -116,6 +116,7 @@ public class LeadershipControllerTest { @Test public void shouldFailToAcquireIfThereIsAnotherLeader() { + given(mockLeaderProperties.isPublishFailedEvents()).willReturn(true); given(mockKubernetesHelper.getConfigMap()).willReturn(mockConfigMap); given(mockKubernetesHelper.podExists(ID)).willReturn(true); given(mockConfigMap.getData()).willReturn(leaderData); @@ -131,6 +132,7 @@ public class LeadershipControllerTest { @Test public void shouldFailToAcquireBecauseOfException() { + given(mockLeaderProperties.isPublishFailedEvents()).willReturn(true); doThrow(new KubernetesClientException("Test exception")).when(mockKubernetesHelper).createConfigMap(any()); boolean result = leadershipController.acquire(mockCandidate); @@ -139,6 +141,16 @@ public class LeadershipControllerTest { verifyPublishOnFailedToAcquire(); } + @Test + public void shouldFailToAcquireAndSuspendEvents() { + doThrow(new KubernetesClientException("Test exception")).when(mockKubernetesHelper).createConfigMap(any()); + + boolean result = leadershipController.acquire(mockCandidate); + + assertThat(result).isFalse(); + verify(mockLeaderEventPublisher, times(0)).publishOnFailedToAcquire(any(), any(), any()); + } + @Test public void shouldRevokeLeadership() { given(mockKubernetesHelper.getConfigMap()).willReturn(mockConfigMap);