2626public 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