Skip to content

Commit 10d926f

Browse files
committed
Init counter if we receive a node deletion earlier
1 parent 21cc7cb commit 10d926f

File tree

1 file changed

+23
-14
lines changed

1 file changed

+23
-14
lines changed

src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesProvisioningLimits.java

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
public final class KubernetesProvisioningLimits {
2727
private static final Logger LOGGER = Logger.getLogger(KubernetesProvisioningLimits.class.getName());
2828

29+
private static boolean init;
30+
2931
/**
3032
* Tracks current number of kubernetes agents per pod template
3133
*/
@@ -40,16 +42,19 @@ public final class KubernetesProvisioningLimits {
4042
public static void init() {
4143
// We don't want anything to be provisioned while we do the initial count.
4244
Queue.withLock(() -> {
43-
final KubernetesProvisioningLimits instance = get();
44-
synchronized(instance) {
45-
Jenkins.get().getNodes()
46-
.stream()
47-
.filter(KubernetesSlave.class::isInstance)
48-
.map(KubernetesSlave.class::cast)
49-
.forEach(node -> {
50-
instance.cloudCounts.put(node.getCloudName(), instance.getGlobalCount(node.getCloudName()) + node.getNumExecutors());
51-
instance.podTemplateCounts.put(node.getTemplateId(), instance.getPodTemplateCount(node.getTemplateId()) + node.getNumExecutors());
52-
});
45+
if (!init) {
46+
final KubernetesProvisioningLimits instance = get();
47+
synchronized (instance) {
48+
Jenkins.get().getNodes()
49+
.stream()
50+
.filter(KubernetesSlave.class::isInstance)
51+
.map(KubernetesSlave.class::cast)
52+
.forEach(node -> {
53+
instance.cloudCounts.put(node.getCloudName(), instance.getGlobalCount(node.getCloudName()) + node.getNumExecutors());
54+
instance.podTemplateCounts.put(node.getTemplateId(), instance.getPodTemplateCount(node.getTemplateId()) + node.getNumExecutors());
55+
});
56+
init = true;
57+
}
5358
}
5459
});
5560
}
@@ -128,10 +133,14 @@ public static class NodeListenerImpl extends NodeListener {
128133
@Override
129134
protected void onDeleted(@NonNull Node node) {
130135
if (node instanceof KubernetesSlave) {
131-
KubernetesSlave kubernetesNode = (KubernetesSlave) node;
132-
PodTemplate template = kubernetesNode.getTemplateOrNull();
133-
if (template != null) {
134-
KubernetesProvisioningLimits.get().unregister(kubernetesNode.getKubernetesCloud(), template, node.getNumExecutors());
136+
if (KubernetesProvisioningLimits.init) {
137+
KubernetesSlave kubernetesNode = (KubernetesSlave) node;
138+
PodTemplate template = kubernetesNode.getTemplateOrNull();
139+
if (template != null) {
140+
KubernetesProvisioningLimits.get().unregister(kubernetesNode.getKubernetesCloud(), template, node.getNumExecutors());
141+
}
142+
} else {
143+
KubernetesProvisioningLimits.init();
135144
}
136145
}
137146
}

0 commit comments

Comments
 (0)