I have a state machine where i'm doing transitions to move from one state to another. (e.g ReserveState -> StartState)
on this particular case, I have a transition from a ReserveFailedVMState to ReserveVMState
code for ReserveFailedVMState:
const { AbstractVMCtrlState } = require("./AbstractVMCtrlState");
const { ReserveVMState } = require("./ReserveVMState");
const { TerminateDuringReservationState } = require("./TerminateDuringReservationState");
const { ResourceUnavailableState } = require("./ResourceUnavailableState");
//>>>> don't change the CUSTOM CODE comments, if you do generation will overwrite your code >>>>
//###START_CUSTOMCODE1
const { Config } = require("../config/Config");
const { Tasker } = require("../libs/tasker/src/Tasker");
//###END_CUSTOMCODE1
class ReserveVMFailedState extends AbstractVMCtrlState {
//>>>> don't change the CUSTOM CODE comments, if you do generation will overwrite your code >>>>
//###START_CUSTOMCODE2
async onEnterState() {
//TODO: try to remove the reservation, if exists
this.logMsg("Could not reserve a VM");
const config = Config.getConfig();
if (this.SM.getQueueReservationRetries() <= config.queueReservation.requeueReservationMaxRetries) {
this.logMsg("Retrying queue for Starting a Reservation, attempt # " + this.SM.getQueueReservationRetries());
this.SM.setIncreaseQueueReservationRetries();
await this.retryReserveVMCloudTask();
} else {
this.logMsg("After maxRetries, reservation could not be done");
await this.SM.resourceUnavailable();
}
}
// kicking off a cloud task for retrying to reserve a VM
async retryReserveVMCloudTask() {
const run_id = this.getRunId();
const tasker = new Tasker();
const vmStartTaskId = await tasker.sendRetryReserveVM(run_id);
this.SM.setVmStartTaskId(vmStartTaskId);
}
//###END_CUSTOMCODE2
constructor() {
super();
}
async onExitState() {}
reserveVM() {
this.logMsg("holaaaaa");
return new ReserveVMState();
}
terminateRequested() {
return new TerminateDuringReservationState();
}
resourceUnavailable() {
return new ResourceUnavailableState();
}
}
const serialijse = require("serialijse");
serialijse.declarePersistable(ReserveVMFailedState);
module.exports = { ReserveVMFailedState };
where retryReserveVMCloudTask function kicks a for a transition to move again to ReserveVMState
code for ReserveVMState:
const { AbstractVMCtrlState } = require("./AbstractVMCtrlState");
const { WaitForReservationReadyState } = require("./WaitForReservationReadyState");
const { TerminateDuringReservationState } = require("./TerminateDuringReservationState");
const { ReserveVMFailedState } = require("./ReserveVMFailedState");
//>>>> don't change the CUSTOM CODE comments, if you do generation will overwrite your code >>>>
//###START_CUSTOMCODE1
const { reserveVM } = require("./vm-reservation/reserveVM");
//###END_CUSTOMCODE1
class ReserveVMState extends AbstractVMCtrlState {
//>>>> don't change the CUSTOM CODE comments, if you do generation will overwrite your code >>>>
//###START_CUSTOMCODE2
async onEnterState() {
// todo later djs fix retries and allow to try on other zones
this.SM.setCurrentVMZone("europe-west4-b");
// queue a VM reservation on the GPC cloud
const run_id = this.getRunId();
const vmZone = this.SM.getCurrentVMZone();
const resName = this.getReservationName();
try {
await reserveVM(run_id, resName, vmZone, "gcp", this.logMsg);
this.logMsg(`Reservation successful: ${resName} `);
await this.SM.waitForReservationReady();
} catch (e) {
console.error(JSON.stringify(e));
this.logMsg(`Reserve VM exception: ${e.name}: ${e.message}`);
await this.SM.reserveVMFailed();
}
}
//###END_CUSTOMCODE2
constructor() {
super();
}
async onExitState() {
}
waitForReservationReady() {
return new WaitForReservationReadyState();
}
terminateRequested() {
return new TerminateDuringReservationState();
}
reserveVMFailed() {
return new ReserveVMFailedState();
}
}
const serialijse = require("serialijse");
serialijse.declarePersistable(ReserveVMState);
module.exports = { ReserveVMState };
i have a logger implemented and when i'm trying this transition i'm getting the following error:
[OSM] 5f64cae6df60d0c4734aa87b - OSM exception: TypeError: ReserveVMState is not a constructor
I have tried different approaches but none seem to be working, what am i missing here?
Thanks in advance