// Real onFailure protected void onFailure( FetchException e, Object token, ObjectContainer container, ClientContext context) { if (persistent) { container.activate(segment, 1); container.activate(parent, 1); container.activate(segment.errors, 1); } boolean forceFatal = false; if (parent.isCancelled()) { if (Logger.shouldLog(Logger.MINOR, this)) Logger.minor(this, "Failing: cancelled"); e = new FetchException(FetchException.CANCELLED); forceFatal = true; } segment.errors.inc(e.getMode()); if (e.isFatal() && token == null) { segment.fail(e, container, context, false); } else if (e.isFatal() || forceFatal) { segment.onFatalFailure(e, ((MySendableRequestItem) token).x, this, container, context); } else { segment.onNonFatalFailure(e, ((MySendableRequestItem) token).x, this, container, context); } removeBlockNum(((MySendableRequestItem) token).x, container, false); if (persistent) { container.deactivate(segment, 1); container.deactivate(parent, 1); container.deactivate(segment.errors, 1); } }
public void onFailure( FetchException e, Object token, ObjectContainer container, ClientContext context) { if (persistent) { container.activate(segment, 1); container.activate(parent, 1); container.activate(segment.errors, 1); } boolean forceFatal = false; if (parent.isCancelled()) { if (logMINOR) Logger.minor(this, "Failing: cancelled"); e = new FetchException(FetchException.CANCELLED); forceFatal = true; } segment.errors.inc(e.getMode()); if (persistent) segment.errors.storeTo(container); if (e.isFatal() && token == null) { segment.fail(e, container, context, false); } else if (e.isFatal() || forceFatal) { segment.onFatalFailure( e, ((SplitFileFetcherSegmentSendableRequestItem) token).blockNum, container, context); } else { segment.onNonFatalFailure( e, ((SplitFileFetcherSegmentSendableRequestItem) token).blockNum, container, context); } if (persistent) { container.deactivate(segment, 1); container.deactivate(parent, 1); container.deactivate(segment.errors, 1); } }
public void onFailure( BulkCallFailureItem[] items, ObjectContainer container, ClientContext context) { FetchException[] fetchExceptions = new FetchException[items.length]; int countFatal = 0; if (persistent) { container.activate(blockNums, 2); } for (int i = 0; i < items.length; i++) { fetchExceptions[i] = translateException(items[i].e); if (fetchExceptions[i].isFatal()) countFatal++; removeBlockNum(((MySendableRequestItem) items[i].token).x, container, true); } if (persistent) { container.store(blockNums); container.deactivate(blockNums, 2); container.activate(segment, 1); container.activate(parent, 1); container.activate(segment.errors, 1); } if (parent.isCancelled()) { if (Logger.shouldLog(Logger.MINOR, this)) Logger.minor(this, "Failing: cancelled"); // Fail the segment. segment.fail(new FetchException(FetchException.CANCELLED), container, context, false); // FIXME do we need to free the keyNum's??? Or will that happen later anyway? return; } for (int i = 0; i < fetchExceptions.length; i++) segment.errors.inc(fetchExceptions[i].getMode()); int nonFatalExceptions = items.length - countFatal; int[] blockNumbers = new int[nonFatalExceptions]; if (countFatal > 0) { FetchException[] newFetchExceptions = new FetchException[items.length - countFatal]; // Call the fatal callbacks directly. int x = 0; for (int i = 0; i < items.length; i++) { int blockNum = ((MySendableRequestItem) items[i].token).x; if (fetchExceptions[i].isFatal()) { segment.onFatalFailure(fetchExceptions[i], blockNum, this, container, context); } else { blockNumbers[x] = blockNum; newFetchExceptions[x] = fetchExceptions[i]; x++; } } fetchExceptions = newFetchExceptions; } else { for (int i = 0; i < blockNumbers.length; i++) blockNumbers[i] = ((MySendableRequestItem) items[i].token).x; } segment.onNonFatalFailure(fetchExceptions, blockNumbers, this, container, context); if (persistent) { container.deactivate(segment, 1); container.deactivate(parent, 1); container.deactivate(segment.errors, 1); } }