From ae921528d7661d3adb94fd3bbbddf24bd4fbbbe9 Mon Sep 17 00:00:00 2001 From: Gytis Trikleris Date: Tue, 19 Jun 2018 11:15:02 +0200 Subject: [PATCH] Enable/disable failure events publishing during leader election --- .../cloud/kubernetes/leader/LeaderProperties.java | 14 ++++++++++++++ .../kubernetes/leader/LeadershipController.java | 6 ++++-- .../leader/LeadershipControllerTest.java | 12 ++++++++++++ 3 files changed, 30 insertions(+), 2 deletions(-) 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);