in src/scaler/scaler-core/index.js [191:265]
function withinCooldownPeriod(cluster, suggestedSize, autoscalerState, now) {
const MS_IN_1_MIN = 60000;
const scaleOutSuggested = suggestedSize - cluster.currentSize > 0;
let cooldownPeriodOver;
logger.debug({
message: `----- ${cluster.projectId}/${cluster.clusterId}: Verifying if scaling is allowed -----`,
projectId: cluster.projectId,
regionId: cluster.regionId,
clusterId: cluster.clusterId,
});
const lastScalingMillisec = autoscalerState.lastScalingCompleteTimestamp
? autoscalerState.lastScalingCompleteTimestamp
: autoscalerState.lastScalingTimestamp;
const operation = scaleOutSuggested
? {
description: 'scale out',
lastScalingMillisec: lastScalingMillisec,
coolingMillisec: cluster.scaleOutCoolingMinutes * MS_IN_1_MIN,
}
: {
description: 'scale in',
lastScalingMillisec: lastScalingMillisec,
coolingMillisec: cluster.scaleInCoolingMinutes * MS_IN_1_MIN,
};
if (operation.lastScalingMillisec == 0) {
cooldownPeriodOver = true;
logger.debug({
message: `\tNo previous scaling operation found for this cluster`,
projectId: cluster.projectId,
regionId: cluster.regionId,
clusterId: cluster.clusterId,
});
} else {
const elapsedMillisec = now - operation.lastScalingMillisec;
cooldownPeriodOver = elapsedMillisec >= operation.coolingMillisec;
logger.debug({
message: `\tLast scaling operation was ${convertMillisecToHumanReadable(
now - operation.lastScalingMillisec,
)} ago.`,
projectId: cluster.projectId,
regionId: cluster.regionId,
clusterId: cluster.clusterId,
});
logger.debug({
message: `\tCooldown period for ${operation.description} is ${convertMillisecToHumanReadable(
operation.coolingMillisec,
)}.`,
projectId: cluster.projectId,
regionId: cluster.regionId,
clusterId: cluster.clusterId,
});
}
if (cooldownPeriodOver) {
logger.info({
message: `\t=> Autoscale allowed`,
projectId: cluster.projectId,
regionId: cluster.regionId,
clusterId: cluster.clusterId,
});
return false;
} else {
logger.info({
message: `\t=> Autoscale NOT allowed yet`,
projectId: cluster.projectId,
regionId: cluster.regionId,
clusterId: cluster.clusterId,
});
return true;
}
}