This is an automated email from the ASF dual-hosted git repository. orpiske pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel.git
commit 4103fde63642817ea28688f30dc98b7127da5628 Author: Otavio Rodolfo Piske <[email protected]> AuthorDate: Thu Jan 5 17:03:23 2023 +0100 (chores) camel-kubernetes: avoid computing the log prefix multiple times --- .../lock/KubernetesLeadershipController.java | 101 ++++++++++----------- 1 file changed, 50 insertions(+), 51 deletions(-) diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/cluster/lock/KubernetesLeadershipController.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/cluster/lock/KubernetesLeadershipController.java index cc868e8e34f..d8a54756f34 100644 --- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/cluster/lock/KubernetesLeadershipController.java +++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/cluster/lock/KubernetesLeadershipController.java @@ -74,6 +74,8 @@ public class KubernetesLeadershipController implements Service { private boolean disabled; + private final String logPrefix; + public KubernetesLeadershipController(CamelContext camelContext, KubernetesClient kubernetesClient, KubernetesLockConfiguration lockConfiguration, KubernetesClusterEventHandler eventHandler) { @@ -83,12 +85,14 @@ public class KubernetesLeadershipController implements Service { this.eventHandler = eventHandler; this.disabled = false; this.leaseManager = KubernetesLeaseResourceManager.create(lockConfiguration.getLeaseResourceType()); + + logPrefix = "Pod[" + this.lockConfiguration.getPodName() + "]"; } @Override public void start() { if (serializedExecutor == null) { - LOG.debug("{} Starting leadership controller...", logPrefix()); + LOG.debug("{} Starting leadership controller...", logPrefix); serializedExecutor = camelContext.getExecutorServiceManager().newSingleThreadScheduledExecutor(this, "CamelKubernetesLeadershipController"); leaderNotifier = new TimedLeaderNotifier(this.camelContext, this.eventHandler); @@ -100,7 +104,7 @@ public class KubernetesLeadershipController implements Service { @Override public void stop() { - LOG.debug("{} Stopping leadership controller...", logPrefix()); + LOG.debug("{} Stopping leadership controller...", logPrefix); if (serializedExecutor != null) { serializedExecutor.shutdownNow(); } @@ -151,7 +155,7 @@ public class KubernetesLeadershipController implements Service { * possible. */ private void refreshStatusNotLeader() { - LOG.debug("{} Pod is not leader, pulling new data from the cluster", logPrefix()); + LOG.debug("{} Pod is not leader, pulling new data from the cluster", logPrefix); boolean pulled = lookupNewLeaderInfo(); if (!pulled) { rescheduleAfterDelay(); @@ -160,32 +164,32 @@ public class KubernetesLeadershipController implements Service { if (this.latestLeaderInfo.hasEmptyLeader()) { // There is no previous leader - LOG.info("{} The cluster has no leaders for group {}. Trying to acquire the leadership...", logPrefix(), + LOG.info("{} The cluster has no leaders for group {}. Trying to acquire the leadership...", logPrefix, this.lockConfiguration.getGroupName()); boolean acquired = tryAcquireLeadership(); if (acquired) { - LOG.info("{} Leadership acquired by current pod with immediate effect", logPrefix()); + LOG.info("{} Leadership acquired by current pod with immediate effect", logPrefix); this.currentState = State.LEADER; this.serializedExecutor.execute(this::refreshStatus); return; } else { - LOG.info("{} Unable to acquire the leadership, it may have been acquired by another pod", logPrefix()); + LOG.info("{} Unable to acquire the leadership, it may have been acquired by another pod", logPrefix); } } else if (!this.latestLeaderInfo.hasValidLeader()) { // There's a previous leader and it's invalid - LOG.info("{} Leadership has been lost by old owner. Trying to acquire the leadership...", logPrefix()); + LOG.info("{} Leadership has been lost by old owner. Trying to acquire the leadership...", logPrefix); boolean acquired = tryAcquireLeadership(); if (acquired) { - LOG.info("{} Leadership acquired by current pod", logPrefix()); + LOG.info("{} Leadership acquired by current pod", logPrefix); this.currentState = State.BECOMING_LEADER; this.serializedExecutor.execute(this::refreshStatus); return; } else { - LOG.info("{} Unable to acquire the leadership, it may have been acquired by another pod", logPrefix()); + LOG.info("{} Unable to acquire the leadership, it may have been acquired by another pod", logPrefix); } } else if (this.latestLeaderInfo.isValidLeader(this.lockConfiguration.getPodName())) { // We are leaders for some reason (e.g. pod restart on failure) - LOG.info("{} Leadership is already owned by current pod", logPrefix()); + LOG.info("{} Leadership is already owned by current pod", logPrefix); this.currentState = State.BECOMING_LEADER; this.serializedExecutor.execute(this::refreshStatus); return; @@ -206,7 +210,7 @@ public class KubernetesLeadershipController implements Service { // Even if the current pod is already leader, we should let a possible // old version of the pod to shut down long delay = this.lockConfiguration.getLeaseDurationMillis(); - LOG.info("{} Current pod owns the leadership, but it will be effective in {} seconds...", logPrefix(), + LOG.info("{} Current pod owns the leadership, but it will be effective in {} seconds...", logPrefix, new BigDecimal(delay).divide(BigDecimal.valueOf(1000), 2, RoundingMode.HALF_UP)); try { @@ -215,7 +219,7 @@ public class KubernetesLeadershipController implements Service { LOG.warn("Thread interrupted", e); } - LOG.info("{} Current pod is becoming the new leader now...", logPrefix()); + LOG.info("{} Current pod is becoming the new leader now...", logPrefix); this.currentState = State.LEADER; this.serializedExecutor.execute(this::refreshStatus); } @@ -227,7 +231,7 @@ public class KubernetesLeadershipController implements Service { private void refreshStatusLosingLeadership() { // Wait always the same amount of time before giving up the leadership long delay = this.lockConfiguration.getLeaseDurationMillis(); - LOG.info("{} Current pod owns the leadership, but it will be lost in {} seconds...", logPrefix(), + LOG.info("{} Current pod owns the leadership, but it will be lost in {} seconds...", logPrefix, new BigDecimal(delay).divide(BigDecimal.valueOf(1000), 2, RoundingMode.HALF_UP)); try { @@ -236,7 +240,7 @@ public class KubernetesLeadershipController implements Service { LOG.warn("Thread interrupted", e); } - LOG.info("{} Current pod is losing leadership now...", logPrefix()); + LOG.info("{} Current pod is losing leadership now...", logPrefix); this.currentState = State.LEADERSHIP_LOST; this.serializedExecutor.execute(this::refreshStatus); } @@ -256,20 +260,20 @@ public class KubernetesLeadershipController implements Service { return; } - LOG.info("{} Current pod has lost leadership", logPrefix()); + LOG.info("{} Current pod has lost leadership", logPrefix); this.currentState = State.NOT_LEADER; this.serializedExecutor.execute(this::refreshStatus); } private void refreshStatusLeader() { if (this.disabled) { - LOG.debug("{} Leadership disabled, pod is going to lose leadership", logPrefix()); + LOG.debug("{} Leadership disabled, pod is going to lose leadership", logPrefix); this.currentState = State.LOSING_LEADERSHIP; this.serializedExecutor.execute(this::refreshStatus); return; } - LOG.debug("{} Pod should be the leader, pulling new data from the cluster", logPrefix()); + LOG.debug("{} Pod should be the leader, pulling new data from the cluster", logPrefix); long timeBeforePulling = System.currentTimeMillis(); boolean pulled = lookupNewLeaderInfo(); if (!pulled) { @@ -278,7 +282,7 @@ public class KubernetesLeadershipController implements Service { } if (this.latestLeaderInfo.isValidLeader(this.lockConfiguration.getPodName())) { - LOG.debug("{} Current Pod is still the leader", logPrefix()); + LOG.debug("{} Current Pod is still the leader", logPrefix); this.leaderNotifier.refreshLeadership(Optional.of(this.lockConfiguration.getPodName()), timeBeforePulling, this.lockConfiguration.getRenewDeadlineMillis(), @@ -291,7 +295,7 @@ public class KubernetesLeadershipController implements Service { rescheduleAfterDelay(); return; } else { - LOG.debug("{} Current Pod has lost the leadership", logPrefix()); + LOG.debug("{} Current Pod has lost the leadership", logPrefix); this.currentState = State.NOT_LEADER; // set a empty leader to signal leadership loss this.leaderNotifier.refreshLeadership(Optional.empty(), System.currentTimeMillis(), @@ -309,7 +313,7 @@ public class KubernetesLeadershipController implements Service { } private boolean lookupNewLeaderInfo() { - LOG.debug("{} Looking up leadership information...", logPrefix()); + LOG.debug("{} Looking up leadership information...", logPrefix); HasMetadata leaseResource; try { @@ -319,8 +323,8 @@ public class KubernetesLeadershipController implements Service { this.lockConfiguration.getGroupName()); } catch (Exception e) { LOG.warn("{} Unable to retrieve the current lease resource {} for group {} from Kubernetes", - logPrefix(), this.lockConfiguration.getKubernetesResourceName(), this.lockConfiguration.getGroupName()); - LOG.debug("{} Exception thrown during lease resource lookup", logPrefix(), e); + logPrefix, this.lockConfiguration.getKubernetesResourceName(), this.lockConfiguration.getGroupName()); + LOG.debug("{} Exception thrown during lease resource lookup", logPrefix, e); return false; } @@ -328,8 +332,8 @@ public class KubernetesLeadershipController implements Service { try { members = Objects.requireNonNull(pullClusterMembers(), "Retrieved a null set of members"); } catch (Exception e) { - LOG.warn("{} Unable to retrieve the list of cluster members from Kubernetes", logPrefix()); - LOG.debug("{} Exception thrown during Pod list lookup", logPrefix(), e); + LOG.warn("{} Unable to retrieve the list of cluster members from Kubernetes", logPrefix); + LOG.debug("{} Exception thrown during Pod list lookup", logPrefix, e); return false; } @@ -338,18 +342,18 @@ public class KubernetesLeadershipController implements Service { } private boolean yieldLeadership() { - LOG.debug("{} Trying to yield the leadership...", logPrefix()); + LOG.debug("{} Trying to yield the leadership...", logPrefix); HasMetadata leaseResource = this.latestLeaseResource; Set<String> members = this.latestMembers; LeaderInfo latestLeaderInfo = this.latestLeaderInfo; if (latestLeaderInfo == null || members == null) { - LOG.warn("{} Unexpected condition. Latest leader info or list of members is empty.", logPrefix()); + LOG.warn("{} Unexpected condition. Latest leader info or list of members is empty.", logPrefix); return false; } else if (!members.contains(this.lockConfiguration.getPodName())) { LOG.warn("{} The list of cluster members {} does not contain the current Pod. Cannot yield the leadership.", - logPrefix(), latestLeaderInfo.getMembers()); + logPrefix, latestLeaderInfo.getMembers()); return false; } @@ -358,7 +362,7 @@ public class KubernetesLeadershipController implements Service { return true; } - LOG.debug("{} Lock lease resource already present in the Kubernetes namespace. Checking...", logPrefix()); + LOG.debug("{} Lock lease resource already present in the Kubernetes namespace. Checking...", logPrefix); LeaderInfo leaderInfo = leaseManager.decodeLeaderInfo(leaseResource, members, this.lockConfiguration.getGroupName()); if (!leaderInfo.isValidLeader(this.lockConfiguration.getPodName())) { // Already yielded @@ -369,35 +373,35 @@ public class KubernetesLeadershipController implements Service { HasMetadata updatedLeaseResource = leaseManager.optimisticDeleteLeaderInfo(kubernetesClient, leaseResource, this.lockConfiguration.getGroupName()); - LOG.debug("{} Lease resource {} for group {} successfully updated", logPrefix(), + LOG.debug("{} Lease resource {} for group {} successfully updated", logPrefix, this.lockConfiguration.getKubernetesResourceName(), this.lockConfiguration.getGroupName()); updateLatestLeaderInfo(updatedLeaseResource, members); return true; } catch (Exception ex) { - LOG.warn("{} Unable to update the lock on the lease resource to remove leadership information", logPrefix()); - LOG.debug("{} Error received during resource lock replace", logPrefix(), ex); + LOG.warn("{} Unable to update the lock on the lease resource to remove leadership information", logPrefix); + LOG.debug("{} Error received during resource lock replace", logPrefix, ex); return false; } } private boolean tryAcquireLeadership() { if (this.disabled) { - LOG.debug("{} Won't try to acquire the leadership because it's disabled...", logPrefix()); + LOG.debug("{} Won't try to acquire the leadership because it's disabled...", logPrefix); return false; } - LOG.debug("{} Trying to acquire the leadership...", logPrefix()); + LOG.debug("{} Trying to acquire the leadership...", logPrefix); HasMetadata leaseResource = this.latestLeaseResource; Set<String> members = this.latestMembers; LeaderInfo latestLeaderInfo = this.latestLeaderInfo; if (latestLeaderInfo == null || members == null) { - LOG.warn("{} Unexpected condition. Latest leader info or list of members is empty.", logPrefix()); + LOG.warn("{} Unexpected condition. Latest leader info or list of members is empty.", logPrefix); return false; } else if (!members.contains(this.lockConfiguration.getPodName())) { LOG.warn("{} The list of cluster members {} does not contain the current Pod. Cannot acquire leadership.", - logPrefix(), latestLeaderInfo.getMembers()); + logPrefix, latestLeaderInfo.getMembers()); return false; } @@ -409,7 +413,7 @@ public class KubernetesLeadershipController implements Service { if (leaseResource == null) { // No leaseResource created so far LOG.debug("{} Lock lease resource is not present in the Kubernetes namespace. A new lease resource will be created", - logPrefix()); + logPrefix); try { HasMetadata newLeaseResource = leaseManager.createNewLeaseResource(kubernetesClient, @@ -417,7 +421,7 @@ public class KubernetesLeadershipController implements Service { this.lockConfiguration.getKubernetesResourceName(), newLeaderInfo); - LOG.debug("{} Lease resource {} successfully created for group {}", logPrefix(), + LOG.debug("{} Lease resource {} successfully created for group {}", logPrefix, this.lockConfiguration.getKubernetesResourceName(), newLeaderInfo.getGroupName()); updateLatestLeaderInfo(newLeaseResource, members); return true; @@ -426,12 +430,12 @@ public class KubernetesLeadershipController implements Service { LOG.warn("{} Unable to create the lease resource, it may have been created by other cluster members " + "concurrently. If the problem persists, check if the service account has the right permissions" + " to create it", - logPrefix()); - LOG.debug("{} Exception while trying to create the lease resource", logPrefix(), ex); + logPrefix); + LOG.debug("{} Exception while trying to create the lease resource", logPrefix, ex); return false; } } else { - LOG.debug("{} Lock lease resource already present in the Kubernetes namespace. Checking...", logPrefix()); + LOG.debug("{} Lock lease resource already present in the Kubernetes namespace. Checking...", logPrefix); LeaderInfo leaderInfo = leaseManager.decodeLeaderInfo(leaseResource, members, this.lockConfiguration.getGroupName()); @@ -442,18 +446,18 @@ public class KubernetesLeadershipController implements Service { HasMetadata updatedLeaseResource = leaseManager.optimisticAcquireLeadership(kubernetesClient, leaseResource, newLeaderInfo); - LOG.debug("{} Lease resource {} successfully updated for group {}", logPrefix(), + LOG.debug("{} Lease resource {} successfully updated for group {}", logPrefix, this.lockConfiguration.getKubernetesResourceName(), newLeaderInfo.getGroupName()); updateLatestLeaderInfo(updatedLeaseResource, members); return true; } catch (Exception ex) { - LOG.warn("{} Unable to update the lock lease resource to set leadership information", logPrefix()); - LOG.debug("{} Error received during lease resource lock replace", logPrefix(), ex); + LOG.warn("{} Unable to update the lock lease resource to set leadership information", logPrefix); + LOG.debug("{} Error received during lease resource lock replace", logPrefix, ex); return false; } } else { // Another pod is the leader and it's still active - LOG.debug("{} Another Pod ({}) is the current leader and it is still active", logPrefix(), + LOG.debug("{} Another Pod ({}) is the current leader and it is still active", logPrefix, this.latestLeaderInfo.getLeader()); return false; } @@ -461,11 +465,11 @@ public class KubernetesLeadershipController implements Service { } private void updateLatestLeaderInfo(HasMetadata leaseResource, Set<String> members) { - LOG.debug("{} Updating internal status about the current leader", logPrefix()); + LOG.debug("{} Updating internal status about the current leader", logPrefix); this.latestLeaseResource = leaseResource; this.latestMembers = members; this.latestLeaderInfo = leaseManager.decodeLeaderInfo(leaseResource, members, this.lockConfiguration.getGroupName()); - LOG.debug("{} Current leader info: {}", logPrefix(), this.latestLeaderInfo); + LOG.debug("{} Current leader info: {}", logPrefix, this.latestLeaderInfo); } private Set<String> pullClusterMembers() { @@ -479,9 +483,4 @@ public class KubernetesLeadershipController implements Service { private long jitter(long num, double factor) { return (long) (num * (1 + Math.random() * (factor - 1))); } - - private String logPrefix() { - return "Pod[" + this.lockConfiguration.getPodName() + "]"; - } - }
