use of com.emc.storageos.db.client.model.uimodels.Order in project coprhd-controller by CoprHD.
the class OrderServiceJobConsumer method consumeItem.
/**
* @param job The object provisioning job which is being worked on. This could be either creation or deletion job
* @param callback This must be executed, after the item is processed successfully to remove the item
* from the distributed queue
*
* @throws Exception
*/
@Override
public void consumeItem(OrderServiceJob job, DistributedQueueItemProcessedCallback callback) throws Exception {
while (true) {
try {
OrderJobStatus jobStatus = orderService.queryJobInfo(OrderServiceJob.JobType.DELETE_ORDER);
long startTime = jobStatus.getStartTime();
long endTime = jobStatus.getEndTime();
OrderStatus status = jobStatus.getStatus();
List<URI> tids = jobStatus.getTids();
List<URI> orderIds = new ArrayList();
log.info("jobstatus={}", jobStatus);
long total = 0;
long numberOfOrdersDeletedInGC = orderService.getDeletedOrdersInCurrentPeriodWithSort(jobStatus);
long numberOfOrdersCanBeDeletedInGC = maxOrderDeletedPerGC - numberOfOrdersDeletedInGC;
if (numberOfOrdersCanBeDeletedInGC <= 0) {
log.info("Max number of order objects ({}) have been deleted in the current GC period", maxOrderDeletedPerGC);
Thread.sleep(CHECK_INTERVAL);
continue;
}
boolean stop = false;
for (URI tid : tids) {
TimeSeriesConstraint constraint = TimeSeriesConstraint.Factory.getOrders(tid, startTime, endTime);
NamedElementQueryResultList ids = new NamedElementQueryResultList();
dbClient.queryByConstraint(constraint, ids);
for (NamedElementQueryResultList.NamedElement namedID : ids) {
URI id = namedID.getId();
Order order = orderManager.getOrderById(id);
try {
orderManager.canBeDeleted(order, status);
if (orderIds.size() < numberOfOrdersCanBeDeletedInGC) {
orderIds.add(id);
} else if (jobStatus.getTotal() != -1) {
stop = true;
break;
}
total++;
} catch (Exception e) {
continue;
}
}
if (stop) {
break;
}
}
if (jobStatus.getTotal() == -1) {
// It's the first time to run the job, so get the total number of orders to be deleted
jobStatus.setTotal(total);
orderService.saveJobInfo(jobStatus);
if (total == 0) {
log.info("No orders can be deleted");
break;
}
}
log.info("{} orders to be deleted within current GC period", orderIds.size());
long nDeleted = 0;
long nFailed = 0;
long start = System.currentTimeMillis();
long tempCount = 0;
for (URI id : orderIds) {
Order order = orderManager.getOrderById(id);
try {
log.info("To delete order {}", order.getId());
orderManager.deleteOrder(order);
nDeleted++;
tempCount++;
if (tempCount >= NUMBER_PER_RECORD) {
jobStatus.addCompleted(tempCount);
orderService.saveJobInfo(jobStatus);
tempCount = 0;
}
} catch (BadRequestException e) {
log.warn("Failed to delete order {} e=", id, e);
nFailed++;
jobStatus.setFailed(nFailed);
orderService.saveJobInfo(jobStatus);
} catch (Exception e) {
log.warn("Failed to delete order={} e=", id, e);
nFailed++;
jobStatus.setFailed(nFailed);
orderService.saveJobInfo(jobStatus);
}
}
if (tempCount > 0) {
jobStatus.addCompleted(tempCount);
orderService.saveJobInfo(jobStatus);
tempCount = 0;
}
long end = System.currentTimeMillis();
long speed = (end - start) / (nDeleted + nFailed);
jobStatus.setTimeUsedPerOrder(speed);
orderService.saveJobInfo(jobStatus);
if (jobStatus.isFinished()) {
break;
}
Thread.sleep(CHECK_INTERVAL);
} catch (Exception e) {
log.error("e=", e);
throw e;
}
}
log.info("remove order job from the queue");
callback.itemProcessed();
}
use of com.emc.storageos.db.client.model.uimodels.Order in project coprhd-controller by CoprHD.
the class CatalogCategoryManagerImpl method isServiceUsedForOrders.
private boolean isServiceUsedForOrders(String tenantId, CatalogService service) {
String serviceId = service.getId().toString();
List<Order> orders = client.orders().findAll(tenantId);
return CollectionUtils.exists(orders, new ServiceIdPredicate(serviceId));
}
use of com.emc.storageos.db.client.model.uimodels.Order in project coprhd-controller by CoprHD.
the class OrderCompletionConsumer method consumeItem.
@Override
public void consumeItem(OrderMessage message, DistributedQueueItemProcessedCallback callback) throws Exception {
try {
log.info("Order completed: " + message.getOrderId());
Order order = orderManager.getOrderById(uri(message.getOrderId()));
orderManager.processOrder(order);
} catch (Exception e) {
log.error("Failed to process order completion notification", e);
} finally {
callback.itemProcessed();
}
}
use of com.emc.storageos.db.client.model.uimodels.Order in project coprhd-controller by CoprHD.
the class ExecutionEngineMonitor method killOrder.
/**
* Kills an order that was running within a dead engine.
*
* @param orderId
* the order ID.
* @param detailedMessage
* message to be added to order log
*/
public void killOrder(URI orderId, String detailedMessage) {
try {
Order order = modelClient.orders().findById(orderId);
if (order != null) {
if (log.isInfoEnabled()) {
log.info("Killing order: " + orderId);
}
// Mark the order as failed
order.setOrderStatus(OrderStatus.ERROR.name());
modelClient.save(order);
if (order.getExecutionStateId() != null) {
ExecutionState execState = modelClient.executionStates().findById(order.getExecutionStateId());
// Mark the execution state as failed
execState.setExecutionStatus(ExecutionStatus.FAILED.name());
modelClient.save(execState);
// Find any task logs that are 'in progress' (no elapsed time) and set the elapsed
List<ExecutionTaskLog> logs = modelClient.executionTaskLogs().findByIds(execState.getTaskLogIds());
for (ExecutionTaskLog log : logs) {
if (log.getElapsed() == null) {
// Mark any that were in progress as warnings
log.setLevel(LogLevel.WARN.name());
modelClient.save(log);
}
}
// Add a new log message indicating it failed due to engine termination
addTerminationTaskLog(execState, detailedMessage);
}
}
} catch (RuntimeException e) {
log.error("Failed to terminate order: " + orderId, e);
}
}
use of com.emc.storageos.db.client.model.uimodels.Order in project coprhd-controller by CoprHD.
the class ExecutionEngineImplTest method testFailDuringRollback.
@Test
public void testFailDuringRollback() {
final FailureTask rollbackTask = new FailureTask("Fail During Rollback", "Fail during rollback");
final EmptyTask skippedTask = new EmptyTask("Skipped Rollback");
ExecutionService rollbackService = new EmptyService() {
@Override
public void execute() throws Exception {
addRollback(skippedTask);
addRollback(rollbackTask);
throw new Exception("Trigger rollback");
}
};
Order order = executeOrder(rollbackService, "FailDuringRollback");
Assert.assertEquals(OrderStatus.ERROR.name(), order.getOrderStatus());
Assert.assertEquals(true, rollbackTask.wasRun);
Assert.assertEquals(false, skippedTask.wasRun);
}
Aggregations