You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by bi...@apache.org on 2016/12/23 15:49:33 UTC
kylin git commit: KYLIN-2306 fall back to abstract when
NoClassFoundException
Repository: kylin
Updated Branches:
refs/heads/master 488283d3d -> 73a40296e
KYLIN-2306 fall back to abstract when NoClassFoundException
Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/73a40296
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/73a40296
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/73a40296
Branch: refs/heads/master
Commit: 73a40296e33921a000cb97faa3321dd53b8dbf41
Parents: 488283d
Author: Billy Liu <bi...@apache.org>
Authored: Fri Dec 23 23:49:02 2016 +0800
Committer: Billy Liu <bi...@apache.org>
Committed: Fri Dec 23 23:49:20 2016 +0800
----------------------------------------------------------------------
.../kylin/job/execution/ExecutableManager.java | 59 ++++++++++++--------
1 file changed, 35 insertions(+), 24 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/kylin/blob/73a40296/core-job/src/main/java/org/apache/kylin/job/execution/ExecutableManager.java
----------------------------------------------------------------------
diff --git a/core-job/src/main/java/org/apache/kylin/job/execution/ExecutableManager.java b/core-job/src/main/java/org/apache/kylin/job/execution/ExecutableManager.java
index 0c49a3e..0273fd8 100644
--- a/core-job/src/main/java/org/apache/kylin/job/execution/ExecutableManager.java
+++ b/core-job/src/main/java/org/apache/kylin/job/execution/ExecutableManager.java
@@ -44,10 +44,16 @@ public class ExecutableManager {
private static final Logger logger = LoggerFactory.getLogger(ExecutableManager.class);
private static final ConcurrentHashMap<KylinConfig, ExecutableManager> CACHE = new ConcurrentHashMap<KylinConfig, ExecutableManager>();
-
+
private final KylinConfig config;
private final ExecutableDao executableDao;
+ private ExecutableManager(KylinConfig config) {
+ logger.info("Using metadata url: " + config);
+ this.config = config;
+ this.executableDao = ExecutableDao.getInstance(config);
+ }
+
public static ExecutableManager getInstance(KylinConfig config) {
ExecutableManager r = CACHE.get(config);
if (r == null) {
@@ -69,10 +75,20 @@ public class ExecutableManager {
CACHE.clear();
}
- private ExecutableManager(KylinConfig config) {
- logger.info("Using metadata url: " + config);
- this.config = config;
- this.executableDao = ExecutableDao.getInstance(config);
+ private static ExecutablePO parse(AbstractExecutable executable) {
+ ExecutablePO result = new ExecutablePO();
+ result.setName(executable.getName());
+ result.setUuid(executable.getId());
+ result.setType(executable.getClass().getName());
+ result.setParams(executable.getParams());
+ if (executable instanceof ChainedExecutable) {
+ List<ExecutablePO> tasks = Lists.newArrayList();
+ for (AbstractExecutable task : ((ChainedExecutable) executable).getTasks()) {
+ tasks.add(parse(task));
+ }
+ result.setTasks(tasks);
+ }
+ return result;
}
public void addJob(AbstractExecutable executable) {
@@ -321,7 +337,6 @@ public class ExecutableManager {
updateJobOutput(jobId, ExecutableState.DISCARDED, null, null);
}
-
public void rollbackJob(String jobId, String stepId) {
AbstractExecutable job = getJob(jobId);
if (job == null) {
@@ -409,22 +424,6 @@ public class ExecutableManager {
addJobInfo(id, info);
}
- private static ExecutablePO parse(AbstractExecutable executable) {
- ExecutablePO result = new ExecutablePO();
- result.setName(executable.getName());
- result.setUuid(executable.getId());
- result.setType(executable.getClass().getName());
- result.setParams(executable.getParams());
- if (executable instanceof ChainedExecutable) {
- List<ExecutablePO> tasks = Lists.newArrayList();
- for (AbstractExecutable task : ((ChainedExecutable) executable).getTasks()) {
- tasks.add(parse(task));
- }
- result.setTasks(tasks);
- }
- return result;
- }
-
private AbstractExecutable parseTo(ExecutablePO executablePO) {
if (executablePO == null) {
logger.warn("executablePO is null");
@@ -457,8 +456,14 @@ public class ExecutableManager {
logger.warn("executablePO is null");
return null;
}
+ String type = executablePO.getType();
try {
- Class<? extends AbstractExecutable> clazz = ClassUtil.forName(expectedClass.getName(), AbstractExecutable.class);
+ Class<? extends AbstractExecutable> clazz = null;
+ try {
+ clazz = ClassUtil.forName(type, AbstractExecutable.class);
+ } catch (ClassNotFoundException e) {
+ clazz = ClassUtil.forName(expectedClass.getName(), AbstractExecutable.class);
+ }
Constructor<? extends AbstractExecutable> constructor = clazz.getConstructor();
AbstractExecutable result = constructor.newInstance();
result.initConfig(config);
@@ -469,7 +474,13 @@ public class ExecutableManager {
if (tasks != null && !tasks.isEmpty()) {
Preconditions.checkArgument(result instanceof ChainedExecutable);
for (ExecutablePO subTask : tasks) {
- ((ChainedExecutable) result).addTask(parseToAbstract(subTask, DefaultChainedExecutable.class));
+ AbstractExecutable parseToTask = null;
+ try {
+ parseToTask = parseTo(subTask);
+ } catch (IllegalStateException e) {
+ parseToTask = parseToAbstract(subTask, DefaultChainedExecutable.class);
+ }
+ ((ChainedExecutable) result).addTask(parseToTask);
}
}
return result;