public synchronized boolean single(StageType stage, EtlEventData etlEventData) {
boolean result = false;
switch (stage) {
case SELECT:
if (progress.containsKey(etlEventData.getProcessId())) {// 可能发生了rollback,对应的progress已经被废弃
progress.put(etlEventData.getProcessId(), new StageProgress(stage, etlEventData));
replys.get(StageType.EXTRACT).offer(etlEventData.getProcessId());
result = true;
}
break;
case EXTRACT:
if (progress.containsKey(etlEventData.getProcessId())) {
progress.put(etlEventData.getProcessId(), new StageProgress(stage, etlEventData));
replys.get(StageType.TRANSFORM).offer(etlEventData.getProcessId());
result = true;
}
break;
case TRANSFORM:
if (progress.containsKey(etlEventData.getProcessId())) {
progress.put(etlEventData.getProcessId(), new StageProgress(stage, etlEventData));
result = true;
}
// 并不是立即触发,通知最小的一个process启动
computeNextLoad();
break;