Previously the hierarchical microscheduler defensively coded around and reported exceptions of
the walker itself, but didn't do a great job of catching framework exceptions. This became extremely unfortunate in the case where walkers caused exceptions that manifested themselves in the framework, such as when the walker opens more files than file handles are available. Reworked the exception handling so that framework errors are treated like walker errors and the resulting exception bubbles out of the walker. Stack traces for threaded walkers are still convoluted and nasty. git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@3794 348d0f76-0448-11de-a6fe-93d51630548a
This commit is contained in:
parent
bf384f48e1
commit
a8caa20378
|
|
@ -57,35 +57,36 @@ public class ShardTraverser implements Callable {
|
|||
}
|
||||
|
||||
public Object call() {
|
||||
long startTime = System.currentTimeMillis();
|
||||
|
||||
Object accumulator = walker.reduceInit();
|
||||
LocusWalker lWalker = (LocusWalker)walker;
|
||||
WindowMaker windowMaker = new WindowMaker(microScheduler.getReadIterator(shard),shard.getGenomeLocs(),walker.getMandatoryReadFilters(), lWalker.getDiscards());
|
||||
ShardDataProvider dataProvider = null;
|
||||
try {
|
||||
long startTime = System.currentTimeMillis();
|
||||
|
||||
Object accumulator = walker.reduceInit();
|
||||
LocusWalker lWalker = (LocusWalker)walker;
|
||||
WindowMaker windowMaker = new WindowMaker(microScheduler.getReadIterator(shard),shard.getGenomeLocs(),walker.getMandatoryReadFilters(),lWalker.getDiscards());
|
||||
ShardDataProvider dataProvider = null;
|
||||
|
||||
for(WindowMaker.WindowMakerIterator iterator: windowMaker) {
|
||||
dataProvider = new LocusShardDataProvider(shard,iterator.getSourceInfo(),iterator.getLocus(),iterator,microScheduler.reference,microScheduler.rods);
|
||||
accumulator = traversalEngine.traverse( walker, dataProvider, accumulator );
|
||||
dataProvider.close();
|
||||
}
|
||||
}
|
||||
finally {
|
||||
|
||||
if (dataProvider != null) dataProvider.close();
|
||||
windowMaker.close();
|
||||
outputMergeTask = outputTracker.closeStorage();
|
||||
|
||||
long endTime = System.currentTimeMillis();
|
||||
|
||||
microScheduler.reportShardTraverseTime(endTime-startTime);
|
||||
|
||||
return accumulator;
|
||||
}
|
||||
finally {
|
||||
synchronized(this) {
|
||||
complete = true;
|
||||
notifyAll();
|
||||
}
|
||||
}
|
||||
|
||||
long endTime = System.currentTimeMillis();
|
||||
|
||||
microScheduler.reportShardTraverseTime(endTime-startTime);
|
||||
|
||||
return accumulator;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Reference in New Issue