Skip to content

Commit

Permalink
Added backwards compatability for Executor Scaling feature for EC2Fle…
Browse files Browse the repository at this point in the history
…etCloud
  • Loading branch information
GavinBurris42 committed Nov 20, 2023
1 parent 0bcb5e7 commit e8d322c
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 1 deletion.
25 changes: 24 additions & 1 deletion src/main/java/com/amazon/jenkins/ec2fleet/CloudNanny.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import hudson.slaves.Cloud;
import jenkins.model.Jenkins;

import java.io.IOException;
import java.util.Collections;
import java.util.List;
import java.util.Map;
Expand Down Expand Up @@ -37,11 +38,15 @@ public long getRecurrencePeriod() {
* by catch any exception and just log it, so we safe to throw exception here.
*/
@Override
protected void doRun() {
protected void doRun() throws IOException {
for (final Cloud cloud : getClouds()) {
if (!(cloud instanceof EC2FleetCloud)) continue;
final EC2FleetCloud fleetCloud = (EC2FleetCloud) cloud;

if (fleetCloud.getExecutorScaler() == null) {
updateCloudWithScaler(fleetCloud);
}

final AtomicInteger recurrenceCounter = getRecurrenceCounter(fleetCloud);

if (recurrenceCounter.decrementAndGet() > 0) {
Expand Down Expand Up @@ -70,6 +75,24 @@ private static List<Cloud> getClouds() {
return Jenkins.get().clouds;
}

private void updateCloudWithScaler(EC2FleetCloud oldCloud) throws IOException {
EC2FleetCloud.ExecutorScaler scaler = oldCloud.isScaleExecutorsByWeight() ? new EC2FleetCloud.WeightedScaler() :
new EC2FleetCloud.NoScaler();
scaler.withNumExecutors(oldCloud.getNumExecutors());
EC2FleetCloud fleetCloudWithScaler = new EC2FleetCloud(oldCloud.getDisplayName(), oldCloud.getAwsCredentialsId(),
oldCloud.getAwsCredentialsId(), oldCloud.getRegion(), oldCloud.getEndpoint(), oldCloud.getFleet(),
oldCloud.getLabelString(), oldCloud.getFsRoot(), oldCloud.getComputerConnector(),
oldCloud.isPrivateIpUsed(), oldCloud.isAlwaysReconnect(), oldCloud.getIdleMinutes(),
oldCloud.getMinSize(), oldCloud.getMaxSize(), oldCloud.getMinSpareSize(), oldCloud.getNumExecutors(),
oldCloud.isAddNodeOnlyIfRunning(), oldCloud.isRestrictUsage(),
String.valueOf(oldCloud.getMaxTotalUses()), oldCloud.isDisableTaskResubmit(),
oldCloud.getInitOnlineTimeoutSec(), oldCloud.getInitOnlineCheckIntervalSec(),
oldCloud.getCloudStatusIntervalSec(), oldCloud.isNoDelayProvision(),
oldCloud.isScaleExecutorsByWeight(), scaler);
Jenkins.get().clouds.replace(oldCloud, fleetCloudWithScaler);
Jenkins.get().save();
}

private AtomicInteger getRecurrenceCounter(EC2FleetCloud fleetCloud) {
AtomicInteger counter = new AtomicInteger(fleetCloud.getCloudStatusIntervalSec());
// If a counter already exists, return the value, otherwise set the new counter value and return it.
Expand Down
7 changes: 7 additions & 0 deletions src/main/java/com/amazon/jenkins/ec2fleet/EC2FleetCloud.java
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,7 @@ public class EC2FleetCloud extends AbstractEC2FleetCloud {
private final int numExecutors;
private final boolean addNodeOnlyIfRunning;
private final boolean restrictUsage;
private final boolean scaleExecutorsByWeight;
private final ExecutorScaler executorScaler;
private final Integer initOnlineTimeoutSec;
private final Integer initOnlineCheckIntervalSec;
Expand Down Expand Up @@ -183,6 +184,7 @@ public EC2FleetCloud(@Nonnull final String name,
final Integer initOnlineCheckIntervalSec,
final Integer cloudStatusIntervalSec,
final boolean noDelayProvision,
final boolean scaleExecutorsByWeight,
final ExecutorScaler executorScaler) {
super(StringUtils.isNotBlank(name) ? name : CloudNames.generateUnique(BASE_DEFAULT_FLEET_CLOUD_ID));
init();
Expand Down Expand Up @@ -212,6 +214,7 @@ public EC2FleetCloud(@Nonnull final String name,
this.initOnlineCheckIntervalSec = initOnlineCheckIntervalSec;
this.cloudStatusIntervalSec = cloudStatusIntervalSec;
this.noDelayProvision = noDelayProvision;
this.scaleExecutorsByWeight = scaleExecutorsByWeight;
this.executorScaler = executorScaler == null ? new NoScaler().withNumExecutors(this.numExecutors) :
executorScaler.withNumExecutors(this.numExecutors);
if (fleet != null) {
Expand Down Expand Up @@ -317,6 +320,10 @@ public int getNumExecutors() {
return numExecutors;
}

public boolean isScaleExecutorsByWeight() {
return scaleExecutorsByWeight;
}

public ExecutorScaler getExecutorScaler() {
return this.executorScaler;
}
Expand Down

0 comments on commit e8d322c

Please sign in to comment.