Search in sources :

Example 36 with Order

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();
}
Also used : Order(com.emc.storageos.db.client.model.uimodels.Order) TimeSeriesConstraint(com.emc.storageos.db.client.constraint.TimeSeriesConstraint) ArrayList(java.util.ArrayList) URI(java.net.URI) BadRequestException(com.emc.storageos.svcs.errorhandling.resources.BadRequestException) OrderStatus(com.emc.storageos.db.client.model.uimodels.OrderStatus) BadRequestException(com.emc.storageos.svcs.errorhandling.resources.BadRequestException) NamedElementQueryResultList(com.emc.storageos.db.client.constraint.NamedElementQueryResultList)

Example 37 with Order

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));
}
Also used : Order(com.emc.storageos.db.client.model.uimodels.Order) ServiceIdPredicate(com.emc.sa.util.ServiceIdPredicate)

Example 38 with Order

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();
    }
}
Also used : Order(com.emc.storageos.db.client.model.uimodels.Order)

Example 39 with Order

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);
    }
}
Also used : Order(com.emc.storageos.db.client.model.uimodels.Order) ExecutionState(com.emc.storageos.db.client.model.uimodels.ExecutionState) ExecutionTaskLog(com.emc.storageos.db.client.model.uimodels.ExecutionTaskLog)

Example 40 with Order

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);
}
Also used : Order(com.emc.storageos.db.client.model.uimodels.Order) ExecutionService(com.emc.sa.engine.service.ExecutionService) AbstractExecutionService(com.emc.sa.engine.service.AbstractExecutionService) ServiceNotFoundException(com.emc.sa.engine.service.ServiceNotFoundException) DatabaseException(com.emc.storageos.db.exceptions.DatabaseException) Test(org.junit.Test)

Aggregations

Order (com.emc.storageos.db.client.model.uimodels.Order)53 Test (org.junit.Test)15 StorageOSUser (com.emc.storageos.security.authentication.StorageOSUser)12 URI (java.net.URI)12 Path (javax.ws.rs.Path)11 Produces (javax.ws.rs.Produces)9 DatabaseException (com.emc.storageos.db.exceptions.DatabaseException)8 OrderParameter (com.emc.storageos.db.client.model.uimodels.OrderParameter)7 GET (javax.ws.rs.GET)7 AbstractExecutionService (com.emc.sa.engine.service.AbstractExecutionService)6 ExecutionService (com.emc.sa.engine.service.ExecutionService)6 NamedURI (com.emc.storageos.db.client.model.NamedURI)6 ServiceNotFoundException (com.emc.sa.engine.service.ServiceNotFoundException)5 Date (java.util.Date)5 ModelClient (com.emc.sa.model.dao.ModelClient)4 TimeSeriesConstraint (com.emc.storageos.db.client.constraint.TimeSeriesConstraint)4 ExecutionState (com.emc.storageos.db.client.model.uimodels.ExecutionState)4 Consumes (javax.ws.rs.Consumes)4 BaseModelTest (com.emc.sa.model.BaseModelTest)3 NamedElementQueryResultList (com.emc.storageos.db.client.constraint.NamedElementQueryResultList)3