Search in sources :

Example 1 with EventBatch

use of com.xensource.xenapi.EventBatch in project cloudstack by apache.

the class XenServerResourceNewBase method waitForTask2.

protected void waitForTask2(final Connection c, final Task task, final long pollInterval, final long timeout) throws XenAPIException, XmlRpcException, TimeoutException {
    final long beginTime = System.currentTimeMillis();
    if (s_logger.isTraceEnabled()) {
        s_logger.trace("Task " + task.getNameLabel(c) + " (" + task.getType(c) + ") sent to " + c.getSessionReference() + " is pending completion with a " + timeout + "ms timeout");
    }
    final Set<String> classes = new HashSet<String>();
    classes.add("Task/" + task.toWireString());
    String token = "";
    final Double t = new Double(timeout / 1000);
    while (true) {
        final EventBatch map = Event.from(c, classes, token, t);
        token = map.token;
        @SuppressWarnings("unchecked") final Set<Event.Record> events = map.events;
        if (events.size() == 0) {
            final String msg = "No event for task " + task.toWireString();
            s_logger.warn(msg);
            task.cancel(c);
            throw new TimeoutException(msg);
        }
        for (final Event.Record rec : events) {
            if (!(rec.snapshot instanceof Task.Record)) {
                if (s_logger.isDebugEnabled()) {
                    s_logger.debug("Skipping over " + rec);
                }
                continue;
            }
            final Task.Record taskRecord = (Task.Record) rec.snapshot;
            if (taskRecord.status != Types.TaskStatusType.PENDING) {
                if (s_logger.isDebugEnabled()) {
                    s_logger.debug("Task, ref:" + task.toWireString() + ", UUID:" + taskRecord.uuid + " is done " + taskRecord.status);
                }
                return;
            } else {
                if (s_logger.isDebugEnabled()) {
                    s_logger.debug("Task: ref:" + task.toWireString() + ", UUID:" + taskRecord.uuid + " progress: " + taskRecord.progress);
                }
            }
        }
        if (System.currentTimeMillis() - beginTime > timeout) {
            final String msg = "Async " + timeout / 1000 + " seconds timeout for task " + task.toString();
            s_logger.warn(msg);
            task.cancel(c);
            throw new TimeoutException(msg);
        }
    }
}
Also used : Task(com.xensource.xenapi.Task) Event(com.xensource.xenapi.Event) EventBatch(com.xensource.xenapi.EventBatch) HashSet(java.util.HashSet) TimeoutException(java.util.concurrent.TimeoutException)

Aggregations

Event (com.xensource.xenapi.Event)1 EventBatch (com.xensource.xenapi.EventBatch)1 Task (com.xensource.xenapi.Task)1 HashSet (java.util.HashSet)1 TimeoutException (java.util.concurrent.TimeoutException)1