use of org.smartdata.action.SmartAction in project SSM by Intel-bigdata.
the class Cmdlet method getActionStatuses.
public synchronized List<ActionStatus> getActionStatuses() throws UnsupportedEncodingException {
if (actionReportList.isEmpty()) {
return null;
}
// get status in the order of the descend action id.
// The cmdletmanager should update action status in the ascend order.
List<ActionStatus> statuses = new ArrayList<>();
Iterator<SmartAction> iter = actionReportList.iterator();
while (iter.hasNext()) {
SmartAction action = iter.next();
ActionStatus status = action.getActionStatus();
statuses.add(status);
if (status.isFinished()) {
iter.remove();
}
}
return Lists.reverse(statuses);
}
use of org.smartdata.action.SmartAction in project SSM by Intel-bigdata.
the class Cmdlet method runAllActions.
private void runAllActions() {
state = CmdletState.EXECUTING;
stateUpdateTime = System.currentTimeMillis();
Iterator<SmartAction> iter = actions.iterator();
while (iter.hasNext()) {
SmartAction act = iter.next();
if (act == null) {
continue;
}
// Init Action
// TODO: this statement maybe can be removed.
act.init(act.getArguments());
act.run();
if (!act.isSuccessful()) {
while (iter.hasNext()) {
SmartAction nextAct = iter.next();
synchronized (this) {
actionReportList.remove(nextAct);
}
}
state = CmdletState.FAILED;
stateUpdateTime = System.currentTimeMillis();
LOG.error("Executing Cmdlet [id={}] meets failed.", getId());
return;
}
}
state = CmdletState.DONE;
stateUpdateTime = System.currentTimeMillis();
// TODO catch MetaStoreException and handle
}
use of org.smartdata.action.SmartAction in project SSM by Intel-bigdata.
the class TestCmdletExecutor method testStop.
@Test
public void testStop() throws InterruptedException {
final List<StatusMessage> statusMessages = new Vector<>();
StatusReporter reporter = new StatusReporter() {
@Override
public void report(StatusMessage status) {
statusMessages.add(status);
}
};
CmdletExecutor executor = new CmdletExecutor(new SmartConf());
StatusReportTask statusReportTask = new StatusReportTask(reporter, executor, new SmartConf());
ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
executorService.scheduleAtFixedRate(statusReportTask, 100, 10, TimeUnit.MILLISECONDS);
SmartAction action = new HangingAction();
action.setActionId(101);
Cmdlet cmdlet = new Cmdlet(Arrays.asList(action));
cmdlet.setId(10);
executor.execute(cmdlet);
Thread.sleep(1000);
executor.stop(10L);
Thread.sleep(2000);
StatusReport lastReport = (StatusReport) statusMessages.get(statusMessages.size() - 1);
ActionStatus status = lastReport.getActionStatuses().get(0);
Assert.assertTrue(status.isFinished());
Assert.assertNotNull(status.getThrowable());
executor.shutdown();
}
Aggregations