Search in sources :

Example 1 with JobListener

use of org.apache.zeppelin.scheduler.JobListener in project zeppelin by apache.

the class RemoteInterpreterServer method interpret.

@Override
public RemoteInterpreterResult interpret(String sessionId, String className, String st, RemoteInterpreterContext interpreterContext) throws InterpreterRPCException, TException {
    try {
        if (LOGGER.isDebugEnabled()) {
            LOGGER.debug("st:\n{}", st);
        }
        lifecycleManager.onInterpreterUse(interpreterGroupId);
        Interpreter intp = getInterpreter(sessionId, className);
        InterpreterContext context = convert(interpreterContext);
        context.setInterpreterClassName(intp.getClassName());
        InterpretJob interpretJob = null;
        boolean isRecover = Boolean.parseBoolean(context.getLocalProperties().getOrDefault("isRecover", "false"));
        if (isRecover) {
            LOGGER.info("Recovering paragraph: {} of note: {}", context.getParagraphId(), context.getNoteId());
            interpretJob = runningJobs.get(context.getParagraphId());
            if (interpretJob == null) {
                InterpreterResult result = new InterpreterResult(Code.ERROR, "Job is finished, unable to recover it");
                return convert(result, context.getConfig(), context.getGui(), context.getNoteGui());
            }
        } else {
            Scheduler scheduler = intp.getScheduler();
            InterpretJobListener jobListener = new InterpretJobListener();
            interpretJob = new InterpretJob(context.getParagraphId(), "RemoteInterpretJob_" + System.currentTimeMillis(), jobListener, intp, st, context);
            runningJobs.put(context.getParagraphId(), interpretJob);
            scheduler.submit(interpretJob);
        }
        while (!interpretJob.isTerminated()) {
            JobListener jobListener = interpretJob.getListener();
            synchronized (jobListener) {
                try {
                    jobListener.wait(1000);
                } catch (InterruptedException e) {
                    LOGGER.info("Exception in RemoteInterpreterServer while interpret, jobListener.wait", e);
                }
            }
        }
        progressMap.remove(context.getParagraphId());
        resultCleanService.schedule(() -> {
            runningJobs.remove(context.getParagraphId());
        }, resultCacheInSeconds, TimeUnit.SECONDS);
        InterpreterResult result = interpretJob.getReturn();
        // in case of job abort in PENDING status, result can be null
        if (result == null) {
            result = new InterpreterResult(Code.KEEP_PREVIOUS_RESULT);
        }
        return convert(result, context.getConfig(), context.getGui(), context.getNoteGui());
    } catch (Exception e) {
        LOGGER.error("Internal error when interpret code", e);
        throw new InterpreterRPCException(e.toString());
    }
}
Also used : InterpreterRPCException(org.apache.zeppelin.interpreter.thrift.InterpreterRPCException) Interpreter(org.apache.zeppelin.interpreter.Interpreter) LazyOpenInterpreter(org.apache.zeppelin.interpreter.LazyOpenInterpreter) Scheduler(org.apache.zeppelin.scheduler.Scheduler) RemoteInterpreterResult(org.apache.zeppelin.interpreter.thrift.RemoteInterpreterResult) InterpreterResult(org.apache.zeppelin.interpreter.InterpreterResult) InterpreterContext(org.apache.zeppelin.interpreter.InterpreterContext) RemoteInterpreterContext(org.apache.zeppelin.interpreter.thrift.RemoteInterpreterContext) JobListener(org.apache.zeppelin.scheduler.JobListener) TTransportException(org.apache.thrift.transport.TTransportException) InterpreterRPCException(org.apache.zeppelin.interpreter.thrift.InterpreterRPCException) InterpreterException(org.apache.zeppelin.interpreter.InterpreterException) ApplicationException(org.apache.zeppelin.helium.ApplicationException) TException(org.apache.thrift.TException) IOException(java.io.IOException)

Aggregations

IOException (java.io.IOException)1 TException (org.apache.thrift.TException)1 TTransportException (org.apache.thrift.transport.TTransportException)1 ApplicationException (org.apache.zeppelin.helium.ApplicationException)1 Interpreter (org.apache.zeppelin.interpreter.Interpreter)1 InterpreterContext (org.apache.zeppelin.interpreter.InterpreterContext)1 InterpreterException (org.apache.zeppelin.interpreter.InterpreterException)1 InterpreterResult (org.apache.zeppelin.interpreter.InterpreterResult)1 LazyOpenInterpreter (org.apache.zeppelin.interpreter.LazyOpenInterpreter)1 InterpreterRPCException (org.apache.zeppelin.interpreter.thrift.InterpreterRPCException)1 RemoteInterpreterContext (org.apache.zeppelin.interpreter.thrift.RemoteInterpreterContext)1 RemoteInterpreterResult (org.apache.zeppelin.interpreter.thrift.RemoteInterpreterResult)1 JobListener (org.apache.zeppelin.scheduler.JobListener)1 Scheduler (org.apache.zeppelin.scheduler.Scheduler)1