use of com.emc.storageos.db.client.model.uimodels.ExecutionWindow in project coprhd-controller by CoprHD.
the class ExecutionWindowService method getExecutionWindowById.
private ExecutionWindow getExecutionWindowById(URI id, boolean checkInactive) {
ExecutionWindow executionWindow = executionWindowManager.getExecutionWindowById(id);
ArgValidator.checkEntity(executionWindow, id, isIdEmbeddedInURL(id), checkInactive);
return executionWindow;
}
use of com.emc.storageos.db.client.model.uimodels.ExecutionWindow in project coprhd-controller by CoprHD.
the class OrderService method scheduleReoccurenceOrders.
private void scheduleReoccurenceOrders() throws Exception {
lock = coordinatorClient.getLock(LOCK_NAME);
try {
lock.acquire();
List<ScheduledEvent> scheduledEvents = dataManager.getAllReoccurrenceEvents();
for (ScheduledEvent event : scheduledEvents) {
if (event.getEventStatus() != ScheduledEventStatus.APPROVED) {
log.debug("Skipping event {} which is not in APPROVED status.", event.getId());
continue;
}
URI orderId = event.getLatestOrderId();
Order order = getOrderById(orderId, false);
if (!(OrderStatus.valueOf(order.getOrderStatus()).equals(OrderStatus.SUCCESS) || OrderStatus.valueOf(order.getOrderStatus()).equals(OrderStatus.PARTIAL_SUCCESS) || OrderStatus.valueOf(order.getOrderStatus()).equals(OrderStatus.ERROR) || OrderStatus.valueOf(order.getOrderStatus()).equals(OrderStatus.CANCELLED))) {
log.debug("Skipping event {} whose latest order {} is not finished yet.", event.getId(), order.getId());
continue;
}
log.info("Trying to schedule a new order for event {} : {}", event.getId(), ScheduleInfo.deserialize(org.apache.commons.codec.binary.Base64.decodeBase64(event.getScheduleInfo().getBytes(UTF_8))).toString());
StorageOSUser user = StorageOSUser.deserialize(org.apache.commons.codec.binary.Base64.decodeBase64(event.getStorageOSUser().getBytes(UTF_8)));
OrderCreateParam createParam = OrderCreateParam.deserialize(org.apache.commons.codec.binary.Base64.decodeBase64(event.getOrderCreationParam().getBytes(UTF_8)));
ScheduleInfo scheduleInfo = ScheduleInfo.deserialize(org.apache.commons.codec.binary.Base64.decodeBase64(event.getScheduleInfo().getBytes(UTF_8)));
Calendar nextScheduledTime = ScheduleTimeHelper.getNextScheduledTime(order.getScheduledTime(), scheduleInfo);
int retry = 0;
if (order.getExecutionWindowId() != null && !order.getExecutionWindowId().getURI().equals(ExecutionWindow.NEXT)) {
ExecutionWindow window = client.executionWindows().findById(order.getExecutionWindowId().getURI());
if (window != null) {
ExecutionWindowHelper helper = new ExecutionWindowHelper(window);
if (nextScheduledTime != null && !helper.isActive(nextScheduledTime)) {
log.warn("Execution window {} might be changed after the event is scheduled.", order.getExecutionWindowId().getURI());
log.warn("Otherwise it is a HOURLY scheduled event");
do {
nextScheduledTime = ScheduleTimeHelper.getNextScheduledTime(nextScheduledTime, scheduleInfo);
retry++;
} while (nextScheduledTime != null && !helper.isActive(nextScheduledTime) && retry < ScheduleTimeHelper.SCHEDULE_TIME_RETRY_THRESHOLD);
if (retry == ScheduleTimeHelper.SCHEDULE_TIME_RETRY_THRESHOLD) {
log.error("Failed to find next scheduled time that match with {}", order.getExecutionWindowId().getURI());
nextScheduledTime = null;
}
}
} else {
log.error("Execution window {} does not exist.", order.getExecutionWindowId().getURI());
}
}
if (nextScheduledTime == null) {
log.info("Scheduled event {} should be set finished.", event.getId());
event.setEventStatus(ScheduledEventStatus.FINISHED);
} else {
createParam.setScheduledTime(ScheduleTimeHelper.convertCalendarToStr(nextScheduledTime));
order = createNewOrder(user, uri(order.getTenant()), createParam);
orderManager.processOrder(order);
event.setLatestOrderId(order.getId());
log.info("Scheduled an new order {} for event {} ...", order.getId(), event.getId());
}
client.save(event);
}
} catch (Exception e) {
log.error("Failed to schedule next orders", e);
} finally {
try {
lock.release();
} catch (Exception e) {
log.error("Error releasing order scheduler lock", e);
}
}
}
use of com.emc.storageos.db.client.model.uimodels.ExecutionWindow in project coprhd-controller by CoprHD.
the class ExecutionWindowMapper method createNewObject.
public static ExecutionWindow createNewObject(ExecutionWindowCreateParam param) {
ExecutionWindow newObject = new ExecutionWindow();
newObject.setTenant(asString(param.getTenant()));
updateObject(newObject, param);
return newObject;
}
use of com.emc.storageos.db.client.model.uimodels.ExecutionWindow in project coprhd-controller by CoprHD.
the class ExecutionWindowTest method create.
private static ExecutionWindow create(String tenant, String label) {
ExecutionWindow model = new ExecutionWindow();
model.setLabel(label);
model.setHourOfDayInUTC(11);
model.setMinuteOfHourInUTC(53);
Integer length = new Integer(4);
model.setExecutionWindowLength(length);
model.setExecutionWindowLengthType(ExecutionWindowLengthType.HOURS.name());
model.setExecutionWindowType(ExecutionWindowType.DAILY.name());
model.setDayOfWeek(Calendar.TUESDAY);
model.setDayOfMonth(12);
model.setTenant(tenant);
return model;
}
use of com.emc.storageos.db.client.model.uimodels.ExecutionWindow in project coprhd-controller by CoprHD.
the class ExecutionWindowTest method testPersistObject.
@Test
public void testPersistObject() throws Exception {
_logger.info("Starting persist ExecutionWindow test");
ExecutionWindow model = new ExecutionWindow();
model.setLabel("foo");
Integer hour = new Integer(11);
Integer minute = new Integer(53);
model.setHourOfDayInUTC(hour);
model.setMinuteOfHourInUTC(minute);
Integer length = new Integer(4);
model.setExecutionWindowLength(length);
model.setExecutionWindowLengthType(ExecutionWindowLengthType.HOURS.name());
model.setExecutionWindowType(ExecutionWindowType.DAILY.name());
model.setDayOfWeek(Calendar.TUESDAY);
model.setDayOfMonth(12);
model.setTenant(DEFAULT_TENANT);
save(model);
model = findById(model.getId());
Assert.assertNotNull(model);
Assert.assertEquals("foo", model.getLabel());
Assert.assertEquals(hour, model.getHourOfDayInUTC());
Assert.assertEquals(minute, model.getMinuteOfHourInUTC());
Assert.assertEquals(length, model.getExecutionWindowLength());
Assert.assertEquals(ExecutionWindowLengthType.HOURS.name(), model.getExecutionWindowLengthType());
Assert.assertEquals(ExecutionWindowType.DAILY.name(), model.getExecutionWindowType());
Assert.assertEquals(new Integer(Calendar.TUESDAY), model.getDayOfWeek());
Assert.assertEquals(new Integer(12), model.getDayOfMonth());
Assert.assertEquals(DEFAULT_TENANT, model.getTenant());
}
Aggregations