diff --git a/.mvn/extensions.xml b/.mvn/extensions.xml new file mode 100644 index 00000000..9ac2968b --- /dev/null +++ b/.mvn/extensions.xml @@ -0,0 +1,7 @@ + + + io.jenkins.tools.incrementals + git-changelist-maven-extension + 1.4 + + diff --git a/.mvn/maven.config b/.mvn/maven.config new file mode 100644 index 00000000..2a0299c4 --- /dev/null +++ b/.mvn/maven.config @@ -0,0 +1,2 @@ +-Pconsume-incrementals +-Pmight-produce-incrementals diff --git a/JenkinsWiki.adoc b/JenkinsWiki.adoc index 8996e716..c5538d1f 100644 --- a/JenkinsWiki.adoc +++ b/JenkinsWiki.adoc @@ -40,6 +40,11 @@ termination" [SpotinstPlugin-Versionhistory] == Version history +[SpotinstPlugin-Version2.2.16(Mar18,2024)] +=== Version 2.2.16 (Mar 18, 2024) + +* AWS stateful groups: ignore stateful instances with no running instance + [SpotinstPlugin-Version2.2.15(Sep26,2023)] === Version 2.2.15 (Sep 26, 2023) diff --git a/pom.xml b/pom.xml index 8c8e2e9c..5c0d9730 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ spotinst - 2.2.16-SNAPSHOT + ${revision}${changelist} hpi Spotinst plugin @@ -33,13 +33,16 @@ - scm:git:git://github.com/jenkinsci/spotinst-plugin.git - scm:git:git@github.com:jenkinsci/spotinst-plugin.git - https://github.com/jenkinsci/spotinst-plugin - HEAD + scm:git:git://github.com/${gitHubRepo}.git + scm:git:git@github.com:${gitHubRepo}.git + https://github.com/${gitHubRepo} + ${scmTag} + 2.2.16 + -SNAPSHOT + jenkinsci/spotinst-plugin 2.222.4 8 diff --git a/src/main/java/hudson/plugins/spotinst/cloud/AwsSpotinstCloud.java b/src/main/java/hudson/plugins/spotinst/cloud/AwsSpotinstCloud.java index 46ceebf2..e99032bf 100644 --- a/src/main/java/hudson/plugins/spotinst/cloud/AwsSpotinstCloud.java +++ b/src/main/java/hudson/plugins/spotinst/cloud/AwsSpotinstCloud.java @@ -306,14 +306,15 @@ private void syncGroupStatefulInstances() { if (statefulInstancesResponse.isRequestSucceed()) { List statefulInstances = statefulInstancesResponse.getValue(); - this.ssiByInstanceId = statefulInstances.stream().collect( + this.ssiByInstanceId = statefulInstances.stream().filter(statefulInstance -> StringUtils.isNotEmpty( + statefulInstance.getInstanceId())).collect( Collectors.toMap(AwsStatefulInstance::getInstanceId, statefulInstance -> statefulInstance)); + LOGGER.info("found {} running stateful instances for group {}", ssiByInstanceId.size(), groupId); } else { LOGGER.error(String.format("Failed to get group %s stateful instances. Errors: %s", groupId, statefulInstancesResponse.getErrors())); } - } private List handleNewAwsSpots(AwsScaleUpResult scaleUpResult, String label) { diff --git a/src/main/java/hudson/plugins/spotinst/cloud/AzureSpotCloud.java b/src/main/java/hudson/plugins/spotinst/cloud/AzureSpotCloud.java index bff19404..b17fab75 100644 --- a/src/main/java/hudson/plugins/spotinst/cloud/AzureSpotCloud.java +++ b/src/main/java/hudson/plugins/spotinst/cloud/AzureSpotCloud.java @@ -88,7 +88,7 @@ List scaleUp(ProvisionRequest request) { @Override protected BlResponse checkIsStatefulGroup() { - return new BlResponse<>(false); + return new BlResponse<>(Boolean.FALSE); } @Override diff --git a/src/main/java/hudson/plugins/spotinst/cloud/AzureSpotinstCloud.java b/src/main/java/hudson/plugins/spotinst/cloud/AzureSpotinstCloud.java index 600ecf7a..3145304b 100644 --- a/src/main/java/hudson/plugins/spotinst/cloud/AzureSpotinstCloud.java +++ b/src/main/java/hudson/plugins/spotinst/cloud/AzureSpotinstCloud.java @@ -78,7 +78,7 @@ List scaleUp(ProvisionRequest request) { @Override protected BlResponse checkIsStatefulGroup() { - return new BlResponse<>(false); + return new BlResponse<>(Boolean.FALSE); } @Override diff --git a/src/main/java/hudson/plugins/spotinst/cloud/BaseSpotinstCloud.java b/src/main/java/hudson/plugins/spotinst/cloud/BaseSpotinstCloud.java index f665b2a4..35aa1099 100644 --- a/src/main/java/hudson/plugins/spotinst/cloud/BaseSpotinstCloud.java +++ b/src/main/java/hudson/plugins/spotinst/cloud/BaseSpotinstCloud.java @@ -59,7 +59,7 @@ public abstract class BaseSpotinstCloud extends Cloud { private SpotGlobalExecutorOverride globalExecutorOverride; protected Integer pendingThreshold; private GroupLockingManager groupLockingManager; - private boolean isStatefulGroup; + private Boolean isStatefulGroup; //endregion //region Constructor @@ -131,15 +131,7 @@ public BaseSpotinstCloud(String groupId, String labelString, String idleTerminat groupLockingManager = new GroupLockingManager(groupId, accountId); groupLockingManager.syncGroupController(); - BlResponse checkIsStatefulGroupResponse = checkIsStatefulGroup(); - - if (checkIsStatefulGroupResponse.isSucceed()) { - this.isStatefulGroup = checkIsStatefulGroupResponse.getResult(); - } - else { - LOGGER.warn("failed to get the group's details, currently referring to it as stateless"); - this.isStatefulGroup = false; - } + initIsStatefulGroup(); } //endregion @@ -890,6 +882,18 @@ public Boolean removeInstance(String instanceId) { protected abstract BlResponse checkIsStatefulGroup(); + private void initIsStatefulGroup(){ + BlResponse isStatefulResponse = checkIsStatefulGroup(); + + if (isStatefulResponse.isSucceed()) { + isStatefulGroup = isStatefulResponse.getResult(); + } + else if (isStatefulGroup == null) { + LOGGER.warn("failed to get the group's details, currently referring to it as stateless"); + isStatefulGroup = false; + } + } + public Boolean isStatefulGroup() { return isStatefulGroup; } @@ -906,11 +910,7 @@ public void syncGroup() { boolean isCloudReadyForGroupCommunication = isCloudReadyForGroupCommunication(); if (isCloudReadyForGroupCommunication) { - BlResponse isStatefulResponse = checkIsStatefulGroup(); - - if (isStatefulResponse.isSucceed()) { - this.isStatefulGroup = isStatefulResponse.getResult(); - } + initIsStatefulGroup(); syncGroupInstances(); } diff --git a/src/main/java/hudson/plugins/spotinst/cloud/GcpSpotinstCloud.java b/src/main/java/hudson/plugins/spotinst/cloud/GcpSpotinstCloud.java index 53184cef..7f269bfa 100644 --- a/src/main/java/hudson/plugins/spotinst/cloud/GcpSpotinstCloud.java +++ b/src/main/java/hudson/plugins/spotinst/cloud/GcpSpotinstCloud.java @@ -101,7 +101,7 @@ List scaleUp(ProvisionRequest request) { @Override protected BlResponse checkIsStatefulGroup() { - return new BlResponse<>(false); + return new BlResponse<>(Boolean.FALSE); } @Override