assertEquals(RequestState.STATE_Active, medReqSR.getState().getStateStr());
assertEquals(3, medReqSR.getVMIds().length);
logger.debug("Submitting WS request: wsReq1 (2 VMs, 120MB RAM each)");
CreateRequest wsReq1 = this.populator().getCreateRequest("wsReq1", 1000, 120, 2);
CreateResult wsReq1Result = rm.create(wsReq1, wsCaller);
Long mark = System.currentTimeMillis();
// Spot Instances Snapshot
//
// Total memory: 1280MB
// Used WS memory: 240MB
// Reserved free memory (for ordinary WS requests): 256MB (minimum reserved capacity)
// Available basic SI VMs: 6 (128MB x 6 = 768)
//
// Current Requests___________________________________________________________
// | Request | reqVMs | allocVMs | Bid | Status | Persistent |
// | lowReq1 | 3 | 2 | previousPrice+1 | ACTIVE | false |
// | lowReq2 | 2 | 1 | previousPrice+1 | ACTIVE | true |
// | mediumReq1 | 3 | 3 | previousPrice+3 | ACTIVE | false |
// ---------------------------------------------------------------------------
// Requested SI VMs (alive requests): 7 (1 from lowReq1 was closed)
// Spot price: lowBid (previousPrice+1)
logger.debug("Waiting 4 seconds for resources to be pre-empted.");
Thread.sleep(4000);
//Check available SI VMs
assertEquals(6, getAvailableResources());
//New spot price is equal to lower bid
assertEquals(lowBid, rm.getSpotPrice());
lowReq1SR = rm.getSpotRequest(lowReq1Id, siCaller);
assertEquals(RequestState.STATE_Active, lowReq1SR.getState().getStateStr());
assertEquals(2, lowReq1SR.getVMIds().length);
lowReq2SR = rm.getSpotRequest(lowReq2Id, siCaller);
assertEquals(RequestState.STATE_Active, lowReq2SR.getState().getStateStr());
assertEquals(1, lowReq2SR.getVMIds().length);
medReqSR = rm.getSpotRequest(medReqId, siCaller);
assertEquals(RequestState.STATE_Active, medReqSR.getState().getStateStr());
assertEquals(3, medReqSR.getVMIds().length);
logger.debug("Submitting WS request: wsReq2 (2 VMs, 110MB RAM each)");
CreateRequest wsReq2 = this.populator().getCreateRequest("wsReq2", TASK_TIME, 110, 2);
rm.create(wsReq2, wsCaller);
// Spot Instances Snapshot
//
// Total memory: 1280MB
// Used WS memory: 460MB
// Reserved free memory (for ordinary WS requests): 256MB (minimum reserved capacity)
// Available basic SI VMs: 4 (128MB x 4 = 512MB)
//
// Current Requests___________________________________________________________
// | Request | reqVMs | allocVMs | Bid | Status | Persistent |
// | lowReq1 | 3 | 1 | previousPrice+1 | ACTIVE | false |
// | lowReq2 | 2 | 0 | previousPrice+1 | OPEN | true |
// | mediumReq1 | 3 | 3 | previousPrice+3 | ACTIVE | false |
// ---------------------------------------------------------------------------
// Requested SI VMs (alive requests): 6 (2 from lowReq1 were closed)
// Spot price: lowBid (previousPrice+1)
logger.debug("Waiting 4 seconds for SI VMs to be pre-empted.");
Thread.sleep(4000);
//Check available SI VMs
assertEquals(4, getAvailableResources());
//New spot price is equal to lower bid
assertEquals(lowBid, rm.getSpotPrice());
lowReq1SR = rm.getSpotRequest(lowReq1Id, siCaller);
assertEquals(RequestState.STATE_Active, lowReq1SR.getState().getStateStr());
assertEquals(1, lowReq1SR.getVMIds().length);
lowReq2SR = rm.getSpotRequest(lowReq2Id, siCaller);
assertEquals(RequestState.STATE_Open, lowReq2SR.getState().getStateStr());
assertEquals(0, lowReq2SR.getVMIds().length);
medReqSR = rm.getSpotRequest(medReqId, siCaller);
assertEquals(RequestState.STATE_Active, medReqSR.getState().getStateStr());
assertEquals(3, medReqSR.getVMIds().length);
//Wait for wsReq2 to finish
long elapsed = System.currentTimeMillis()-mark;
long sleepTime = (TASK_TIME*1000 - elapsed) + BUFFER;
if(sleepTime > 0){
logger.debug("Waiting " + sleepTime + " milliseconds for wsReq2 to finish.");
Thread.sleep(sleepTime);
}
// Spot Instances Snapshot
//
// Total memory: 1280MB
// Used WS memory: 240MB
// Reserved free memory (for ordinary WS requests): 256MB (minimum reserved capacity)
// Available basic SI VMs: 6 (128MB x 6 = 768MB)
//
// Current Requests___________________________________________________________
// | Request | reqVMs | allocVMs | Bid | Status | Persistent |
// | lowReq1 | 3 | 1 | previousPrice+1 | ACTIVE | false |**
// | lowReq2 | 2 | 2 | previousPrice+1 | ACTIVE | true |
// | mediumReq1 | 3 | 3 | previousPrice+3 | ACTIVE | false |
// ---------------------------------------------------------------------------
// Requested SI VMs (alive requests): 6 (2 from lowReq1 were closed)
// Spot price: lowBid (previousPrice+1)
//
// ** lowReq1 is not persistent, so no more VMs are allocated for this
// request (since 2 VMs were already finished (pre-empted))
//Check available SI VMs
assertEquals(6, getAvailableResources());
//Spot price is equal to lower bid
assertEquals(lowBid, rm.getSpotPrice());
lowReq1SR = rm.getSpotRequest(lowReq1Id, siCaller);
assertEquals(RequestState.STATE_Active, lowReq1SR.getState().getStateStr());
assertEquals(1, lowReq1SR.getVMIds().length);
lowReq2SR = rm.getSpotRequest(lowReq2Id, siCaller);
assertEquals(RequestState.STATE_Active, lowReq2SR.getState().getStateStr());
assertEquals(2, lowReq2SR.getVMIds().length);
medReqSR = rm.getSpotRequest(medReqId, siCaller);
assertEquals(RequestState.STATE_Active, medReqSR.getState().getStateStr());
assertEquals(3, medReqSR.getVMIds().length);
logger.debug("Submitting WS request: wsReq3 (2 VMs, 256MB RAM each)");
CreateRequest wsReq3 = this.populator().getCreateRequest("wsReq3", 500, 256, 2);
CreateResult wsReq3Result = rm.create(wsReq3, wsCaller);
// Spot Instances Snapshot
//
// Total memory: 1280MB
// Used WS memory: 752MB
// Reserved capacity (for ordinary WS requests): 322MB (to ensure 70% max utilization)
// Available basic SI VMs: 1 (128MB)
//
// Current Requests___________________________________________________________
// | Request | reqVMs | allocVMs | Bid | Status | Persistent |
// | lowReq1 | 3 | 0 | previousPrice+1 | CLOSED | false |
// | lowReq2 | 2 | 0 | previousPrice+1 | OPEN | true |
// | mediumReq1 | 3 | 1 | previousPrice+3 | ACTIVE | false |
// ---------------------------------------------------------------------------
// Requested SI VMs (alive requests): 3
// Spot price: lowBid (previousPrice+1)
logger.debug("Waiting 10 seconds for SI VMs to be pre-empted.");
Thread.sleep(10000);
//Check available SI VMs
assertEquals(1, getAvailableResources());
//New spot price is equal to medium bid
assertEquals(mediumBid, rm.getSpotPrice());
lowReq1SR = rm.getSpotRequest(lowReq1Id, siCaller);
assertEquals(RequestState.STATE_Closed, lowReq1SR.getState().getStateStr());
assertEquals(0, lowReq1SR.getVMIds().length);
lowReq2SR = rm.getSpotRequest(lowReq2Id, siCaller);
assertEquals(RequestState.STATE_Open, lowReq2SR.getState().getStateStr());
assertEquals(0, lowReq2SR.getVMIds().length);
medReqSR = rm.getSpotRequest(medReqId, siCaller);
assertEquals(RequestState.STATE_Active, medReqSR.getState().getStateStr());
assertEquals(1, medReqSR.getVMIds().length);
logger.debug("Submitting WS request: wsReq4 (1 VM with 256MB RAM)");
CreateRequest wsReq4 = this.populator().getCreateRequest("wsReq4", 500, 256, 1);
CreateResult wsReq4Result = rm.create(wsReq4, wsCaller);
// Spot Instances Snapshot
//
// Total memory: 1280MB