boolean workOn(Processing processing) {
        DocprocExecutor ex = getExecutor();
        if (ex == null) {
            throw new NoCallStackException();
        }

        DocumentProcessor.Progress progress;

        try {
            progress = ex.process(processing);
        } catch (Exception e) {
            processingFailed(processing, processing + " failed", e);
            return true;
        }

        if (DocumentProcessor.Progress.DONE.equals(progress)) {
            //notify endpoint
            ProcessingEndpoint recv = ((ProcessingAccess)processing).getEndpoint();
            if (recv != null) {
                recv.processingDone(processing);
            }
            return true;
        } else if (DocumentProcessor.Progress.FAILED.equals(progress)) {
            processingFailed(processing, processing + " failed at " + processing.callStack().getLastPopped(), null);
            return true;
        } else if (DocumentProcessor.Progress.PERMANENT_FAILURE.equals(progress)) {
            processingFailed(processing,
                    processing + " failed PERMANENTLY at " + processing.callStack().getLastPopped() + ", disabling processing service.", null);
            setInService(false);
            return true;
        } else {
            //LATER:
            return false;
        }
    }
Do some work on this processing. Must only be called from the worker thread.

@return true if this processing should be removed, false if there is more work to do on it later
@throws NoCallStackException if no CallStack has been set on this executor.
docproc/src/main/java/com/yahoo/docproc/impl/DocprocService.java