}
// Check all dependencies during materialization to avoid registering in the cache.
// But check only first missing one afterwards similar to
// CoordActionInputCheckXCommand for efficiency. listPartitions is costly.
ActionDependency actionDep = DependencyChecker.checkForAvailability(missingDepsArray, actionConf,
!registerForNotification);
boolean isChangeInDependency = true;
boolean timeout = false;
if (actionDep.getMissingDependencies().size() == 0) {
// All push-based dependencies are available
onAllPushDependenciesAvailable();
}
else {
if (actionDep.getMissingDependencies().size() == missingDepsArray.length) {
isChangeInDependency = false;
}
else {
String stillMissingDeps = DependencyChecker.dependenciesAsString(actionDep
.getMissingDependencies());
coordAction.setPushMissingDependencies(stillMissingDeps);
}
// Checking for timeout
timeout = isTimeout();
if (timeout) {
queue(new CoordActionTimeOutXCommand(coordAction, coordJob.getUser(), coordJob.getAppName()));
}
else {
queue(new CoordPushDependencyCheckXCommand(coordAction.getId()),
getCoordPushCheckRequeueInterval());
}
}
updateCoordAction(coordAction, isChangeInDependency);
if (registerForNotification) {
registerForNotification(actionDep.getMissingDependencies(), actionConf);
}
if (removeAvailDependencies) {
unregisterAvailableDependencies(actionDep.getAvailableDependencies());
}
if (timeout) {
unregisterMissingDependencies(actionDep.getMissingDependencies(), actionId);
}
}
catch (Exception e) {
final CallableQueueService callableQueueService = Services.get().get(CallableQueueService.class);
if (isTimeout()) {