You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zeppelin.apache.org by zj...@apache.org on 2021/02/19 15:14:48 UTC

[zeppelin] branch master updated: [ZEPPELIN-5215]. Use user defined exception instead of TException to propagate exception to zeppelin server

This is an automated email from the ASF dual-hosted git repository.

zjffdu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/zeppelin.git


The following commit(s) were added to refs/heads/master by this push:
     new 366a9e8  [ZEPPELIN-5215]. Use user defined exception instead of TException to propagate exception to zeppelin server
366a9e8 is described below

commit 366a9e84c38902c077ccf54ba1b5ff0faee4322f
Author: Jeff Zhang <zj...@apache.org>
AuthorDate: Fri Jan 22 23:28:19 2021 +0800

    [ZEPPELIN-5215]. Use user defined exception instead of TException to propagate exception to zeppelin server
    
    ### What is this PR for?
    
    Currently we use TException in RemoteInterpreterServer which make zeppelin server unknown what kind of error happens in interpreter process side. Using user defined exception can propagate the exception to zeppelin server side.
    See https://livebook.manning.com/book/programmers-guide-to-apache-thrift/chapter-9/87
    
    ### What type of PR is it?
    [Improvement ]
    
    ### Todos
    * [ ] - Task
    
    ### What is the Jira issue?
    * https://issues.apache.org/jira/browse/ZEPPELIN-5215
    
    ### How should this be tested?
    * Manually tested
    
    ### Screenshots (if appropriate)
    
    Before
    ![image](https://user-images.githubusercontent.com/164491/105442764-4c09c500-5ca5-11eb-8592-4954c3fa1f38.png)
    
    After
    
    ![image](https://user-images.githubusercontent.com/164491/105442437-cc7bf600-5ca4-11eb-914d-2be569358d31.png)
    
    ### Questions:
    * Does the licenses files need update? No
    * Is there breaking changes for older versions? No
    * Does this needs documentation? No
    
    Author: Jeff Zhang <zj...@apache.org>
    
    Closes #4031 from zjffdu/ZEPPELIN-5215 and squashes the following commits:
    
    c991e5dad [Jeff Zhang] use user defined exception
    8961cf129 [Jeff Zhang] [ZEPPELIN-5215]. Use TApplicationException instead of TException to propagate exception to zeppelin server
---
 .../interpreter/remote/PooledRemoteClient.java     |   16 +-
 .../remote/RemoteInterpreterServer.java            |  227 +-
 .../interpreter/thrift/AngularObjectId.java        |    2 +-
 .../interpreter/thrift/AppOutputAppendEvent.java   |    2 +-
 .../interpreter/thrift/AppOutputUpdateEvent.java   |    2 +-
 .../interpreter/thrift/AppStatusUpdateEvent.java   |    2 +-
 .../interpreter/thrift/InterpreterCompletion.java  |    2 +-
 ...Exception.java => InterpreterRPCException.java} |  173 +-
 .../interpreter/thrift/OutputAppendEvent.java      |    2 +-
 .../interpreter/thrift/OutputUpdateAllEvent.java   |    2 +-
 .../interpreter/thrift/OutputUpdateEvent.java      |    2 +-
 .../zeppelin/interpreter/thrift/ParagraphInfo.java |    2 +-
 .../zeppelin/interpreter/thrift/RegisterInfo.java  |    2 +-
 .../thrift/RemoteApplicationResult.java            |    2 +-
 .../thrift/RemoteInterpreterContext.java           |    2 +-
 .../interpreter/thrift/RemoteInterpreterEvent.java |    2 +-
 .../thrift/RemoteInterpreterEventService.java      | 2796 ++++++++++++++++--
 .../thrift/RemoteInterpreterEventType.java         |    2 +-
 .../thrift/RemoteInterpreterResult.java            |    2 +-
 .../thrift/RemoteInterpreterResultMessage.java     |    2 +-
 .../thrift/RemoteInterpreterService.java           | 3084 ++++++++++++++++++--
 .../interpreter/thrift/RunParagraphsEvent.java     |    2 +-
 .../interpreter/thrift/ServiceException.java       |    2 +-
 .../zeppelin/interpreter/thrift/WebUrlInfo.java    |    2 +-
 .../thrift/RemoteInterpreterEventService.thrift    |   40 +-
 .../main/thrift/RemoteInterpreterService.thrift    |   48 +-
 .../interpreter/RemoteInterpreterEventServer.java  |   55 +-
 27 files changed, 5770 insertions(+), 707 deletions(-)

diff --git a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/remote/PooledRemoteClient.java b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/remote/PooledRemoteClient.java
index 7d5a764..0117b95 100644
--- a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/remote/PooledRemoteClient.java
+++ b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/remote/PooledRemoteClient.java
@@ -21,6 +21,7 @@ import org.apache.commons.pool2.impl.GenericObjectPool;
 import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
 import org.apache.thrift.TException;
 import org.apache.thrift.TServiceClient;
+import org.apache.zeppelin.interpreter.thrift.InterpreterRPCException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -85,6 +86,7 @@ public class PooledRemoteClient<T extends TServiceClient> {
 
   public <R> R callRemoteFunction(RemoteFunction<R, T> func) {
     boolean broken = false;
+    String errorCause = null;
     for (int i = 0;i < RETRY_COUNT; ++ i) {
       T client = null;
       broken = false;
@@ -93,11 +95,15 @@ public class PooledRemoteClient<T extends TServiceClient> {
         if (client != null) {
           return func.call(client);
         }
-      } catch (TException e) {
+      } catch (InterpreterRPCException e) {
+        // zeppelin side exception, no need to retry
         broken = true;
-        continue;
+        errorCause = e.getErrorMessage();
+        break;
       } catch (Exception e1) {
-        throw new RuntimeException(e1);
+        // thrift framework exception (maybe due to network issue), need to retry
+        broken = true;
+        continue;
       } finally {
         if (client != null) {
           releaseClient(client, broken);
@@ -105,13 +111,13 @@ public class PooledRemoteClient<T extends TServiceClient> {
       }
     }
     if (broken) {
-      throw new RuntimeException("Fail to callRemoteFunction, because connection is broken");
+      throw new RuntimeException(errorCause);
     }
     return null;
   }
 
 
   public interface RemoteFunction<R, T> {
-    R call(T client) throws Exception;
+    R call(T client) throws InterpreterRPCException, TException;
   }
 }
diff --git a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreterServer.java b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreterServer.java
index e9ebdd1..c058dd6 100644
--- a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreterServer.java
+++ b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreterServer.java
@@ -55,6 +55,7 @@ import org.apache.zeppelin.interpreter.InterpreterResultMessageOutput;
 import org.apache.zeppelin.interpreter.LazyOpenInterpreter;
 import org.apache.zeppelin.interpreter.LifecycleManager;
 import org.apache.zeppelin.interpreter.thrift.InterpreterCompletion;
+import org.apache.zeppelin.interpreter.thrift.InterpreterRPCException;
 import org.apache.zeppelin.interpreter.thrift.RegisterInfo;
 import org.apache.zeppelin.interpreter.thrift.RemoteApplicationResult;
 import org.apache.zeppelin.interpreter.thrift.RemoteInterpreterContext;
@@ -199,7 +200,7 @@ public class RemoteInterpreterServer extends Thread
   }
 
   @Override
-  public void init(Map<String, String> properties) throws TException {
+  public void init(Map<String, String> properties) throws InterpreterRPCException, TException {
     this.zConf = ZeppelinConfiguration.create();
     for (Map.Entry<String, String> entry : properties.entrySet()) {
       this.zConf.setProperty(entry.getKey(), entry.getValue());
@@ -220,7 +221,7 @@ public class RemoteInterpreterServer extends Thread
       lifecycleManager = createLifecycleManager();
       lifecycleManager.onInterpreterProcessStarted(interpreterGroupId);
     } catch (Exception e) {
-      throw new TException("Fail to create LifeCycleManager", e);
+      throw new InterpreterRPCException("Fail to create LifecycleManager, cause: " + e.toString());
     }
 
     if (!isTest) {
@@ -234,7 +235,7 @@ public class RemoteInterpreterServer extends Thread
   }
 
   @Override
-  public void shutdown() throws TException {
+  public void shutdown() throws InterpreterRPCException, TException {
     // unRegisterInterpreterProcess should be a sync operation (outside of shutdown thread),
     // otherwise it would cause data mismatch between zeppelin server & interpreter process.
     // e.g. zeppelin server start a new interpreter process, while previous interpreter process
@@ -345,7 +346,7 @@ public class RemoteInterpreterServer extends Thread
 
   @Override
   public void createInterpreter(String interpreterGroupId, String sessionId, String
-      className, Map<String, String> properties, String userName) throws TException {
+      className, Map<String, String> properties, String userName) throws InterpreterRPCException, TException {
     try {
       if (interpreterGroup == null) {
         interpreterGroup = new InterpreterGroup(interpreterGroupId);
@@ -370,30 +371,23 @@ public class RemoteInterpreterServer extends Thread
                 Integer.parseInt(properties.getOrDefault("zeppelin.interpreter.result.cache", "0"));
       }
 
-      try {
-        Class<Interpreter> replClass = (Class<Interpreter>) Object.class.forName(className);
-        Properties p = new Properties();
-        p.putAll(properties);
-        setSystemProperty(p);
-
-        Constructor<Interpreter> constructor =
-                replClass.getConstructor(new Class[]{Properties.class});
-        Interpreter repl = constructor.newInstance(p);
-        repl.setClassloaderUrls(new URL[]{});
-        LOGGER.info("Instantiate interpreter {}", className);
-        repl.setInterpreterGroup(interpreterGroup);
-        repl.setUserName(userName);
-
-        interpreterGroup.addInterpreterToSession(new LazyOpenInterpreter(repl), sessionId);
-      } catch (ClassNotFoundException | NoSuchMethodException | SecurityException
-              | InstantiationException | IllegalAccessException
-              | IllegalArgumentException | InvocationTargetException e) {
-        LOGGER.error(e.getMessage(), e);
-        throw new TException(e);
-      }
+      Class<Interpreter> replClass = (Class<Interpreter>) Object.class.forName(className);
+      Properties p = new Properties();
+      p.putAll(properties);
+      setSystemProperty(p);
+
+      Constructor<Interpreter> constructor =
+              replClass.getConstructor(new Class[]{Properties.class});
+      Interpreter interpreter = constructor.newInstance(p);
+      interpreter.setClassloaderUrls(new URL[]{});
+      LOGGER.info("Instantiate interpreter {}", className);
+      interpreter.setInterpreterGroup(interpreterGroup);
+      interpreter.setUserName(userName);
+
+      interpreterGroup.addInterpreterToSession(new LazyOpenInterpreter(interpreter), sessionId);
     } catch (Exception e) {
       LOGGER.error(e.getMessage(), e);
-      throw new TException(e.getMessage(), e);
+      throw new InterpreterRPCException("Fail to create interpreter, cause: " + e.toString());
     }
   }
 
@@ -420,16 +414,15 @@ public class RemoteInterpreterServer extends Thread
     }
   }
 
-  protected Interpreter getInterpreter(String sessionId, String className) throws TException {
+  protected Interpreter getInterpreter(String sessionId, String className)
+          throws InterpreterRPCException, TException {
     if (interpreterGroup == null) {
-      throw new TException(
-          new InterpreterException("Interpreter instance " + className + " not created"));
+      throw new InterpreterRPCException("Interpreter instance " + className + " not created");
     }
     synchronized (interpreterGroup) {
       List<Interpreter> interpreters = interpreterGroup.get(sessionId);
       if (interpreters == null) {
-        throw new TException(
-            new InterpreterException("Interpreter " + className + " not initialized"));
+        throw new InterpreterRPCException("Interpreter " + className + " not initialized");
       }
       for (Interpreter inp : interpreters) {
         if (inp.getClassName().equals(className)) {
@@ -437,23 +430,22 @@ public class RemoteInterpreterServer extends Thread
         }
       }
     }
-    throw new TException(new InterpreterException("Interpreter instance "
-        + className + " not found"));
+    throw new InterpreterRPCException("Interpreter instance " + className + " not found");
   }
 
   @Override
-  public void open(String sessionId, String className) throws TException {
+  public void open(String sessionId, String className) throws InterpreterRPCException, TException {
     LOGGER.info("Open Interpreter {} for session {}", className, sessionId);
     Interpreter intp = getInterpreter(sessionId, className);
     try {
       intp.open();
     } catch (InterpreterException e) {
-      throw new TException("Fail to open interpreter", e);
+      throw new InterpreterRPCException(e.toString());
     }
   }
 
   @Override
-  public void close(String sessionId, String className) throws TException {
+  public void close(String sessionId, String className) throws InterpreterRPCException, TException {
     // unload all applications
     for (String appId : runningApplications.keySet()) {
       RunningApplication appInfo = runningApplications.get(appId);
@@ -495,7 +487,7 @@ public class RemoteInterpreterServer extends Thread
   }
 
   @Override
-  public void reconnect(String host, int port) throws TException {
+  public void reconnect(String host, int port) throws InterpreterRPCException, TException {
     try {
       LOGGER.info("Reconnect to this interpreter process from {}:{}", host, port);
       this.intpEventServerHost = host;
@@ -514,7 +506,7 @@ public class RemoteInterpreterServer extends Thread
         context.setResourcePool(resourcePool);
       }
     } catch (Exception e) {
-      throw new TException("Fail to reconnect", e);
+      throw new InterpreterRPCException(e.toString());
     }
   }
 
@@ -523,69 +515,74 @@ public class RemoteInterpreterServer extends Thread
                                            String className,
                                            String st,
                                            RemoteInterpreterContext interpreterContext)
-      throws TException {
-    if (LOGGER.isDebugEnabled()) {
-      LOGGER.debug("st:\n{}", st);
-    }
-    lifecycleManager.onInterpreterUse(interpreterGroupId);
+          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());
+      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);
       }
-    } 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);
+      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());
+      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);
+      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());
     }
-    return convert(result,
-            context.getConfig(),
-            context.getGui(),
-            context.getNoteGui());
   }
 
   class RegisterRunnable implements Runnable {
@@ -613,7 +610,7 @@ public class RemoteInterpreterServer extends Thread
           LOGGER.error("Error while registering interpreter: {}, cause: {}", registerInfo, e);
           try {
             shutdown();
-          } catch (TException e1) {
+          } catch (Exception e1) {
             LOGGER.warn("Exception occurs while shutting down", e1);
           }
         }
@@ -910,7 +907,8 @@ public class RemoteInterpreterServer extends Thread
   @Override
   public void cancel(String sessionId,
                      String className,
-                     RemoteInterpreterContext interpreterContext) throws TException {
+                     RemoteInterpreterContext interpreterContext)
+          throws InterpreterRPCException, TException {
     LOGGER.info("cancel {} {}", className, interpreterContext.getParagraphId());
     Interpreter intp = getInterpreter(sessionId, className);
     String jobId = interpreterContext.getParagraphId();
@@ -933,7 +931,7 @@ public class RemoteInterpreterServer extends Thread
   @Override
   public int getProgress(String sessionId, String className,
                          RemoteInterpreterContext interpreterContext)
-      throws TException {
+          throws InterpreterRPCException, TException {
     lifecycleManager.onInterpreterUse(interpreterGroupId);
 
     Integer manuallyProvidedProgress = progressMap.get(interpreterContext.getParagraphId());
@@ -942,24 +940,25 @@ public class RemoteInterpreterServer extends Thread
     } else {
       Interpreter intp = getInterpreter(sessionId, className);
       if (intp == null) {
-        throw new TException("No interpreter " + className + " existed for session " + sessionId);
+        throw new InterpreterRPCException("No interpreter " + className + " existed for session " + sessionId);
       }
       try {
         return intp.getProgress(convert(interpreterContext, null));
       } catch (InterpreterException e) {
-        throw new TException("Fail to getProgress", e);
+        throw new InterpreterRPCException(e.toString());
       }
     }
   }
 
 
   @Override
-  public String getFormType(String sessionId, String className) throws TException {
+  public String getFormType(String sessionId, String className)
+          throws InterpreterRPCException, TException{
     Interpreter intp = getInterpreter(sessionId, className);
     try {
       return intp.getFormType().toString();
     } catch (InterpreterException e) {
-      throw new TException(e);
+      throw new InterpreterRPCException(e.toString());
     }
   }
 
@@ -969,12 +968,12 @@ public class RemoteInterpreterServer extends Thread
                                                 String buf,
                                                 int cursor,
                                                 RemoteInterpreterContext remoteInterpreterContext)
-      throws TException {
+          throws InterpreterRPCException, TException{
     Interpreter intp = getInterpreter(sessionId, className);
     try {
       return intp.completion(buf, cursor, convert(remoteInterpreterContext, null));
     } catch (InterpreterException e) {
-      throw new TException("Fail to get completion", e);
+      throw new InterpreterRPCException("Fail to get completion, cause: " + e.getMessage());
     }
   }
 
@@ -1061,7 +1060,7 @@ public class RemoteInterpreterServer extends Thread
 
   @Override
   public String getStatus(String sessionId, String jobId)
-      throws TException {
+          throws InterpreterRPCException, TException{
 
     lifecycleManager.onInterpreterUse(interpreterGroupId);
     if (interpreterGroup == null) {
@@ -1094,11 +1093,11 @@ public class RemoteInterpreterServer extends Thread
    * @param noteId      noteId where the update issues
    * @param paragraphId paragraphId where the update issues
    * @param object
-   * @throws TException
+   * @throws InterpreterRPCException, TException
    */
   @Override
   public void angularObjectUpdate(String name, String noteId, String paragraphId, String object)
-      throws TException {
+          throws InterpreterRPCException, TException{
     AngularObjectRegistry registry = interpreterGroup.getAngularObjectRegistry();
     // first try local objects
     AngularObject ao = registry.get(name, noteId, paragraphId);
@@ -1151,7 +1150,7 @@ public class RemoteInterpreterServer extends Thread
    */
   @Override
   public void angularObjectAdd(String name, String noteId, String paragraphId, String object)
-      throws TException {
+          throws InterpreterRPCException, TException{
     AngularObjectRegistry registry = interpreterGroup.getAngularObjectRegistry();
     // first try local objects
     AngularObject ao = registry.get(name, noteId, paragraphId);
@@ -1180,14 +1179,14 @@ public class RemoteInterpreterServer extends Thread
   }
 
   @Override
-  public void angularObjectRemove(String name, String noteId, String paragraphId) throws
-      TException {
+  public void angularObjectRemove(String name, String noteId, String paragraphId)
+          throws InterpreterRPCException, TException{
     AngularObjectRegistry registry = interpreterGroup.getAngularObjectRegistry();
     registry.remove(name, noteId, paragraphId, false);
   }
 
   @Override
-  public List<String> resourcePoolGetAll() throws TException {
+  public List<String> resourcePoolGetAll() throws InterpreterRPCException, TException{
     LOGGER.debug("Request resourcePoolGetAll from ZeppelinServer");
     List<String> result = new LinkedList<>();
 
@@ -1204,14 +1203,14 @@ public class RemoteInterpreterServer extends Thread
 
   @Override
   public boolean resourceRemove(String noteId, String paragraphId, String resourceName)
-      throws TException {
+          throws InterpreterRPCException, TException{
     Resource resource = resourcePool.remove(noteId, paragraphId, resourceName);
     return resource != null;
   }
 
   @Override
   public ByteBuffer resourceGet(String noteId, String paragraphId, String resourceName)
-      throws TException {
+          throws InterpreterRPCException, TException {
     LOGGER.debug("Request resourceGet {} from ZeppelinServer", resourceName);
     Resource resource = resourcePool.get(noteId, paragraphId, resourceName, false);
 
@@ -1277,7 +1276,7 @@ public class RemoteInterpreterServer extends Thread
   }
 
   @Override
-  public void angularRegistryPush(String registryAsString) throws TException {
+  public void angularRegistryPush(String registryAsString) throws InterpreterRPCException, TException {
     try {
       Map<String, Map<String, AngularObject>> deserializedRegistry = gson
           .fromJson(registryAsString,
@@ -1330,7 +1329,7 @@ public class RemoteInterpreterServer extends Thread
   @Override
   public RemoteApplicationResult loadApplication(
       String applicationInstanceId, String packageInfo, String noteId, String paragraphId)
-      throws TException {
+          throws InterpreterRPCException, TException{
     if (runningApplications.containsKey(applicationInstanceId)) {
       LOGGER.warn("Application instance {} is already running", applicationInstanceId);
       return new RemoteApplicationResult(true, "");
@@ -1361,7 +1360,7 @@ public class RemoteInterpreterServer extends Thread
 
   @Override
   public RemoteApplicationResult unloadApplication(String applicationInstanceId)
-      throws TException {
+          throws InterpreterRPCException, TException{
     RunningApplication runningApplication = runningApplications.remove(applicationInstanceId);
     if (runningApplication != null) {
       try {
@@ -1377,7 +1376,7 @@ public class RemoteInterpreterServer extends Thread
 
   @Override
   public RemoteApplicationResult runApplication(String applicationInstanceId)
-      throws TException {
+          throws InterpreterRPCException, TException{
     LOGGER.info("run application {}", applicationInstanceId);
 
     RunningApplication runningApp = runningApplications.get(applicationInstanceId);
diff --git a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/AngularObjectId.java b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/AngularObjectId.java
index 566923c..b2239bd 100644
--- a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/AngularObjectId.java
+++ b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/AngularObjectId.java
@@ -24,7 +24,7 @@
 package org.apache.zeppelin.interpreter.thrift;
 
 @SuppressWarnings({"cast", "rawtypes", "serial", "unchecked", "unused"})
-@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2020-09-22")
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2021-01-22")
 public class AngularObjectId implements org.apache.thrift.TBase<AngularObjectId, AngularObjectId._Fields>, java.io.Serializable, Cloneable, Comparable<AngularObjectId> {
   private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("AngularObjectId");
 
diff --git a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/AppOutputAppendEvent.java b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/AppOutputAppendEvent.java
index dd01643..9933931 100644
--- a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/AppOutputAppendEvent.java
+++ b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/AppOutputAppendEvent.java
@@ -24,7 +24,7 @@
 package org.apache.zeppelin.interpreter.thrift;
 
 @SuppressWarnings({"cast", "rawtypes", "serial", "unchecked", "unused"})
-@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2020-09-22")
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2021-01-22")
 public class AppOutputAppendEvent implements org.apache.thrift.TBase<AppOutputAppendEvent, AppOutputAppendEvent._Fields>, java.io.Serializable, Cloneable, Comparable<AppOutputAppendEvent> {
   private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("AppOutputAppendEvent");
 
diff --git a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/AppOutputUpdateEvent.java b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/AppOutputUpdateEvent.java
index 933b015..2179356 100644
--- a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/AppOutputUpdateEvent.java
+++ b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/AppOutputUpdateEvent.java
@@ -24,7 +24,7 @@
 package org.apache.zeppelin.interpreter.thrift;
 
 @SuppressWarnings({"cast", "rawtypes", "serial", "unchecked", "unused"})
-@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2020-09-22")
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2021-01-22")
 public class AppOutputUpdateEvent implements org.apache.thrift.TBase<AppOutputUpdateEvent, AppOutputUpdateEvent._Fields>, java.io.Serializable, Cloneable, Comparable<AppOutputUpdateEvent> {
   private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("AppOutputUpdateEvent");
 
diff --git a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/AppStatusUpdateEvent.java b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/AppStatusUpdateEvent.java
index 198f1b0..ea4df90 100644
--- a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/AppStatusUpdateEvent.java
+++ b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/AppStatusUpdateEvent.java
@@ -24,7 +24,7 @@
 package org.apache.zeppelin.interpreter.thrift;
 
 @SuppressWarnings({"cast", "rawtypes", "serial", "unchecked", "unused"})
-@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2020-09-22")
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2021-01-22")
 public class AppStatusUpdateEvent implements org.apache.thrift.TBase<AppStatusUpdateEvent, AppStatusUpdateEvent._Fields>, java.io.Serializable, Cloneable, Comparable<AppStatusUpdateEvent> {
   private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("AppStatusUpdateEvent");
 
diff --git a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/InterpreterCompletion.java b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/InterpreterCompletion.java
index 5ef8d8e..2a27646 100644
--- a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/InterpreterCompletion.java
+++ b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/InterpreterCompletion.java
@@ -24,7 +24,7 @@
 package org.apache.zeppelin.interpreter.thrift;
 
 @SuppressWarnings({"cast", "rawtypes", "serial", "unchecked", "unused"})
-@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2020-09-22")
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2021-01-22")
 public class InterpreterCompletion implements org.apache.thrift.TBase<InterpreterCompletion, InterpreterCompletion._Fields>, java.io.Serializable, Cloneable, Comparable<InterpreterCompletion> {
   private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("InterpreterCompletion");
 
diff --git a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/ServiceException.java b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/InterpreterRPCException.java
similarity index 62%
copy from zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/ServiceException.java
copy to zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/InterpreterRPCException.java
index 5dc66af..4ef03bc 100644
--- a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/ServiceException.java
+++ b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/InterpreterRPCException.java
@@ -24,20 +24,20 @@
 package org.apache.zeppelin.interpreter.thrift;
 
 @SuppressWarnings({"cast", "rawtypes", "serial", "unchecked", "unused"})
-@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2020-09-22")
-public class ServiceException extends org.apache.thrift.TException implements org.apache.thrift.TBase<ServiceException, ServiceException._Fields>, java.io.Serializable, Cloneable, Comparable<ServiceException> {
-  private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("ServiceException");
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2021-01-22")
+public class InterpreterRPCException extends org.apache.thrift.TException implements org.apache.thrift.TBase<InterpreterRPCException, InterpreterRPCException._Fields>, java.io.Serializable, Cloneable, Comparable<InterpreterRPCException> {
+  private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("InterpreterRPCException");
 
-  private static final org.apache.thrift.protocol.TField MESSAGE_FIELD_DESC = new org.apache.thrift.protocol.TField("message", org.apache.thrift.protocol.TType.STRING, (short)1);
+  private static final org.apache.thrift.protocol.TField ERROR_MESSAGE_FIELD_DESC = new org.apache.thrift.protocol.TField("errorMessage", org.apache.thrift.protocol.TType.STRING, (short)1);
 
-  private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new ServiceExceptionStandardSchemeFactory();
-  private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new ServiceExceptionTupleSchemeFactory();
+  private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new InterpreterRPCExceptionStandardSchemeFactory();
+  private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new InterpreterRPCExceptionTupleSchemeFactory();
 
-  public @org.apache.thrift.annotation.Nullable java.lang.String message; // required
+  public @org.apache.thrift.annotation.Nullable java.lang.String errorMessage; // required
 
   /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
   public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-    MESSAGE((short)1, "message");
+    ERROR_MESSAGE((short)1, "errorMessage");
 
     private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
 
@@ -53,8 +53,8 @@ public class ServiceException extends org.apache.thrift.TException implements or
     @org.apache.thrift.annotation.Nullable
     public static _Fields findByThriftId(int fieldId) {
       switch(fieldId) {
-        case 1: // MESSAGE
-          return MESSAGE;
+        case 1: // ERROR_MESSAGE
+          return ERROR_MESSAGE;
         default:
           return null;
       }
@@ -99,72 +99,72 @@ public class ServiceException extends org.apache.thrift.TException implements or
   public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
   static {
     java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
-    tmpMap.put(_Fields.MESSAGE, new org.apache.thrift.meta_data.FieldMetaData("message", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+    tmpMap.put(_Fields.ERROR_MESSAGE, new org.apache.thrift.meta_data.FieldMetaData("errorMessage", org.apache.thrift.TFieldRequirementType.DEFAULT, 
         new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
     metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
-    org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(ServiceException.class, metaDataMap);
+    org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(InterpreterRPCException.class, metaDataMap);
   }
 
-  public ServiceException() {
+  public InterpreterRPCException() {
   }
 
-  public ServiceException(
-    java.lang.String message)
+  public InterpreterRPCException(
+    java.lang.String errorMessage)
   {
     this();
-    this.message = message;
+    this.errorMessage = errorMessage;
   }
 
   /**
    * Performs a deep copy on <i>other</i>.
    */
-  public ServiceException(ServiceException other) {
-    if (other.isSetMessage()) {
-      this.message = other.message;
+  public InterpreterRPCException(InterpreterRPCException other) {
+    if (other.isSetErrorMessage()) {
+      this.errorMessage = other.errorMessage;
     }
   }
 
-  public ServiceException deepCopy() {
-    return new ServiceException(this);
+  public InterpreterRPCException deepCopy() {
+    return new InterpreterRPCException(this);
   }
 
   @Override
   public void clear() {
-    this.message = null;
+    this.errorMessage = null;
   }
 
   @org.apache.thrift.annotation.Nullable
-  public java.lang.String getMessage() {
-    return this.message;
+  public java.lang.String getErrorMessage() {
+    return this.errorMessage;
   }
 
-  public ServiceException setMessage(@org.apache.thrift.annotation.Nullable java.lang.String message) {
-    this.message = message;
+  public InterpreterRPCException setErrorMessage(@org.apache.thrift.annotation.Nullable java.lang.String errorMessage) {
+    this.errorMessage = errorMessage;
     return this;
   }
 
-  public void unsetMessage() {
-    this.message = null;
+  public void unsetErrorMessage() {
+    this.errorMessage = null;
   }
 
-  /** Returns true if field message is set (has been assigned a value) and false otherwise */
-  public boolean isSetMessage() {
-    return this.message != null;
+  /** Returns true if field errorMessage is set (has been assigned a value) and false otherwise */
+  public boolean isSetErrorMessage() {
+    return this.errorMessage != null;
   }
 
-  public void setMessageIsSet(boolean value) {
+  public void setErrorMessageIsSet(boolean value) {
     if (!value) {
-      this.message = null;
+      this.errorMessage = null;
     }
   }
 
   public void setFieldValue(_Fields field, @org.apache.thrift.annotation.Nullable java.lang.Object value) {
     switch (field) {
-    case MESSAGE:
+    case ERROR_MESSAGE:
       if (value == null) {
-        unsetMessage();
+        unsetErrorMessage();
       } else {
-        setMessage((java.lang.String)value);
+        setErrorMessage((java.lang.String)value);
       }
       break;
 
@@ -174,8 +174,8 @@ public class ServiceException extends org.apache.thrift.TException implements or
   @org.apache.thrift.annotation.Nullable
   public java.lang.Object getFieldValue(_Fields field) {
     switch (field) {
-    case MESSAGE:
-      return getMessage();
+    case ERROR_MESSAGE:
+      return getErrorMessage();
 
     }
     throw new java.lang.IllegalStateException();
@@ -188,8 +188,8 @@ public class ServiceException extends org.apache.thrift.TException implements or
     }
 
     switch (field) {
-    case MESSAGE:
-      return isSetMessage();
+    case ERROR_MESSAGE:
+      return isSetErrorMessage();
     }
     throw new java.lang.IllegalStateException();
   }
@@ -198,23 +198,23 @@ public class ServiceException extends org.apache.thrift.TException implements or
   public boolean equals(java.lang.Object that) {
     if (that == null)
       return false;
-    if (that instanceof ServiceException)
-      return this.equals((ServiceException)that);
+    if (that instanceof InterpreterRPCException)
+      return this.equals((InterpreterRPCException)that);
     return false;
   }
 
-  public boolean equals(ServiceException that) {
+  public boolean equals(InterpreterRPCException that) {
     if (that == null)
       return false;
     if (this == that)
       return true;
 
-    boolean this_present_message = true && this.isSetMessage();
-    boolean that_present_message = true && that.isSetMessage();
-    if (this_present_message || that_present_message) {
-      if (!(this_present_message && that_present_message))
+    boolean this_present_errorMessage = true && this.isSetErrorMessage();
+    boolean that_present_errorMessage = true && that.isSetErrorMessage();
+    if (this_present_errorMessage || that_present_errorMessage) {
+      if (!(this_present_errorMessage && that_present_errorMessage))
         return false;
-      if (!this.message.equals(that.message))
+      if (!this.errorMessage.equals(that.errorMessage))
         return false;
     }
 
@@ -225,27 +225,27 @@ public class ServiceException extends org.apache.thrift.TException implements or
   public int hashCode() {
     int hashCode = 1;
 
-    hashCode = hashCode * 8191 + ((isSetMessage()) ? 131071 : 524287);
-    if (isSetMessage())
-      hashCode = hashCode * 8191 + message.hashCode();
+    hashCode = hashCode * 8191 + ((isSetErrorMessage()) ? 131071 : 524287);
+    if (isSetErrorMessage())
+      hashCode = hashCode * 8191 + errorMessage.hashCode();
 
     return hashCode;
   }
 
   @Override
-  public int compareTo(ServiceException other) {
+  public int compareTo(InterpreterRPCException other) {
     if (!getClass().equals(other.getClass())) {
       return getClass().getName().compareTo(other.getClass().getName());
     }
 
     int lastComparison = 0;
 
-    lastComparison = java.lang.Boolean.valueOf(isSetMessage()).compareTo(other.isSetMessage());
+    lastComparison = java.lang.Boolean.valueOf(isSetErrorMessage()).compareTo(other.isSetErrorMessage());
     if (lastComparison != 0) {
       return lastComparison;
     }
-    if (isSetMessage()) {
-      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.message, other.message);
+    if (isSetErrorMessage()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.errorMessage, other.errorMessage);
       if (lastComparison != 0) {
         return lastComparison;
       }
@@ -268,14 +268,14 @@ public class ServiceException extends org.apache.thrift.TException implements or
 
   @Override
   public java.lang.String toString() {
-    java.lang.StringBuilder sb = new java.lang.StringBuilder("ServiceException(");
+    java.lang.StringBuilder sb = new java.lang.StringBuilder("InterpreterRPCException(");
     boolean first = true;
 
-    sb.append("message:");
-    if (this.message == null) {
+    sb.append("errorMessage:");
+    if (this.errorMessage == null) {
       sb.append("null");
     } else {
-      sb.append(this.message);
+      sb.append(this.errorMessage);
     }
     first = false;
     sb.append(")");
@@ -284,9 +284,6 @@ public class ServiceException extends org.apache.thrift.TException implements or
 
   public void validate() throws org.apache.thrift.TException {
     // check for required fields
-    if (message == null) {
-      throw new org.apache.thrift.protocol.TProtocolException("Required field 'message' was not present! Struct: " + toString());
-    }
     // check for sub-struct validity
   }
 
@@ -306,15 +303,15 @@ public class ServiceException extends org.apache.thrift.TException implements or
     }
   }
 
-  private static class ServiceExceptionStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
-    public ServiceExceptionStandardScheme getScheme() {
-      return new ServiceExceptionStandardScheme();
+  private static class InterpreterRPCExceptionStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+    public InterpreterRPCExceptionStandardScheme getScheme() {
+      return new InterpreterRPCExceptionStandardScheme();
     }
   }
 
-  private static class ServiceExceptionStandardScheme extends org.apache.thrift.scheme.StandardScheme<ServiceException> {
+  private static class InterpreterRPCExceptionStandardScheme extends org.apache.thrift.scheme.StandardScheme<InterpreterRPCException> {
 
-    public void read(org.apache.thrift.protocol.TProtocol iprot, ServiceException struct) throws org.apache.thrift.TException {
+    public void read(org.apache.thrift.protocol.TProtocol iprot, InterpreterRPCException struct) throws org.apache.thrift.TException {
       org.apache.thrift.protocol.TField schemeField;
       iprot.readStructBegin();
       while (true)
@@ -324,10 +321,10 @@ public class ServiceException extends org.apache.thrift.TException implements or
           break;
         }
         switch (schemeField.id) {
-          case 1: // MESSAGE
+          case 1: // ERROR_MESSAGE
             if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
-              struct.message = iprot.readString();
-              struct.setMessageIsSet(true);
+              struct.errorMessage = iprot.readString();
+              struct.setErrorMessageIsSet(true);
             } else { 
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
             }
@@ -343,13 +340,13 @@ public class ServiceException extends org.apache.thrift.TException implements or
       struct.validate();
     }
 
-    public void write(org.apache.thrift.protocol.TProtocol oprot, ServiceException struct) throws org.apache.thrift.TException {
+    public void write(org.apache.thrift.protocol.TProtocol oprot, InterpreterRPCException struct) throws org.apache.thrift.TException {
       struct.validate();
 
       oprot.writeStructBegin(STRUCT_DESC);
-      if (struct.message != null) {
-        oprot.writeFieldBegin(MESSAGE_FIELD_DESC);
-        oprot.writeString(struct.message);
+      if (struct.errorMessage != null) {
+        oprot.writeFieldBegin(ERROR_MESSAGE_FIELD_DESC);
+        oprot.writeString(struct.errorMessage);
         oprot.writeFieldEnd();
       }
       oprot.writeFieldStop();
@@ -358,25 +355,35 @@ public class ServiceException extends org.apache.thrift.TException implements or
 
   }
 
-  private static class ServiceExceptionTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
-    public ServiceExceptionTupleScheme getScheme() {
-      return new ServiceExceptionTupleScheme();
+  private static class InterpreterRPCExceptionTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+    public InterpreterRPCExceptionTupleScheme getScheme() {
+      return new InterpreterRPCExceptionTupleScheme();
     }
   }
 
-  private static class ServiceExceptionTupleScheme extends org.apache.thrift.scheme.TupleScheme<ServiceException> {
+  private static class InterpreterRPCExceptionTupleScheme extends org.apache.thrift.scheme.TupleScheme<InterpreterRPCException> {
 
     @Override
-    public void write(org.apache.thrift.protocol.TProtocol prot, ServiceException struct) throws org.apache.thrift.TException {
+    public void write(org.apache.thrift.protocol.TProtocol prot, InterpreterRPCException struct) throws org.apache.thrift.TException {
       org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
-      oprot.writeString(struct.message);
+      java.util.BitSet optionals = new java.util.BitSet();
+      if (struct.isSetErrorMessage()) {
+        optionals.set(0);
+      }
+      oprot.writeBitSet(optionals, 1);
+      if (struct.isSetErrorMessage()) {
+        oprot.writeString(struct.errorMessage);
+      }
     }
 
     @Override
-    public void read(org.apache.thrift.protocol.TProtocol prot, ServiceException struct) throws org.apache.thrift.TException {
+    public void read(org.apache.thrift.protocol.TProtocol prot, InterpreterRPCException struct) throws org.apache.thrift.TException {
       org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
-      struct.message = iprot.readString();
-      struct.setMessageIsSet(true);
+      java.util.BitSet incoming = iprot.readBitSet(1);
+      if (incoming.get(0)) {
+        struct.errorMessage = iprot.readString();
+        struct.setErrorMessageIsSet(true);
+      }
     }
   }
 
diff --git a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/OutputAppendEvent.java b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/OutputAppendEvent.java
index d17fa2b..e7cfefe 100644
--- a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/OutputAppendEvent.java
+++ b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/OutputAppendEvent.java
@@ -24,7 +24,7 @@
 package org.apache.zeppelin.interpreter.thrift;
 
 @SuppressWarnings({"cast", "rawtypes", "serial", "unchecked", "unused"})
-@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2020-09-22")
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2021-01-22")
 public class OutputAppendEvent implements org.apache.thrift.TBase<OutputAppendEvent, OutputAppendEvent._Fields>, java.io.Serializable, Cloneable, Comparable<OutputAppendEvent> {
   private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("OutputAppendEvent");
 
diff --git a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/OutputUpdateAllEvent.java b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/OutputUpdateAllEvent.java
index 0d53928..b2d9de1 100644
--- a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/OutputUpdateAllEvent.java
+++ b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/OutputUpdateAllEvent.java
@@ -24,7 +24,7 @@
 package org.apache.zeppelin.interpreter.thrift;
 
 @SuppressWarnings({"cast", "rawtypes", "serial", "unchecked", "unused"})
-@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2020-09-22")
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2021-01-22")
 public class OutputUpdateAllEvent implements org.apache.thrift.TBase<OutputUpdateAllEvent, OutputUpdateAllEvent._Fields>, java.io.Serializable, Cloneable, Comparable<OutputUpdateAllEvent> {
   private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("OutputUpdateAllEvent");
 
diff --git a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/OutputUpdateEvent.java b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/OutputUpdateEvent.java
index 613a0ef..938cfa3 100644
--- a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/OutputUpdateEvent.java
+++ b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/OutputUpdateEvent.java
@@ -24,7 +24,7 @@
 package org.apache.zeppelin.interpreter.thrift;
 
 @SuppressWarnings({"cast", "rawtypes", "serial", "unchecked", "unused"})
-@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2020-09-22")
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2021-01-22")
 public class OutputUpdateEvent implements org.apache.thrift.TBase<OutputUpdateEvent, OutputUpdateEvent._Fields>, java.io.Serializable, Cloneable, Comparable<OutputUpdateEvent> {
   private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("OutputUpdateEvent");
 
diff --git a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/ParagraphInfo.java b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/ParagraphInfo.java
index 91c44d1..37b9f94 100644
--- a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/ParagraphInfo.java
+++ b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/ParagraphInfo.java
@@ -24,7 +24,7 @@
 package org.apache.zeppelin.interpreter.thrift;
 
 @SuppressWarnings({"cast", "rawtypes", "serial", "unchecked", "unused"})
-@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2020-09-22")
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2021-01-22")
 public class ParagraphInfo implements org.apache.thrift.TBase<ParagraphInfo, ParagraphInfo._Fields>, java.io.Serializable, Cloneable, Comparable<ParagraphInfo> {
   private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("ParagraphInfo");
 
diff --git a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/RegisterInfo.java b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/RegisterInfo.java
index 769f668..10d4e12 100644
--- a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/RegisterInfo.java
+++ b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/RegisterInfo.java
@@ -24,7 +24,7 @@
 package org.apache.zeppelin.interpreter.thrift;
 
 @SuppressWarnings({"cast", "rawtypes", "serial", "unchecked", "unused"})
-@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2020-09-22")
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2021-01-22")
 public class RegisterInfo implements org.apache.thrift.TBase<RegisterInfo, RegisterInfo._Fields>, java.io.Serializable, Cloneable, Comparable<RegisterInfo> {
   private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("RegisterInfo");
 
diff --git a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/RemoteApplicationResult.java b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/RemoteApplicationResult.java
index d259a83..8620fc4 100644
--- a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/RemoteApplicationResult.java
+++ b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/RemoteApplicationResult.java
@@ -24,7 +24,7 @@
 package org.apache.zeppelin.interpreter.thrift;
 
 @SuppressWarnings({"cast", "rawtypes", "serial", "unchecked", "unused"})
-@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2020-09-22")
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2021-01-22")
 public class RemoteApplicationResult implements org.apache.thrift.TBase<RemoteApplicationResult, RemoteApplicationResult._Fields>, java.io.Serializable, Cloneable, Comparable<RemoteApplicationResult> {
   private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("RemoteApplicationResult");
 
diff --git a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/RemoteInterpreterContext.java b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/RemoteInterpreterContext.java
index eb2cd3f..faf6079 100644
--- a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/RemoteInterpreterContext.java
+++ b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/RemoteInterpreterContext.java
@@ -24,7 +24,7 @@
 package org.apache.zeppelin.interpreter.thrift;
 
 @SuppressWarnings({"cast", "rawtypes", "serial", "unchecked", "unused"})
-@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2020-09-22")
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2021-01-22")
 public class RemoteInterpreterContext implements org.apache.thrift.TBase<RemoteInterpreterContext, RemoteInterpreterContext._Fields>, java.io.Serializable, Cloneable, Comparable<RemoteInterpreterContext> {
   private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("RemoteInterpreterContext");
 
diff --git a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/RemoteInterpreterEvent.java b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/RemoteInterpreterEvent.java
index 18217bc..daa4599 100644
--- a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/RemoteInterpreterEvent.java
+++ b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/RemoteInterpreterEvent.java
@@ -24,7 +24,7 @@
 package org.apache.zeppelin.interpreter.thrift;
 
 @SuppressWarnings({"cast", "rawtypes", "serial", "unchecked", "unused"})
-@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2020-09-22")
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2021-01-22")
 public class RemoteInterpreterEvent implements org.apache.thrift.TBase<RemoteInterpreterEvent, RemoteInterpreterEvent._Fields>, java.io.Serializable, Cloneable, Comparable<RemoteInterpreterEvent> {
   private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("RemoteInterpreterEvent");
 
diff --git a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/RemoteInterpreterEventService.java b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/RemoteInterpreterEventService.java
index 1b1c2d4..cc21ac0 100644
--- a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/RemoteInterpreterEventService.java
+++ b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/RemoteInterpreterEventService.java
@@ -24,50 +24,50 @@
 package org.apache.zeppelin.interpreter.thrift;
 
 @SuppressWarnings({"cast", "rawtypes", "serial", "unchecked", "unused"})
-@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2020-09-22")
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2021-01-22")
 public class RemoteInterpreterEventService {
 
   public interface Iface {
 
-    public void registerInterpreterProcess(RegisterInfo registerInfo) throws org.apache.thrift.TException;
+    public void registerInterpreterProcess(RegisterInfo registerInfo) throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException;
 
-    public void unRegisterInterpreterProcess(java.lang.String intpGroupId) throws org.apache.thrift.TException;
+    public void unRegisterInterpreterProcess(java.lang.String intpGroupId) throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException;
 
-    public void appendOutput(OutputAppendEvent event) throws org.apache.thrift.TException;
+    public void appendOutput(OutputAppendEvent event) throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException;
 
-    public void updateOutput(OutputUpdateEvent event) throws org.apache.thrift.TException;
+    public void updateOutput(OutputUpdateEvent event) throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException;
 
-    public void updateAllOutput(OutputUpdateAllEvent event) throws org.apache.thrift.TException;
+    public void updateAllOutput(OutputUpdateAllEvent event) throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException;
 
-    public void appendAppOutput(AppOutputAppendEvent event) throws org.apache.thrift.TException;
+    public void appendAppOutput(AppOutputAppendEvent event) throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException;
 
-    public void updateAppOutput(AppOutputUpdateEvent event) throws org.apache.thrift.TException;
+    public void updateAppOutput(AppOutputUpdateEvent event) throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException;
 
-    public void updateAppStatus(AppStatusUpdateEvent event) throws org.apache.thrift.TException;
+    public void updateAppStatus(AppStatusUpdateEvent event) throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException;
 
-    public void checkpointOutput(java.lang.String noteId, java.lang.String paragraphId) throws org.apache.thrift.TException;
+    public void checkpointOutput(java.lang.String noteId, java.lang.String paragraphId) throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException;
 
-    public void runParagraphs(RunParagraphsEvent event) throws org.apache.thrift.TException;
+    public void runParagraphs(RunParagraphsEvent event) throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException;
 
-    public void addAngularObject(java.lang.String intpGroupId, java.lang.String json) throws org.apache.thrift.TException;
+    public void addAngularObject(java.lang.String intpGroupId, java.lang.String json) throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException;
 
-    public void updateAngularObject(java.lang.String intpGroupId, java.lang.String json) throws org.apache.thrift.TException;
+    public void updateAngularObject(java.lang.String intpGroupId, java.lang.String json) throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException;
 
-    public void removeAngularObject(java.lang.String intpGroupId, java.lang.String noteId, java.lang.String paragraphId, java.lang.String name) throws org.apache.thrift.TException;
+    public void removeAngularObject(java.lang.String intpGroupId, java.lang.String noteId, java.lang.String paragraphId, java.lang.String name) throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException;
 
-    public void sendWebUrl(WebUrlInfo weburlInfo) throws org.apache.thrift.TException;
+    public void sendWebUrl(WebUrlInfo weburlInfo) throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException;
 
-    public void sendParagraphInfo(java.lang.String intpGroupId, java.lang.String json) throws org.apache.thrift.TException;
+    public void sendParagraphInfo(java.lang.String intpGroupId, java.lang.String json) throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException;
 
-    public void updateParagraphConfig(java.lang.String noteId, java.lang.String paragraphId, java.util.Map<java.lang.String,java.lang.String> config) throws org.apache.thrift.TException;
+    public void updateParagraphConfig(java.lang.String noteId, java.lang.String paragraphId, java.util.Map<java.lang.String,java.lang.String> config) throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException;
 
-    public java.util.List<java.lang.String> getAllResources(java.lang.String intpGroupId) throws org.apache.thrift.TException;
+    public java.util.List<java.lang.String> getAllResources(java.lang.String intpGroupId) throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException;
 
-    public java.nio.ByteBuffer getResource(java.lang.String resourceIdJson) throws org.apache.thrift.TException;
+    public java.nio.ByteBuffer getResource(java.lang.String resourceIdJson) throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException;
 
-    public java.nio.ByteBuffer invokeMethod(java.lang.String intpGroupId, java.lang.String invokeMethodJson) throws org.apache.thrift.TException;
+    public java.nio.ByteBuffer invokeMethod(java.lang.String intpGroupId, java.lang.String invokeMethodJson) throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException;
 
-    public java.util.List<ParagraphInfo> getParagraphList(java.lang.String user, java.lang.String noteId) throws ServiceException, org.apache.thrift.TException;
+    public java.util.List<ParagraphInfo> getParagraphList(java.lang.String user, java.lang.String noteId) throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException;
 
   }
 
@@ -135,7 +135,7 @@ public class RemoteInterpreterEventService {
       super(iprot, oprot);
     }
 
-    public void registerInterpreterProcess(RegisterInfo registerInfo) throws org.apache.thrift.TException
+    public void registerInterpreterProcess(RegisterInfo registerInfo) throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException
     {
       send_registerInterpreterProcess(registerInfo);
       recv_registerInterpreterProcess();
@@ -148,14 +148,17 @@ public class RemoteInterpreterEventService {
       sendBase("registerInterpreterProcess", args);
     }
 
-    public void recv_registerInterpreterProcess() throws org.apache.thrift.TException
+    public void recv_registerInterpreterProcess() throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException
     {
       registerInterpreterProcess_result result = new registerInterpreterProcess_result();
       receiveBase(result, "registerInterpreterProcess");
+      if (result.ex != null) {
+        throw result.ex;
+      }
       return;
     }
 
-    public void unRegisterInterpreterProcess(java.lang.String intpGroupId) throws org.apache.thrift.TException
+    public void unRegisterInterpreterProcess(java.lang.String intpGroupId) throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException
     {
       send_unRegisterInterpreterProcess(intpGroupId);
       recv_unRegisterInterpreterProcess();
@@ -168,14 +171,17 @@ public class RemoteInterpreterEventService {
       sendBase("unRegisterInterpreterProcess", args);
     }
 
-    public void recv_unRegisterInterpreterProcess() throws org.apache.thrift.TException
+    public void recv_unRegisterInterpreterProcess() throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException
     {
       unRegisterInterpreterProcess_result result = new unRegisterInterpreterProcess_result();
       receiveBase(result, "unRegisterInterpreterProcess");
+      if (result.ex != null) {
+        throw result.ex;
+      }
       return;
     }
 
-    public void appendOutput(OutputAppendEvent event) throws org.apache.thrift.TException
+    public void appendOutput(OutputAppendEvent event) throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException
     {
       send_appendOutput(event);
       recv_appendOutput();
@@ -188,14 +194,17 @@ public class RemoteInterpreterEventService {
       sendBase("appendOutput", args);
     }
 
-    public void recv_appendOutput() throws org.apache.thrift.TException
+    public void recv_appendOutput() throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException
     {
       appendOutput_result result = new appendOutput_result();
       receiveBase(result, "appendOutput");
+      if (result.ex != null) {
+        throw result.ex;
+      }
       return;
     }
 
-    public void updateOutput(OutputUpdateEvent event) throws org.apache.thrift.TException
+    public void updateOutput(OutputUpdateEvent event) throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException
     {
       send_updateOutput(event);
       recv_updateOutput();
@@ -208,14 +217,17 @@ public class RemoteInterpreterEventService {
       sendBase("updateOutput", args);
     }
 
-    public void recv_updateOutput() throws org.apache.thrift.TException
+    public void recv_updateOutput() throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException
     {
       updateOutput_result result = new updateOutput_result();
       receiveBase(result, "updateOutput");
+      if (result.ex != null) {
+        throw result.ex;
+      }
       return;
     }
 
-    public void updateAllOutput(OutputUpdateAllEvent event) throws org.apache.thrift.TException
+    public void updateAllOutput(OutputUpdateAllEvent event) throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException
     {
       send_updateAllOutput(event);
       recv_updateAllOutput();
@@ -228,14 +240,17 @@ public class RemoteInterpreterEventService {
       sendBase("updateAllOutput", args);
     }
 
-    public void recv_updateAllOutput() throws org.apache.thrift.TException
+    public void recv_updateAllOutput() throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException
     {
       updateAllOutput_result result = new updateAllOutput_result();
       receiveBase(result, "updateAllOutput");
+      if (result.ex != null) {
+        throw result.ex;
+      }
       return;
     }
 
-    public void appendAppOutput(AppOutputAppendEvent event) throws org.apache.thrift.TException
+    public void appendAppOutput(AppOutputAppendEvent event) throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException
     {
       send_appendAppOutput(event);
       recv_appendAppOutput();
@@ -248,14 +263,17 @@ public class RemoteInterpreterEventService {
       sendBase("appendAppOutput", args);
     }
 
-    public void recv_appendAppOutput() throws org.apache.thrift.TException
+    public void recv_appendAppOutput() throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException
     {
       appendAppOutput_result result = new appendAppOutput_result();
       receiveBase(result, "appendAppOutput");
+      if (result.ex != null) {
+        throw result.ex;
+      }
       return;
     }
 
-    public void updateAppOutput(AppOutputUpdateEvent event) throws org.apache.thrift.TException
+    public void updateAppOutput(AppOutputUpdateEvent event) throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException
     {
       send_updateAppOutput(event);
       recv_updateAppOutput();
@@ -268,14 +286,17 @@ public class RemoteInterpreterEventService {
       sendBase("updateAppOutput", args);
     }
 
-    public void recv_updateAppOutput() throws org.apache.thrift.TException
+    public void recv_updateAppOutput() throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException
     {
       updateAppOutput_result result = new updateAppOutput_result();
       receiveBase(result, "updateAppOutput");
+      if (result.ex != null) {
+        throw result.ex;
+      }
       return;
     }
 
-    public void updateAppStatus(AppStatusUpdateEvent event) throws org.apache.thrift.TException
+    public void updateAppStatus(AppStatusUpdateEvent event) throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException
     {
       send_updateAppStatus(event);
       recv_updateAppStatus();
@@ -288,14 +309,17 @@ public class RemoteInterpreterEventService {
       sendBase("updateAppStatus", args);
     }
 
-    public void recv_updateAppStatus() throws org.apache.thrift.TException
+    public void recv_updateAppStatus() throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException
     {
       updateAppStatus_result result = new updateAppStatus_result();
       receiveBase(result, "updateAppStatus");
+      if (result.ex != null) {
+        throw result.ex;
+      }
       return;
     }
 
-    public void checkpointOutput(java.lang.String noteId, java.lang.String paragraphId) throws org.apache.thrift.TException
+    public void checkpointOutput(java.lang.String noteId, java.lang.String paragraphId) throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException
     {
       send_checkpointOutput(noteId, paragraphId);
       recv_checkpointOutput();
@@ -309,14 +333,17 @@ public class RemoteInterpreterEventService {
       sendBase("checkpointOutput", args);
     }
 
-    public void recv_checkpointOutput() throws org.apache.thrift.TException
+    public void recv_checkpointOutput() throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException
     {
       checkpointOutput_result result = new checkpointOutput_result();
       receiveBase(result, "checkpointOutput");
+      if (result.ex != null) {
+        throw result.ex;
+      }
       return;
     }
 
-    public void runParagraphs(RunParagraphsEvent event) throws org.apache.thrift.TException
+    public void runParagraphs(RunParagraphsEvent event) throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException
     {
       send_runParagraphs(event);
       recv_runParagraphs();
@@ -329,14 +356,17 @@ public class RemoteInterpreterEventService {
       sendBase("runParagraphs", args);
     }
 
-    public void recv_runParagraphs() throws org.apache.thrift.TException
+    public void recv_runParagraphs() throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException
     {
       runParagraphs_result result = new runParagraphs_result();
       receiveBase(result, "runParagraphs");
+      if (result.ex != null) {
+        throw result.ex;
+      }
       return;
     }
 
-    public void addAngularObject(java.lang.String intpGroupId, java.lang.String json) throws org.apache.thrift.TException
+    public void addAngularObject(java.lang.String intpGroupId, java.lang.String json) throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException
     {
       send_addAngularObject(intpGroupId, json);
       recv_addAngularObject();
@@ -350,14 +380,17 @@ public class RemoteInterpreterEventService {
       sendBase("addAngularObject", args);
     }
 
-    public void recv_addAngularObject() throws org.apache.thrift.TException
+    public void recv_addAngularObject() throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException
     {
       addAngularObject_result result = new addAngularObject_result();
       receiveBase(result, "addAngularObject");
+      if (result.ex != null) {
+        throw result.ex;
+      }
       return;
     }
 
-    public void updateAngularObject(java.lang.String intpGroupId, java.lang.String json) throws org.apache.thrift.TException
+    public void updateAngularObject(java.lang.String intpGroupId, java.lang.String json) throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException
     {
       send_updateAngularObject(intpGroupId, json);
       recv_updateAngularObject();
@@ -371,14 +404,17 @@ public class RemoteInterpreterEventService {
       sendBase("updateAngularObject", args);
     }
 
-    public void recv_updateAngularObject() throws org.apache.thrift.TException
+    public void recv_updateAngularObject() throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException
     {
       updateAngularObject_result result = new updateAngularObject_result();
       receiveBase(result, "updateAngularObject");
+      if (result.ex != null) {
+        throw result.ex;
+      }
       return;
     }
 
-    public void removeAngularObject(java.lang.String intpGroupId, java.lang.String noteId, java.lang.String paragraphId, java.lang.String name) throws org.apache.thrift.TException
+    public void removeAngularObject(java.lang.String intpGroupId, java.lang.String noteId, java.lang.String paragraphId, java.lang.String name) throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException
     {
       send_removeAngularObject(intpGroupId, noteId, paragraphId, name);
       recv_removeAngularObject();
@@ -394,14 +430,17 @@ public class RemoteInterpreterEventService {
       sendBase("removeAngularObject", args);
     }
 
-    public void recv_removeAngularObject() throws org.apache.thrift.TException
+    public void recv_removeAngularObject() throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException
     {
       removeAngularObject_result result = new removeAngularObject_result();
       receiveBase(result, "removeAngularObject");
+      if (result.ex != null) {
+        throw result.ex;
+      }
       return;
     }
 
-    public void sendWebUrl(WebUrlInfo weburlInfo) throws org.apache.thrift.TException
+    public void sendWebUrl(WebUrlInfo weburlInfo) throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException
     {
       send_sendWebUrl(weburlInfo);
       recv_sendWebUrl();
@@ -414,14 +453,17 @@ public class RemoteInterpreterEventService {
       sendBase("sendWebUrl", args);
     }
 
-    public void recv_sendWebUrl() throws org.apache.thrift.TException
+    public void recv_sendWebUrl() throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException
     {
       sendWebUrl_result result = new sendWebUrl_result();
       receiveBase(result, "sendWebUrl");
+      if (result.ex != null) {
+        throw result.ex;
+      }
       return;
     }
 
-    public void sendParagraphInfo(java.lang.String intpGroupId, java.lang.String json) throws org.apache.thrift.TException
+    public void sendParagraphInfo(java.lang.String intpGroupId, java.lang.String json) throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException
     {
       send_sendParagraphInfo(intpGroupId, json);
       recv_sendParagraphInfo();
@@ -435,14 +477,17 @@ public class RemoteInterpreterEventService {
       sendBase("sendParagraphInfo", args);
     }
 
-    public void recv_sendParagraphInfo() throws org.apache.thrift.TException
+    public void recv_sendParagraphInfo() throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException
     {
       sendParagraphInfo_result result = new sendParagraphInfo_result();
       receiveBase(result, "sendParagraphInfo");
+      if (result.ex != null) {
+        throw result.ex;
+      }
       return;
     }
 
-    public void updateParagraphConfig(java.lang.String noteId, java.lang.String paragraphId, java.util.Map<java.lang.String,java.lang.String> config) throws org.apache.thrift.TException
+    public void updateParagraphConfig(java.lang.String noteId, java.lang.String paragraphId, java.util.Map<java.lang.String,java.lang.String> config) throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException
     {
       send_updateParagraphConfig(noteId, paragraphId, config);
       recv_updateParagraphConfig();
@@ -457,14 +502,17 @@ public class RemoteInterpreterEventService {
       sendBase("updateParagraphConfig", args);
     }
 
-    public void recv_updateParagraphConfig() throws org.apache.thrift.TException
+    public void recv_updateParagraphConfig() throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException
     {
       updateParagraphConfig_result result = new updateParagraphConfig_result();
       receiveBase(result, "updateParagraphConfig");
+      if (result.ex != null) {
+        throw result.ex;
+      }
       return;
     }
 
-    public java.util.List<java.lang.String> getAllResources(java.lang.String intpGroupId) throws org.apache.thrift.TException
+    public java.util.List<java.lang.String> getAllResources(java.lang.String intpGroupId) throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException
     {
       send_getAllResources(intpGroupId);
       return recv_getAllResources();
@@ -477,17 +525,20 @@ public class RemoteInterpreterEventService {
       sendBase("getAllResources", args);
     }
 
-    public java.util.List<java.lang.String> recv_getAllResources() throws org.apache.thrift.TException
+    public java.util.List<java.lang.String> recv_getAllResources() throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException
     {
       getAllResources_result result = new getAllResources_result();
       receiveBase(result, "getAllResources");
       if (result.isSetSuccess()) {
         return result.success;
       }
+      if (result.ex != null) {
+        throw result.ex;
+      }
       throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "getAllResources failed: unknown result");
     }
 
-    public java.nio.ByteBuffer getResource(java.lang.String resourceIdJson) throws org.apache.thrift.TException
+    public java.nio.ByteBuffer getResource(java.lang.String resourceIdJson) throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException
     {
       send_getResource(resourceIdJson);
       return recv_getResource();
@@ -500,17 +551,20 @@ public class RemoteInterpreterEventService {
       sendBase("getResource", args);
     }
 
-    public java.nio.ByteBuffer recv_getResource() throws org.apache.thrift.TException
+    public java.nio.ByteBuffer recv_getResource() throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException
     {
       getResource_result result = new getResource_result();
       receiveBase(result, "getResource");
       if (result.isSetSuccess()) {
         return result.success;
       }
+      if (result.ex != null) {
+        throw result.ex;
+      }
       throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "getResource failed: unknown result");
     }
 
-    public java.nio.ByteBuffer invokeMethod(java.lang.String intpGroupId, java.lang.String invokeMethodJson) throws org.apache.thrift.TException
+    public java.nio.ByteBuffer invokeMethod(java.lang.String intpGroupId, java.lang.String invokeMethodJson) throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException
     {
       send_invokeMethod(intpGroupId, invokeMethodJson);
       return recv_invokeMethod();
@@ -524,17 +578,20 @@ public class RemoteInterpreterEventService {
       sendBase("invokeMethod", args);
     }
 
-    public java.nio.ByteBuffer recv_invokeMethod() throws org.apache.thrift.TException
+    public java.nio.ByteBuffer recv_invokeMethod() throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException
     {
       invokeMethod_result result = new invokeMethod_result();
       receiveBase(result, "invokeMethod");
       if (result.isSetSuccess()) {
         return result.success;
       }
+      if (result.ex != null) {
+        throw result.ex;
+      }
       throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "invokeMethod failed: unknown result");
     }
 
-    public java.util.List<ParagraphInfo> getParagraphList(java.lang.String user, java.lang.String noteId) throws ServiceException, org.apache.thrift.TException
+    public java.util.List<ParagraphInfo> getParagraphList(java.lang.String user, java.lang.String noteId) throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException
     {
       send_getParagraphList(user, noteId);
       return recv_getParagraphList();
@@ -548,15 +605,15 @@ public class RemoteInterpreterEventService {
       sendBase("getParagraphList", args);
     }
 
-    public java.util.List<ParagraphInfo> recv_getParagraphList() throws ServiceException, org.apache.thrift.TException
+    public java.util.List<ParagraphInfo> recv_getParagraphList() throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException
     {
       getParagraphList_result result = new getParagraphList_result();
       receiveBase(result, "getParagraphList");
       if (result.isSetSuccess()) {
         return result.success;
       }
-      if (result.e != null) {
-        throw result.e;
+      if (result.ex != null) {
+        throw result.ex;
       }
       throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "getParagraphList failed: unknown result");
     }
@@ -601,7 +658,7 @@ public class RemoteInterpreterEventService {
         prot.writeMessageEnd();
       }
 
-      public Void getResult() throws org.apache.thrift.TException {
+      public Void getResult() throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException {
         if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
           throw new java.lang.IllegalStateException("Method call not finished!");
         }
@@ -633,7 +690,7 @@ public class RemoteInterpreterEventService {
         prot.writeMessageEnd();
       }
 
-      public Void getResult() throws org.apache.thrift.TException {
+      public Void getResult() throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException {
         if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
           throw new java.lang.IllegalStateException("Method call not finished!");
         }
@@ -665,7 +722,7 @@ public class RemoteInterpreterEventService {
         prot.writeMessageEnd();
       }
 
-      public Void getResult() throws org.apache.thrift.TException {
+      public Void getResult() throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException {
         if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
           throw new java.lang.IllegalStateException("Method call not finished!");
         }
@@ -697,7 +754,7 @@ public class RemoteInterpreterEventService {
         prot.writeMessageEnd();
       }
 
-      public Void getResult() throws org.apache.thrift.TException {
+      public Void getResult() throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException {
         if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
           throw new java.lang.IllegalStateException("Method call not finished!");
         }
@@ -729,7 +786,7 @@ public class RemoteInterpreterEventService {
         prot.writeMessageEnd();
       }
 
-      public Void getResult() throws org.apache.thrift.TException {
+      public Void getResult() throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException {
         if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
           throw new java.lang.IllegalStateException("Method call not finished!");
         }
@@ -761,7 +818,7 @@ public class RemoteInterpreterEventService {
         prot.writeMessageEnd();
       }
 
-      public Void getResult() throws org.apache.thrift.TException {
+      public Void getResult() throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException {
         if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
           throw new java.lang.IllegalStateException("Method call not finished!");
         }
@@ -793,7 +850,7 @@ public class RemoteInterpreterEventService {
         prot.writeMessageEnd();
       }
 
-      public Void getResult() throws org.apache.thrift.TException {
+      public Void getResult() throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException {
         if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
           throw new java.lang.IllegalStateException("Method call not finished!");
         }
@@ -825,7 +882,7 @@ public class RemoteInterpreterEventService {
         prot.writeMessageEnd();
       }
 
-      public Void getResult() throws org.apache.thrift.TException {
+      public Void getResult() throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException {
         if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
           throw new java.lang.IllegalStateException("Method call not finished!");
         }
@@ -860,7 +917,7 @@ public class RemoteInterpreterEventService {
         prot.writeMessageEnd();
       }
 
-      public Void getResult() throws org.apache.thrift.TException {
+      public Void getResult() throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException {
         if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
           throw new java.lang.IllegalStateException("Method call not finished!");
         }
@@ -892,7 +949,7 @@ public class RemoteInterpreterEventService {
         prot.writeMessageEnd();
       }
 
-      public Void getResult() throws org.apache.thrift.TException {
+      public Void getResult() throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException {
         if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
           throw new java.lang.IllegalStateException("Method call not finished!");
         }
@@ -927,7 +984,7 @@ public class RemoteInterpreterEventService {
         prot.writeMessageEnd();
       }
 
-      public Void getResult() throws org.apache.thrift.TException {
+      public Void getResult() throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException {
         if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
           throw new java.lang.IllegalStateException("Method call not finished!");
         }
@@ -962,7 +1019,7 @@ public class RemoteInterpreterEventService {
         prot.writeMessageEnd();
       }
 
-      public Void getResult() throws org.apache.thrift.TException {
+      public Void getResult() throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException {
         if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
           throw new java.lang.IllegalStateException("Method call not finished!");
         }
@@ -1003,7 +1060,7 @@ public class RemoteInterpreterEventService {
         prot.writeMessageEnd();
       }
 
-      public Void getResult() throws org.apache.thrift.TException {
+      public Void getResult() throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException {
         if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
           throw new java.lang.IllegalStateException("Method call not finished!");
         }
@@ -1035,7 +1092,7 @@ public class RemoteInterpreterEventService {
         prot.writeMessageEnd();
       }
 
-      public Void getResult() throws org.apache.thrift.TException {
+      public Void getResult() throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException {
         if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
           throw new java.lang.IllegalStateException("Method call not finished!");
         }
@@ -1070,7 +1127,7 @@ public class RemoteInterpreterEventService {
         prot.writeMessageEnd();
       }
 
-      public Void getResult() throws org.apache.thrift.TException {
+      public Void getResult() throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException {
         if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
           throw new java.lang.IllegalStateException("Method call not finished!");
         }
@@ -1108,7 +1165,7 @@ public class RemoteInterpreterEventService {
         prot.writeMessageEnd();
       }
 
-      public Void getResult() throws org.apache.thrift.TException {
+      public Void getResult() throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException {
         if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
           throw new java.lang.IllegalStateException("Method call not finished!");
         }
@@ -1140,7 +1197,7 @@ public class RemoteInterpreterEventService {
         prot.writeMessageEnd();
       }
 
-      public java.util.List<java.lang.String> getResult() throws org.apache.thrift.TException {
+      public java.util.List<java.lang.String> getResult() throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException {
         if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
           throw new java.lang.IllegalStateException("Method call not finished!");
         }
@@ -1172,7 +1229,7 @@ public class RemoteInterpreterEventService {
         prot.writeMessageEnd();
       }
 
-      public java.nio.ByteBuffer getResult() throws org.apache.thrift.TException {
+      public java.nio.ByteBuffer getResult() throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException {
         if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
           throw new java.lang.IllegalStateException("Method call not finished!");
         }
@@ -1207,7 +1264,7 @@ public class RemoteInterpreterEventService {
         prot.writeMessageEnd();
       }
 
-      public java.nio.ByteBuffer getResult() throws org.apache.thrift.TException {
+      public java.nio.ByteBuffer getResult() throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException {
         if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
           throw new java.lang.IllegalStateException("Method call not finished!");
         }
@@ -1242,7 +1299,7 @@ public class RemoteInterpreterEventService {
         prot.writeMessageEnd();
       }
 
-      public java.util.List<ParagraphInfo> getResult() throws ServiceException, org.apache.thrift.TException {
+      public java.util.List<ParagraphInfo> getResult() throws org.apache.zeppelin.interpreter.thrift.InterpreterRPCException, org.apache.thrift.TException {
         if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
           throw new java.lang.IllegalStateException("Method call not finished!");
         }
@@ -1308,7 +1365,11 @@ public class RemoteInterpreterEventService {
 
       public registerInterpreterProcess_result getResult(I iface, registerInterpreterProcess_args args) throws org.apache.thrift.TException {
         registerInterpreterProcess_result result = new registerInterpreterProcess_result();
-        iface.registerInterpreterProcess(args.registerInfo);
+        try {
+          iface.registerInterpreterProcess(args.registerInfo);
+        } catch (org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex) {
+          result.ex = ex;
+        }
         return result;
       }
     }
@@ -1333,7 +1394,11 @@ public class RemoteInterpreterEventService {
 
       public unRegisterInterpreterProcess_result getResult(I iface, unRegisterInterpreterProcess_args args) throws org.apache.thrift.TException {
         unRegisterInterpreterProcess_result result = new unRegisterInterpreterProcess_result();
-        iface.unRegisterInterpreterProcess(args.intpGroupId);
+        try {
+          iface.unRegisterInterpreterProcess(args.intpGroupId);
+        } catch (org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex) {
+          result.ex = ex;
+        }
         return result;
       }
     }
@@ -1358,7 +1423,11 @@ public class RemoteInterpreterEventService {
 
       public appendOutput_result getResult(I iface, appendOutput_args args) throws org.apache.thrift.TException {
         appendOutput_result result = new appendOutput_result();
-        iface.appendOutput(args.event);
+        try {
+          iface.appendOutput(args.event);
+        } catch (org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex) {
+          result.ex = ex;
+        }
         return result;
       }
     }
@@ -1383,7 +1452,11 @@ public class RemoteInterpreterEventService {
 
       public updateOutput_result getResult(I iface, updateOutput_args args) throws org.apache.thrift.TException {
         updateOutput_result result = new updateOutput_result();
-        iface.updateOutput(args.event);
+        try {
+          iface.updateOutput(args.event);
+        } catch (org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex) {
+          result.ex = ex;
+        }
         return result;
       }
     }
@@ -1408,7 +1481,11 @@ public class RemoteInterpreterEventService {
 
       public updateAllOutput_result getResult(I iface, updateAllOutput_args args) throws org.apache.thrift.TException {
         updateAllOutput_result result = new updateAllOutput_result();
-        iface.updateAllOutput(args.event);
+        try {
+          iface.updateAllOutput(args.event);
+        } catch (org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex) {
+          result.ex = ex;
+        }
         return result;
       }
     }
@@ -1433,7 +1510,11 @@ public class RemoteInterpreterEventService {
 
       public appendAppOutput_result getResult(I iface, appendAppOutput_args args) throws org.apache.thrift.TException {
         appendAppOutput_result result = new appendAppOutput_result();
-        iface.appendAppOutput(args.event);
+        try {
+          iface.appendAppOutput(args.event);
+        } catch (org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex) {
+          result.ex = ex;
+        }
         return result;
       }
     }
@@ -1458,7 +1539,11 @@ public class RemoteInterpreterEventService {
 
       public updateAppOutput_result getResult(I iface, updateAppOutput_args args) throws org.apache.thrift.TException {
         updateAppOutput_result result = new updateAppOutput_result();
-        iface.updateAppOutput(args.event);
+        try {
+          iface.updateAppOutput(args.event);
+        } catch (org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex) {
+          result.ex = ex;
+        }
         return result;
       }
     }
@@ -1483,7 +1568,11 @@ public class RemoteInterpreterEventService {
 
       public updateAppStatus_result getResult(I iface, updateAppStatus_args args) throws org.apache.thrift.TException {
         updateAppStatus_result result = new updateAppStatus_result();
-        iface.updateAppStatus(args.event);
+        try {
+          iface.updateAppStatus(args.event);
+        } catch (org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex) {
+          result.ex = ex;
+        }
         return result;
       }
     }
@@ -1508,7 +1597,11 @@ public class RemoteInterpreterEventService {
 
       public checkpointOutput_result getResult(I iface, checkpointOutput_args args) throws org.apache.thrift.TException {
         checkpointOutput_result result = new checkpointOutput_result();
-        iface.checkpointOutput(args.noteId, args.paragraphId);
+        try {
+          iface.checkpointOutput(args.noteId, args.paragraphId);
+        } catch (org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex) {
+          result.ex = ex;
+        }
         return result;
       }
     }
@@ -1533,7 +1626,11 @@ public class RemoteInterpreterEventService {
 
       public runParagraphs_result getResult(I iface, runParagraphs_args args) throws org.apache.thrift.TException {
         runParagraphs_result result = new runParagraphs_result();
-        iface.runParagraphs(args.event);
+        try {
+          iface.runParagraphs(args.event);
+        } catch (org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex) {
+          result.ex = ex;
+        }
         return result;
       }
     }
@@ -1558,7 +1655,11 @@ public class RemoteInterpreterEventService {
 
       public addAngularObject_result getResult(I iface, addAngularObject_args args) throws org.apache.thrift.TException {
         addAngularObject_result result = new addAngularObject_result();
-        iface.addAngularObject(args.intpGroupId, args.json);
+        try {
+          iface.addAngularObject(args.intpGroupId, args.json);
+        } catch (org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex) {
+          result.ex = ex;
+        }
         return result;
       }
     }
@@ -1583,7 +1684,11 @@ public class RemoteInterpreterEventService {
 
       public updateAngularObject_result getResult(I iface, updateAngularObject_args args) throws org.apache.thrift.TException {
         updateAngularObject_result result = new updateAngularObject_result();
-        iface.updateAngularObject(args.intpGroupId, args.json);
+        try {
+          iface.updateAngularObject(args.intpGroupId, args.json);
+        } catch (org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex) {
+          result.ex = ex;
+        }
         return result;
       }
     }
@@ -1608,7 +1713,11 @@ public class RemoteInterpreterEventService {
 
       public removeAngularObject_result getResult(I iface, removeAngularObject_args args) throws org.apache.thrift.TException {
         removeAngularObject_result result = new removeAngularObject_result();
-        iface.removeAngularObject(args.intpGroupId, args.noteId, args.paragraphId, args.name);
+        try {
+          iface.removeAngularObject(args.intpGroupId, args.noteId, args.paragraphId, args.name);
+        } catch (org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex) {
+          result.ex = ex;
+        }
         return result;
       }
     }
@@ -1633,7 +1742,11 @@ public class RemoteInterpreterEventService {
 
       public sendWebUrl_result getResult(I iface, sendWebUrl_args args) throws org.apache.thrift.TException {
         sendWebUrl_result result = new sendWebUrl_result();
-        iface.sendWebUrl(args.weburlInfo);
+        try {
+          iface.sendWebUrl(args.weburlInfo);
+        } catch (org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex) {
+          result.ex = ex;
+        }
         return result;
       }
     }
@@ -1658,7 +1771,11 @@ public class RemoteInterpreterEventService {
 
       public sendParagraphInfo_result getResult(I iface, sendParagraphInfo_args args) throws org.apache.thrift.TException {
         sendParagraphInfo_result result = new sendParagraphInfo_result();
-        iface.sendParagraphInfo(args.intpGroupId, args.json);
+        try {
+          iface.sendParagraphInfo(args.intpGroupId, args.json);
+        } catch (org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex) {
+          result.ex = ex;
+        }
         return result;
       }
     }
@@ -1683,7 +1800,11 @@ public class RemoteInterpreterEventService {
 
       public updateParagraphConfig_result getResult(I iface, updateParagraphConfig_args args) throws org.apache.thrift.TException {
         updateParagraphConfig_result result = new updateParagraphConfig_result();
-        iface.updateParagraphConfig(args.noteId, args.paragraphId, args.config);
+        try {
+          iface.updateParagraphConfig(args.noteId, args.paragraphId, args.config);
+        } catch (org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex) {
+          result.ex = ex;
+        }
         return result;
       }
     }
@@ -1708,7 +1829,11 @@ public class RemoteInterpreterEventService {
 
       public getAllResources_result getResult(I iface, getAllResources_args args) throws org.apache.thrift.TException {
         getAllResources_result result = new getAllResources_result();
-        result.success = iface.getAllResources(args.intpGroupId);
+        try {
+          result.success = iface.getAllResources(args.intpGroupId);
+        } catch (org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex) {
+          result.ex = ex;
+        }
         return result;
       }
     }
@@ -1733,7 +1858,11 @@ public class RemoteInterpreterEventService {
 
       public getResource_result getResult(I iface, getResource_args args) throws org.apache.thrift.TException {
         getResource_result result = new getResource_result();
-        result.success = iface.getResource(args.resourceIdJson);
+        try {
+          result.success = iface.getResource(args.resourceIdJson);
+        } catch (org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex) {
+          result.ex = ex;
+        }
         return result;
       }
     }
@@ -1758,7 +1887,11 @@ public class RemoteInterpreterEventService {
 
       public invokeMethod_result getResult(I iface, invokeMethod_args args) throws org.apache.thrift.TException {
         invokeMethod_result result = new invokeMethod_result();
-        result.success = iface.invokeMethod(args.intpGroupId, args.invokeMethodJson);
+        try {
+          result.success = iface.invokeMethod(args.intpGroupId, args.invokeMethodJson);
+        } catch (org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex) {
+          result.ex = ex;
+        }
         return result;
       }
     }
@@ -1785,8 +1918,8 @@ public class RemoteInterpreterEventService {
         getParagraphList_result result = new getParagraphList_result();
         try {
           result.success = iface.getParagraphList(args.user, args.noteId);
-        } catch (ServiceException e) {
-          result.e = e;
+        } catch (org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex) {
+          result.ex = ex;
         }
         return result;
       }
@@ -1856,7 +1989,11 @@ public class RemoteInterpreterEventService {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
             registerInterpreterProcess_result result = new registerInterpreterProcess_result();
-            if (e instanceof org.apache.thrift.transport.TTransportException) {
+            if (e instanceof org.apache.zeppelin.interpreter.thrift.InterpreterRPCException) {
+              result.ex = (org.apache.zeppelin.interpreter.thrift.InterpreterRPCException) e;
+              result.setExIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.thrift.transport.TTransportException) {
               _LOGGER.error("TTransportException inside handler", e);
               fb.close();
               return;
@@ -1916,7 +2053,11 @@ public class RemoteInterpreterEventService {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
             unRegisterInterpreterProcess_result result = new unRegisterInterpreterProcess_result();
-            if (e instanceof org.apache.thrift.transport.TTransportException) {
+            if (e instanceof org.apache.zeppelin.interpreter.thrift.InterpreterRPCException) {
+              result.ex = (org.apache.zeppelin.interpreter.thrift.InterpreterRPCException) e;
+              result.setExIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.thrift.transport.TTransportException) {
               _LOGGER.error("TTransportException inside handler", e);
               fb.close();
               return;
@@ -1976,7 +2117,11 @@ public class RemoteInterpreterEventService {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
             appendOutput_result result = new appendOutput_result();
-            if (e instanceof org.apache.thrift.transport.TTransportException) {
+            if (e instanceof org.apache.zeppelin.interpreter.thrift.InterpreterRPCException) {
+              result.ex = (org.apache.zeppelin.interpreter.thrift.InterpreterRPCException) e;
+              result.setExIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.thrift.transport.TTransportException) {
               _LOGGER.error("TTransportException inside handler", e);
               fb.close();
               return;
@@ -2036,7 +2181,11 @@ public class RemoteInterpreterEventService {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
             updateOutput_result result = new updateOutput_result();
-            if (e instanceof org.apache.thrift.transport.TTransportException) {
+            if (e instanceof org.apache.zeppelin.interpreter.thrift.InterpreterRPCException) {
+              result.ex = (org.apache.zeppelin.interpreter.thrift.InterpreterRPCException) e;
+              result.setExIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.thrift.transport.TTransportException) {
               _LOGGER.error("TTransportException inside handler", e);
               fb.close();
               return;
@@ -2096,7 +2245,11 @@ public class RemoteInterpreterEventService {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
             updateAllOutput_result result = new updateAllOutput_result();
-            if (e instanceof org.apache.thrift.transport.TTransportException) {
+            if (e instanceof org.apache.zeppelin.interpreter.thrift.InterpreterRPCException) {
+              result.ex = (org.apache.zeppelin.interpreter.thrift.InterpreterRPCException) e;
+              result.setExIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.thrift.transport.TTransportException) {
               _LOGGER.error("TTransportException inside handler", e);
               fb.close();
               return;
@@ -2156,7 +2309,11 @@ public class RemoteInterpreterEventService {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
             appendAppOutput_result result = new appendAppOutput_result();
-            if (e instanceof org.apache.thrift.transport.TTransportException) {
+            if (e instanceof org.apache.zeppelin.interpreter.thrift.InterpreterRPCException) {
+              result.ex = (org.apache.zeppelin.interpreter.thrift.InterpreterRPCException) e;
+              result.setExIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.thrift.transport.TTransportException) {
               _LOGGER.error("TTransportException inside handler", e);
               fb.close();
               return;
@@ -2216,7 +2373,11 @@ public class RemoteInterpreterEventService {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
             updateAppOutput_result result = new updateAppOutput_result();
-            if (e instanceof org.apache.thrift.transport.TTransportException) {
+            if (e instanceof org.apache.zeppelin.interpreter.thrift.InterpreterRPCException) {
+              result.ex = (org.apache.zeppelin.interpreter.thrift.InterpreterRPCException) e;
+              result.setExIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.thrift.transport.TTransportException) {
               _LOGGER.error("TTransportException inside handler", e);
               fb.close();
               return;
@@ -2276,7 +2437,11 @@ public class RemoteInterpreterEventService {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
             updateAppStatus_result result = new updateAppStatus_result();
-            if (e instanceof org.apache.thrift.transport.TTransportException) {
+            if (e instanceof org.apache.zeppelin.interpreter.thrift.InterpreterRPCException) {
+              result.ex = (org.apache.zeppelin.interpreter.thrift.InterpreterRPCException) e;
+              result.setExIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.thrift.transport.TTransportException) {
               _LOGGER.error("TTransportException inside handler", e);
               fb.close();
               return;
@@ -2336,7 +2501,11 @@ public class RemoteInterpreterEventService {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
             checkpointOutput_result result = new checkpointOutput_result();
-            if (e instanceof org.apache.thrift.transport.TTransportException) {
+            if (e instanceof org.apache.zeppelin.interpreter.thrift.InterpreterRPCException) {
+              result.ex = (org.apache.zeppelin.interpreter.thrift.InterpreterRPCException) e;
+              result.setExIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.thrift.transport.TTransportException) {
               _LOGGER.error("TTransportException inside handler", e);
               fb.close();
               return;
@@ -2396,7 +2565,11 @@ public class RemoteInterpreterEventService {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
             runParagraphs_result result = new runParagraphs_result();
-            if (e instanceof org.apache.thrift.transport.TTransportException) {
+            if (e instanceof org.apache.zeppelin.interpreter.thrift.InterpreterRPCException) {
+              result.ex = (org.apache.zeppelin.interpreter.thrift.InterpreterRPCException) e;
+              result.setExIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.thrift.transport.TTransportException) {
               _LOGGER.error("TTransportException inside handler", e);
               fb.close();
               return;
@@ -2456,7 +2629,11 @@ public class RemoteInterpreterEventService {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
             addAngularObject_result result = new addAngularObject_result();
-            if (e instanceof org.apache.thrift.transport.TTransportException) {
+            if (e instanceof org.apache.zeppelin.interpreter.thrift.InterpreterRPCException) {
+              result.ex = (org.apache.zeppelin.interpreter.thrift.InterpreterRPCException) e;
+              result.setExIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.thrift.transport.TTransportException) {
               _LOGGER.error("TTransportException inside handler", e);
               fb.close();
               return;
@@ -2516,7 +2693,11 @@ public class RemoteInterpreterEventService {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
             updateAngularObject_result result = new updateAngularObject_result();
-            if (e instanceof org.apache.thrift.transport.TTransportException) {
+            if (e instanceof org.apache.zeppelin.interpreter.thrift.InterpreterRPCException) {
+              result.ex = (org.apache.zeppelin.interpreter.thrift.InterpreterRPCException) e;
+              result.setExIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.thrift.transport.TTransportException) {
               _LOGGER.error("TTransportException inside handler", e);
               fb.close();
               return;
@@ -2576,7 +2757,11 @@ public class RemoteInterpreterEventService {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
             removeAngularObject_result result = new removeAngularObject_result();
-            if (e instanceof org.apache.thrift.transport.TTransportException) {
+            if (e instanceof org.apache.zeppelin.interpreter.thrift.InterpreterRPCException) {
+              result.ex = (org.apache.zeppelin.interpreter.thrift.InterpreterRPCException) e;
+              result.setExIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.thrift.transport.TTransportException) {
               _LOGGER.error("TTransportException inside handler", e);
               fb.close();
               return;
@@ -2636,7 +2821,11 @@ public class RemoteInterpreterEventService {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
             sendWebUrl_result result = new sendWebUrl_result();
-            if (e instanceof org.apache.thrift.transport.TTransportException) {
+            if (e instanceof org.apache.zeppelin.interpreter.thrift.InterpreterRPCException) {
+              result.ex = (org.apache.zeppelin.interpreter.thrift.InterpreterRPCException) e;
+              result.setExIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.thrift.transport.TTransportException) {
               _LOGGER.error("TTransportException inside handler", e);
               fb.close();
               return;
@@ -2696,7 +2885,11 @@ public class RemoteInterpreterEventService {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
             sendParagraphInfo_result result = new sendParagraphInfo_result();
-            if (e instanceof org.apache.thrift.transport.TTransportException) {
+            if (e instanceof org.apache.zeppelin.interpreter.thrift.InterpreterRPCException) {
+              result.ex = (org.apache.zeppelin.interpreter.thrift.InterpreterRPCException) e;
+              result.setExIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.thrift.transport.TTransportException) {
               _LOGGER.error("TTransportException inside handler", e);
               fb.close();
               return;
@@ -2756,7 +2949,11 @@ public class RemoteInterpreterEventService {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
             updateParagraphConfig_result result = new updateParagraphConfig_result();
-            if (e instanceof org.apache.thrift.transport.TTransportException) {
+            if (e instanceof org.apache.zeppelin.interpreter.thrift.InterpreterRPCException) {
+              result.ex = (org.apache.zeppelin.interpreter.thrift.InterpreterRPCException) e;
+              result.setExIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.thrift.transport.TTransportException) {
               _LOGGER.error("TTransportException inside handler", e);
               fb.close();
               return;
@@ -2817,7 +3014,11 @@ public class RemoteInterpreterEventService {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
             getAllResources_result result = new getAllResources_result();
-            if (e instanceof org.apache.thrift.transport.TTransportException) {
+            if (e instanceof org.apache.zeppelin.interpreter.thrift.InterpreterRPCException) {
+              result.ex = (org.apache.zeppelin.interpreter.thrift.InterpreterRPCException) e;
+              result.setExIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.thrift.transport.TTransportException) {
               _LOGGER.error("TTransportException inside handler", e);
               fb.close();
               return;
@@ -2878,7 +3079,11 @@ public class RemoteInterpreterEventService {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
             getResource_result result = new getResource_result();
-            if (e instanceof org.apache.thrift.transport.TTransportException) {
+            if (e instanceof org.apache.zeppelin.interpreter.thrift.InterpreterRPCException) {
+              result.ex = (org.apache.zeppelin.interpreter.thrift.InterpreterRPCException) e;
+              result.setExIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.thrift.transport.TTransportException) {
               _LOGGER.error("TTransportException inside handler", e);
               fb.close();
               return;
@@ -2939,7 +3144,11 @@ public class RemoteInterpreterEventService {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
             invokeMethod_result result = new invokeMethod_result();
-            if (e instanceof org.apache.thrift.transport.TTransportException) {
+            if (e instanceof org.apache.zeppelin.interpreter.thrift.InterpreterRPCException) {
+              result.ex = (org.apache.zeppelin.interpreter.thrift.InterpreterRPCException) e;
+              result.setExIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.thrift.transport.TTransportException) {
               _LOGGER.error("TTransportException inside handler", e);
               fb.close();
               return;
@@ -3000,9 +3209,9 @@ public class RemoteInterpreterEventService {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
             getParagraphList_result result = new getParagraphList_result();
-            if (e instanceof ServiceException) {
-              result.e = (ServiceException) e;
-              result.setEIsSet(true);
+            if (e instanceof org.apache.zeppelin.interpreter.thrift.InterpreterRPCException) {
+              result.ex = (org.apache.zeppelin.interpreter.thrift.InterpreterRPCException) e;
+              result.setExIsSet(true);
               msg = result;
             } else if (e instanceof org.apache.thrift.transport.TTransportException) {
               _LOGGER.error("TTransportException inside handler", e);
@@ -3413,14 +3622,16 @@ public class RemoteInterpreterEventService {
   public static class registerInterpreterProcess_result implements org.apache.thrift.TBase<registerInterpreterProcess_result, registerInterpreterProcess_result._Fields>, java.io.Serializable, Cloneable, Comparable<registerInterpreterProcess_result>   {
     private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("registerInterpreterProcess_result");
 
+    private static final org.apache.thrift.protocol.TField EX_FIELD_DESC = new org.apache.thrift.protocol.TField("ex", org.apache.thrift.protocol.TType.STRUCT, (short)1);
 
     private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new registerInterpreterProcess_resultStandardSchemeFactory();
     private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new registerInterpreterProcess_resultTupleSchemeFactory();
 
+    public @org.apache.thrift.annotation.Nullable org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-;
+      EX((short)1, "ex");
 
       private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
 
@@ -3436,6 +3647,8 @@ public class RemoteInterpreterEventService {
       @org.apache.thrift.annotation.Nullable
       public static _Fields findByThriftId(int fieldId) {
         switch(fieldId) {
+          case 1: // EX
+            return EX;
           default:
             return null;
         }
@@ -3475,9 +3688,13 @@ public class RemoteInterpreterEventService {
         return _fieldName;
       }
     }
+
+    // isset id assignments
     public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
     static {
       java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.EX, new org.apache.thrift.meta_data.FieldMetaData("ex", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.zeppelin.interpreter.thrift.InterpreterRPCException.class)));
       metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
       org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(registerInterpreterProcess_result.class, metaDataMap);
     }
@@ -3485,10 +3702,20 @@ public class RemoteInterpreterEventService {
     public registerInterpreterProcess_result() {
     }
 
+    public registerInterpreterProcess_result(
+      org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex)
+    {
+      this();
+      this.ex = ex;
+    }
+
     /**
      * Performs a deep copy on <i>other</i>.
      */
     public registerInterpreterProcess_result(registerInterpreterProcess_result other) {
+      if (other.isSetEx()) {
+        this.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException(other.ex);
+      }
     }
 
     public registerInterpreterProcess_result deepCopy() {
@@ -3497,16 +3724,53 @@ public class RemoteInterpreterEventService {
 
     @Override
     public void clear() {
+      this.ex = null;
+    }
+
+    @org.apache.thrift.annotation.Nullable
+    public org.apache.zeppelin.interpreter.thrift.InterpreterRPCException getEx() {
+      return this.ex;
+    }
+
+    public registerInterpreterProcess_result setEx(@org.apache.thrift.annotation.Nullable org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex) {
+      this.ex = ex;
+      return this;
+    }
+
+    public void unsetEx() {
+      this.ex = null;
+    }
+
+    /** Returns true if field ex is set (has been assigned a value) and false otherwise */
+    public boolean isSetEx() {
+      return this.ex != null;
+    }
+
+    public void setExIsSet(boolean value) {
+      if (!value) {
+        this.ex = null;
+      }
     }
 
     public void setFieldValue(_Fields field, @org.apache.thrift.annotation.Nullable java.lang.Object value) {
       switch (field) {
+      case EX:
+        if (value == null) {
+          unsetEx();
+        } else {
+          setEx((org.apache.zeppelin.interpreter.thrift.InterpreterRPCException)value);
+        }
+        break;
+
       }
     }
 
     @org.apache.thrift.annotation.Nullable
     public java.lang.Object getFieldValue(_Fields field) {
       switch (field) {
+      case EX:
+        return getEx();
+
       }
       throw new java.lang.IllegalStateException();
     }
@@ -3518,6 +3782,8 @@ public class RemoteInterpreterEventService {
       }
 
       switch (field) {
+      case EX:
+        return isSetEx();
       }
       throw new java.lang.IllegalStateException();
     }
@@ -3537,6 +3803,15 @@ public class RemoteInterpreterEventService {
       if (this == that)
         return true;
 
+      boolean this_present_ex = true && this.isSetEx();
+      boolean that_present_ex = true && that.isSetEx();
+      if (this_present_ex || that_present_ex) {
+        if (!(this_present_ex && that_present_ex))
+          return false;
+        if (!this.ex.equals(that.ex))
+          return false;
+      }
+
       return true;
     }
 
@@ -3544,6 +3819,10 @@ public class RemoteInterpreterEventService {
     public int hashCode() {
       int hashCode = 1;
 
+      hashCode = hashCode * 8191 + ((isSetEx()) ? 131071 : 524287);
+      if (isSetEx())
+        hashCode = hashCode * 8191 + ex.hashCode();
+
       return hashCode;
     }
 
@@ -3555,6 +3834,16 @@ public class RemoteInterpreterEventService {
 
       int lastComparison = 0;
 
+      lastComparison = java.lang.Boolean.valueOf(isSetEx()).compareTo(other.isSetEx());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetEx()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.ex, other.ex);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
       return 0;
     }
 
@@ -3576,6 +3865,13 @@ public class RemoteInterpreterEventService {
       java.lang.StringBuilder sb = new java.lang.StringBuilder("registerInterpreterProcess_result(");
       boolean first = true;
 
+      sb.append("ex:");
+      if (this.ex == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.ex);
+      }
+      first = false;
       sb.append(")");
       return sb.toString();
     }
@@ -3619,6 +3915,15 @@ public class RemoteInterpreterEventService {
             break;
           }
           switch (schemeField.id) {
+            case 1: // EX
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+                struct.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException();
+                struct.ex.read(iprot);
+                struct.setExIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
             default:
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
           }
@@ -3634,6 +3939,11 @@ public class RemoteInterpreterEventService {
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.ex != null) {
+          oprot.writeFieldBegin(EX_FIELD_DESC);
+          struct.ex.write(oprot);
+          oprot.writeFieldEnd();
+        }
         oprot.writeFieldStop();
         oprot.writeStructEnd();
       }
@@ -3651,11 +3961,25 @@ public class RemoteInterpreterEventService {
       @Override
       public void write(org.apache.thrift.protocol.TProtocol prot, registerInterpreterProcess_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet optionals = new java.util.BitSet();
+        if (struct.isSetEx()) {
+          optionals.set(0);
+        }
+        oprot.writeBitSet(optionals, 1);
+        if (struct.isSetEx()) {
+          struct.ex.write(oprot);
+        }
       }
 
       @Override
       public void read(org.apache.thrift.protocol.TProtocol prot, registerInterpreterProcess_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet incoming = iprot.readBitSet(1);
+        if (incoming.get(0)) {
+          struct.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException();
+          struct.ex.read(iprot);
+          struct.setExIsSet(true);
+        }
       }
     }
 
@@ -4034,14 +4358,16 @@ public class RemoteInterpreterEventService {
   public static class unRegisterInterpreterProcess_result implements org.apache.thrift.TBase<unRegisterInterpreterProcess_result, unRegisterInterpreterProcess_result._Fields>, java.io.Serializable, Cloneable, Comparable<unRegisterInterpreterProcess_result>   {
     private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("unRegisterInterpreterProcess_result");
 
+    private static final org.apache.thrift.protocol.TField EX_FIELD_DESC = new org.apache.thrift.protocol.TField("ex", org.apache.thrift.protocol.TType.STRUCT, (short)1);
 
     private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new unRegisterInterpreterProcess_resultStandardSchemeFactory();
     private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new unRegisterInterpreterProcess_resultTupleSchemeFactory();
 
+    public @org.apache.thrift.annotation.Nullable org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-;
+      EX((short)1, "ex");
 
       private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
 
@@ -4057,6 +4383,8 @@ public class RemoteInterpreterEventService {
       @org.apache.thrift.annotation.Nullable
       public static _Fields findByThriftId(int fieldId) {
         switch(fieldId) {
+          case 1: // EX
+            return EX;
           default:
             return null;
         }
@@ -4096,9 +4424,13 @@ public class RemoteInterpreterEventService {
         return _fieldName;
       }
     }
+
+    // isset id assignments
     public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
     static {
       java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.EX, new org.apache.thrift.meta_data.FieldMetaData("ex", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.zeppelin.interpreter.thrift.InterpreterRPCException.class)));
       metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
       org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(unRegisterInterpreterProcess_result.class, metaDataMap);
     }
@@ -4106,10 +4438,20 @@ public class RemoteInterpreterEventService {
     public unRegisterInterpreterProcess_result() {
     }
 
+    public unRegisterInterpreterProcess_result(
+      org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex)
+    {
+      this();
+      this.ex = ex;
+    }
+
     /**
      * Performs a deep copy on <i>other</i>.
      */
     public unRegisterInterpreterProcess_result(unRegisterInterpreterProcess_result other) {
+      if (other.isSetEx()) {
+        this.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException(other.ex);
+      }
     }
 
     public unRegisterInterpreterProcess_result deepCopy() {
@@ -4118,16 +4460,53 @@ public class RemoteInterpreterEventService {
 
     @Override
     public void clear() {
+      this.ex = null;
+    }
+
+    @org.apache.thrift.annotation.Nullable
+    public org.apache.zeppelin.interpreter.thrift.InterpreterRPCException getEx() {
+      return this.ex;
+    }
+
+    public unRegisterInterpreterProcess_result setEx(@org.apache.thrift.annotation.Nullable org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex) {
+      this.ex = ex;
+      return this;
+    }
+
+    public void unsetEx() {
+      this.ex = null;
+    }
+
+    /** Returns true if field ex is set (has been assigned a value) and false otherwise */
+    public boolean isSetEx() {
+      return this.ex != null;
+    }
+
+    public void setExIsSet(boolean value) {
+      if (!value) {
+        this.ex = null;
+      }
     }
 
     public void setFieldValue(_Fields field, @org.apache.thrift.annotation.Nullable java.lang.Object value) {
       switch (field) {
+      case EX:
+        if (value == null) {
+          unsetEx();
+        } else {
+          setEx((org.apache.zeppelin.interpreter.thrift.InterpreterRPCException)value);
+        }
+        break;
+
       }
     }
 
     @org.apache.thrift.annotation.Nullable
     public java.lang.Object getFieldValue(_Fields field) {
       switch (field) {
+      case EX:
+        return getEx();
+
       }
       throw new java.lang.IllegalStateException();
     }
@@ -4139,6 +4518,8 @@ public class RemoteInterpreterEventService {
       }
 
       switch (field) {
+      case EX:
+        return isSetEx();
       }
       throw new java.lang.IllegalStateException();
     }
@@ -4158,6 +4539,15 @@ public class RemoteInterpreterEventService {
       if (this == that)
         return true;
 
+      boolean this_present_ex = true && this.isSetEx();
+      boolean that_present_ex = true && that.isSetEx();
+      if (this_present_ex || that_present_ex) {
+        if (!(this_present_ex && that_present_ex))
+          return false;
+        if (!this.ex.equals(that.ex))
+          return false;
+      }
+
       return true;
     }
 
@@ -4165,6 +4555,10 @@ public class RemoteInterpreterEventService {
     public int hashCode() {
       int hashCode = 1;
 
+      hashCode = hashCode * 8191 + ((isSetEx()) ? 131071 : 524287);
+      if (isSetEx())
+        hashCode = hashCode * 8191 + ex.hashCode();
+
       return hashCode;
     }
 
@@ -4176,6 +4570,16 @@ public class RemoteInterpreterEventService {
 
       int lastComparison = 0;
 
+      lastComparison = java.lang.Boolean.valueOf(isSetEx()).compareTo(other.isSetEx());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetEx()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.ex, other.ex);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
       return 0;
     }
 
@@ -4197,6 +4601,13 @@ public class RemoteInterpreterEventService {
       java.lang.StringBuilder sb = new java.lang.StringBuilder("unRegisterInterpreterProcess_result(");
       boolean first = true;
 
+      sb.append("ex:");
+      if (this.ex == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.ex);
+      }
+      first = false;
       sb.append(")");
       return sb.toString();
     }
@@ -4240,6 +4651,15 @@ public class RemoteInterpreterEventService {
             break;
           }
           switch (schemeField.id) {
+            case 1: // EX
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+                struct.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException();
+                struct.ex.read(iprot);
+                struct.setExIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
             default:
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
           }
@@ -4255,6 +4675,11 @@ public class RemoteInterpreterEventService {
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.ex != null) {
+          oprot.writeFieldBegin(EX_FIELD_DESC);
+          struct.ex.write(oprot);
+          oprot.writeFieldEnd();
+        }
         oprot.writeFieldStop();
         oprot.writeStructEnd();
       }
@@ -4272,11 +4697,25 @@ public class RemoteInterpreterEventService {
       @Override
       public void write(org.apache.thrift.protocol.TProtocol prot, unRegisterInterpreterProcess_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet optionals = new java.util.BitSet();
+        if (struct.isSetEx()) {
+          optionals.set(0);
+        }
+        oprot.writeBitSet(optionals, 1);
+        if (struct.isSetEx()) {
+          struct.ex.write(oprot);
+        }
       }
 
       @Override
       public void read(org.apache.thrift.protocol.TProtocol prot, unRegisterInterpreterProcess_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet incoming = iprot.readBitSet(1);
+        if (incoming.get(0)) {
+          struct.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException();
+          struct.ex.read(iprot);
+          struct.setExIsSet(true);
+        }
       }
     }
 
@@ -4660,14 +5099,16 @@ public class RemoteInterpreterEventService {
   public static class appendOutput_result implements org.apache.thrift.TBase<appendOutput_result, appendOutput_result._Fields>, java.io.Serializable, Cloneable, Comparable<appendOutput_result>   {
     private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("appendOutput_result");
 
+    private static final org.apache.thrift.protocol.TField EX_FIELD_DESC = new org.apache.thrift.protocol.TField("ex", org.apache.thrift.protocol.TType.STRUCT, (short)1);
 
     private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new appendOutput_resultStandardSchemeFactory();
     private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new appendOutput_resultTupleSchemeFactory();
 
+    public @org.apache.thrift.annotation.Nullable org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-;
+      EX((short)1, "ex");
 
       private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
 
@@ -4683,6 +5124,8 @@ public class RemoteInterpreterEventService {
       @org.apache.thrift.annotation.Nullable
       public static _Fields findByThriftId(int fieldId) {
         switch(fieldId) {
+          case 1: // EX
+            return EX;
           default:
             return null;
         }
@@ -4722,9 +5165,13 @@ public class RemoteInterpreterEventService {
         return _fieldName;
       }
     }
+
+    // isset id assignments
     public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
     static {
       java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.EX, new org.apache.thrift.meta_data.FieldMetaData("ex", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.zeppelin.interpreter.thrift.InterpreterRPCException.class)));
       metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
       org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(appendOutput_result.class, metaDataMap);
     }
@@ -4732,10 +5179,20 @@ public class RemoteInterpreterEventService {
     public appendOutput_result() {
     }
 
+    public appendOutput_result(
+      org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex)
+    {
+      this();
+      this.ex = ex;
+    }
+
     /**
      * Performs a deep copy on <i>other</i>.
      */
     public appendOutput_result(appendOutput_result other) {
+      if (other.isSetEx()) {
+        this.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException(other.ex);
+      }
     }
 
     public appendOutput_result deepCopy() {
@@ -4744,16 +5201,53 @@ public class RemoteInterpreterEventService {
 
     @Override
     public void clear() {
+      this.ex = null;
+    }
+
+    @org.apache.thrift.annotation.Nullable
+    public org.apache.zeppelin.interpreter.thrift.InterpreterRPCException getEx() {
+      return this.ex;
+    }
+
+    public appendOutput_result setEx(@org.apache.thrift.annotation.Nullable org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex) {
+      this.ex = ex;
+      return this;
+    }
+
+    public void unsetEx() {
+      this.ex = null;
+    }
+
+    /** Returns true if field ex is set (has been assigned a value) and false otherwise */
+    public boolean isSetEx() {
+      return this.ex != null;
+    }
+
+    public void setExIsSet(boolean value) {
+      if (!value) {
+        this.ex = null;
+      }
     }
 
     public void setFieldValue(_Fields field, @org.apache.thrift.annotation.Nullable java.lang.Object value) {
       switch (field) {
+      case EX:
+        if (value == null) {
+          unsetEx();
+        } else {
+          setEx((org.apache.zeppelin.interpreter.thrift.InterpreterRPCException)value);
+        }
+        break;
+
       }
     }
 
     @org.apache.thrift.annotation.Nullable
     public java.lang.Object getFieldValue(_Fields field) {
       switch (field) {
+      case EX:
+        return getEx();
+
       }
       throw new java.lang.IllegalStateException();
     }
@@ -4765,6 +5259,8 @@ public class RemoteInterpreterEventService {
       }
 
       switch (field) {
+      case EX:
+        return isSetEx();
       }
       throw new java.lang.IllegalStateException();
     }
@@ -4784,6 +5280,15 @@ public class RemoteInterpreterEventService {
       if (this == that)
         return true;
 
+      boolean this_present_ex = true && this.isSetEx();
+      boolean that_present_ex = true && that.isSetEx();
+      if (this_present_ex || that_present_ex) {
+        if (!(this_present_ex && that_present_ex))
+          return false;
+        if (!this.ex.equals(that.ex))
+          return false;
+      }
+
       return true;
     }
 
@@ -4791,6 +5296,10 @@ public class RemoteInterpreterEventService {
     public int hashCode() {
       int hashCode = 1;
 
+      hashCode = hashCode * 8191 + ((isSetEx()) ? 131071 : 524287);
+      if (isSetEx())
+        hashCode = hashCode * 8191 + ex.hashCode();
+
       return hashCode;
     }
 
@@ -4802,6 +5311,16 @@ public class RemoteInterpreterEventService {
 
       int lastComparison = 0;
 
+      lastComparison = java.lang.Boolean.valueOf(isSetEx()).compareTo(other.isSetEx());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetEx()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.ex, other.ex);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
       return 0;
     }
 
@@ -4823,6 +5342,13 @@ public class RemoteInterpreterEventService {
       java.lang.StringBuilder sb = new java.lang.StringBuilder("appendOutput_result(");
       boolean first = true;
 
+      sb.append("ex:");
+      if (this.ex == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.ex);
+      }
+      first = false;
       sb.append(")");
       return sb.toString();
     }
@@ -4866,8 +5392,17 @@ public class RemoteInterpreterEventService {
             break;
           }
           switch (schemeField.id) {
-            default:
-              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            case 1: // EX
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+                struct.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException();
+                struct.ex.read(iprot);
+                struct.setExIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            default:
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
           }
           iprot.readFieldEnd();
         }
@@ -4881,6 +5416,11 @@ public class RemoteInterpreterEventService {
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.ex != null) {
+          oprot.writeFieldBegin(EX_FIELD_DESC);
+          struct.ex.write(oprot);
+          oprot.writeFieldEnd();
+        }
         oprot.writeFieldStop();
         oprot.writeStructEnd();
       }
@@ -4898,11 +5438,25 @@ public class RemoteInterpreterEventService {
       @Override
       public void write(org.apache.thrift.protocol.TProtocol prot, appendOutput_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet optionals = new java.util.BitSet();
+        if (struct.isSetEx()) {
+          optionals.set(0);
+        }
+        oprot.writeBitSet(optionals, 1);
+        if (struct.isSetEx()) {
+          struct.ex.write(oprot);
+        }
       }
 
       @Override
       public void read(org.apache.thrift.protocol.TProtocol prot, appendOutput_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet incoming = iprot.readBitSet(1);
+        if (incoming.get(0)) {
+          struct.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException();
+          struct.ex.read(iprot);
+          struct.setExIsSet(true);
+        }
       }
     }
 
@@ -5286,14 +5840,16 @@ public class RemoteInterpreterEventService {
   public static class updateOutput_result implements org.apache.thrift.TBase<updateOutput_result, updateOutput_result._Fields>, java.io.Serializable, Cloneable, Comparable<updateOutput_result>   {
     private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("updateOutput_result");
 
+    private static final org.apache.thrift.protocol.TField EX_FIELD_DESC = new org.apache.thrift.protocol.TField("ex", org.apache.thrift.protocol.TType.STRUCT, (short)1);
 
     private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new updateOutput_resultStandardSchemeFactory();
     private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new updateOutput_resultTupleSchemeFactory();
 
+    public @org.apache.thrift.annotation.Nullable org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-;
+      EX((short)1, "ex");
 
       private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
 
@@ -5309,6 +5865,8 @@ public class RemoteInterpreterEventService {
       @org.apache.thrift.annotation.Nullable
       public static _Fields findByThriftId(int fieldId) {
         switch(fieldId) {
+          case 1: // EX
+            return EX;
           default:
             return null;
         }
@@ -5348,9 +5906,13 @@ public class RemoteInterpreterEventService {
         return _fieldName;
       }
     }
+
+    // isset id assignments
     public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
     static {
       java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.EX, new org.apache.thrift.meta_data.FieldMetaData("ex", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.zeppelin.interpreter.thrift.InterpreterRPCException.class)));
       metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
       org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(updateOutput_result.class, metaDataMap);
     }
@@ -5358,10 +5920,20 @@ public class RemoteInterpreterEventService {
     public updateOutput_result() {
     }
 
+    public updateOutput_result(
+      org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex)
+    {
+      this();
+      this.ex = ex;
+    }
+
     /**
      * Performs a deep copy on <i>other</i>.
      */
     public updateOutput_result(updateOutput_result other) {
+      if (other.isSetEx()) {
+        this.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException(other.ex);
+      }
     }
 
     public updateOutput_result deepCopy() {
@@ -5370,16 +5942,53 @@ public class RemoteInterpreterEventService {
 
     @Override
     public void clear() {
+      this.ex = null;
+    }
+
+    @org.apache.thrift.annotation.Nullable
+    public org.apache.zeppelin.interpreter.thrift.InterpreterRPCException getEx() {
+      return this.ex;
+    }
+
+    public updateOutput_result setEx(@org.apache.thrift.annotation.Nullable org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex) {
+      this.ex = ex;
+      return this;
+    }
+
+    public void unsetEx() {
+      this.ex = null;
+    }
+
+    /** Returns true if field ex is set (has been assigned a value) and false otherwise */
+    public boolean isSetEx() {
+      return this.ex != null;
+    }
+
+    public void setExIsSet(boolean value) {
+      if (!value) {
+        this.ex = null;
+      }
     }
 
     public void setFieldValue(_Fields field, @org.apache.thrift.annotation.Nullable java.lang.Object value) {
       switch (field) {
+      case EX:
+        if (value == null) {
+          unsetEx();
+        } else {
+          setEx((org.apache.zeppelin.interpreter.thrift.InterpreterRPCException)value);
+        }
+        break;
+
       }
     }
 
     @org.apache.thrift.annotation.Nullable
     public java.lang.Object getFieldValue(_Fields field) {
       switch (field) {
+      case EX:
+        return getEx();
+
       }
       throw new java.lang.IllegalStateException();
     }
@@ -5391,6 +6000,8 @@ public class RemoteInterpreterEventService {
       }
 
       switch (field) {
+      case EX:
+        return isSetEx();
       }
       throw new java.lang.IllegalStateException();
     }
@@ -5410,6 +6021,15 @@ public class RemoteInterpreterEventService {
       if (this == that)
         return true;
 
+      boolean this_present_ex = true && this.isSetEx();
+      boolean that_present_ex = true && that.isSetEx();
+      if (this_present_ex || that_present_ex) {
+        if (!(this_present_ex && that_present_ex))
+          return false;
+        if (!this.ex.equals(that.ex))
+          return false;
+      }
+
       return true;
     }
 
@@ -5417,6 +6037,10 @@ public class RemoteInterpreterEventService {
     public int hashCode() {
       int hashCode = 1;
 
+      hashCode = hashCode * 8191 + ((isSetEx()) ? 131071 : 524287);
+      if (isSetEx())
+        hashCode = hashCode * 8191 + ex.hashCode();
+
       return hashCode;
     }
 
@@ -5428,6 +6052,16 @@ public class RemoteInterpreterEventService {
 
       int lastComparison = 0;
 
+      lastComparison = java.lang.Boolean.valueOf(isSetEx()).compareTo(other.isSetEx());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetEx()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.ex, other.ex);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
       return 0;
     }
 
@@ -5449,6 +6083,13 @@ public class RemoteInterpreterEventService {
       java.lang.StringBuilder sb = new java.lang.StringBuilder("updateOutput_result(");
       boolean first = true;
 
+      sb.append("ex:");
+      if (this.ex == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.ex);
+      }
+      first = false;
       sb.append(")");
       return sb.toString();
     }
@@ -5492,6 +6133,15 @@ public class RemoteInterpreterEventService {
             break;
           }
           switch (schemeField.id) {
+            case 1: // EX
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+                struct.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException();
+                struct.ex.read(iprot);
+                struct.setExIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
             default:
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
           }
@@ -5507,6 +6157,11 @@ public class RemoteInterpreterEventService {
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.ex != null) {
+          oprot.writeFieldBegin(EX_FIELD_DESC);
+          struct.ex.write(oprot);
+          oprot.writeFieldEnd();
+        }
         oprot.writeFieldStop();
         oprot.writeStructEnd();
       }
@@ -5524,11 +6179,25 @@ public class RemoteInterpreterEventService {
       @Override
       public void write(org.apache.thrift.protocol.TProtocol prot, updateOutput_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet optionals = new java.util.BitSet();
+        if (struct.isSetEx()) {
+          optionals.set(0);
+        }
+        oprot.writeBitSet(optionals, 1);
+        if (struct.isSetEx()) {
+          struct.ex.write(oprot);
+        }
       }
 
       @Override
       public void read(org.apache.thrift.protocol.TProtocol prot, updateOutput_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet incoming = iprot.readBitSet(1);
+        if (incoming.get(0)) {
+          struct.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException();
+          struct.ex.read(iprot);
+          struct.setExIsSet(true);
+        }
       }
     }
 
@@ -5912,14 +6581,16 @@ public class RemoteInterpreterEventService {
   public static class updateAllOutput_result implements org.apache.thrift.TBase<updateAllOutput_result, updateAllOutput_result._Fields>, java.io.Serializable, Cloneable, Comparable<updateAllOutput_result>   {
     private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("updateAllOutput_result");
 
+    private static final org.apache.thrift.protocol.TField EX_FIELD_DESC = new org.apache.thrift.protocol.TField("ex", org.apache.thrift.protocol.TType.STRUCT, (short)1);
 
     private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new updateAllOutput_resultStandardSchemeFactory();
     private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new updateAllOutput_resultTupleSchemeFactory();
 
+    public @org.apache.thrift.annotation.Nullable org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-;
+      EX((short)1, "ex");
 
       private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
 
@@ -5935,6 +6606,8 @@ public class RemoteInterpreterEventService {
       @org.apache.thrift.annotation.Nullable
       public static _Fields findByThriftId(int fieldId) {
         switch(fieldId) {
+          case 1: // EX
+            return EX;
           default:
             return null;
         }
@@ -5974,9 +6647,13 @@ public class RemoteInterpreterEventService {
         return _fieldName;
       }
     }
+
+    // isset id assignments
     public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
     static {
       java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.EX, new org.apache.thrift.meta_data.FieldMetaData("ex", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.zeppelin.interpreter.thrift.InterpreterRPCException.class)));
       metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
       org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(updateAllOutput_result.class, metaDataMap);
     }
@@ -5984,10 +6661,20 @@ public class RemoteInterpreterEventService {
     public updateAllOutput_result() {
     }
 
+    public updateAllOutput_result(
+      org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex)
+    {
+      this();
+      this.ex = ex;
+    }
+
     /**
      * Performs a deep copy on <i>other</i>.
      */
     public updateAllOutput_result(updateAllOutput_result other) {
+      if (other.isSetEx()) {
+        this.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException(other.ex);
+      }
     }
 
     public updateAllOutput_result deepCopy() {
@@ -5996,16 +6683,53 @@ public class RemoteInterpreterEventService {
 
     @Override
     public void clear() {
+      this.ex = null;
+    }
+
+    @org.apache.thrift.annotation.Nullable
+    public org.apache.zeppelin.interpreter.thrift.InterpreterRPCException getEx() {
+      return this.ex;
+    }
+
+    public updateAllOutput_result setEx(@org.apache.thrift.annotation.Nullable org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex) {
+      this.ex = ex;
+      return this;
+    }
+
+    public void unsetEx() {
+      this.ex = null;
+    }
+
+    /** Returns true if field ex is set (has been assigned a value) and false otherwise */
+    public boolean isSetEx() {
+      return this.ex != null;
+    }
+
+    public void setExIsSet(boolean value) {
+      if (!value) {
+        this.ex = null;
+      }
     }
 
     public void setFieldValue(_Fields field, @org.apache.thrift.annotation.Nullable java.lang.Object value) {
       switch (field) {
+      case EX:
+        if (value == null) {
+          unsetEx();
+        } else {
+          setEx((org.apache.zeppelin.interpreter.thrift.InterpreterRPCException)value);
+        }
+        break;
+
       }
     }
 
     @org.apache.thrift.annotation.Nullable
     public java.lang.Object getFieldValue(_Fields field) {
       switch (field) {
+      case EX:
+        return getEx();
+
       }
       throw new java.lang.IllegalStateException();
     }
@@ -6017,6 +6741,8 @@ public class RemoteInterpreterEventService {
       }
 
       switch (field) {
+      case EX:
+        return isSetEx();
       }
       throw new java.lang.IllegalStateException();
     }
@@ -6036,6 +6762,15 @@ public class RemoteInterpreterEventService {
       if (this == that)
         return true;
 
+      boolean this_present_ex = true && this.isSetEx();
+      boolean that_present_ex = true && that.isSetEx();
+      if (this_present_ex || that_present_ex) {
+        if (!(this_present_ex && that_present_ex))
+          return false;
+        if (!this.ex.equals(that.ex))
+          return false;
+      }
+
       return true;
     }
 
@@ -6043,6 +6778,10 @@ public class RemoteInterpreterEventService {
     public int hashCode() {
       int hashCode = 1;
 
+      hashCode = hashCode * 8191 + ((isSetEx()) ? 131071 : 524287);
+      if (isSetEx())
+        hashCode = hashCode * 8191 + ex.hashCode();
+
       return hashCode;
     }
 
@@ -6054,6 +6793,16 @@ public class RemoteInterpreterEventService {
 
       int lastComparison = 0;
 
+      lastComparison = java.lang.Boolean.valueOf(isSetEx()).compareTo(other.isSetEx());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetEx()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.ex, other.ex);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
       return 0;
     }
 
@@ -6075,6 +6824,13 @@ public class RemoteInterpreterEventService {
       java.lang.StringBuilder sb = new java.lang.StringBuilder("updateAllOutput_result(");
       boolean first = true;
 
+      sb.append("ex:");
+      if (this.ex == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.ex);
+      }
+      first = false;
       sb.append(")");
       return sb.toString();
     }
@@ -6118,6 +6874,15 @@ public class RemoteInterpreterEventService {
             break;
           }
           switch (schemeField.id) {
+            case 1: // EX
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+                struct.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException();
+                struct.ex.read(iprot);
+                struct.setExIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
             default:
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
           }
@@ -6133,6 +6898,11 @@ public class RemoteInterpreterEventService {
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.ex != null) {
+          oprot.writeFieldBegin(EX_FIELD_DESC);
+          struct.ex.write(oprot);
+          oprot.writeFieldEnd();
+        }
         oprot.writeFieldStop();
         oprot.writeStructEnd();
       }
@@ -6150,11 +6920,25 @@ public class RemoteInterpreterEventService {
       @Override
       public void write(org.apache.thrift.protocol.TProtocol prot, updateAllOutput_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet optionals = new java.util.BitSet();
+        if (struct.isSetEx()) {
+          optionals.set(0);
+        }
+        oprot.writeBitSet(optionals, 1);
+        if (struct.isSetEx()) {
+          struct.ex.write(oprot);
+        }
       }
 
       @Override
       public void read(org.apache.thrift.protocol.TProtocol prot, updateAllOutput_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet incoming = iprot.readBitSet(1);
+        if (incoming.get(0)) {
+          struct.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException();
+          struct.ex.read(iprot);
+          struct.setExIsSet(true);
+        }
       }
     }
 
@@ -6538,14 +7322,16 @@ public class RemoteInterpreterEventService {
   public static class appendAppOutput_result implements org.apache.thrift.TBase<appendAppOutput_result, appendAppOutput_result._Fields>, java.io.Serializable, Cloneable, Comparable<appendAppOutput_result>   {
     private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("appendAppOutput_result");
 
+    private static final org.apache.thrift.protocol.TField EX_FIELD_DESC = new org.apache.thrift.protocol.TField("ex", org.apache.thrift.protocol.TType.STRUCT, (short)1);
 
     private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new appendAppOutput_resultStandardSchemeFactory();
     private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new appendAppOutput_resultTupleSchemeFactory();
 
+    public @org.apache.thrift.annotation.Nullable org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-;
+      EX((short)1, "ex");
 
       private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
 
@@ -6561,6 +7347,8 @@ public class RemoteInterpreterEventService {
       @org.apache.thrift.annotation.Nullable
       public static _Fields findByThriftId(int fieldId) {
         switch(fieldId) {
+          case 1: // EX
+            return EX;
           default:
             return null;
         }
@@ -6600,9 +7388,13 @@ public class RemoteInterpreterEventService {
         return _fieldName;
       }
     }
+
+    // isset id assignments
     public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
     static {
       java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.EX, new org.apache.thrift.meta_data.FieldMetaData("ex", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.zeppelin.interpreter.thrift.InterpreterRPCException.class)));
       metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
       org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(appendAppOutput_result.class, metaDataMap);
     }
@@ -6610,10 +7402,20 @@ public class RemoteInterpreterEventService {
     public appendAppOutput_result() {
     }
 
+    public appendAppOutput_result(
+      org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex)
+    {
+      this();
+      this.ex = ex;
+    }
+
     /**
      * Performs a deep copy on <i>other</i>.
      */
     public appendAppOutput_result(appendAppOutput_result other) {
+      if (other.isSetEx()) {
+        this.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException(other.ex);
+      }
     }
 
     public appendAppOutput_result deepCopy() {
@@ -6622,16 +7424,53 @@ public class RemoteInterpreterEventService {
 
     @Override
     public void clear() {
+      this.ex = null;
+    }
+
+    @org.apache.thrift.annotation.Nullable
+    public org.apache.zeppelin.interpreter.thrift.InterpreterRPCException getEx() {
+      return this.ex;
+    }
+
+    public appendAppOutput_result setEx(@org.apache.thrift.annotation.Nullable org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex) {
+      this.ex = ex;
+      return this;
+    }
+
+    public void unsetEx() {
+      this.ex = null;
+    }
+
+    /** Returns true if field ex is set (has been assigned a value) and false otherwise */
+    public boolean isSetEx() {
+      return this.ex != null;
+    }
+
+    public void setExIsSet(boolean value) {
+      if (!value) {
+        this.ex = null;
+      }
     }
 
     public void setFieldValue(_Fields field, @org.apache.thrift.annotation.Nullable java.lang.Object value) {
       switch (field) {
+      case EX:
+        if (value == null) {
+          unsetEx();
+        } else {
+          setEx((org.apache.zeppelin.interpreter.thrift.InterpreterRPCException)value);
+        }
+        break;
+
       }
     }
 
     @org.apache.thrift.annotation.Nullable
     public java.lang.Object getFieldValue(_Fields field) {
       switch (field) {
+      case EX:
+        return getEx();
+
       }
       throw new java.lang.IllegalStateException();
     }
@@ -6643,6 +7482,8 @@ public class RemoteInterpreterEventService {
       }
 
       switch (field) {
+      case EX:
+        return isSetEx();
       }
       throw new java.lang.IllegalStateException();
     }
@@ -6662,6 +7503,15 @@ public class RemoteInterpreterEventService {
       if (this == that)
         return true;
 
+      boolean this_present_ex = true && this.isSetEx();
+      boolean that_present_ex = true && that.isSetEx();
+      if (this_present_ex || that_present_ex) {
+        if (!(this_present_ex && that_present_ex))
+          return false;
+        if (!this.ex.equals(that.ex))
+          return false;
+      }
+
       return true;
     }
 
@@ -6669,6 +7519,10 @@ public class RemoteInterpreterEventService {
     public int hashCode() {
       int hashCode = 1;
 
+      hashCode = hashCode * 8191 + ((isSetEx()) ? 131071 : 524287);
+      if (isSetEx())
+        hashCode = hashCode * 8191 + ex.hashCode();
+
       return hashCode;
     }
 
@@ -6680,6 +7534,16 @@ public class RemoteInterpreterEventService {
 
       int lastComparison = 0;
 
+      lastComparison = java.lang.Boolean.valueOf(isSetEx()).compareTo(other.isSetEx());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetEx()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.ex, other.ex);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
       return 0;
     }
 
@@ -6701,6 +7565,13 @@ public class RemoteInterpreterEventService {
       java.lang.StringBuilder sb = new java.lang.StringBuilder("appendAppOutput_result(");
       boolean first = true;
 
+      sb.append("ex:");
+      if (this.ex == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.ex);
+      }
+      first = false;
       sb.append(")");
       return sb.toString();
     }
@@ -6744,6 +7615,15 @@ public class RemoteInterpreterEventService {
             break;
           }
           switch (schemeField.id) {
+            case 1: // EX
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+                struct.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException();
+                struct.ex.read(iprot);
+                struct.setExIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
             default:
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
           }
@@ -6759,6 +7639,11 @@ public class RemoteInterpreterEventService {
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.ex != null) {
+          oprot.writeFieldBegin(EX_FIELD_DESC);
+          struct.ex.write(oprot);
+          oprot.writeFieldEnd();
+        }
         oprot.writeFieldStop();
         oprot.writeStructEnd();
       }
@@ -6776,11 +7661,25 @@ public class RemoteInterpreterEventService {
       @Override
       public void write(org.apache.thrift.protocol.TProtocol prot, appendAppOutput_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet optionals = new java.util.BitSet();
+        if (struct.isSetEx()) {
+          optionals.set(0);
+        }
+        oprot.writeBitSet(optionals, 1);
+        if (struct.isSetEx()) {
+          struct.ex.write(oprot);
+        }
       }
 
       @Override
       public void read(org.apache.thrift.protocol.TProtocol prot, appendAppOutput_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet incoming = iprot.readBitSet(1);
+        if (incoming.get(0)) {
+          struct.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException();
+          struct.ex.read(iprot);
+          struct.setExIsSet(true);
+        }
       }
     }
 
@@ -7164,14 +8063,16 @@ public class RemoteInterpreterEventService {
   public static class updateAppOutput_result implements org.apache.thrift.TBase<updateAppOutput_result, updateAppOutput_result._Fields>, java.io.Serializable, Cloneable, Comparable<updateAppOutput_result>   {
     private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("updateAppOutput_result");
 
+    private static final org.apache.thrift.protocol.TField EX_FIELD_DESC = new org.apache.thrift.protocol.TField("ex", org.apache.thrift.protocol.TType.STRUCT, (short)1);
 
     private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new updateAppOutput_resultStandardSchemeFactory();
     private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new updateAppOutput_resultTupleSchemeFactory();
 
+    public @org.apache.thrift.annotation.Nullable org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-;
+      EX((short)1, "ex");
 
       private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
 
@@ -7187,6 +8088,8 @@ public class RemoteInterpreterEventService {
       @org.apache.thrift.annotation.Nullable
       public static _Fields findByThriftId(int fieldId) {
         switch(fieldId) {
+          case 1: // EX
+            return EX;
           default:
             return null;
         }
@@ -7226,9 +8129,13 @@ public class RemoteInterpreterEventService {
         return _fieldName;
       }
     }
+
+    // isset id assignments
     public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
     static {
       java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.EX, new org.apache.thrift.meta_data.FieldMetaData("ex", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.zeppelin.interpreter.thrift.InterpreterRPCException.class)));
       metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
       org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(updateAppOutput_result.class, metaDataMap);
     }
@@ -7236,10 +8143,20 @@ public class RemoteInterpreterEventService {
     public updateAppOutput_result() {
     }
 
+    public updateAppOutput_result(
+      org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex)
+    {
+      this();
+      this.ex = ex;
+    }
+
     /**
      * Performs a deep copy on <i>other</i>.
      */
     public updateAppOutput_result(updateAppOutput_result other) {
+      if (other.isSetEx()) {
+        this.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException(other.ex);
+      }
     }
 
     public updateAppOutput_result deepCopy() {
@@ -7248,16 +8165,53 @@ public class RemoteInterpreterEventService {
 
     @Override
     public void clear() {
+      this.ex = null;
+    }
+
+    @org.apache.thrift.annotation.Nullable
+    public org.apache.zeppelin.interpreter.thrift.InterpreterRPCException getEx() {
+      return this.ex;
+    }
+
+    public updateAppOutput_result setEx(@org.apache.thrift.annotation.Nullable org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex) {
+      this.ex = ex;
+      return this;
+    }
+
+    public void unsetEx() {
+      this.ex = null;
+    }
+
+    /** Returns true if field ex is set (has been assigned a value) and false otherwise */
+    public boolean isSetEx() {
+      return this.ex != null;
+    }
+
+    public void setExIsSet(boolean value) {
+      if (!value) {
+        this.ex = null;
+      }
     }
 
     public void setFieldValue(_Fields field, @org.apache.thrift.annotation.Nullable java.lang.Object value) {
       switch (field) {
+      case EX:
+        if (value == null) {
+          unsetEx();
+        } else {
+          setEx((org.apache.zeppelin.interpreter.thrift.InterpreterRPCException)value);
+        }
+        break;
+
       }
     }
 
     @org.apache.thrift.annotation.Nullable
     public java.lang.Object getFieldValue(_Fields field) {
       switch (field) {
+      case EX:
+        return getEx();
+
       }
       throw new java.lang.IllegalStateException();
     }
@@ -7269,6 +8223,8 @@ public class RemoteInterpreterEventService {
       }
 
       switch (field) {
+      case EX:
+        return isSetEx();
       }
       throw new java.lang.IllegalStateException();
     }
@@ -7288,6 +8244,15 @@ public class RemoteInterpreterEventService {
       if (this == that)
         return true;
 
+      boolean this_present_ex = true && this.isSetEx();
+      boolean that_present_ex = true && that.isSetEx();
+      if (this_present_ex || that_present_ex) {
+        if (!(this_present_ex && that_present_ex))
+          return false;
+        if (!this.ex.equals(that.ex))
+          return false;
+      }
+
       return true;
     }
 
@@ -7295,6 +8260,10 @@ public class RemoteInterpreterEventService {
     public int hashCode() {
       int hashCode = 1;
 
+      hashCode = hashCode * 8191 + ((isSetEx()) ? 131071 : 524287);
+      if (isSetEx())
+        hashCode = hashCode * 8191 + ex.hashCode();
+
       return hashCode;
     }
 
@@ -7306,6 +8275,16 @@ public class RemoteInterpreterEventService {
 
       int lastComparison = 0;
 
+      lastComparison = java.lang.Boolean.valueOf(isSetEx()).compareTo(other.isSetEx());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetEx()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.ex, other.ex);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
       return 0;
     }
 
@@ -7327,6 +8306,13 @@ public class RemoteInterpreterEventService {
       java.lang.StringBuilder sb = new java.lang.StringBuilder("updateAppOutput_result(");
       boolean first = true;
 
+      sb.append("ex:");
+      if (this.ex == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.ex);
+      }
+      first = false;
       sb.append(")");
       return sb.toString();
     }
@@ -7370,6 +8356,15 @@ public class RemoteInterpreterEventService {
             break;
           }
           switch (schemeField.id) {
+            case 1: // EX
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+                struct.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException();
+                struct.ex.read(iprot);
+                struct.setExIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
             default:
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
           }
@@ -7385,6 +8380,11 @@ public class RemoteInterpreterEventService {
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.ex != null) {
+          oprot.writeFieldBegin(EX_FIELD_DESC);
+          struct.ex.write(oprot);
+          oprot.writeFieldEnd();
+        }
         oprot.writeFieldStop();
         oprot.writeStructEnd();
       }
@@ -7402,11 +8402,25 @@ public class RemoteInterpreterEventService {
       @Override
       public void write(org.apache.thrift.protocol.TProtocol prot, updateAppOutput_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet optionals = new java.util.BitSet();
+        if (struct.isSetEx()) {
+          optionals.set(0);
+        }
+        oprot.writeBitSet(optionals, 1);
+        if (struct.isSetEx()) {
+          struct.ex.write(oprot);
+        }
       }
 
       @Override
       public void read(org.apache.thrift.protocol.TProtocol prot, updateAppOutput_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet incoming = iprot.readBitSet(1);
+        if (incoming.get(0)) {
+          struct.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException();
+          struct.ex.read(iprot);
+          struct.setExIsSet(true);
+        }
       }
     }
 
@@ -7790,14 +8804,16 @@ public class RemoteInterpreterEventService {
   public static class updateAppStatus_result implements org.apache.thrift.TBase<updateAppStatus_result, updateAppStatus_result._Fields>, java.io.Serializable, Cloneable, Comparable<updateAppStatus_result>   {
     private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("updateAppStatus_result");
 
+    private static final org.apache.thrift.protocol.TField EX_FIELD_DESC = new org.apache.thrift.protocol.TField("ex", org.apache.thrift.protocol.TType.STRUCT, (short)1);
 
     private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new updateAppStatus_resultStandardSchemeFactory();
     private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new updateAppStatus_resultTupleSchemeFactory();
 
+    public @org.apache.thrift.annotation.Nullable org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-;
+      EX((short)1, "ex");
 
       private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
 
@@ -7813,6 +8829,8 @@ public class RemoteInterpreterEventService {
       @org.apache.thrift.annotation.Nullable
       public static _Fields findByThriftId(int fieldId) {
         switch(fieldId) {
+          case 1: // EX
+            return EX;
           default:
             return null;
         }
@@ -7852,9 +8870,13 @@ public class RemoteInterpreterEventService {
         return _fieldName;
       }
     }
+
+    // isset id assignments
     public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
     static {
       java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.EX, new org.apache.thrift.meta_data.FieldMetaData("ex", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.zeppelin.interpreter.thrift.InterpreterRPCException.class)));
       metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
       org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(updateAppStatus_result.class, metaDataMap);
     }
@@ -7862,10 +8884,20 @@ public class RemoteInterpreterEventService {
     public updateAppStatus_result() {
     }
 
+    public updateAppStatus_result(
+      org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex)
+    {
+      this();
+      this.ex = ex;
+    }
+
     /**
      * Performs a deep copy on <i>other</i>.
      */
     public updateAppStatus_result(updateAppStatus_result other) {
+      if (other.isSetEx()) {
+        this.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException(other.ex);
+      }
     }
 
     public updateAppStatus_result deepCopy() {
@@ -7874,16 +8906,53 @@ public class RemoteInterpreterEventService {
 
     @Override
     public void clear() {
+      this.ex = null;
+    }
+
+    @org.apache.thrift.annotation.Nullable
+    public org.apache.zeppelin.interpreter.thrift.InterpreterRPCException getEx() {
+      return this.ex;
+    }
+
+    public updateAppStatus_result setEx(@org.apache.thrift.annotation.Nullable org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex) {
+      this.ex = ex;
+      return this;
+    }
+
+    public void unsetEx() {
+      this.ex = null;
+    }
+
+    /** Returns true if field ex is set (has been assigned a value) and false otherwise */
+    public boolean isSetEx() {
+      return this.ex != null;
+    }
+
+    public void setExIsSet(boolean value) {
+      if (!value) {
+        this.ex = null;
+      }
     }
 
     public void setFieldValue(_Fields field, @org.apache.thrift.annotation.Nullable java.lang.Object value) {
       switch (field) {
+      case EX:
+        if (value == null) {
+          unsetEx();
+        } else {
+          setEx((org.apache.zeppelin.interpreter.thrift.InterpreterRPCException)value);
+        }
+        break;
+
       }
     }
 
     @org.apache.thrift.annotation.Nullable
     public java.lang.Object getFieldValue(_Fields field) {
       switch (field) {
+      case EX:
+        return getEx();
+
       }
       throw new java.lang.IllegalStateException();
     }
@@ -7895,6 +8964,8 @@ public class RemoteInterpreterEventService {
       }
 
       switch (field) {
+      case EX:
+        return isSetEx();
       }
       throw new java.lang.IllegalStateException();
     }
@@ -7914,6 +8985,15 @@ public class RemoteInterpreterEventService {
       if (this == that)
         return true;
 
+      boolean this_present_ex = true && this.isSetEx();
+      boolean that_present_ex = true && that.isSetEx();
+      if (this_present_ex || that_present_ex) {
+        if (!(this_present_ex && that_present_ex))
+          return false;
+        if (!this.ex.equals(that.ex))
+          return false;
+      }
+
       return true;
     }
 
@@ -7921,6 +9001,10 @@ public class RemoteInterpreterEventService {
     public int hashCode() {
       int hashCode = 1;
 
+      hashCode = hashCode * 8191 + ((isSetEx()) ? 131071 : 524287);
+      if (isSetEx())
+        hashCode = hashCode * 8191 + ex.hashCode();
+
       return hashCode;
     }
 
@@ -7932,6 +9016,16 @@ public class RemoteInterpreterEventService {
 
       int lastComparison = 0;
 
+      lastComparison = java.lang.Boolean.valueOf(isSetEx()).compareTo(other.isSetEx());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetEx()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.ex, other.ex);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
       return 0;
     }
 
@@ -7953,6 +9047,13 @@ public class RemoteInterpreterEventService {
       java.lang.StringBuilder sb = new java.lang.StringBuilder("updateAppStatus_result(");
       boolean first = true;
 
+      sb.append("ex:");
+      if (this.ex == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.ex);
+      }
+      first = false;
       sb.append(")");
       return sb.toString();
     }
@@ -7996,6 +9097,15 @@ public class RemoteInterpreterEventService {
             break;
           }
           switch (schemeField.id) {
+            case 1: // EX
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+                struct.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException();
+                struct.ex.read(iprot);
+                struct.setExIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
             default:
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
           }
@@ -8011,6 +9121,11 @@ public class RemoteInterpreterEventService {
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.ex != null) {
+          oprot.writeFieldBegin(EX_FIELD_DESC);
+          struct.ex.write(oprot);
+          oprot.writeFieldEnd();
+        }
         oprot.writeFieldStop();
         oprot.writeStructEnd();
       }
@@ -8028,11 +9143,25 @@ public class RemoteInterpreterEventService {
       @Override
       public void write(org.apache.thrift.protocol.TProtocol prot, updateAppStatus_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet optionals = new java.util.BitSet();
+        if (struct.isSetEx()) {
+          optionals.set(0);
+        }
+        oprot.writeBitSet(optionals, 1);
+        if (struct.isSetEx()) {
+          struct.ex.write(oprot);
+        }
       }
 
       @Override
       public void read(org.apache.thrift.protocol.TProtocol prot, updateAppStatus_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet incoming = iprot.readBitSet(1);
+        if (incoming.get(0)) {
+          struct.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException();
+          struct.ex.read(iprot);
+          struct.setExIsSet(true);
+        }
       }
     }
 
@@ -8516,14 +9645,16 @@ public class RemoteInterpreterEventService {
   public static class checkpointOutput_result implements org.apache.thrift.TBase<checkpointOutput_result, checkpointOutput_result._Fields>, java.io.Serializable, Cloneable, Comparable<checkpointOutput_result>   {
     private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("checkpointOutput_result");
 
+    private static final org.apache.thrift.protocol.TField EX_FIELD_DESC = new org.apache.thrift.protocol.TField("ex", org.apache.thrift.protocol.TType.STRUCT, (short)1);
 
     private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new checkpointOutput_resultStandardSchemeFactory();
     private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new checkpointOutput_resultTupleSchemeFactory();
 
+    public @org.apache.thrift.annotation.Nullable org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-;
+      EX((short)1, "ex");
 
       private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
 
@@ -8539,6 +9670,8 @@ public class RemoteInterpreterEventService {
       @org.apache.thrift.annotation.Nullable
       public static _Fields findByThriftId(int fieldId) {
         switch(fieldId) {
+          case 1: // EX
+            return EX;
           default:
             return null;
         }
@@ -8578,9 +9711,13 @@ public class RemoteInterpreterEventService {
         return _fieldName;
       }
     }
+
+    // isset id assignments
     public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
     static {
       java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.EX, new org.apache.thrift.meta_data.FieldMetaData("ex", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.zeppelin.interpreter.thrift.InterpreterRPCException.class)));
       metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
       org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(checkpointOutput_result.class, metaDataMap);
     }
@@ -8588,10 +9725,20 @@ public class RemoteInterpreterEventService {
     public checkpointOutput_result() {
     }
 
+    public checkpointOutput_result(
+      org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex)
+    {
+      this();
+      this.ex = ex;
+    }
+
     /**
      * Performs a deep copy on <i>other</i>.
      */
     public checkpointOutput_result(checkpointOutput_result other) {
+      if (other.isSetEx()) {
+        this.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException(other.ex);
+      }
     }
 
     public checkpointOutput_result deepCopy() {
@@ -8600,16 +9747,53 @@ public class RemoteInterpreterEventService {
 
     @Override
     public void clear() {
+      this.ex = null;
+    }
+
+    @org.apache.thrift.annotation.Nullable
+    public org.apache.zeppelin.interpreter.thrift.InterpreterRPCException getEx() {
+      return this.ex;
+    }
+
+    public checkpointOutput_result setEx(@org.apache.thrift.annotation.Nullable org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex) {
+      this.ex = ex;
+      return this;
+    }
+
+    public void unsetEx() {
+      this.ex = null;
+    }
+
+    /** Returns true if field ex is set (has been assigned a value) and false otherwise */
+    public boolean isSetEx() {
+      return this.ex != null;
+    }
+
+    public void setExIsSet(boolean value) {
+      if (!value) {
+        this.ex = null;
+      }
     }
 
     public void setFieldValue(_Fields field, @org.apache.thrift.annotation.Nullable java.lang.Object value) {
       switch (field) {
+      case EX:
+        if (value == null) {
+          unsetEx();
+        } else {
+          setEx((org.apache.zeppelin.interpreter.thrift.InterpreterRPCException)value);
+        }
+        break;
+
       }
     }
 
     @org.apache.thrift.annotation.Nullable
     public java.lang.Object getFieldValue(_Fields field) {
       switch (field) {
+      case EX:
+        return getEx();
+
       }
       throw new java.lang.IllegalStateException();
     }
@@ -8621,6 +9805,8 @@ public class RemoteInterpreterEventService {
       }
 
       switch (field) {
+      case EX:
+        return isSetEx();
       }
       throw new java.lang.IllegalStateException();
     }
@@ -8640,6 +9826,15 @@ public class RemoteInterpreterEventService {
       if (this == that)
         return true;
 
+      boolean this_present_ex = true && this.isSetEx();
+      boolean that_present_ex = true && that.isSetEx();
+      if (this_present_ex || that_present_ex) {
+        if (!(this_present_ex && that_present_ex))
+          return false;
+        if (!this.ex.equals(that.ex))
+          return false;
+      }
+
       return true;
     }
 
@@ -8647,6 +9842,10 @@ public class RemoteInterpreterEventService {
     public int hashCode() {
       int hashCode = 1;
 
+      hashCode = hashCode * 8191 + ((isSetEx()) ? 131071 : 524287);
+      if (isSetEx())
+        hashCode = hashCode * 8191 + ex.hashCode();
+
       return hashCode;
     }
 
@@ -8658,6 +9857,16 @@ public class RemoteInterpreterEventService {
 
       int lastComparison = 0;
 
+      lastComparison = java.lang.Boolean.valueOf(isSetEx()).compareTo(other.isSetEx());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetEx()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.ex, other.ex);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
       return 0;
     }
 
@@ -8679,6 +9888,13 @@ public class RemoteInterpreterEventService {
       java.lang.StringBuilder sb = new java.lang.StringBuilder("checkpointOutput_result(");
       boolean first = true;
 
+      sb.append("ex:");
+      if (this.ex == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.ex);
+      }
+      first = false;
       sb.append(")");
       return sb.toString();
     }
@@ -8722,6 +9938,15 @@ public class RemoteInterpreterEventService {
             break;
           }
           switch (schemeField.id) {
+            case 1: // EX
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+                struct.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException();
+                struct.ex.read(iprot);
+                struct.setExIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
             default:
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
           }
@@ -8737,6 +9962,11 @@ public class RemoteInterpreterEventService {
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.ex != null) {
+          oprot.writeFieldBegin(EX_FIELD_DESC);
+          struct.ex.write(oprot);
+          oprot.writeFieldEnd();
+        }
         oprot.writeFieldStop();
         oprot.writeStructEnd();
       }
@@ -8754,11 +9984,25 @@ public class RemoteInterpreterEventService {
       @Override
       public void write(org.apache.thrift.protocol.TProtocol prot, checkpointOutput_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet optionals = new java.util.BitSet();
+        if (struct.isSetEx()) {
+          optionals.set(0);
+        }
+        oprot.writeBitSet(optionals, 1);
+        if (struct.isSetEx()) {
+          struct.ex.write(oprot);
+        }
       }
 
       @Override
       public void read(org.apache.thrift.protocol.TProtocol prot, checkpointOutput_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet incoming = iprot.readBitSet(1);
+        if (incoming.get(0)) {
+          struct.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException();
+          struct.ex.read(iprot);
+          struct.setExIsSet(true);
+        }
       }
     }
 
@@ -9142,14 +10386,16 @@ public class RemoteInterpreterEventService {
   public static class runParagraphs_result implements org.apache.thrift.TBase<runParagraphs_result, runParagraphs_result._Fields>, java.io.Serializable, Cloneable, Comparable<runParagraphs_result>   {
     private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("runParagraphs_result");
 
+    private static final org.apache.thrift.protocol.TField EX_FIELD_DESC = new org.apache.thrift.protocol.TField("ex", org.apache.thrift.protocol.TType.STRUCT, (short)1);
 
     private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new runParagraphs_resultStandardSchemeFactory();
     private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new runParagraphs_resultTupleSchemeFactory();
 
+    public @org.apache.thrift.annotation.Nullable org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-;
+      EX((short)1, "ex");
 
       private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
 
@@ -9165,6 +10411,8 @@ public class RemoteInterpreterEventService {
       @org.apache.thrift.annotation.Nullable
       public static _Fields findByThriftId(int fieldId) {
         switch(fieldId) {
+          case 1: // EX
+            return EX;
           default:
             return null;
         }
@@ -9204,9 +10452,13 @@ public class RemoteInterpreterEventService {
         return _fieldName;
       }
     }
+
+    // isset id assignments
     public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
     static {
       java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.EX, new org.apache.thrift.meta_data.FieldMetaData("ex", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.zeppelin.interpreter.thrift.InterpreterRPCException.class)));
       metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
       org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(runParagraphs_result.class, metaDataMap);
     }
@@ -9214,10 +10466,20 @@ public class RemoteInterpreterEventService {
     public runParagraphs_result() {
     }
 
+    public runParagraphs_result(
+      org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex)
+    {
+      this();
+      this.ex = ex;
+    }
+
     /**
      * Performs a deep copy on <i>other</i>.
      */
     public runParagraphs_result(runParagraphs_result other) {
+      if (other.isSetEx()) {
+        this.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException(other.ex);
+      }
     }
 
     public runParagraphs_result deepCopy() {
@@ -9226,16 +10488,53 @@ public class RemoteInterpreterEventService {
 
     @Override
     public void clear() {
+      this.ex = null;
+    }
+
+    @org.apache.thrift.annotation.Nullable
+    public org.apache.zeppelin.interpreter.thrift.InterpreterRPCException getEx() {
+      return this.ex;
+    }
+
+    public runParagraphs_result setEx(@org.apache.thrift.annotation.Nullable org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex) {
+      this.ex = ex;
+      return this;
+    }
+
+    public void unsetEx() {
+      this.ex = null;
+    }
+
+    /** Returns true if field ex is set (has been assigned a value) and false otherwise */
+    public boolean isSetEx() {
+      return this.ex != null;
+    }
+
+    public void setExIsSet(boolean value) {
+      if (!value) {
+        this.ex = null;
+      }
     }
 
     public void setFieldValue(_Fields field, @org.apache.thrift.annotation.Nullable java.lang.Object value) {
       switch (field) {
+      case EX:
+        if (value == null) {
+          unsetEx();
+        } else {
+          setEx((org.apache.zeppelin.interpreter.thrift.InterpreterRPCException)value);
+        }
+        break;
+
       }
     }
 
     @org.apache.thrift.annotation.Nullable
     public java.lang.Object getFieldValue(_Fields field) {
       switch (field) {
+      case EX:
+        return getEx();
+
       }
       throw new java.lang.IllegalStateException();
     }
@@ -9247,6 +10546,8 @@ public class RemoteInterpreterEventService {
       }
 
       switch (field) {
+      case EX:
+        return isSetEx();
       }
       throw new java.lang.IllegalStateException();
     }
@@ -9266,6 +10567,15 @@ public class RemoteInterpreterEventService {
       if (this == that)
         return true;
 
+      boolean this_present_ex = true && this.isSetEx();
+      boolean that_present_ex = true && that.isSetEx();
+      if (this_present_ex || that_present_ex) {
+        if (!(this_present_ex && that_present_ex))
+          return false;
+        if (!this.ex.equals(that.ex))
+          return false;
+      }
+
       return true;
     }
 
@@ -9273,6 +10583,10 @@ public class RemoteInterpreterEventService {
     public int hashCode() {
       int hashCode = 1;
 
+      hashCode = hashCode * 8191 + ((isSetEx()) ? 131071 : 524287);
+      if (isSetEx())
+        hashCode = hashCode * 8191 + ex.hashCode();
+
       return hashCode;
     }
 
@@ -9284,6 +10598,16 @@ public class RemoteInterpreterEventService {
 
       int lastComparison = 0;
 
+      lastComparison = java.lang.Boolean.valueOf(isSetEx()).compareTo(other.isSetEx());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetEx()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.ex, other.ex);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
       return 0;
     }
 
@@ -9305,6 +10629,13 @@ public class RemoteInterpreterEventService {
       java.lang.StringBuilder sb = new java.lang.StringBuilder("runParagraphs_result(");
       boolean first = true;
 
+      sb.append("ex:");
+      if (this.ex == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.ex);
+      }
+      first = false;
       sb.append(")");
       return sb.toString();
     }
@@ -9348,6 +10679,15 @@ public class RemoteInterpreterEventService {
             break;
           }
           switch (schemeField.id) {
+            case 1: // EX
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+                struct.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException();
+                struct.ex.read(iprot);
+                struct.setExIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
             default:
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
           }
@@ -9363,6 +10703,11 @@ public class RemoteInterpreterEventService {
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.ex != null) {
+          oprot.writeFieldBegin(EX_FIELD_DESC);
+          struct.ex.write(oprot);
+          oprot.writeFieldEnd();
+        }
         oprot.writeFieldStop();
         oprot.writeStructEnd();
       }
@@ -9380,11 +10725,25 @@ public class RemoteInterpreterEventService {
       @Override
       public void write(org.apache.thrift.protocol.TProtocol prot, runParagraphs_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet optionals = new java.util.BitSet();
+        if (struct.isSetEx()) {
+          optionals.set(0);
+        }
+        oprot.writeBitSet(optionals, 1);
+        if (struct.isSetEx()) {
+          struct.ex.write(oprot);
+        }
       }
 
       @Override
       public void read(org.apache.thrift.protocol.TProtocol prot, runParagraphs_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet incoming = iprot.readBitSet(1);
+        if (incoming.get(0)) {
+          struct.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException();
+          struct.ex.read(iprot);
+          struct.setExIsSet(true);
+        }
       }
     }
 
@@ -9868,14 +11227,16 @@ public class RemoteInterpreterEventService {
   public static class addAngularObject_result implements org.apache.thrift.TBase<addAngularObject_result, addAngularObject_result._Fields>, java.io.Serializable, Cloneable, Comparable<addAngularObject_result>   {
     private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("addAngularObject_result");
 
+    private static final org.apache.thrift.protocol.TField EX_FIELD_DESC = new org.apache.thrift.protocol.TField("ex", org.apache.thrift.protocol.TType.STRUCT, (short)1);
 
     private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new addAngularObject_resultStandardSchemeFactory();
     private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new addAngularObject_resultTupleSchemeFactory();
 
+    public @org.apache.thrift.annotation.Nullable org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-;
+      EX((short)1, "ex");
 
       private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
 
@@ -9891,6 +11252,8 @@ public class RemoteInterpreterEventService {
       @org.apache.thrift.annotation.Nullable
       public static _Fields findByThriftId(int fieldId) {
         switch(fieldId) {
+          case 1: // EX
+            return EX;
           default:
             return null;
         }
@@ -9930,9 +11293,13 @@ public class RemoteInterpreterEventService {
         return _fieldName;
       }
     }
+
+    // isset id assignments
     public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
     static {
       java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.EX, new org.apache.thrift.meta_data.FieldMetaData("ex", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.zeppelin.interpreter.thrift.InterpreterRPCException.class)));
       metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
       org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(addAngularObject_result.class, metaDataMap);
     }
@@ -9940,10 +11307,20 @@ public class RemoteInterpreterEventService {
     public addAngularObject_result() {
     }
 
+    public addAngularObject_result(
+      org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex)
+    {
+      this();
+      this.ex = ex;
+    }
+
     /**
      * Performs a deep copy on <i>other</i>.
      */
     public addAngularObject_result(addAngularObject_result other) {
+      if (other.isSetEx()) {
+        this.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException(other.ex);
+      }
     }
 
     public addAngularObject_result deepCopy() {
@@ -9952,16 +11329,53 @@ public class RemoteInterpreterEventService {
 
     @Override
     public void clear() {
+      this.ex = null;
+    }
+
+    @org.apache.thrift.annotation.Nullable
+    public org.apache.zeppelin.interpreter.thrift.InterpreterRPCException getEx() {
+      return this.ex;
+    }
+
+    public addAngularObject_result setEx(@org.apache.thrift.annotation.Nullable org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex) {
+      this.ex = ex;
+      return this;
+    }
+
+    public void unsetEx() {
+      this.ex = null;
+    }
+
+    /** Returns true if field ex is set (has been assigned a value) and false otherwise */
+    public boolean isSetEx() {
+      return this.ex != null;
+    }
+
+    public void setExIsSet(boolean value) {
+      if (!value) {
+        this.ex = null;
+      }
     }
 
     public void setFieldValue(_Fields field, @org.apache.thrift.annotation.Nullable java.lang.Object value) {
       switch (field) {
+      case EX:
+        if (value == null) {
+          unsetEx();
+        } else {
+          setEx((org.apache.zeppelin.interpreter.thrift.InterpreterRPCException)value);
+        }
+        break;
+
       }
     }
 
     @org.apache.thrift.annotation.Nullable
     public java.lang.Object getFieldValue(_Fields field) {
       switch (field) {
+      case EX:
+        return getEx();
+
       }
       throw new java.lang.IllegalStateException();
     }
@@ -9973,6 +11387,8 @@ public class RemoteInterpreterEventService {
       }
 
       switch (field) {
+      case EX:
+        return isSetEx();
       }
       throw new java.lang.IllegalStateException();
     }
@@ -9992,6 +11408,15 @@ public class RemoteInterpreterEventService {
       if (this == that)
         return true;
 
+      boolean this_present_ex = true && this.isSetEx();
+      boolean that_present_ex = true && that.isSetEx();
+      if (this_present_ex || that_present_ex) {
+        if (!(this_present_ex && that_present_ex))
+          return false;
+        if (!this.ex.equals(that.ex))
+          return false;
+      }
+
       return true;
     }
 
@@ -9999,6 +11424,10 @@ public class RemoteInterpreterEventService {
     public int hashCode() {
       int hashCode = 1;
 
+      hashCode = hashCode * 8191 + ((isSetEx()) ? 131071 : 524287);
+      if (isSetEx())
+        hashCode = hashCode * 8191 + ex.hashCode();
+
       return hashCode;
     }
 
@@ -10010,6 +11439,16 @@ public class RemoteInterpreterEventService {
 
       int lastComparison = 0;
 
+      lastComparison = java.lang.Boolean.valueOf(isSetEx()).compareTo(other.isSetEx());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetEx()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.ex, other.ex);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
       return 0;
     }
 
@@ -10031,6 +11470,13 @@ public class RemoteInterpreterEventService {
       java.lang.StringBuilder sb = new java.lang.StringBuilder("addAngularObject_result(");
       boolean first = true;
 
+      sb.append("ex:");
+      if (this.ex == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.ex);
+      }
+      first = false;
       sb.append(")");
       return sb.toString();
     }
@@ -10074,6 +11520,15 @@ public class RemoteInterpreterEventService {
             break;
           }
           switch (schemeField.id) {
+            case 1: // EX
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+                struct.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException();
+                struct.ex.read(iprot);
+                struct.setExIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
             default:
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
           }
@@ -10089,6 +11544,11 @@ public class RemoteInterpreterEventService {
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.ex != null) {
+          oprot.writeFieldBegin(EX_FIELD_DESC);
+          struct.ex.write(oprot);
+          oprot.writeFieldEnd();
+        }
         oprot.writeFieldStop();
         oprot.writeStructEnd();
       }
@@ -10106,11 +11566,25 @@ public class RemoteInterpreterEventService {
       @Override
       public void write(org.apache.thrift.protocol.TProtocol prot, addAngularObject_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet optionals = new java.util.BitSet();
+        if (struct.isSetEx()) {
+          optionals.set(0);
+        }
+        oprot.writeBitSet(optionals, 1);
+        if (struct.isSetEx()) {
+          struct.ex.write(oprot);
+        }
       }
 
       @Override
       public void read(org.apache.thrift.protocol.TProtocol prot, addAngularObject_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet incoming = iprot.readBitSet(1);
+        if (incoming.get(0)) {
+          struct.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException();
+          struct.ex.read(iprot);
+          struct.setExIsSet(true);
+        }
       }
     }
 
@@ -10594,14 +12068,16 @@ public class RemoteInterpreterEventService {
   public static class updateAngularObject_result implements org.apache.thrift.TBase<updateAngularObject_result, updateAngularObject_result._Fields>, java.io.Serializable, Cloneable, Comparable<updateAngularObject_result>   {
     private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("updateAngularObject_result");
 
+    private static final org.apache.thrift.protocol.TField EX_FIELD_DESC = new org.apache.thrift.protocol.TField("ex", org.apache.thrift.protocol.TType.STRUCT, (short)1);
 
     private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new updateAngularObject_resultStandardSchemeFactory();
     private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new updateAngularObject_resultTupleSchemeFactory();
 
+    public @org.apache.thrift.annotation.Nullable org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-;
+      EX((short)1, "ex");
 
       private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
 
@@ -10617,6 +12093,8 @@ public class RemoteInterpreterEventService {
       @org.apache.thrift.annotation.Nullable
       public static _Fields findByThriftId(int fieldId) {
         switch(fieldId) {
+          case 1: // EX
+            return EX;
           default:
             return null;
         }
@@ -10656,9 +12134,13 @@ public class RemoteInterpreterEventService {
         return _fieldName;
       }
     }
+
+    // isset id assignments
     public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
     static {
       java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.EX, new org.apache.thrift.meta_data.FieldMetaData("ex", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.zeppelin.interpreter.thrift.InterpreterRPCException.class)));
       metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
       org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(updateAngularObject_result.class, metaDataMap);
     }
@@ -10666,10 +12148,20 @@ public class RemoteInterpreterEventService {
     public updateAngularObject_result() {
     }
 
+    public updateAngularObject_result(
+      org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex)
+    {
+      this();
+      this.ex = ex;
+    }
+
     /**
      * Performs a deep copy on <i>other</i>.
      */
     public updateAngularObject_result(updateAngularObject_result other) {
+      if (other.isSetEx()) {
+        this.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException(other.ex);
+      }
     }
 
     public updateAngularObject_result deepCopy() {
@@ -10678,16 +12170,53 @@ public class RemoteInterpreterEventService {
 
     @Override
     public void clear() {
+      this.ex = null;
+    }
+
+    @org.apache.thrift.annotation.Nullable
+    public org.apache.zeppelin.interpreter.thrift.InterpreterRPCException getEx() {
+      return this.ex;
+    }
+
+    public updateAngularObject_result setEx(@org.apache.thrift.annotation.Nullable org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex) {
+      this.ex = ex;
+      return this;
+    }
+
+    public void unsetEx() {
+      this.ex = null;
+    }
+
+    /** Returns true if field ex is set (has been assigned a value) and false otherwise */
+    public boolean isSetEx() {
+      return this.ex != null;
+    }
+
+    public void setExIsSet(boolean value) {
+      if (!value) {
+        this.ex = null;
+      }
     }
 
     public void setFieldValue(_Fields field, @org.apache.thrift.annotation.Nullable java.lang.Object value) {
       switch (field) {
+      case EX:
+        if (value == null) {
+          unsetEx();
+        } else {
+          setEx((org.apache.zeppelin.interpreter.thrift.InterpreterRPCException)value);
+        }
+        break;
+
       }
     }
 
     @org.apache.thrift.annotation.Nullable
     public java.lang.Object getFieldValue(_Fields field) {
       switch (field) {
+      case EX:
+        return getEx();
+
       }
       throw new java.lang.IllegalStateException();
     }
@@ -10699,6 +12228,8 @@ public class RemoteInterpreterEventService {
       }
 
       switch (field) {
+      case EX:
+        return isSetEx();
       }
       throw new java.lang.IllegalStateException();
     }
@@ -10718,6 +12249,15 @@ public class RemoteInterpreterEventService {
       if (this == that)
         return true;
 
+      boolean this_present_ex = true && this.isSetEx();
+      boolean that_present_ex = true && that.isSetEx();
+      if (this_present_ex || that_present_ex) {
+        if (!(this_present_ex && that_present_ex))
+          return false;
+        if (!this.ex.equals(that.ex))
+          return false;
+      }
+
       return true;
     }
 
@@ -10725,6 +12265,10 @@ public class RemoteInterpreterEventService {
     public int hashCode() {
       int hashCode = 1;
 
+      hashCode = hashCode * 8191 + ((isSetEx()) ? 131071 : 524287);
+      if (isSetEx())
+        hashCode = hashCode * 8191 + ex.hashCode();
+
       return hashCode;
     }
 
@@ -10736,6 +12280,16 @@ public class RemoteInterpreterEventService {
 
       int lastComparison = 0;
 
+      lastComparison = java.lang.Boolean.valueOf(isSetEx()).compareTo(other.isSetEx());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetEx()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.ex, other.ex);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
       return 0;
     }
 
@@ -10757,6 +12311,13 @@ public class RemoteInterpreterEventService {
       java.lang.StringBuilder sb = new java.lang.StringBuilder("updateAngularObject_result(");
       boolean first = true;
 
+      sb.append("ex:");
+      if (this.ex == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.ex);
+      }
+      first = false;
       sb.append(")");
       return sb.toString();
     }
@@ -10800,6 +12361,15 @@ public class RemoteInterpreterEventService {
             break;
           }
           switch (schemeField.id) {
+            case 1: // EX
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+                struct.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException();
+                struct.ex.read(iprot);
+                struct.setExIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
             default:
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
           }
@@ -10815,6 +12385,11 @@ public class RemoteInterpreterEventService {
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.ex != null) {
+          oprot.writeFieldBegin(EX_FIELD_DESC);
+          struct.ex.write(oprot);
+          oprot.writeFieldEnd();
+        }
         oprot.writeFieldStop();
         oprot.writeStructEnd();
       }
@@ -10832,11 +12407,25 @@ public class RemoteInterpreterEventService {
       @Override
       public void write(org.apache.thrift.protocol.TProtocol prot, updateAngularObject_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet optionals = new java.util.BitSet();
+        if (struct.isSetEx()) {
+          optionals.set(0);
+        }
+        oprot.writeBitSet(optionals, 1);
+        if (struct.isSetEx()) {
+          struct.ex.write(oprot);
+        }
       }
 
       @Override
       public void read(org.apache.thrift.protocol.TProtocol prot, updateAngularObject_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet incoming = iprot.readBitSet(1);
+        if (incoming.get(0)) {
+          struct.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException();
+          struct.ex.read(iprot);
+          struct.setExIsSet(true);
+        }
       }
     }
 
@@ -11530,14 +13119,16 @@ public class RemoteInterpreterEventService {
   public static class removeAngularObject_result implements org.apache.thrift.TBase<removeAngularObject_result, removeAngularObject_result._Fields>, java.io.Serializable, Cloneable, Comparable<removeAngularObject_result>   {
     private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("removeAngularObject_result");
 
+    private static final org.apache.thrift.protocol.TField EX_FIELD_DESC = new org.apache.thrift.protocol.TField("ex", org.apache.thrift.protocol.TType.STRUCT, (short)1);
 
     private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new removeAngularObject_resultStandardSchemeFactory();
     private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new removeAngularObject_resultTupleSchemeFactory();
 
+    public @org.apache.thrift.annotation.Nullable org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-;
+      EX((short)1, "ex");
 
       private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
 
@@ -11553,6 +13144,8 @@ public class RemoteInterpreterEventService {
       @org.apache.thrift.annotation.Nullable
       public static _Fields findByThriftId(int fieldId) {
         switch(fieldId) {
+          case 1: // EX
+            return EX;
           default:
             return null;
         }
@@ -11592,9 +13185,13 @@ public class RemoteInterpreterEventService {
         return _fieldName;
       }
     }
+
+    // isset id assignments
     public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
     static {
       java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.EX, new org.apache.thrift.meta_data.FieldMetaData("ex", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.zeppelin.interpreter.thrift.InterpreterRPCException.class)));
       metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
       org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(removeAngularObject_result.class, metaDataMap);
     }
@@ -11602,10 +13199,20 @@ public class RemoteInterpreterEventService {
     public removeAngularObject_result() {
     }
 
+    public removeAngularObject_result(
+      org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex)
+    {
+      this();
+      this.ex = ex;
+    }
+
     /**
      * Performs a deep copy on <i>other</i>.
      */
     public removeAngularObject_result(removeAngularObject_result other) {
+      if (other.isSetEx()) {
+        this.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException(other.ex);
+      }
     }
 
     public removeAngularObject_result deepCopy() {
@@ -11614,16 +13221,53 @@ public class RemoteInterpreterEventService {
 
     @Override
     public void clear() {
+      this.ex = null;
+    }
+
+    @org.apache.thrift.annotation.Nullable
+    public org.apache.zeppelin.interpreter.thrift.InterpreterRPCException getEx() {
+      return this.ex;
+    }
+
+    public removeAngularObject_result setEx(@org.apache.thrift.annotation.Nullable org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex) {
+      this.ex = ex;
+      return this;
+    }
+
+    public void unsetEx() {
+      this.ex = null;
+    }
+
+    /** Returns true if field ex is set (has been assigned a value) and false otherwise */
+    public boolean isSetEx() {
+      return this.ex != null;
+    }
+
+    public void setExIsSet(boolean value) {
+      if (!value) {
+        this.ex = null;
+      }
     }
 
     public void setFieldValue(_Fields field, @org.apache.thrift.annotation.Nullable java.lang.Object value) {
       switch (field) {
+      case EX:
+        if (value == null) {
+          unsetEx();
+        } else {
+          setEx((org.apache.zeppelin.interpreter.thrift.InterpreterRPCException)value);
+        }
+        break;
+
       }
     }
 
     @org.apache.thrift.annotation.Nullable
     public java.lang.Object getFieldValue(_Fields field) {
       switch (field) {
+      case EX:
+        return getEx();
+
       }
       throw new java.lang.IllegalStateException();
     }
@@ -11635,6 +13279,8 @@ public class RemoteInterpreterEventService {
       }
 
       switch (field) {
+      case EX:
+        return isSetEx();
       }
       throw new java.lang.IllegalStateException();
     }
@@ -11654,6 +13300,15 @@ public class RemoteInterpreterEventService {
       if (this == that)
         return true;
 
+      boolean this_present_ex = true && this.isSetEx();
+      boolean that_present_ex = true && that.isSetEx();
+      if (this_present_ex || that_present_ex) {
+        if (!(this_present_ex && that_present_ex))
+          return false;
+        if (!this.ex.equals(that.ex))
+          return false;
+      }
+
       return true;
     }
 
@@ -11661,6 +13316,10 @@ public class RemoteInterpreterEventService {
     public int hashCode() {
       int hashCode = 1;
 
+      hashCode = hashCode * 8191 + ((isSetEx()) ? 131071 : 524287);
+      if (isSetEx())
+        hashCode = hashCode * 8191 + ex.hashCode();
+
       return hashCode;
     }
 
@@ -11672,6 +13331,16 @@ public class RemoteInterpreterEventService {
 
       int lastComparison = 0;
 
+      lastComparison = java.lang.Boolean.valueOf(isSetEx()).compareTo(other.isSetEx());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetEx()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.ex, other.ex);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
       return 0;
     }
 
@@ -11693,6 +13362,13 @@ public class RemoteInterpreterEventService {
       java.lang.StringBuilder sb = new java.lang.StringBuilder("removeAngularObject_result(");
       boolean first = true;
 
+      sb.append("ex:");
+      if (this.ex == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.ex);
+      }
+      first = false;
       sb.append(")");
       return sb.toString();
     }
@@ -11736,6 +13412,15 @@ public class RemoteInterpreterEventService {
             break;
           }
           switch (schemeField.id) {
+            case 1: // EX
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+                struct.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException();
+                struct.ex.read(iprot);
+                struct.setExIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
             default:
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
           }
@@ -11751,6 +13436,11 @@ public class RemoteInterpreterEventService {
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.ex != null) {
+          oprot.writeFieldBegin(EX_FIELD_DESC);
+          struct.ex.write(oprot);
+          oprot.writeFieldEnd();
+        }
         oprot.writeFieldStop();
         oprot.writeStructEnd();
       }
@@ -11768,11 +13458,25 @@ public class RemoteInterpreterEventService {
       @Override
       public void write(org.apache.thrift.protocol.TProtocol prot, removeAngularObject_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet optionals = new java.util.BitSet();
+        if (struct.isSetEx()) {
+          optionals.set(0);
+        }
+        oprot.writeBitSet(optionals, 1);
+        if (struct.isSetEx()) {
+          struct.ex.write(oprot);
+        }
       }
 
       @Override
       public void read(org.apache.thrift.protocol.TProtocol prot, removeAngularObject_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet incoming = iprot.readBitSet(1);
+        if (incoming.get(0)) {
+          struct.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException();
+          struct.ex.read(iprot);
+          struct.setExIsSet(true);
+        }
       }
     }
 
@@ -12156,14 +13860,16 @@ public class RemoteInterpreterEventService {
   public static class sendWebUrl_result implements org.apache.thrift.TBase<sendWebUrl_result, sendWebUrl_result._Fields>, java.io.Serializable, Cloneable, Comparable<sendWebUrl_result>   {
     private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("sendWebUrl_result");
 
+    private static final org.apache.thrift.protocol.TField EX_FIELD_DESC = new org.apache.thrift.protocol.TField("ex", org.apache.thrift.protocol.TType.STRUCT, (short)1);
 
     private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new sendWebUrl_resultStandardSchemeFactory();
     private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new sendWebUrl_resultTupleSchemeFactory();
 
+    public @org.apache.thrift.annotation.Nullable org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-;
+      EX((short)1, "ex");
 
       private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
 
@@ -12179,6 +13885,8 @@ public class RemoteInterpreterEventService {
       @org.apache.thrift.annotation.Nullable
       public static _Fields findByThriftId(int fieldId) {
         switch(fieldId) {
+          case 1: // EX
+            return EX;
           default:
             return null;
         }
@@ -12218,9 +13926,13 @@ public class RemoteInterpreterEventService {
         return _fieldName;
       }
     }
+
+    // isset id assignments
     public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
     static {
       java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.EX, new org.apache.thrift.meta_data.FieldMetaData("ex", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.zeppelin.interpreter.thrift.InterpreterRPCException.class)));
       metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
       org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(sendWebUrl_result.class, metaDataMap);
     }
@@ -12228,10 +13940,20 @@ public class RemoteInterpreterEventService {
     public sendWebUrl_result() {
     }
 
+    public sendWebUrl_result(
+      org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex)
+    {
+      this();
+      this.ex = ex;
+    }
+
     /**
      * Performs a deep copy on <i>other</i>.
      */
     public sendWebUrl_result(sendWebUrl_result other) {
+      if (other.isSetEx()) {
+        this.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException(other.ex);
+      }
     }
 
     public sendWebUrl_result deepCopy() {
@@ -12240,16 +13962,53 @@ public class RemoteInterpreterEventService {
 
     @Override
     public void clear() {
+      this.ex = null;
+    }
+
+    @org.apache.thrift.annotation.Nullable
+    public org.apache.zeppelin.interpreter.thrift.InterpreterRPCException getEx() {
+      return this.ex;
+    }
+
+    public sendWebUrl_result setEx(@org.apache.thrift.annotation.Nullable org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex) {
+      this.ex = ex;
+      return this;
+    }
+
+    public void unsetEx() {
+      this.ex = null;
+    }
+
+    /** Returns true if field ex is set (has been assigned a value) and false otherwise */
+    public boolean isSetEx() {
+      return this.ex != null;
+    }
+
+    public void setExIsSet(boolean value) {
+      if (!value) {
+        this.ex = null;
+      }
     }
 
     public void setFieldValue(_Fields field, @org.apache.thrift.annotation.Nullable java.lang.Object value) {
       switch (field) {
+      case EX:
+        if (value == null) {
+          unsetEx();
+        } else {
+          setEx((org.apache.zeppelin.interpreter.thrift.InterpreterRPCException)value);
+        }
+        break;
+
       }
     }
 
     @org.apache.thrift.annotation.Nullable
     public java.lang.Object getFieldValue(_Fields field) {
       switch (field) {
+      case EX:
+        return getEx();
+
       }
       throw new java.lang.IllegalStateException();
     }
@@ -12261,6 +14020,8 @@ public class RemoteInterpreterEventService {
       }
 
       switch (field) {
+      case EX:
+        return isSetEx();
       }
       throw new java.lang.IllegalStateException();
     }
@@ -12280,6 +14041,15 @@ public class RemoteInterpreterEventService {
       if (this == that)
         return true;
 
+      boolean this_present_ex = true && this.isSetEx();
+      boolean that_present_ex = true && that.isSetEx();
+      if (this_present_ex || that_present_ex) {
+        if (!(this_present_ex && that_present_ex))
+          return false;
+        if (!this.ex.equals(that.ex))
+          return false;
+      }
+
       return true;
     }
 
@@ -12287,6 +14057,10 @@ public class RemoteInterpreterEventService {
     public int hashCode() {
       int hashCode = 1;
 
+      hashCode = hashCode * 8191 + ((isSetEx()) ? 131071 : 524287);
+      if (isSetEx())
+        hashCode = hashCode * 8191 + ex.hashCode();
+
       return hashCode;
     }
 
@@ -12298,6 +14072,16 @@ public class RemoteInterpreterEventService {
 
       int lastComparison = 0;
 
+      lastComparison = java.lang.Boolean.valueOf(isSetEx()).compareTo(other.isSetEx());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetEx()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.ex, other.ex);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
       return 0;
     }
 
@@ -12319,6 +14103,13 @@ public class RemoteInterpreterEventService {
       java.lang.StringBuilder sb = new java.lang.StringBuilder("sendWebUrl_result(");
       boolean first = true;
 
+      sb.append("ex:");
+      if (this.ex == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.ex);
+      }
+      first = false;
       sb.append(")");
       return sb.toString();
     }
@@ -12362,6 +14153,15 @@ public class RemoteInterpreterEventService {
             break;
           }
           switch (schemeField.id) {
+            case 1: // EX
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+                struct.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException();
+                struct.ex.read(iprot);
+                struct.setExIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
             default:
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
           }
@@ -12377,6 +14177,11 @@ public class RemoteInterpreterEventService {
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.ex != null) {
+          oprot.writeFieldBegin(EX_FIELD_DESC);
+          struct.ex.write(oprot);
+          oprot.writeFieldEnd();
+        }
         oprot.writeFieldStop();
         oprot.writeStructEnd();
       }
@@ -12394,11 +14199,25 @@ public class RemoteInterpreterEventService {
       @Override
       public void write(org.apache.thrift.protocol.TProtocol prot, sendWebUrl_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet optionals = new java.util.BitSet();
+        if (struct.isSetEx()) {
+          optionals.set(0);
+        }
+        oprot.writeBitSet(optionals, 1);
+        if (struct.isSetEx()) {
+          struct.ex.write(oprot);
+        }
       }
 
       @Override
       public void read(org.apache.thrift.protocol.TProtocol prot, sendWebUrl_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet incoming = iprot.readBitSet(1);
+        if (incoming.get(0)) {
+          struct.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException();
+          struct.ex.read(iprot);
+          struct.setExIsSet(true);
+        }
       }
     }
 
@@ -12882,14 +14701,16 @@ public class RemoteInterpreterEventService {
   public static class sendParagraphInfo_result implements org.apache.thrift.TBase<sendParagraphInfo_result, sendParagraphInfo_result._Fields>, java.io.Serializable, Cloneable, Comparable<sendParagraphInfo_result>   {
     private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("sendParagraphInfo_result");
 
+    private static final org.apache.thrift.protocol.TField EX_FIELD_DESC = new org.apache.thrift.protocol.TField("ex", org.apache.thrift.protocol.TType.STRUCT, (short)1);
 
     private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new sendParagraphInfo_resultStandardSchemeFactory();
     private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new sendParagraphInfo_resultTupleSchemeFactory();
 
+    public @org.apache.thrift.annotation.Nullable org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-;
+      EX((short)1, "ex");
 
       private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
 
@@ -12905,6 +14726,8 @@ public class RemoteInterpreterEventService {
       @org.apache.thrift.annotation.Nullable
       public static _Fields findByThriftId(int fieldId) {
         switch(fieldId) {
+          case 1: // EX
+            return EX;
           default:
             return null;
         }
@@ -12944,9 +14767,13 @@ public class RemoteInterpreterEventService {
         return _fieldName;
       }
     }
+
+    // isset id assignments
     public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
     static {
       java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.EX, new org.apache.thrift.meta_data.FieldMetaData("ex", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.zeppelin.interpreter.thrift.InterpreterRPCException.class)));
       metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
       org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(sendParagraphInfo_result.class, metaDataMap);
     }
@@ -12954,10 +14781,20 @@ public class RemoteInterpreterEventService {
     public sendParagraphInfo_result() {
     }
 
+    public sendParagraphInfo_result(
+      org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex)
+    {
+      this();
+      this.ex = ex;
+    }
+
     /**
      * Performs a deep copy on <i>other</i>.
      */
     public sendParagraphInfo_result(sendParagraphInfo_result other) {
+      if (other.isSetEx()) {
+        this.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException(other.ex);
+      }
     }
 
     public sendParagraphInfo_result deepCopy() {
@@ -12966,16 +14803,53 @@ public class RemoteInterpreterEventService {
 
     @Override
     public void clear() {
+      this.ex = null;
+    }
+
+    @org.apache.thrift.annotation.Nullable
+    public org.apache.zeppelin.interpreter.thrift.InterpreterRPCException getEx() {
+      return this.ex;
+    }
+
+    public sendParagraphInfo_result setEx(@org.apache.thrift.annotation.Nullable org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex) {
+      this.ex = ex;
+      return this;
+    }
+
+    public void unsetEx() {
+      this.ex = null;
+    }
+
+    /** Returns true if field ex is set (has been assigned a value) and false otherwise */
+    public boolean isSetEx() {
+      return this.ex != null;
+    }
+
+    public void setExIsSet(boolean value) {
+      if (!value) {
+        this.ex = null;
+      }
     }
 
     public void setFieldValue(_Fields field, @org.apache.thrift.annotation.Nullable java.lang.Object value) {
       switch (field) {
+      case EX:
+        if (value == null) {
+          unsetEx();
+        } else {
+          setEx((org.apache.zeppelin.interpreter.thrift.InterpreterRPCException)value);
+        }
+        break;
+
       }
     }
 
     @org.apache.thrift.annotation.Nullable
     public java.lang.Object getFieldValue(_Fields field) {
       switch (field) {
+      case EX:
+        return getEx();
+
       }
       throw new java.lang.IllegalStateException();
     }
@@ -12987,6 +14861,8 @@ public class RemoteInterpreterEventService {
       }
 
       switch (field) {
+      case EX:
+        return isSetEx();
       }
       throw new java.lang.IllegalStateException();
     }
@@ -13006,6 +14882,15 @@ public class RemoteInterpreterEventService {
       if (this == that)
         return true;
 
+      boolean this_present_ex = true && this.isSetEx();
+      boolean that_present_ex = true && that.isSetEx();
+      if (this_present_ex || that_present_ex) {
+        if (!(this_present_ex && that_present_ex))
+          return false;
+        if (!this.ex.equals(that.ex))
+          return false;
+      }
+
       return true;
     }
 
@@ -13013,6 +14898,10 @@ public class RemoteInterpreterEventService {
     public int hashCode() {
       int hashCode = 1;
 
+      hashCode = hashCode * 8191 + ((isSetEx()) ? 131071 : 524287);
+      if (isSetEx())
+        hashCode = hashCode * 8191 + ex.hashCode();
+
       return hashCode;
     }
 
@@ -13024,6 +14913,16 @@ public class RemoteInterpreterEventService {
 
       int lastComparison = 0;
 
+      lastComparison = java.lang.Boolean.valueOf(isSetEx()).compareTo(other.isSetEx());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetEx()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.ex, other.ex);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
       return 0;
     }
 
@@ -13045,6 +14944,13 @@ public class RemoteInterpreterEventService {
       java.lang.StringBuilder sb = new java.lang.StringBuilder("sendParagraphInfo_result(");
       boolean first = true;
 
+      sb.append("ex:");
+      if (this.ex == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.ex);
+      }
+      first = false;
       sb.append(")");
       return sb.toString();
     }
@@ -13088,6 +14994,15 @@ public class RemoteInterpreterEventService {
             break;
           }
           switch (schemeField.id) {
+            case 1: // EX
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+                struct.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException();
+                struct.ex.read(iprot);
+                struct.setExIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
             default:
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
           }
@@ -13103,6 +15018,11 @@ public class RemoteInterpreterEventService {
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.ex != null) {
+          oprot.writeFieldBegin(EX_FIELD_DESC);
+          struct.ex.write(oprot);
+          oprot.writeFieldEnd();
+        }
         oprot.writeFieldStop();
         oprot.writeStructEnd();
       }
@@ -13120,11 +15040,25 @@ public class RemoteInterpreterEventService {
       @Override
       public void write(org.apache.thrift.protocol.TProtocol prot, sendParagraphInfo_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet optionals = new java.util.BitSet();
+        if (struct.isSetEx()) {
+          optionals.set(0);
+        }
+        oprot.writeBitSet(optionals, 1);
+        if (struct.isSetEx()) {
+          struct.ex.write(oprot);
+        }
       }
 
       @Override
       public void read(org.apache.thrift.protocol.TProtocol prot, sendParagraphInfo_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet incoming = iprot.readBitSet(1);
+        if (incoming.get(0)) {
+          struct.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException();
+          struct.ex.read(iprot);
+          struct.setExIsSet(true);
+        }
       }
     }
 
@@ -13765,14 +15699,16 @@ public class RemoteInterpreterEventService {
   public static class updateParagraphConfig_result implements org.apache.thrift.TBase<updateParagraphConfig_result, updateParagraphConfig_result._Fields>, java.io.Serializable, Cloneable, Comparable<updateParagraphConfig_result>   {
     private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("updateParagraphConfig_result");
 
+    private static final org.apache.thrift.protocol.TField EX_FIELD_DESC = new org.apache.thrift.protocol.TField("ex", org.apache.thrift.protocol.TType.STRUCT, (short)1);
 
     private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new updateParagraphConfig_resultStandardSchemeFactory();
     private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new updateParagraphConfig_resultTupleSchemeFactory();
 
+    public @org.apache.thrift.annotation.Nullable org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-;
+      EX((short)1, "ex");
 
       private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
 
@@ -13788,6 +15724,8 @@ public class RemoteInterpreterEventService {
       @org.apache.thrift.annotation.Nullable
       public static _Fields findByThriftId(int fieldId) {
         switch(fieldId) {
+          case 1: // EX
+            return EX;
           default:
             return null;
         }
@@ -13827,9 +15765,13 @@ public class RemoteInterpreterEventService {
         return _fieldName;
       }
     }
+
+    // isset id assignments
     public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
     static {
       java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.EX, new org.apache.thrift.meta_data.FieldMetaData("ex", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.zeppelin.interpreter.thrift.InterpreterRPCException.class)));
       metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
       org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(updateParagraphConfig_result.class, metaDataMap);
     }
@@ -13837,10 +15779,20 @@ public class RemoteInterpreterEventService {
     public updateParagraphConfig_result() {
     }
 
+    public updateParagraphConfig_result(
+      org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex)
+    {
+      this();
+      this.ex = ex;
+    }
+
     /**
      * Performs a deep copy on <i>other</i>.
      */
     public updateParagraphConfig_result(updateParagraphConfig_result other) {
+      if (other.isSetEx()) {
+        this.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException(other.ex);
+      }
     }
 
     public updateParagraphConfig_result deepCopy() {
@@ -13849,16 +15801,53 @@ public class RemoteInterpreterEventService {
 
     @Override
     public void clear() {
+      this.ex = null;
+    }
+
+    @org.apache.thrift.annotation.Nullable
+    public org.apache.zeppelin.interpreter.thrift.InterpreterRPCException getEx() {
+      return this.ex;
+    }
+
+    public updateParagraphConfig_result setEx(@org.apache.thrift.annotation.Nullable org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex) {
+      this.ex = ex;
+      return this;
+    }
+
+    public void unsetEx() {
+      this.ex = null;
+    }
+
+    /** Returns true if field ex is set (has been assigned a value) and false otherwise */
+    public boolean isSetEx() {
+      return this.ex != null;
+    }
+
+    public void setExIsSet(boolean value) {
+      if (!value) {
+        this.ex = null;
+      }
     }
 
     public void setFieldValue(_Fields field, @org.apache.thrift.annotation.Nullable java.lang.Object value) {
       switch (field) {
+      case EX:
+        if (value == null) {
+          unsetEx();
+        } else {
+          setEx((org.apache.zeppelin.interpreter.thrift.InterpreterRPCException)value);
+        }
+        break;
+
       }
     }
 
     @org.apache.thrift.annotation.Nullable
     public java.lang.Object getFieldValue(_Fields field) {
       switch (field) {
+      case EX:
+        return getEx();
+
       }
       throw new java.lang.IllegalStateException();
     }
@@ -13870,6 +15859,8 @@ public class RemoteInterpreterEventService {
       }
 
       switch (field) {
+      case EX:
+        return isSetEx();
       }
       throw new java.lang.IllegalStateException();
     }
@@ -13889,6 +15880,15 @@ public class RemoteInterpreterEventService {
       if (this == that)
         return true;
 
+      boolean this_present_ex = true && this.isSetEx();
+      boolean that_present_ex = true && that.isSetEx();
+      if (this_present_ex || that_present_ex) {
+        if (!(this_present_ex && that_present_ex))
+          return false;
+        if (!this.ex.equals(that.ex))
+          return false;
+      }
+
       return true;
     }
 
@@ -13896,6 +15896,10 @@ public class RemoteInterpreterEventService {
     public int hashCode() {
       int hashCode = 1;
 
+      hashCode = hashCode * 8191 + ((isSetEx()) ? 131071 : 524287);
+      if (isSetEx())
+        hashCode = hashCode * 8191 + ex.hashCode();
+
       return hashCode;
     }
 
@@ -13907,6 +15911,16 @@ public class RemoteInterpreterEventService {
 
       int lastComparison = 0;
 
+      lastComparison = java.lang.Boolean.valueOf(isSetEx()).compareTo(other.isSetEx());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetEx()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.ex, other.ex);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
       return 0;
     }
 
@@ -13928,6 +15942,13 @@ public class RemoteInterpreterEventService {
       java.lang.StringBuilder sb = new java.lang.StringBuilder("updateParagraphConfig_result(");
       boolean first = true;
 
+      sb.append("ex:");
+      if (this.ex == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.ex);
+      }
+      first = false;
       sb.append(")");
       return sb.toString();
     }
@@ -13971,6 +15992,15 @@ public class RemoteInterpreterEventService {
             break;
           }
           switch (schemeField.id) {
+            case 1: // EX
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+                struct.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException();
+                struct.ex.read(iprot);
+                struct.setExIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
             default:
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
           }
@@ -13986,6 +16016,11 @@ public class RemoteInterpreterEventService {
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.ex != null) {
+          oprot.writeFieldBegin(EX_FIELD_DESC);
+          struct.ex.write(oprot);
+          oprot.writeFieldEnd();
+        }
         oprot.writeFieldStop();
         oprot.writeStructEnd();
       }
@@ -14003,11 +16038,25 @@ public class RemoteInterpreterEventService {
       @Override
       public void write(org.apache.thrift.protocol.TProtocol prot, updateParagraphConfig_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet optionals = new java.util.BitSet();
+        if (struct.isSetEx()) {
+          optionals.set(0);
+        }
+        oprot.writeBitSet(optionals, 1);
+        if (struct.isSetEx()) {
+          struct.ex.write(oprot);
+        }
       }
 
       @Override
       public void read(org.apache.thrift.protocol.TProtocol prot, updateParagraphConfig_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet incoming = iprot.readBitSet(1);
+        if (incoming.get(0)) {
+          struct.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException();
+          struct.ex.read(iprot);
+          struct.setExIsSet(true);
+        }
       }
     }
 
@@ -14387,15 +16436,18 @@ public class RemoteInterpreterEventService {
     private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("getAllResources_result");
 
     private static final org.apache.thrift.protocol.TField SUCCESS_FIELD_DESC = new org.apache.thrift.protocol.TField("success", org.apache.thrift.protocol.TType.LIST, (short)0);
+    private static final org.apache.thrift.protocol.TField EX_FIELD_DESC = new org.apache.thrift.protocol.TField("ex", org.apache.thrift.protocol.TType.STRUCT, (short)1);
 
     private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new getAllResources_resultStandardSchemeFactory();
     private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new getAllResources_resultTupleSchemeFactory();
 
     public @org.apache.thrift.annotation.Nullable java.util.List<java.lang.String> success; // required
+    public @org.apache.thrift.annotation.Nullable org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-      SUCCESS((short)0, "success");
+      SUCCESS((short)0, "success"),
+      EX((short)1, "ex");
 
       private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
 
@@ -14413,6 +16465,8 @@ public class RemoteInterpreterEventService {
         switch(fieldId) {
           case 0: // SUCCESS
             return SUCCESS;
+          case 1: // EX
+            return EX;
           default:
             return null;
         }
@@ -14460,6 +16514,8 @@ public class RemoteInterpreterEventService {
       tmpMap.put(_Fields.SUCCESS, new org.apache.thrift.meta_data.FieldMetaData("success", org.apache.thrift.TFieldRequirementType.DEFAULT, 
           new org.apache.thrift.meta_data.ListMetaData(org.apache.thrift.protocol.TType.LIST, 
               new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING))));
+      tmpMap.put(_Fields.EX, new org.apache.thrift.meta_data.FieldMetaData("ex", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.zeppelin.interpreter.thrift.InterpreterRPCException.class)));
       metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
       org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(getAllResources_result.class, metaDataMap);
     }
@@ -14468,10 +16524,12 @@ public class RemoteInterpreterEventService {
     }
 
     public getAllResources_result(
-      java.util.List<java.lang.String> success)
+      java.util.List<java.lang.String> success,
+      org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex)
     {
       this();
       this.success = success;
+      this.ex = ex;
     }
 
     /**
@@ -14482,6 +16540,9 @@ public class RemoteInterpreterEventService {
         java.util.List<java.lang.String> __this__success = new java.util.ArrayList<java.lang.String>(other.success);
         this.success = __this__success;
       }
+      if (other.isSetEx()) {
+        this.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException(other.ex);
+      }
     }
 
     public getAllResources_result deepCopy() {
@@ -14491,6 +16552,7 @@ public class RemoteInterpreterEventService {
     @Override
     public void clear() {
       this.success = null;
+      this.ex = null;
     }
 
     public int getSuccessSize() {
@@ -14534,6 +16596,31 @@ public class RemoteInterpreterEventService {
       }
     }
 
+    @org.apache.thrift.annotation.Nullable
+    public org.apache.zeppelin.interpreter.thrift.InterpreterRPCException getEx() {
+      return this.ex;
+    }
+
+    public getAllResources_result setEx(@org.apache.thrift.annotation.Nullable org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex) {
+      this.ex = ex;
+      return this;
+    }
+
+    public void unsetEx() {
+      this.ex = null;
+    }
+
+    /** Returns true if field ex is set (has been assigned a value) and false otherwise */
+    public boolean isSetEx() {
+      return this.ex != null;
+    }
+
+    public void setExIsSet(boolean value) {
+      if (!value) {
+        this.ex = null;
+      }
+    }
+
     public void setFieldValue(_Fields field, @org.apache.thrift.annotation.Nullable java.lang.Object value) {
       switch (field) {
       case SUCCESS:
@@ -14544,6 +16631,14 @@ public class RemoteInterpreterEventService {
         }
         break;
 
+      case EX:
+        if (value == null) {
+          unsetEx();
+        } else {
+          setEx((org.apache.zeppelin.interpreter.thrift.InterpreterRPCException)value);
+        }
+        break;
+
       }
     }
 
@@ -14553,6 +16648,9 @@ public class RemoteInterpreterEventService {
       case SUCCESS:
         return getSuccess();
 
+      case EX:
+        return getEx();
+
       }
       throw new java.lang.IllegalStateException();
     }
@@ -14566,6 +16664,8 @@ public class RemoteInterpreterEventService {
       switch (field) {
       case SUCCESS:
         return isSetSuccess();
+      case EX:
+        return isSetEx();
       }
       throw new java.lang.IllegalStateException();
     }
@@ -14594,6 +16694,15 @@ public class RemoteInterpreterEventService {
           return false;
       }
 
+      boolean this_present_ex = true && this.isSetEx();
+      boolean that_present_ex = true && that.isSetEx();
+      if (this_present_ex || that_present_ex) {
+        if (!(this_present_ex && that_present_ex))
+          return false;
+        if (!this.ex.equals(that.ex))
+          return false;
+      }
+
       return true;
     }
 
@@ -14605,6 +16714,10 @@ public class RemoteInterpreterEventService {
       if (isSetSuccess())
         hashCode = hashCode * 8191 + success.hashCode();
 
+      hashCode = hashCode * 8191 + ((isSetEx()) ? 131071 : 524287);
+      if (isSetEx())
+        hashCode = hashCode * 8191 + ex.hashCode();
+
       return hashCode;
     }
 
@@ -14626,6 +16739,16 @@ public class RemoteInterpreterEventService {
           return lastComparison;
         }
       }
+      lastComparison = java.lang.Boolean.valueOf(isSetEx()).compareTo(other.isSetEx());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetEx()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.ex, other.ex);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
       return 0;
     }
 
@@ -14654,6 +16777,14 @@ public class RemoteInterpreterEventService {
         sb.append(this.success);
       }
       first = false;
+      if (!first) sb.append(", ");
+      sb.append("ex:");
+      if (this.ex == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.ex);
+      }
+      first = false;
       sb.append(")");
       return sb.toString();
     }
@@ -14715,6 +16846,15 @@ public class RemoteInterpreterEventService {
                 org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
               }
               break;
+            case 1: // EX
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+                struct.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException();
+                struct.ex.read(iprot);
+                struct.setExIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
             default:
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
           }
@@ -14742,6 +16882,11 @@ public class RemoteInterpreterEventService {
           }
           oprot.writeFieldEnd();
         }
+        if (struct.ex != null) {
+          oprot.writeFieldBegin(EX_FIELD_DESC);
+          struct.ex.write(oprot);
+          oprot.writeFieldEnd();
+        }
         oprot.writeFieldStop();
         oprot.writeStructEnd();
       }
@@ -14763,7 +16908,10 @@ public class RemoteInterpreterEventService {
         if (struct.isSetSuccess()) {
           optionals.set(0);
         }
-        oprot.writeBitSet(optionals, 1);
+        if (struct.isSetEx()) {
+          optionals.set(1);
+        }
+        oprot.writeBitSet(optionals, 2);
         if (struct.isSetSuccess()) {
           {
             oprot.writeI32(struct.success.size());
@@ -14773,12 +16921,15 @@ public class RemoteInterpreterEventService {
             }
           }
         }
+        if (struct.isSetEx()) {
+          struct.ex.write(oprot);
+        }
       }
 
       @Override
       public void read(org.apache.thrift.protocol.TProtocol prot, getAllResources_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
-        java.util.BitSet incoming = iprot.readBitSet(1);
+        java.util.BitSet incoming = iprot.readBitSet(2);
         if (incoming.get(0)) {
           {
             org.apache.thrift.protocol.TList _list39 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRING, iprot.readI32());
@@ -14792,6 +16943,11 @@ public class RemoteInterpreterEventService {
           }
           struct.setSuccessIsSet(true);
         }
+        if (incoming.get(1)) {
+          struct.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException();
+          struct.ex.read(iprot);
+          struct.setExIsSet(true);
+        }
       }
     }
 
@@ -15171,15 +17327,18 @@ public class RemoteInterpreterEventService {
     private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("getResource_result");
 
     private static final org.apache.thrift.protocol.TField SUCCESS_FIELD_DESC = new org.apache.thrift.protocol.TField("success", org.apache.thrift.protocol.TType.STRING, (short)0);
+    private static final org.apache.thrift.protocol.TField EX_FIELD_DESC = new org.apache.thrift.protocol.TField("ex", org.apache.thrift.protocol.TType.STRUCT, (short)1);
 
     private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new getResource_resultStandardSchemeFactory();
     private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new getResource_resultTupleSchemeFactory();
 
     public @org.apache.thrift.annotation.Nullable java.nio.ByteBuffer success; // required
+    public @org.apache.thrift.annotation.Nullable org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-      SUCCESS((short)0, "success");
+      SUCCESS((short)0, "success"),
+      EX((short)1, "ex");
 
       private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
 
@@ -15197,6 +17356,8 @@ public class RemoteInterpreterEventService {
         switch(fieldId) {
           case 0: // SUCCESS
             return SUCCESS;
+          case 1: // EX
+            return EX;
           default:
             return null;
         }
@@ -15243,6 +17404,8 @@ public class RemoteInterpreterEventService {
       java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
       tmpMap.put(_Fields.SUCCESS, new org.apache.thrift.meta_data.FieldMetaData("success", org.apache.thrift.TFieldRequirementType.DEFAULT, 
           new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING          , true)));
+      tmpMap.put(_Fields.EX, new org.apache.thrift.meta_data.FieldMetaData("ex", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.zeppelin.interpreter.thrift.InterpreterRPCException.class)));
       metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
       org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(getResource_result.class, metaDataMap);
     }
@@ -15251,10 +17414,12 @@ public class RemoteInterpreterEventService {
     }
 
     public getResource_result(
-      java.nio.ByteBuffer success)
+      java.nio.ByteBuffer success,
+      org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex)
     {
       this();
       this.success = org.apache.thrift.TBaseHelper.copyBinary(success);
+      this.ex = ex;
     }
 
     /**
@@ -15264,6 +17429,9 @@ public class RemoteInterpreterEventService {
       if (other.isSetSuccess()) {
         this.success = org.apache.thrift.TBaseHelper.copyBinary(other.success);
       }
+      if (other.isSetEx()) {
+        this.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException(other.ex);
+      }
     }
 
     public getResource_result deepCopy() {
@@ -15273,6 +17441,7 @@ public class RemoteInterpreterEventService {
     @Override
     public void clear() {
       this.success = null;
+      this.ex = null;
     }
 
     public byte[] getSuccess() {
@@ -15309,6 +17478,31 @@ public class RemoteInterpreterEventService {
       }
     }
 
+    @org.apache.thrift.annotation.Nullable
+    public org.apache.zeppelin.interpreter.thrift.InterpreterRPCException getEx() {
+      return this.ex;
+    }
+
+    public getResource_result setEx(@org.apache.thrift.annotation.Nullable org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex) {
+      this.ex = ex;
+      return this;
+    }
+
+    public void unsetEx() {
+      this.ex = null;
+    }
+
+    /** Returns true if field ex is set (has been assigned a value) and false otherwise */
+    public boolean isSetEx() {
+      return this.ex != null;
+    }
+
+    public void setExIsSet(boolean value) {
+      if (!value) {
+        this.ex = null;
+      }
+    }
+
     public void setFieldValue(_Fields field, @org.apache.thrift.annotation.Nullable java.lang.Object value) {
       switch (field) {
       case SUCCESS:
@@ -15323,6 +17517,14 @@ public class RemoteInterpreterEventService {
         }
         break;
 
+      case EX:
+        if (value == null) {
+          unsetEx();
+        } else {
+          setEx((org.apache.zeppelin.interpreter.thrift.InterpreterRPCException)value);
+        }
+        break;
+
       }
     }
 
@@ -15332,6 +17534,9 @@ public class RemoteInterpreterEventService {
       case SUCCESS:
         return getSuccess();
 
+      case EX:
+        return getEx();
+
       }
       throw new java.lang.IllegalStateException();
     }
@@ -15345,6 +17550,8 @@ public class RemoteInterpreterEventService {
       switch (field) {
       case SUCCESS:
         return isSetSuccess();
+      case EX:
+        return isSetEx();
       }
       throw new java.lang.IllegalStateException();
     }
@@ -15373,6 +17580,15 @@ public class RemoteInterpreterEventService {
           return false;
       }
 
+      boolean this_present_ex = true && this.isSetEx();
+      boolean that_present_ex = true && that.isSetEx();
+      if (this_present_ex || that_present_ex) {
+        if (!(this_present_ex && that_present_ex))
+          return false;
+        if (!this.ex.equals(that.ex))
+          return false;
+      }
+
       return true;
     }
 
@@ -15384,6 +17600,10 @@ public class RemoteInterpreterEventService {
       if (isSetSuccess())
         hashCode = hashCode * 8191 + success.hashCode();
 
+      hashCode = hashCode * 8191 + ((isSetEx()) ? 131071 : 524287);
+      if (isSetEx())
+        hashCode = hashCode * 8191 + ex.hashCode();
+
       return hashCode;
     }
 
@@ -15405,6 +17625,16 @@ public class RemoteInterpreterEventService {
           return lastComparison;
         }
       }
+      lastComparison = java.lang.Boolean.valueOf(isSetEx()).compareTo(other.isSetEx());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetEx()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.ex, other.ex);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
       return 0;
     }
 
@@ -15433,6 +17663,14 @@ public class RemoteInterpreterEventService {
         org.apache.thrift.TBaseHelper.toString(this.success, sb);
       }
       first = false;
+      if (!first) sb.append(", ");
+      sb.append("ex:");
+      if (this.ex == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.ex);
+      }
+      first = false;
       sb.append(")");
       return sb.toString();
     }
@@ -15484,6 +17722,15 @@ public class RemoteInterpreterEventService {
                 org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
               }
               break;
+            case 1: // EX
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+                struct.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException();
+                struct.ex.read(iprot);
+                struct.setExIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
             default:
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
           }
@@ -15504,6 +17751,11 @@ public class RemoteInterpreterEventService {
           oprot.writeBinary(struct.success);
           oprot.writeFieldEnd();
         }
+        if (struct.ex != null) {
+          oprot.writeFieldBegin(EX_FIELD_DESC);
+          struct.ex.write(oprot);
+          oprot.writeFieldEnd();
+        }
         oprot.writeFieldStop();
         oprot.writeStructEnd();
       }
@@ -15525,20 +17777,31 @@ public class RemoteInterpreterEventService {
         if (struct.isSetSuccess()) {
           optionals.set(0);
         }
-        oprot.writeBitSet(optionals, 1);
+        if (struct.isSetEx()) {
+          optionals.set(1);
+        }
+        oprot.writeBitSet(optionals, 2);
         if (struct.isSetSuccess()) {
           oprot.writeBinary(struct.success);
         }
+        if (struct.isSetEx()) {
+          struct.ex.write(oprot);
+        }
       }
 
       @Override
       public void read(org.apache.thrift.protocol.TProtocol prot, getResource_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
-        java.util.BitSet incoming = iprot.readBitSet(1);
+        java.util.BitSet incoming = iprot.readBitSet(2);
         if (incoming.get(0)) {
           struct.success = iprot.readBinary();
           struct.setSuccessIsSet(true);
         }
+        if (incoming.get(1)) {
+          struct.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException();
+          struct.ex.read(iprot);
+          struct.setExIsSet(true);
+        }
       }
     }
 
@@ -16023,15 +18286,18 @@ public class RemoteInterpreterEventService {
     private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("invokeMethod_result");
 
     private static final org.apache.thrift.protocol.TField SUCCESS_FIELD_DESC = new org.apache.thrift.protocol.TField("success", org.apache.thrift.protocol.TType.STRING, (short)0);
+    private static final org.apache.thrift.protocol.TField EX_FIELD_DESC = new org.apache.thrift.protocol.TField("ex", org.apache.thrift.protocol.TType.STRUCT, (short)1);
 
     private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new invokeMethod_resultStandardSchemeFactory();
     private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new invokeMethod_resultTupleSchemeFactory();
 
     public @org.apache.thrift.annotation.Nullable java.nio.ByteBuffer success; // required
+    public @org.apache.thrift.annotation.Nullable org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-      SUCCESS((short)0, "success");
+      SUCCESS((short)0, "success"),
+      EX((short)1, "ex");
 
       private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
 
@@ -16049,6 +18315,8 @@ public class RemoteInterpreterEventService {
         switch(fieldId) {
           case 0: // SUCCESS
             return SUCCESS;
+          case 1: // EX
+            return EX;
           default:
             return null;
         }
@@ -16095,6 +18363,8 @@ public class RemoteInterpreterEventService {
       java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
       tmpMap.put(_Fields.SUCCESS, new org.apache.thrift.meta_data.FieldMetaData("success", org.apache.thrift.TFieldRequirementType.DEFAULT, 
           new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING          , true)));
+      tmpMap.put(_Fields.EX, new org.apache.thrift.meta_data.FieldMetaData("ex", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.zeppelin.interpreter.thrift.InterpreterRPCException.class)));
       metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
       org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(invokeMethod_result.class, metaDataMap);
     }
@@ -16103,10 +18373,12 @@ public class RemoteInterpreterEventService {
     }
 
     public invokeMethod_result(
-      java.nio.ByteBuffer success)
+      java.nio.ByteBuffer success,
+      org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex)
     {
       this();
       this.success = org.apache.thrift.TBaseHelper.copyBinary(success);
+      this.ex = ex;
     }
 
     /**
@@ -16116,6 +18388,9 @@ public class RemoteInterpreterEventService {
       if (other.isSetSuccess()) {
         this.success = org.apache.thrift.TBaseHelper.copyBinary(other.success);
       }
+      if (other.isSetEx()) {
+        this.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException(other.ex);
+      }
     }
 
     public invokeMethod_result deepCopy() {
@@ -16125,6 +18400,7 @@ public class RemoteInterpreterEventService {
     @Override
     public void clear() {
       this.success = null;
+      this.ex = null;
     }
 
     public byte[] getSuccess() {
@@ -16161,6 +18437,31 @@ public class RemoteInterpreterEventService {
       }
     }
 
+    @org.apache.thrift.annotation.Nullable
+    public org.apache.zeppelin.interpreter.thrift.InterpreterRPCException getEx() {
+      return this.ex;
+    }
+
+    public invokeMethod_result setEx(@org.apache.thrift.annotation.Nullable org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex) {
+      this.ex = ex;
+      return this;
+    }
+
+    public void unsetEx() {
+      this.ex = null;
+    }
+
+    /** Returns true if field ex is set (has been assigned a value) and false otherwise */
+    public boolean isSetEx() {
+      return this.ex != null;
+    }
+
+    public void setExIsSet(boolean value) {
+      if (!value) {
+        this.ex = null;
+      }
+    }
+
     public void setFieldValue(_Fields field, @org.apache.thrift.annotation.Nullable java.lang.Object value) {
       switch (field) {
       case SUCCESS:
@@ -16175,6 +18476,14 @@ public class RemoteInterpreterEventService {
         }
         break;
 
+      case EX:
+        if (value == null) {
+          unsetEx();
+        } else {
+          setEx((org.apache.zeppelin.interpreter.thrift.InterpreterRPCException)value);
+        }
+        break;
+
       }
     }
 
@@ -16184,6 +18493,9 @@ public class RemoteInterpreterEventService {
       case SUCCESS:
         return getSuccess();
 
+      case EX:
+        return getEx();
+
       }
       throw new java.lang.IllegalStateException();
     }
@@ -16197,6 +18509,8 @@ public class RemoteInterpreterEventService {
       switch (field) {
       case SUCCESS:
         return isSetSuccess();
+      case EX:
+        return isSetEx();
       }
       throw new java.lang.IllegalStateException();
     }
@@ -16225,6 +18539,15 @@ public class RemoteInterpreterEventService {
           return false;
       }
 
+      boolean this_present_ex = true && this.isSetEx();
+      boolean that_present_ex = true && that.isSetEx();
+      if (this_present_ex || that_present_ex) {
+        if (!(this_present_ex && that_present_ex))
+          return false;
+        if (!this.ex.equals(that.ex))
+          return false;
+      }
+
       return true;
     }
 
@@ -16236,6 +18559,10 @@ public class RemoteInterpreterEventService {
       if (isSetSuccess())
         hashCode = hashCode * 8191 + success.hashCode();
 
+      hashCode = hashCode * 8191 + ((isSetEx()) ? 131071 : 524287);
+      if (isSetEx())
+        hashCode = hashCode * 8191 + ex.hashCode();
+
       return hashCode;
     }
 
@@ -16257,6 +18584,16 @@ public class RemoteInterpreterEventService {
           return lastComparison;
         }
       }
+      lastComparison = java.lang.Boolean.valueOf(isSetEx()).compareTo(other.isSetEx());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetEx()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.ex, other.ex);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
       return 0;
     }
 
@@ -16285,6 +18622,14 @@ public class RemoteInterpreterEventService {
         org.apache.thrift.TBaseHelper.toString(this.success, sb);
       }
       first = false;
+      if (!first) sb.append(", ");
+      sb.append("ex:");
+      if (this.ex == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.ex);
+      }
+      first = false;
       sb.append(")");
       return sb.toString();
     }
@@ -16336,6 +18681,15 @@ public class RemoteInterpreterEventService {
                 org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
               }
               break;
+            case 1: // EX
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+                struct.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException();
+                struct.ex.read(iprot);
+                struct.setExIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
             default:
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
           }
@@ -16356,6 +18710,11 @@ public class RemoteInterpreterEventService {
           oprot.writeBinary(struct.success);
           oprot.writeFieldEnd();
         }
+        if (struct.ex != null) {
+          oprot.writeFieldBegin(EX_FIELD_DESC);
+          struct.ex.write(oprot);
+          oprot.writeFieldEnd();
+        }
         oprot.writeFieldStop();
         oprot.writeStructEnd();
       }
@@ -16377,20 +18736,31 @@ public class RemoteInterpreterEventService {
         if (struct.isSetSuccess()) {
           optionals.set(0);
         }
-        oprot.writeBitSet(optionals, 1);
+        if (struct.isSetEx()) {
+          optionals.set(1);
+        }
+        oprot.writeBitSet(optionals, 2);
         if (struct.isSetSuccess()) {
           oprot.writeBinary(struct.success);
         }
+        if (struct.isSetEx()) {
+          struct.ex.write(oprot);
+        }
       }
 
       @Override
       public void read(org.apache.thrift.protocol.TProtocol prot, invokeMethod_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
-        java.util.BitSet incoming = iprot.readBitSet(1);
+        java.util.BitSet incoming = iprot.readBitSet(2);
         if (incoming.get(0)) {
           struct.success = iprot.readBinary();
           struct.setSuccessIsSet(true);
         }
+        if (incoming.get(1)) {
+          struct.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException();
+          struct.ex.read(iprot);
+          struct.setExIsSet(true);
+        }
       }
     }
 
@@ -16875,18 +19245,18 @@ public class RemoteInterpreterEventService {
     private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("getParagraphList_result");
 
     private static final org.apache.thrift.protocol.TField SUCCESS_FIELD_DESC = new org.apache.thrift.protocol.TField("success", org.apache.thrift.protocol.TType.LIST, (short)0);
-    private static final org.apache.thrift.protocol.TField E_FIELD_DESC = new org.apache.thrift.protocol.TField("e", org.apache.thrift.protocol.TType.STRUCT, (short)1);
+    private static final org.apache.thrift.protocol.TField EX_FIELD_DESC = new org.apache.thrift.protocol.TField("ex", org.apache.thrift.protocol.TType.STRUCT, (short)1);
 
     private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new getParagraphList_resultStandardSchemeFactory();
     private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new getParagraphList_resultTupleSchemeFactory();
 
     public @org.apache.thrift.annotation.Nullable java.util.List<ParagraphInfo> success; // required
-    public @org.apache.thrift.annotation.Nullable ServiceException e; // required
+    public @org.apache.thrift.annotation.Nullable org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     public enum _Fields implements org.apache.thrift.TFieldIdEnum {
       SUCCESS((short)0, "success"),
-      E((short)1, "e");
+      EX((short)1, "ex");
 
       private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
 
@@ -16904,8 +19274,8 @@ public class RemoteInterpreterEventService {
         switch(fieldId) {
           case 0: // SUCCESS
             return SUCCESS;
-          case 1: // E
-            return E;
+          case 1: // EX
+            return EX;
           default:
             return null;
         }
@@ -16953,8 +19323,8 @@ public class RemoteInterpreterEventService {
       tmpMap.put(_Fields.SUCCESS, new org.apache.thrift.meta_data.FieldMetaData("success", org.apache.thrift.TFieldRequirementType.DEFAULT, 
           new org.apache.thrift.meta_data.ListMetaData(org.apache.thrift.protocol.TType.LIST, 
               new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, ParagraphInfo.class))));
-      tmpMap.put(_Fields.E, new org.apache.thrift.meta_data.FieldMetaData("e", org.apache.thrift.TFieldRequirementType.DEFAULT, 
-          new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, ServiceException.class)));
+      tmpMap.put(_Fields.EX, new org.apache.thrift.meta_data.FieldMetaData("ex", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.zeppelin.interpreter.thrift.InterpreterRPCException.class)));
       metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
       org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(getParagraphList_result.class, metaDataMap);
     }
@@ -16964,11 +19334,11 @@ public class RemoteInterpreterEventService {
 
     public getParagraphList_result(
       java.util.List<ParagraphInfo> success,
-      ServiceException e)
+      org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex)
     {
       this();
       this.success = success;
-      this.e = e;
+      this.ex = ex;
     }
 
     /**
@@ -16982,8 +19352,8 @@ public class RemoteInterpreterEventService {
         }
         this.success = __this__success;
       }
-      if (other.isSetE()) {
-        this.e = new ServiceException(other.e);
+      if (other.isSetEx()) {
+        this.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException(other.ex);
       }
     }
 
@@ -16994,7 +19364,7 @@ public class RemoteInterpreterEventService {
     @Override
     public void clear() {
       this.success = null;
-      this.e = null;
+      this.ex = null;
     }
 
     public int getSuccessSize() {
@@ -17039,27 +19409,27 @@ public class RemoteInterpreterEventService {
     }
 
     @org.apache.thrift.annotation.Nullable
-    public ServiceException getE() {
-      return this.e;
+    public org.apache.zeppelin.interpreter.thrift.InterpreterRPCException getEx() {
+      return this.ex;
     }
 
-    public getParagraphList_result setE(@org.apache.thrift.annotation.Nullable ServiceException e) {
-      this.e = e;
+    public getParagraphList_result setEx(@org.apache.thrift.annotation.Nullable org.apache.zeppelin.interpreter.thrift.InterpreterRPCException ex) {
+      this.ex = ex;
       return this;
     }
 
-    public void unsetE() {
-      this.e = null;
+    public void unsetEx() {
+      this.ex = null;
     }
 
-    /** Returns true if field e is set (has been assigned a value) and false otherwise */
-    public boolean isSetE() {
-      return this.e != null;
+    /** Returns true if field ex is set (has been assigned a value) and false otherwise */
+    public boolean isSetEx() {
+      return this.ex != null;
     }
 
-    public void setEIsSet(boolean value) {
+    public void setExIsSet(boolean value) {
       if (!value) {
-        this.e = null;
+        this.ex = null;
       }
     }
 
@@ -17073,11 +19443,11 @@ public class RemoteInterpreterEventService {
         }
         break;
 
-      case E:
+      case EX:
         if (value == null) {
-          unsetE();
+          unsetEx();
         } else {
-          setE((ServiceException)value);
+          setEx((org.apache.zeppelin.interpreter.thrift.InterpreterRPCException)value);
         }
         break;
 
@@ -17090,8 +19460,8 @@ public class RemoteInterpreterEventService {
       case SUCCESS:
         return getSuccess();
 
-      case E:
-        return getE();
+      case EX:
+        return getEx();
 
       }
       throw new java.lang.IllegalStateException();
@@ -17106,8 +19476,8 @@ public class RemoteInterpreterEventService {
       switch (field) {
       case SUCCESS:
         return isSetSuccess();
-      case E:
-        return isSetE();
+      case EX:
+        return isSetEx();
       }
       throw new java.lang.IllegalStateException();
     }
@@ -17136,12 +19506,12 @@ public class RemoteInterpreterEventService {
           return false;
       }
 
-      boolean this_present_e = true && this.isSetE();
-      boolean that_present_e = true && that.isSetE();
-      if (this_present_e || that_present_e) {
-        if (!(this_present_e && that_present_e))
+      boolean this_present_ex = true && this.isSetEx();
+      boolean that_present_ex = true && that.isSetEx();
+      if (this_present_ex || that_present_ex) {
+        if (!(this_present_ex && that_present_ex))
           return false;
-        if (!this.e.equals(that.e))
+        if (!this.ex.equals(that.ex))
           return false;
       }
 
@@ -17156,9 +19526,9 @@ public class RemoteInterpreterEventService {
       if (isSetSuccess())
         hashCode = hashCode * 8191 + success.hashCode();
 
-      hashCode = hashCode * 8191 + ((isSetE()) ? 131071 : 524287);
-      if (isSetE())
-        hashCode = hashCode * 8191 + e.hashCode();
+      hashCode = hashCode * 8191 + ((isSetEx()) ? 131071 : 524287);
+      if (isSetEx())
+        hashCode = hashCode * 8191 + ex.hashCode();
 
       return hashCode;
     }
@@ -17181,12 +19551,12 @@ public class RemoteInterpreterEventService {
           return lastComparison;
         }
       }
-      lastComparison = java.lang.Boolean.valueOf(isSetE()).compareTo(other.isSetE());
+      lastComparison = java.lang.Boolean.valueOf(isSetEx()).compareTo(other.isSetEx());
       if (lastComparison != 0) {
         return lastComparison;
       }
-      if (isSetE()) {
-        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.e, other.e);
+      if (isSetEx()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.ex, other.ex);
         if (lastComparison != 0) {
           return lastComparison;
         }
@@ -17220,11 +19590,11 @@ public class RemoteInterpreterEventService {
       }
       first = false;
       if (!first) sb.append(", ");
-      sb.append("e:");
-      if (this.e == null) {
+      sb.append("ex:");
+      if (this.ex == null) {
         sb.append("null");
       } else {
-        sb.append(this.e);
+        sb.append(this.ex);
       }
       first = false;
       sb.append(")");
@@ -17289,11 +19659,11 @@ public class RemoteInterpreterEventService {
                 org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
               }
               break;
-            case 1: // E
+            case 1: // EX
               if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
-                struct.e = new ServiceException();
-                struct.e.read(iprot);
-                struct.setEIsSet(true);
+                struct.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException();
+                struct.ex.read(iprot);
+                struct.setExIsSet(true);
               } else { 
                 org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
               }
@@ -17325,9 +19695,9 @@ public class RemoteInterpreterEventService {
           }
           oprot.writeFieldEnd();
         }
-        if (struct.e != null) {
-          oprot.writeFieldBegin(E_FIELD_DESC);
-          struct.e.write(oprot);
+        if (struct.ex != null) {
+          oprot.writeFieldBegin(EX_FIELD_DESC);
+          struct.ex.write(oprot);
           oprot.writeFieldEnd();
         }
         oprot.writeFieldStop();
@@ -17351,7 +19721,7 @@ public class RemoteInterpreterEventService {
         if (struct.isSetSuccess()) {
           optionals.set(0);
         }
-        if (struct.isSetE()) {
+        if (struct.isSetEx()) {
           optionals.set(1);
         }
         oprot.writeBitSet(optionals, 2);
@@ -17364,8 +19734,8 @@ public class RemoteInterpreterEventService {
             }
           }
         }
-        if (struct.isSetE()) {
-          struct.e.write(oprot);
+        if (struct.isSetEx()) {
+          struct.ex.write(oprot);
         }
       }
 
@@ -17388,9 +19758,9 @@ public class RemoteInterpreterEventService {
           struct.setSuccessIsSet(true);
         }
         if (incoming.get(1)) {
-          struct.e = new ServiceException();
-          struct.e.read(iprot);
-          struct.setEIsSet(true);
+          struct.ex = new org.apache.zeppelin.interpreter.thrift.InterpreterRPCException();
+          struct.ex.read(iprot);
+          struct.setExIsSet(true);
         }
       }
     }
diff --git a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/RemoteInterpreterEventType.java b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/RemoteInterpreterEventType.java
index a9abe43..49961d2 100644
--- a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/RemoteInterpreterEventType.java
+++ b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/RemoteInterpreterEventType.java
@@ -24,7 +24,7 @@
 package org.apache.zeppelin.interpreter.thrift;
 
 
-@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2020-09-22")
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2021-01-22")
 public enum RemoteInterpreterEventType implements org.apache.thrift.TEnum {
   NO_OP(1),
   ANGULAR_OBJECT_ADD(2),
diff --git a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/RemoteInterpreterResult.java b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/RemoteInterpreterResult.java
index 05996b8..098f8f2 100644
--- a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/RemoteInterpreterResult.java
+++ b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/RemoteInterpreterResult.java
@@ -24,7 +24,7 @@
 package org.apache.zeppelin.interpreter.thrift;
 
 @SuppressWarnings({"cast", "rawtypes", "serial", "unchecked", "unused"})
-@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2020-09-22")
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2021-01-22")
 public class RemoteInterpreterResult implements org.apache.thrift.TBase<RemoteInterpreterResult, RemoteInterpreterResult._Fields>, java.io.Serializable, Cloneable, Comparable<RemoteInterpreterResult> {
   private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("RemoteInterpreterResult");
 
diff --git a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/RemoteInterpreterResultMessage.java b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/RemoteInterpreterResultMessage.java
index ce48e28..6ca2f1e 100644
--- a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/RemoteInterpreterResultMessage.java
+++ b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/RemoteInterpreterResultMessage.java
@@ -24,7 +24,7 @@
 package org.apache.zeppelin.interpreter.thrift;
 
 @SuppressWarnings({"cast", "rawtypes", "serial", "unchecked", "unused"})
-@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2020-09-22")
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2021-01-22")
 public class RemoteInterpreterResultMessage implements org.apache.thrift.TBase<RemoteInterpreterResultMessage, RemoteInterpreterResultMessage._Fields>, java.io.Serializable, Cloneable, Comparable<RemoteInterpreterResultMessage> {
   private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("RemoteInterpreterResultMessage");
 
diff --git a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/RemoteInterpreterService.java b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/RemoteInterpreterService.java
index 84ec6b8..d206b1b 100644
--- a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/RemoteInterpreterService.java
+++ b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/thrift/RemoteInterpreterService.java
@@ -24,56 +24,56 @@
 package org.apache.zeppelin.interpreter.thrift;
 
 @SuppressWarnings({"cast", "rawtypes", "serial", "unchecked", "unused"})
-@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2020-09-22")
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2021-01-22")
 public class RemoteInterpreterService {
 
   public interface Iface {
 
-    public void createInterpreter(java.lang.String intpGroupId, java.lang.String sessionId, java.lang.String className, java.util.Map<java.lang.String,java.lang.String> properties, java.lang.String userName) throws org.apache.thrift.TException;
+    public void createInterpreter(java.lang.String intpGroupId, java.lang.String sessionId, java.lang.String className, java.util.Map<java.lang.String,java.lang.String> properties, java.lang.String userName) throws InterpreterRPCException, org.apache.thrift.TException;
 
-    public void init(java.util.Map<java.lang.String,java.lang.String> properties) throws org.apache.thrift.TException;
+    public void init(java.util.Map<java.lang.String,java.lang.String> properties) throws InterpreterRPCException, org.apache.thrift.TException;
 
-    public void open(java.lang.String sessionId, java.lang.String className) throws org.apache.thrift.TException;
+    public void open(java.lang.String sessionId, java.lang.String className) throws InterpreterRPCException, org.apache.thrift.TException;
 
-    public void close(java.lang.String sessionId, java.lang.String className) throws org.apache.thrift.TException;
+    public void close(java.lang.String sessionId, java.lang.String className) throws InterpreterRPCException, org.apache.thrift.TException;
 
-    public void reconnect(java.lang.String host, int port) throws org.apache.thrift.TException;
+    public void reconnect(java.lang.String host, int port) throws InterpreterRPCException, org.apache.thrift.TException;
 
-    public RemoteInterpreterResult interpret(java.lang.String sessionId, java.lang.String className, java.lang.String st, RemoteInterpreterContext interpreterContext) throws org.apache.thrift.TException;
+    public RemoteInterpreterResult interpret(java.lang.String sessionId, java.lang.String className, java.lang.String st, RemoteInterpreterContext interpreterContext) throws InterpreterRPCException, org.apache.thrift.TException;
 
-    public void cancel(java.lang.String sessionId, java.lang.String className, RemoteInterpreterContext interpreterContext) throws org.apache.thrift.TException;
+    public void cancel(java.lang.String sessionId, java.lang.String className, RemoteInterpreterContext interpreterContext) throws InterpreterRPCException, org.apache.thrift.TException;
 
-    public int getProgress(java.lang.String sessionId, java.lang.String className, RemoteInterpreterContext interpreterContext) throws org.apache.thrift.TException;
+    public int getProgress(java.lang.String sessionId, java.lang.String className, RemoteInterpreterContext interpreterContext) throws InterpreterRPCException, org.apache.thrift.TException;
 
-    public java.lang.String getFormType(java.lang.String sessionId, java.lang.String className) throws org.apache.thrift.TException;
+    public java.lang.String getFormType(java.lang.String sessionId, java.lang.String className) throws InterpreterRPCException, org.apache.thrift.TException;
 
-    public java.util.List<InterpreterCompletion> completion(java.lang.String sessionId, java.lang.String className, java.lang.String buf, int cursor, RemoteInterpreterContext interpreterContext) throws org.apache.thrift.TException;
+    public java.util.List<InterpreterCompletion> completion(java.lang.String sessionId, java.lang.String className, java.lang.String buf, int cursor, RemoteInterpreterContext interpreterContext) throws InterpreterRPCException, org.apache.thrift.TException;
 
     public void shutdown() throws org.apache.thrift.TException;
 
-    public java.lang.String getStatus(java.lang.String sessionId, java.lang.String jobId) throws org.apache.thrift.TException;
+    public java.lang.String getStatus(java.lang.String sessionId, java.lang.String jobId) throws InterpreterRPCException, org.apache.thrift.TException;
 
-    public java.util.List<java.lang.String> resourcePoolGetAll() throws org.apache.thrift.TException;
+    public java.util.List<java.lang.String> resourcePoolGetAll() throws InterpreterRPCException, org.apache.thrift.TException;
 
-    public java.nio.ByteBuffer resourceGet(java.lang.String sessionId, java.lang.String paragraphId, java.lang.String resourceName) throws org.apache.thrift.TException;
+    public java.nio.ByteBuffer resourceGet(java.lang.String sessionId, java.lang.String paragraphId, java.lang.String resourceName) throws InterpreterRPCException, org.apache.thrift.TException;
 
-    public boolean resourceRemove(java.lang.String sessionId, java.lang.String paragraphId, java.lang.String resourceName) throws org.apache.thrift.TException;
+    public boolean resourceRemove(java.lang.String sessionId, java.lang.String paragraphId, java.lang.String resourceName) throws InterpreterRPCException, org.apache.thrift.TException;
 
-    public java.nio.ByteBuffer resourceInvokeMethod(java.lang.String sessionId, java.lang.String paragraphId, java.lang.String resourceName, java.lang.String invokeMessage) throws org.apache.thrift.TException;
+    public java.nio.ByteBuffer resourceInvokeMethod(java.lang.String sessionId, java.lang.String paragraphId, java.lang.String resourceName, java.lang.String invokeMessage) throws InterpreterRPCException, org.apache.thrift.TException;
 
-    public void angularObjectUpdate(java.lang.String name, java.lang.String sessionId, java.lang.String paragraphId, java.lang.String object) throws org.apache.thrift.TException;
+    public void angularObjectUpdate(java.lang.String name, java.lang.String sessionId, java.lang.String paragraphId, java.lang.String object) throws InterpreterRPCException, org.apache.thrift.TException;
 
-    public void angularObjectAdd(java.lang.String name, java.lang.String sessionId, java.lang.String paragraphId, java.lang.String object) throws org.apache.thrift.TException;
+    public void angularObjectAdd(java.lang.String name, java.lang.String sessionId, java.lang.String paragraphId, java.lang.String object) throws InterpreterRPCException, org.apache.thrift.TException;
 
-    public void angularObjectRemove(java.lang.String name, java.lang.String sessionId, java.lang.String paragraphId) throws org.apache.thrift.TException;
+    public void angularObjectRemove(java.lang.String name, java.lang.String sessionId, java.lang.String paragraphId) throws InterpreterRPCException, org.apache.thrift.TException;
 
-    public void angularRegistryPush(java.lang.String registry) throws org.apache.thrift.TException;
+    public void angularRegistryPush(java.lang.String registry) throws InterpreterRPCException, org.apache.thrift.TException;
 
-    public RemoteApplicationResult loadApplication(java.lang.String applicationInstanceId, java.lang.String packageInfo, java.lang.String sessionId, java.lang.String paragraphId) throws org.apache.thrift.TException;
+    public RemoteApplicationResult loadApplication(java.lang.String applicationInstanceId, java.lang.String packageInfo, java.lang.String sessionId, java.lang.String paragraphId) throws InterpreterRPCException, org.apache.thrift.TException;
 
-    public RemoteApplicationResult unloadApplication(java.lang.String applicationInstanceId) throws org.apache.thrift.TException;
+    public RemoteApplicationResult unloadApplication(java.lang.String applicationInstanceId) throws InterpreterRPCException, org.apache.thrift.TException;
 
-    public RemoteApplicationResult runApplication(java.lang.String applicationInstanceId) throws org.apache.thrift.TException;
+    public RemoteApplicationResult runApplication(java.lang.String applicationInstanceId) throws InterpreterRPCException, org.apache.thrift.TException;
 
   }
 
@@ -147,7 +147,7 @@ public class RemoteInterpreterService {
       super(iprot, oprot);
     }
 
-    public void createInterpreter(java.lang.String intpGroupId, java.lang.String sessionId, java.lang.String className, java.util.Map<java.lang.String,java.lang.String> properties, java.lang.String userName) throws org.apache.thrift.TException
+    public void createInterpreter(java.lang.String intpGroupId, java.lang.String sessionId, java.lang.String className, java.util.Map<java.lang.String,java.lang.String> properties, java.lang.String userName) throws InterpreterRPCException, org.apache.thrift.TException
     {
       send_createInterpreter(intpGroupId, sessionId, className, properties, userName);
       recv_createInterpreter();
@@ -164,14 +164,17 @@ public class RemoteInterpreterService {
       sendBase("createInterpreter", args);
     }
 
-    public void recv_createInterpreter() throws org.apache.thrift.TException
+    public void recv_createInterpreter() throws InterpreterRPCException, org.apache.thrift.TException
     {
       createInterpreter_result result = new createInterpreter_result();
       receiveBase(result, "createInterpreter");
+      if (result.ex != null) {
+        throw result.ex;
+      }
       return;
     }
 
-    public void init(java.util.Map<java.lang.String,java.lang.String> properties) throws org.apache.thrift.TException
+    public void init(java.util.Map<java.lang.String,java.lang.String> properties) throws InterpreterRPCException, org.apache.thrift.TException
     {
       send_init(properties);
       recv_init();
@@ -184,14 +187,17 @@ public class RemoteInterpreterService {
       sendBase("init", args);
     }
 
-    public void recv_init() throws org.apache.thrift.TException
+    public void recv_init() throws InterpreterRPCException, org.apache.thrift.TException
     {
       init_result result = new init_result();
       receiveBase(result, "init");
+      if (result.ex != null) {
+        throw result.ex;
+      }
       return;
     }
 
-    public void open(java.lang.String sessionId, java.lang.String className) throws org.apache.thrift.TException
+    public void open(java.lang.String sessionId, java.lang.String className) throws InterpreterRPCException, org.apache.thrift.TException
     {
       send_open(sessionId, className);
       recv_open();
@@ -205,14 +211,17 @@ public class RemoteInterpreterService {
       sendBase("open", args);
     }
 
-    public void recv_open() throws org.apache.thrift.TException
+    public void recv_open() throws InterpreterRPCException, org.apache.thrift.TException
     {
       open_result result = new open_result();
       receiveBase(result, "open");
+      if (result.ex != null) {
+        throw result.ex;
+      }
       return;
     }
 
-    public void close(java.lang.String sessionId, java.lang.String className) throws org.apache.thrift.TException
+    public void close(java.lang.String sessionId, java.lang.String className) throws InterpreterRPCException, org.apache.thrift.TException
     {
       send_close(sessionId, className);
       recv_close();
@@ -226,14 +235,17 @@ public class RemoteInterpreterService {
       sendBase("close", args);
     }
 
-    public void recv_close() throws org.apache.thrift.TException
+    public void recv_close() throws InterpreterRPCException, org.apache.thrift.TException
     {
       close_result result = new close_result();
       receiveBase(result, "close");
+      if (result.ex != null) {
+        throw result.ex;
+      }
       return;
     }
 
-    public void reconnect(java.lang.String host, int port) throws org.apache.thrift.TException
+    public void reconnect(java.lang.String host, int port) throws InterpreterRPCException, org.apache.thrift.TException
     {
       send_reconnect(host, port);
       recv_reconnect();
@@ -247,14 +259,17 @@ public class RemoteInterpreterService {
       sendBase("reconnect", args);
     }
 
-    public void recv_reconnect() throws org.apache.thrift.TException
+    public void recv_reconnect() throws InterpreterRPCException, org.apache.thrift.TException
     {
       reconnect_result result = new reconnect_result();
       receiveBase(result, "reconnect");
+      if (result.ex != null) {
+        throw result.ex;
+      }
       return;
     }
 
-    public RemoteInterpreterResult interpret(java.lang.String sessionId, java.lang.String className, java.lang.String st, RemoteInterpreterContext interpreterContext) throws org.apache.thrift.TException
+    public RemoteInterpreterResult interpret(java.lang.String sessionId, java.lang.String className, java.lang.String st, RemoteInterpreterContext interpreterContext) throws InterpreterRPCException, org.apache.thrift.TException
     {
       send_interpret(sessionId, className, st, interpreterContext);
       return recv_interpret();
@@ -270,17 +285,20 @@ public class RemoteInterpreterService {
       sendBase("interpret", args);
     }
 
-    public RemoteInterpreterResult recv_interpret() throws org.apache.thrift.TException
+    public RemoteInterpreterResult recv_interpret() throws InterpreterRPCException, org.apache.thrift.TException
     {
       interpret_result result = new interpret_result();
       receiveBase(result, "interpret");
       if (result.isSetSuccess()) {
         return result.success;
       }
+      if (result.ex != null) {
+        throw result.ex;
+      }
       throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "interpret failed: unknown result");
     }
 
-    public void cancel(java.lang.String sessionId, java.lang.String className, RemoteInterpreterContext interpreterContext) throws org.apache.thrift.TException
+    public void cancel(java.lang.String sessionId, java.lang.String className, RemoteInterpreterContext interpreterContext) throws InterpreterRPCException, org.apache.thrift.TException
     {
       send_cancel(sessionId, className, interpreterContext);
       recv_cancel();
@@ -295,14 +313,17 @@ public class RemoteInterpreterService {
       sendBase("cancel", args);
     }
 
-    public void recv_cancel() throws org.apache.thrift.TException
+    public void recv_cancel() throws InterpreterRPCException, org.apache.thrift.TException
     {
       cancel_result result = new cancel_result();
       receiveBase(result, "cancel");
+      if (result.ex != null) {
+        throw result.ex;
+      }
       return;
     }
 
-    public int getProgress(java.lang.String sessionId, java.lang.String className, RemoteInterpreterContext interpreterContext) throws org.apache.thrift.TException
+    public int getProgress(java.lang.String sessionId, java.lang.String className, RemoteInterpreterContext interpreterContext) throws InterpreterRPCException, org.apache.thrift.TException
     {
       send_getProgress(sessionId, className, interpreterContext);
       return recv_getProgress();
@@ -317,17 +338,20 @@ public class RemoteInterpreterService {
       sendBase("getProgress", args);
     }
 
-    public int recv_getProgress() throws org.apache.thrift.TException
+    public int recv_getProgress() throws InterpreterRPCException, org.apache.thrift.TException
     {
       getProgress_result result = new getProgress_result();
       receiveBase(result, "getProgress");
       if (result.isSetSuccess()) {
         return result.success;
       }
+      if (result.ex != null) {
+        throw result.ex;
+      }
       throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "getProgress failed: unknown result");
     }
 
-    public java.lang.String getFormType(java.lang.String sessionId, java.lang.String className) throws org.apache.thrift.TException
+    public java.lang.String getFormType(java.lang.String sessionId, java.lang.String className) throws InterpreterRPCException, org.apache.thrift.TException
     {
       send_getFormType(sessionId, className);
       return recv_getFormType();
@@ -341,17 +365,20 @@ public class RemoteInterpreterService {
       sendBase("getFormType", args);
     }
 
-    public java.lang.String recv_getFormType() throws org.apache.thrift.TException
+    public java.lang.String recv_getFormType() throws InterpreterRPCException, org.apache.thrift.TException
     {
       getFormType_result result = new getFormType_result();
       receiveBase(result, "getFormType");
       if (result.isSetSuccess()) {
         return result.success;
       }
+      if (result.ex != null) {
+        throw result.ex;
+      }
       throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "getFormType failed: unknown result");
     }
 
-    public java.util.List<InterpreterCompletion> completion(java.lang.String sessionId, java.lang.String className, java.lang.String buf, int cursor, RemoteInterpreterContext interpreterContext) throws org.apache.thrift.TException
+    public java.util.List<InterpreterCompletion> completion(java.lang.String sessionId, java.lang.String className, java.lang.String buf, int cursor, RemoteInterpreterContext interpreterContext) throws InterpreterRPCException, org.apache.thrift.TException
     {
       send_completion(sessionId, className, buf, cursor, interpreterContext);
       return recv_completion();
@@ -368,13 +395,16 @@ public class RemoteInterpreterService {
       sendBase("completion", args);
     }
 
-    public java.util.List<InterpreterCompletion> recv_completion() throws org.apache.thrift.TException
+    public java.util.List<InterpreterCompletion> recv_completion() throws InterpreterRPCException, org.apache.thrift.TException
     {
       completion_result result = new completion_result();
       receiveBase(result, "completion");
       if (result.isSetSuccess()) {
         return result.success;
       }
+      if (result.ex != null) {
+        throw result.ex;
+      }
       throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "completion failed: unknown result");
     }
 
@@ -397,7 +427,7 @@ public class RemoteInterpreterService {
       return;
     }
 
-    public java.lang.String getStatus(java.lang.String sessionId, java.lang.String jobId) throws org.apache.thrift.TException
+    public java.lang.String getStatus(java.lang.String sessionId, java.lang.String jobId) throws InterpreterRPCException, org.apache.thrift.TException
     {
       send_getStatus(sessionId, jobId);
       return recv_getStatus();
@@ -411,17 +441,20 @@ public class RemoteInterpreterService {
       sendBase("getStatus", args);
     }
 
-    public java.lang.String recv_getStatus() throws org.apache.thrift.TException
+    public java.lang.String recv_getStatus() throws InterpreterRPCException, org.apache.thrift.TException
     {
       getStatus_result result = new getStatus_result();
       receiveBase(result, "getStatus");
       if (result.isSetSuccess()) {
         return result.success;
       }
+      if (result.ex != null) {
+        throw result.ex;
+      }
       throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "getStatus failed: unknown result");
     }
 
-    public java.util.List<java.lang.String> resourcePoolGetAll() throws org.apache.thrift.TException
+    public java.util.List<java.lang.String> resourcePoolGetAll() throws InterpreterRPCException, org.apache.thrift.TException
     {
       send_resourcePoolGetAll();
       return recv_resourcePoolGetAll();
@@ -433,17 +466,20 @@ public class RemoteInterpreterService {
       sendBase("resourcePoolGetAll", args);
     }
 
-    public java.util.List<java.lang.String> recv_resourcePoolGetAll() throws org.apache.thrift.TException
+    public java.util.List<java.lang.String> recv_resourcePoolGetAll() throws InterpreterRPCException, org.apache.thrift.TException
     {
       resourcePoolGetAll_result result = new resourcePoolGetAll_result();
       receiveBase(result, "resourcePoolGetAll");
       if (result.isSetSuccess()) {
         return result.success;
       }
+      if (result.ex != null) {
+        throw result.ex;
+      }
       throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "resourcePoolGetAll failed: unknown result");
     }
 
-    public java.nio.ByteBuffer resourceGet(java.lang.String sessionId, java.lang.String paragraphId, java.lang.String resourceName) throws org.apache.thrift.TException
+    public java.nio.ByteBuffer resourceGet(java.lang.String sessionId, java.lang.String paragraphId, java.lang.String resourceName) throws InterpreterRPCException, org.apache.thrift.TException
     {
       send_resourceGet(sessionId, paragraphId, resourceName);
       return recv_resourceGet();
@@ -458,17 +494,20 @@ public class RemoteInterpreterService {
       sendBase("resourceGet", args);
     }
 
-    public java.nio.ByteBuffer recv_resourceGet() throws org.apache.thrift.TException
+    public java.nio.ByteBuffer recv_resourceGet() throws InterpreterRPCException, org.apache.thrift.TException
     {
       resourceGet_result result = new resourceGet_result();
       receiveBase(result, "resourceGet");
       if (result.isSetSuccess()) {
         return result.success;
       }
+      if (result.ex != null) {
+        throw result.ex;
+      }
       throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "resourceGet failed: unknown result");
     }
 
-    public boolean resourceRemove(java.lang.String sessionId, java.lang.String paragraphId, java.lang.String resourceName) throws org.apache.thrift.TException
+    public boolean resourceRemove(java.lang.String sessionId, java.lang.String paragraphId, java.lang.String resourceName) throws InterpreterRPCException, org.apache.thrift.TException
     {
       send_resourceRemove(sessionId, paragraphId, resourceName);
       return recv_resourceRemove();
@@ -483,17 +522,20 @@ public class RemoteInterpreterService {
       sendBase("resourceRemove", args);
     }
 
-    public boolean recv_resourceRemove() throws org.apache.thrift.TException
+    public boolean recv_resourceRemove() throws InterpreterRPCException, org.apache.thrift.TException
     {
       resourceRemove_result result = new resourceRemove_result();
       receiveBase(result, "resourceRemove");
       if (result.isSetSuccess()) {
         return result.success;
       }
+      if (result.ex != null) {
+        throw result.ex;
+      }
       throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "resourceRemove failed: unknown result");
     }
 
-    public java.nio.ByteBuffer resourceInvokeMethod(java.lang.String sessionId, java.lang.String paragraphId, java.lang.String resourceName, java.lang.String invokeMessage) throws org.apache.thrift.TException
+    public java.nio.ByteBuffer resourceInvokeMethod(java.lang.String sessionId, java.lang.String paragraphId, java.lang.String resourceName, java.lang.String invokeMessage) throws InterpreterRPCException, org.apache.thrift.TException
     {
       send_resourceInvokeMethod(sessionId, paragraphId, resourceName, invokeMessage);
       return recv_resourceInvokeMethod();
@@ -509,17 +551,20 @@ public class RemoteInterpreterService {
       sendBase("resourceInvokeMethod", args);
     }
 
-    public java.nio.ByteBuffer recv_resourceInvokeMethod() throws org.apache.thrift.TException
+    public java.nio.ByteBuffer recv_resourceInvokeMethod() throws InterpreterRPCException, org.apache.thrift.TException
     {
       resourceInvokeMethod_result result = new resourceInvokeMethod_result();
       receiveBase(result, "resourceInvokeMethod");
       if (result.isSetSuccess()) {
         return result.success;
       }
+      if (result.ex != null) {
+        throw result.ex;
+      }
       throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "resourceInvokeMethod failed: unknown result");
     }
 
-    public void angularObjectUpdate(java.lang.String name, java.lang.String sessionId, java.lang.String paragraphId, java.lang.String object) throws org.apache.thrift.TException
+    public void angularObjectUpdate(java.lang.String name, java.lang.String sessionId, java.lang.String paragraphId, java.lang.String object) throws InterpreterRPCException, org.apache.thrift.TException
     {
       send_angularObjectUpdate(name, sessionId, paragraphId, object);
       recv_angularObjectUpdate();
@@ -535,14 +580,17 @@ public class RemoteInterpreterService {
       sendBase("angularObjectUpdate", args);
     }
 
-    public void recv_angularObjectUpdate() throws org.apache.thrift.TException
+    public void recv_angularObjectUpdate() throws InterpreterRPCException, org.apache.thrift.TException
     {
       angularObjectUpdate_result result = new angularObjectUpdate_result();
       receiveBase(result, "angularObjectUpdate");
+      if (result.ex != null) {
+        throw result.ex;
+      }
       return;
     }
 
-    public void angularObjectAdd(java.lang.String name, java.lang.String sessionId, java.lang.String paragraphId, java.lang.String object) throws org.apache.thrift.TException
+    public void angularObjectAdd(java.lang.String name, java.lang.String sessionId, java.lang.String paragraphId, java.lang.String object) throws InterpreterRPCException, org.apache.thrift.TException
     {
       send_angularObjectAdd(name, sessionId, paragraphId, object);
       recv_angularObjectAdd();
@@ -558,14 +606,17 @@ public class RemoteInterpreterService {
       sendBase("angularObjectAdd", args);
     }
 
-    public void recv_angularObjectAdd() throws org.apache.thrift.TException
+    public void recv_angularObjectAdd() throws InterpreterRPCException, org.apache.thrift.TException
     {
       angularObjectAdd_result result = new angularObjectAdd_result();
       receiveBase(result, "angularObjectAdd");
+      if (result.ex != null) {
+        throw result.ex;
+      }
       return;
     }
 
-    public void angularObjectRemove(java.lang.String name, java.lang.String sessionId, java.lang.String paragraphId) throws org.apache.thrift.TException
+    public void angularObjectRemove(java.lang.String name, java.lang.String sessionId, java.lang.String paragraphId) throws InterpreterRPCException, org.apache.thrift.TException
     {
       send_angularObjectRemove(name, sessionId, paragraphId);
       recv_angularObjectRemove();
@@ -580,14 +631,17 @@ public class RemoteInterpreterService {
       sendBase("angularObjectRemove", args);
     }
 
-    public void recv_angularObjectRemove() throws org.apache.thrift.TException
+    public void recv_angularObjectRemove() throws InterpreterRPCException, org.apache.thrift.TException
     {
       angularObjectRemove_result result = new angularObjectRemove_result();
       receiveBase(result, "angularObjectRemove");
+      if (result.ex != null) {
+        throw result.ex;
+      }
       return;
     }
 
-    public void angularRegistryPush(java.lang.String registry) throws org.apache.thrift.TException
+    public void angularRegistryPush(java.lang.String registry) throws InterpreterRPCException, org.apache.thrift.TException
     {
       send_angularRegistryPush(registry);
       recv_angularRegistryPush();
@@ -600,14 +654,17 @@ public class RemoteInterpreterService {
       sendBase("angularRegistryPush", args);
     }
 
-    public void recv_angularRegistryPush() throws org.apache.thrift.TException
+    public void recv_angularRegistryPush() throws InterpreterRPCException, org.apache.thrift.TException
     {
       angularRegistryPush_result result = new angularRegistryPush_result();
       receiveBase(result, "angularRegistryPush");
+      if (result.ex != null) {
+        throw result.ex;
+      }
       return;
     }
 
-    public RemoteApplicationResult loadApplication(java.lang.String applicationInstanceId, java.lang.String packageInfo, java.lang.String sessionId, java.lang.String paragraphId) throws org.apache.thrift.TException
+    public RemoteApplicationResult loadApplication(java.lang.String applicationInstanceId, java.lang.String packageInfo, java.lang.String sessionId, java.lang.String paragraphId) throws InterpreterRPCException, org.apache.thrift.TException
     {
       send_loadApplication(applicationInstanceId, packageInfo, sessionId, paragraphId);
       return recv_loadApplication();
@@ -623,17 +680,20 @@ public class RemoteInterpreterService {
       sendBase("loadApplication", args);
     }
 
-    public RemoteApplicationResult recv_loadApplication() throws org.apache.thrift.TException
+    public RemoteApplicationResult recv_loadApplication() throws InterpreterRPCException, org.apache.thrift.TException
     {
       loadApplication_result result = new loadApplication_result();
       receiveBase(result, "loadApplication");
       if (result.isSetSuccess()) {
         return result.success;
       }
+      if (result.ex != null) {
+        throw result.ex;
+      }
       throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "loadApplication failed: unknown result");
     }
 
-    public RemoteApplicationResult unloadApplication(java.lang.String applicationInstanceId) throws org.apache.thrift.TException
+    public RemoteApplicationResult unloadApplication(java.lang.String applicationInstanceId) throws InterpreterRPCException, org.apache.thrift.TException
     {
       send_unloadApplication(applicationInstanceId);
       return recv_unloadApplication();
@@ -646,17 +706,20 @@ public class RemoteInterpreterService {
       sendBase("unloadApplication", args);
     }
 
-    public RemoteApplicationResult recv_unloadApplication() throws org.apache.thrift.TException
+    public RemoteApplicationResult recv_unloadApplication() throws InterpreterRPCException, org.apache.thrift.TException
     {
       unloadApplication_result result = new unloadApplication_result();
       receiveBase(result, "unloadApplication");
       if (result.isSetSuccess()) {
         return result.success;
       }
+      if (result.ex != null) {
+        throw result.ex;
+      }
       throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "unloadApplication failed: unknown result");
     }
 
-    public RemoteApplicationResult runApplication(java.lang.String applicationInstanceId) throws org.apache.thrift.TException
+    public RemoteApplicationResult runApplication(java.lang.String applicationInstanceId) throws InterpreterRPCException, org.apache.thrift.TException
     {
       send_runApplication(applicationInstanceId);
       return recv_runApplication();
@@ -669,13 +732,16 @@ public class RemoteInterpreterService {
       sendBase("runApplication", args);
     }
 
-    public RemoteApplicationResult recv_runApplication() throws org.apache.thrift.TException
+    public RemoteApplicationResult recv_runApplication() throws InterpreterRPCException, org.apache.thrift.TException
     {
       runApplication_result result = new runApplication_result();
       receiveBase(result, "runApplication");
       if (result.isSetSuccess()) {
         return result.success;
       }
+      if (result.ex != null) {
+        throw result.ex;
+      }
       throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "runApplication failed: unknown result");
     }
 
@@ -731,7 +797,7 @@ public class RemoteInterpreterService {
         prot.writeMessageEnd();
       }
 
-      public Void getResult() throws org.apache.thrift.TException {
+      public Void getResult() throws InterpreterRPCException, org.apache.thrift.TException {
         if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
           throw new java.lang.IllegalStateException("Method call not finished!");
         }
@@ -763,7 +829,7 @@ public class RemoteInterpreterService {
         prot.writeMessageEnd();
       }
 
-      public Void getResult() throws org.apache.thrift.TException {
+      public Void getResult() throws InterpreterRPCException, org.apache.thrift.TException {
         if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
           throw new java.lang.IllegalStateException("Method call not finished!");
         }
@@ -798,7 +864,7 @@ public class RemoteInterpreterService {
         prot.writeMessageEnd();
       }
 
-      public Void getResult() throws org.apache.thrift.TException {
+      public Void getResult() throws InterpreterRPCException, org.apache.thrift.TException {
         if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
           throw new java.lang.IllegalStateException("Method call not finished!");
         }
@@ -833,7 +899,7 @@ public class RemoteInterpreterService {
         prot.writeMessageEnd();
       }
 
-      public Void getResult() throws org.apache.thrift.TException {
+      public Void getResult() throws InterpreterRPCException, org.apache.thrift.TException {
         if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
           throw new java.lang.IllegalStateException("Method call not finished!");
         }
@@ -868,7 +934,7 @@ public class RemoteInterpreterService {
         prot.writeMessageEnd();
       }
 
-      public Void getResult() throws org.apache.thrift.TException {
+      public Void getResult() throws InterpreterRPCException, org.apache.thrift.TException {
         if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
           throw new java.lang.IllegalStateException("Method call not finished!");
         }
@@ -909,7 +975,7 @@ public class RemoteInterpreterService {
         prot.writeMessageEnd();
       }
 
-      public RemoteInterpreterResult getResult() throws org.apache.thrift.TException {
+      public RemoteInterpreterResult getResult() throws InterpreterRPCException, org.apache.thrift.TException {
         if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
           throw new java.lang.IllegalStateException("Method call not finished!");
         }
@@ -947,7 +1013,7 @@ public class RemoteInterpreterService {
         prot.writeMessageEnd();
       }
 
-      public Void getResult() throws org.apache.thrift.TException {
+      public Void getResult() throws InterpreterRPCException, org.apache.thrift.TException {
         if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
           throw new java.lang.IllegalStateException("Method call not finished!");
         }
@@ -985,7 +1051,7 @@ public class RemoteInterpreterService {
         prot.writeMessageEnd();
       }
 
-      public java.lang.Integer getResult() throws org.apache.thrift.TException {
+      public java.lang.Integer getResult() throws InterpreterRPCException, org.apache.thrift.TException {
         if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
           throw new java.lang.IllegalStateException("Method call not finished!");
         }
@@ -1020,7 +1086,7 @@ public class RemoteInterpreterService {
         prot.writeMessageEnd();
       }
 
-      public java.lang.String getResult() throws org.apache.thrift.TException {
+      public java.lang.String getResult() throws InterpreterRPCException, org.apache.thrift.TException {
         if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
           throw new java.lang.IllegalStateException("Method call not finished!");
         }
@@ -1064,7 +1130,7 @@ public class RemoteInterpreterService {
         prot.writeMessageEnd();
       }
 
-      public java.util.List<InterpreterCompletion> getResult() throws org.apache.thrift.TException {
+      public java.util.List<InterpreterCompletion> getResult() throws InterpreterRPCException, org.apache.thrift.TException {
         if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
           throw new java.lang.IllegalStateException("Method call not finished!");
         }
@@ -1128,7 +1194,7 @@ public class RemoteInterpreterService {
         prot.writeMessageEnd();
       }
 
-      public java.lang.String getResult() throws org.apache.thrift.TException {
+      public java.lang.String getResult() throws InterpreterRPCException, org.apache.thrift.TException {
         if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
           throw new java.lang.IllegalStateException("Method call not finished!");
         }
@@ -1157,7 +1223,7 @@ public class RemoteInterpreterService {
         prot.writeMessageEnd();
       }
 
-      public java.util.List<java.lang.String> getResult() throws org.apache.thrift.TException {
+      public java.util.List<java.lang.String> getResult() throws InterpreterRPCException, org.apache.thrift.TException {
         if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
           throw new java.lang.IllegalStateException("Method call not finished!");
         }
@@ -1195,7 +1261,7 @@ public class RemoteInterpreterService {
         prot.writeMessageEnd();
       }
 
-      public java.nio.ByteBuffer getResult() throws org.apache.thrift.TException {
+      public java.nio.ByteBuffer getResult() throws InterpreterRPCException, org.apache.thrift.TException {
         if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
           throw new java.lang.IllegalStateException("Method call not finished!");
         }
@@ -1233,7 +1299,7 @@ public class RemoteInterpreterService {
         prot.writeMessageEnd();
       }
 
-      public java.lang.Boolean getResult() throws org.apache.thrift.TException {
+      public java.lang.Boolean getResult() throws InterpreterRPCException, org.apache.thrift.TException {
         if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
           throw new java.lang.IllegalStateException("Method call not finished!");
         }
@@ -1274,7 +1340,7 @@ public class RemoteInterpreterService {
         prot.writeMessageEnd();
       }
 
-      public java.nio.ByteBuffer getResult() throws org.apache.thrift.TException {
+      public java.nio.ByteBuffer getResult() throws InterpreterRPCException, org.apache.thrift.TException {
         if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
           throw new java.lang.IllegalStateException("Method call not finished!");
         }
@@ -1315,7 +1381,7 @@ public class RemoteInterpreterService {
         prot.writeMessageEnd();
       }
 
-      public Void getResult() throws org.apache.thrift.TException {
+      public Void getResult() throws InterpreterRPCException, org.apache.thrift.TException {
         if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
           throw new java.lang.IllegalStateException("Method call not finished!");
         }
@@ -1356,7 +1422,7 @@ public class RemoteInterpreterService {
         prot.writeMessageEnd();
       }
 
-      public Void getResult() throws org.apache.thrift.TException {
+      public Void getResult() throws InterpreterRPCException, org.apache.thrift.TException {
         if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
           throw new java.lang.IllegalStateException("Method call not finished!");
         }
@@ -1394,7 +1460,7 @@ public class RemoteInterpreterService {
         prot.writeMessageEnd();
       }
 
-      public Void getResult() throws org.apache.thrift.TException {
+      public Void getResult() throws InterpreterRPCException, org.apache.thrift.TException {
         if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
           throw new java.lang.IllegalStateException("Method call not finished!");
         }
@@ -1426,7 +1492,7 @@ public class RemoteInterpreterService {
         prot.writeMessageEnd();
       }
 
-      public Void getResult() throws org.apache.thrift.TException {
+      public Void getResult() throws InterpreterRPCException, org.apache.thrift.TException {
         if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
           throw new java.lang.IllegalStateException("Method call not finished!");
         }
@@ -1467,7 +1533,7 @@ public class RemoteInterpreterService {
         prot.writeMessageEnd();
       }
 
-      public RemoteApplicationResult getResult() throws org.apache.thrift.TException {
+      public RemoteApplicationResult getResult() throws InterpreterRPCException, org.apache.thrift.TException {
         if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
           throw new java.lang.IllegalStateException("Method call not finished!");
         }
@@ -1499,7 +1565,7 @@ public class RemoteInterpreterService {
         prot.writeMessageEnd();
       }
 
-      public RemoteApplicationResult getResult() throws org.apache.thrift.TException {
+      public RemoteApplicationResult getResult() throws InterpreterRPCException, org.apache.thrift.TException {
         if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
           throw new java.lang.IllegalStateException("Method call not finished!");
         }
@@ -1531,7 +1597,7 @@ public class RemoteInterpreterService {
         prot.writeMessageEnd();
       }
 
-      public RemoteApplicationResult getResult() throws org.apache.thrift.TException {
+      public RemoteApplicationResult getResult() throws InterpreterRPCException, org.apache.thrift.TException {
         if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
           throw new java.lang.IllegalStateException("Method call not finished!");
         }
@@ -1600,7 +1666,11 @@ public class RemoteInterpreterService {
 
       public createInterpreter_result getResult(I iface, createInterpreter_args args) throws org.apache.thrift.TException {
         createInterpreter_result result = new createInterpreter_result();
-        iface.createInterpreter(args.intpGroupId, args.sessionId, args.className, args.properties, args.userName);
+        try {
+          iface.createInterpreter(args.intpGroupId, args.sessionId, args.className, args.properties, args.userName);
+        } catch (InterpreterRPCException ex) {
+          result.ex = ex;
+        }
         return result;
       }
     }
@@ -1625,7 +1695,11 @@ public class RemoteInterpreterService {
 
       public init_result getResult(I iface, init_args args) throws org.apache.thrift.TException {
         init_result result = new init_result();
-        iface.init(args.properties);
+        try {
+          iface.init(args.properties);
+        } catch (InterpreterRPCException ex) {
+          result.ex = ex;
+        }
         return result;
       }
     }
@@ -1650,7 +1724,11 @@ public class RemoteInterpreterService {
 
       public open_result getResult(I iface, open_args args) throws org.apache.thrift.TException {
         open_result result = new open_result();
-        iface.open(args.sessionId, args.className);
+        try {
+          iface.open(args.sessionId, args.className);
+        } catch (InterpreterRPCException ex) {
+          result.ex = ex;
+        }
         return result;
       }
     }
@@ -1675,7 +1753,11 @@ public class RemoteInterpreterService {
 
       public close_result getResult(I iface, close_args args) throws org.apache.thrift.TException {
         close_result result = new close_result();
-        iface.close(args.sessionId, args.className);
+        try {
+          iface.close(args.sessionId, args.className);
+        } catch (InterpreterRPCException ex) {
+          result.ex = ex;
+        }
         return result;
       }
     }
@@ -1700,7 +1782,11 @@ public class RemoteInterpreterService {
 
       public reconnect_result getResult(I iface, reconnect_args args) throws org.apache.thrift.TException {
         reconnect_result result = new reconnect_result();
-        iface.reconnect(args.host, args.port);
+        try {
+          iface.reconnect(args.host, args.port);
+        } catch (InterpreterRPCException ex) {
+          result.ex = ex;
+        }
         return result;
       }
     }
@@ -1725,7 +1811,11 @@ public class RemoteInterpreterService {
 
       public interpret_result getResult(I iface, interpret_args args) throws org.apache.thrift.TException {
         interpret_result result = new interpret_result();
-        result.success = iface.interpret(args.sessionId, args.className, args.st, args.interpreterContext);
+        try {
+          result.success = iface.interpret(args.sessionId, args.className, args.st, args.interpreterContext);
+        } catch (InterpreterRPCException ex) {
+          result.ex = ex;
+        }
         return result;
       }
     }
@@ -1750,7 +1840,11 @@ public class RemoteInterpreterService {
 
       public cancel_result getResult(I iface, cancel_args args) throws org.apache.thrift.TException {
         cancel_result result = new cancel_result();
-        iface.cancel(args.sessionId, args.className, args.interpreterContext);
+        try {
+          iface.cancel(args.sessionId, args.className, args.interpreterContext);
+        } catch (InterpreterRPCException ex) {
+          result.ex = ex;
+        }
         return result;
       }
     }
@@ -1775,8 +1869,12 @@ public class RemoteInterpreterService {
 
       public getProgress_result getResult(I iface, getProgress_args args) throws org.apache.thrift.TException {
         getProgress_result result = new getProgress_result();
-        result.success = iface.getProgress(args.sessionId, args.className, args.interpreterContext);
-        result.setSuccessIsSet(true);
+        try {
+          result.success = iface.getProgress(args.sessionId, args.className, args.interpreterContext);
+          result.setSuccessIsSet(true);
+        } catch (InterpreterRPCException ex) {
+          result.ex = ex;
+        }
         return result;
       }
     }
@@ -1801,7 +1899,11 @@ public class RemoteInterpreterService {
 
       public getFormType_result getResult(I iface, getFormType_args args) throws org.apache.thrift.TException {
         getFormType_result result = new getFormType_result();
-        result.success = iface.getFormType(args.sessionId, args.className);
+        try {
+          result.success = iface.getFormType(args.sessionId, args.className);
+        } catch (InterpreterRPCException ex) {
+          result.ex = ex;
+        }
         return result;
       }
     }
@@ -1826,7 +1928,11 @@ public class RemoteInterpreterService {
 
       public completion_result getResult(I iface, completion_args args) throws org.apache.thrift.TException {
         completion_result result = new completion_result();
-        result.success = iface.completion(args.sessionId, args.className, args.buf, args.cursor, args.interpreterContext);
+        try {
+          result.success = iface.completion(args.sessionId, args.className, args.buf, args.cursor, args.interpreterContext);
+        } catch (InterpreterRPCException ex) {
+          result.ex = ex;
+        }
         return result;
       }
     }
@@ -1876,7 +1982,11 @@ public class RemoteInterpreterService {
 
       public getStatus_result getResult(I iface, getStatus_args args) throws org.apache.thrift.TException {
         getStatus_result result = new getStatus_result();
-        result.success = iface.getStatus(args.sessionId, args.jobId);
+        try {
+          result.success = iface.getStatus(args.sessionId, args.jobId);
+        } catch (InterpreterRPCException ex) {
+          result.ex = ex;
+        }
         return result;
       }
     }
@@ -1901,7 +2011,11 @@ public class RemoteInterpreterService {
 
       public resourcePoolGetAll_result getResult(I iface, resourcePoolGetAll_args args) throws org.apache.thrift.TException {
         resourcePoolGetAll_result result = new resourcePoolGetAll_result();
-        result.success = iface.resourcePoolGetAll();
+        try {
+          result.success = iface.resourcePoolGetAll();
+        } catch (InterpreterRPCException ex) {
+          result.ex = ex;
+        }
         return result;
       }
     }
@@ -1926,7 +2040,11 @@ public class RemoteInterpreterService {
 
       public resourceGet_result getResult(I iface, resourceGet_args args) throws org.apache.thrift.TException {
         resourceGet_result result = new resourceGet_result();
-        result.success = iface.resourceGet(args.sessionId, args.paragraphId, args.resourceName);
+        try {
+          result.success = iface.resourceGet(args.sessionId, args.paragraphId, args.resourceName);
+        } catch (InterpreterRPCException ex) {
+          result.ex = ex;
+        }
         return result;
       }
     }
@@ -1951,8 +2069,12 @@ public class RemoteInterpreterService {
 
       public resourceRemove_result getResult(I iface, resourceRemove_args args) throws org.apache.thrift.TException {
         resourceRemove_result result = new resourceRemove_result();
-        result.success = iface.resourceRemove(args.sessionId, args.paragraphId, args.resourceName);
-        result.setSuccessIsSet(true);
+        try {
+          result.success = iface.resourceRemove(args.sessionId, args.paragraphId, args.resourceName);
+          result.setSuccessIsSet(true);
+        } catch (InterpreterRPCException ex) {
+          result.ex = ex;
+        }
         return result;
       }
     }
@@ -1977,7 +2099,11 @@ public class RemoteInterpreterService {
 
       public resourceInvokeMethod_result getResult(I iface, resourceInvokeMethod_args args) throws org.apache.thrift.TException {
         resourceInvokeMethod_result result = new resourceInvokeMethod_result();
-        result.success = iface.resourceInvokeMethod(args.sessionId, args.paragraphId, args.resourceName, args.invokeMessage);
+        try {
+          result.success = iface.resourceInvokeMethod(args.sessionId, args.paragraphId, args.resourceName, args.invokeMessage);
+        } catch (InterpreterRPCException ex) {
+          result.ex = ex;
+        }
         return result;
       }
     }
@@ -2002,7 +2128,11 @@ public class RemoteInterpreterService {
 
       public angularObjectUpdate_result getResult(I iface, angularObjectUpdate_args args) throws org.apache.thrift.TException {
         angularObjectUpdate_result result = new angularObjectUpdate_result();
-        iface.angularObjectUpdate(args.name, args.sessionId, args.paragraphId, args.object);
+        try {
+          iface.angularObjectUpdate(args.name, args.sessionId, args.paragraphId, args.object);
+        } catch (InterpreterRPCException ex) {
+          result.ex = ex;
+        }
         return result;
       }
     }
@@ -2027,7 +2157,11 @@ public class RemoteInterpreterService {
 
       public angularObjectAdd_result getResult(I iface, angularObjectAdd_args args) throws org.apache.thrift.TException {
         angularObjectAdd_result result = new angularObjectAdd_result();
-        iface.angularObjectAdd(args.name, args.sessionId, args.paragraphId, args.object);
+        try {
+          iface.angularObjectAdd(args.name, args.sessionId, args.paragraphId, args.object);
+        } catch (InterpreterRPCException ex) {
+          result.ex = ex;
+        }
         return result;
       }
     }
@@ -2052,7 +2186,11 @@ public class RemoteInterpreterService {
 
       public angularObjectRemove_result getResult(I iface, angularObjectRemove_args args) throws org.apache.thrift.TException {
         angularObjectRemove_result result = new angularObjectRemove_result();
-        iface.angularObjectRemove(args.name, args.sessionId, args.paragraphId);
+        try {
+          iface.angularObjectRemove(args.name, args.sessionId, args.paragraphId);
+        } catch (InterpreterRPCException ex) {
+          result.ex = ex;
+        }
         return result;
       }
     }
@@ -2077,7 +2215,11 @@ public class RemoteInterpreterService {
 
       public angularRegistryPush_result getResult(I iface, angularRegistryPush_args args) throws org.apache.thrift.TException {
         angularRegistryPush_result result = new angularRegistryPush_result();
-        iface.angularRegistryPush(args.registry);
+        try {
+          iface.angularRegistryPush(args.registry);
+        } catch (InterpreterRPCException ex) {
+          result.ex = ex;
+        }
         return result;
       }
     }
@@ -2102,7 +2244,11 @@ public class RemoteInterpreterService {
 
       public loadApplication_result getResult(I iface, loadApplication_args args) throws org.apache.thrift.TException {
         loadApplication_result result = new loadApplication_result();
-        result.success = iface.loadApplication(args.applicationInstanceId, args.packageInfo, args.sessionId, args.paragraphId);
+        try {
+          result.success = iface.loadApplication(args.applicationInstanceId, args.packageInfo, args.sessionId, args.paragraphId);
+        } catch (InterpreterRPCException ex) {
+          result.ex = ex;
+        }
         return result;
       }
     }
@@ -2127,7 +2273,11 @@ public class RemoteInterpreterService {
 
       public unloadApplication_result getResult(I iface, unloadApplication_args args) throws org.apache.thrift.TException {
         unloadApplication_result result = new unloadApplication_result();
-        result.success = iface.unloadApplication(args.applicationInstanceId);
+        try {
+          result.success = iface.unloadApplication(args.applicationInstanceId);
+        } catch (InterpreterRPCException ex) {
+          result.ex = ex;
+        }
         return result;
       }
     }
@@ -2152,7 +2302,11 @@ public class RemoteInterpreterService {
 
       public runApplication_result getResult(I iface, runApplication_args args) throws org.apache.thrift.TException {
         runApplication_result result = new runApplication_result();
-        result.success = iface.runApplication(args.applicationInstanceId);
+        try {
+          result.success = iface.runApplication(args.applicationInstanceId);
+        } catch (InterpreterRPCException ex) {
+          result.ex = ex;
+        }
         return result;
       }
     }
@@ -2224,7 +2378,11 @@ public class RemoteInterpreterService {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
             createInterpreter_result result = new createInterpreter_result();
-            if (e instanceof org.apache.thrift.transport.TTransportException) {
+            if (e instanceof InterpreterRPCException) {
+              result.ex = (InterpreterRPCException) e;
+              result.setExIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.thrift.transport.TTransportException) {
               _LOGGER.error("TTransportException inside handler", e);
               fb.close();
               return;
@@ -2284,7 +2442,11 @@ public class RemoteInterpreterService {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
             init_result result = new init_result();
-            if (e instanceof org.apache.thrift.transport.TTransportException) {
+            if (e instanceof InterpreterRPCException) {
+              result.ex = (InterpreterRPCException) e;
+              result.setExIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.thrift.transport.TTransportException) {
               _LOGGER.error("TTransportException inside handler", e);
               fb.close();
               return;
@@ -2344,7 +2506,11 @@ public class RemoteInterpreterService {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
             open_result result = new open_result();
-            if (e instanceof org.apache.thrift.transport.TTransportException) {
+            if (e instanceof InterpreterRPCException) {
+              result.ex = (InterpreterRPCException) e;
+              result.setExIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.thrift.transport.TTransportException) {
               _LOGGER.error("TTransportException inside handler", e);
               fb.close();
               return;
@@ -2404,7 +2570,11 @@ public class RemoteInterpreterService {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
             close_result result = new close_result();
-            if (e instanceof org.apache.thrift.transport.TTransportException) {
+            if (e instanceof InterpreterRPCException) {
+              result.ex = (InterpreterRPCException) e;
+              result.setExIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.thrift.transport.TTransportException) {
               _LOGGER.error("TTransportException inside handler", e);
               fb.close();
               return;
@@ -2464,7 +2634,11 @@ public class RemoteInterpreterService {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
             reconnect_result result = new reconnect_result();
-            if (e instanceof org.apache.thrift.transport.TTransportException) {
+            if (e instanceof InterpreterRPCException) {
+              result.ex = (InterpreterRPCException) e;
+              result.setExIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.thrift.transport.TTransportException) {
               _LOGGER.error("TTransportException inside handler", e);
               fb.close();
               return;
@@ -2525,7 +2699,11 @@ public class RemoteInterpreterService {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
             interpret_result result = new interpret_result();
-            if (e instanceof org.apache.thrift.transport.TTransportException) {
+            if (e instanceof InterpreterRPCException) {
+              result.ex = (InterpreterRPCException) e;
+              result.setExIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.thrift.transport.TTransportException) {
               _LOGGER.error("TTransportException inside handler", e);
               fb.close();
               return;
@@ -2585,7 +2763,11 @@ public class RemoteInterpreterService {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
             cancel_result result = new cancel_result();
-            if (e instanceof org.apache.thrift.transport.TTransportException) {
+            if (e instanceof InterpreterRPCException) {
+              result.ex = (InterpreterRPCException) e;
+              result.setExIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.thrift.transport.TTransportException) {
               _LOGGER.error("TTransportException inside handler", e);
               fb.close();
               return;
@@ -2647,7 +2829,11 @@ public class RemoteInterpreterService {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
             getProgress_result result = new getProgress_result();
-            if (e instanceof org.apache.thrift.transport.TTransportException) {
+            if (e instanceof InterpreterRPCException) {
+              result.ex = (InterpreterRPCException) e;
+              result.setExIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.thrift.transport.TTransportException) {
               _LOGGER.error("TTransportException inside handler", e);
               fb.close();
               return;
@@ -2708,7 +2894,11 @@ public class RemoteInterpreterService {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
             getFormType_result result = new getFormType_result();
-            if (e instanceof org.apache.thrift.transport.TTransportException) {
+            if (e instanceof InterpreterRPCException) {
+              result.ex = (InterpreterRPCException) e;
+              result.setExIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.thrift.transport.TTransportException) {
               _LOGGER.error("TTransportException inside handler", e);
               fb.close();
               return;
@@ -2769,7 +2959,11 @@ public class RemoteInterpreterService {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
             completion_result result = new completion_result();
-            if (e instanceof org.apache.thrift.transport.TTransportException) {
+            if (e instanceof InterpreterRPCException) {
+              result.ex = (InterpreterRPCException) e;
+              result.setExIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.thrift.transport.TTransportException) {
               _LOGGER.error("TTransportException inside handler", e);
               fb.close();
               return;
@@ -2890,7 +3084,11 @@ public class RemoteInterpreterService {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
             getStatus_result result = new getStatus_result();
-            if (e instanceof org.apache.thrift.transport.TTransportException) {
+            if (e instanceof InterpreterRPCException) {
+              result.ex = (InterpreterRPCException) e;
+              result.setExIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.thrift.transport.TTransportException) {
               _LOGGER.error("TTransportException inside handler", e);
               fb.close();
               return;
@@ -2951,7 +3149,11 @@ public class RemoteInterpreterService {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
             resourcePoolGetAll_result result = new resourcePoolGetAll_result();
-            if (e instanceof org.apache.thrift.transport.TTransportException) {
+            if (e instanceof InterpreterRPCException) {
+              result.ex = (InterpreterRPCException) e;
+              result.setExIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.thrift.transport.TTransportException) {
               _LOGGER.error("TTransportException inside handler", e);
               fb.close();
               return;
@@ -3012,7 +3214,11 @@ public class RemoteInterpreterService {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
             resourceGet_result result = new resourceGet_result();
-            if (e instanceof org.apache.thrift.transport.TTransportException) {
+            if (e instanceof InterpreterRPCException) {
+              result.ex = (InterpreterRPCException) e;
+              result.setExIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.thrift.transport.TTransportException) {
               _LOGGER.error("TTransportException inside handler", e);
               fb.close();
               return;
@@ -3074,7 +3280,11 @@ public class RemoteInterpreterService {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
             resourceRemove_result result = new resourceRemove_result();
-            if (e instanceof org.apache.thrift.transport.TTransportException) {
+            if (e instanceof InterpreterRPCException) {
+              result.ex = (InterpreterRPCException) e;
+              result.setExIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.thrift.transport.TTransportException) {
               _LOGGER.error("TTransportException inside handler", e);
               fb.close();
               return;
@@ -3135,7 +3345,11 @@ public class RemoteInterpreterService {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
             resourceInvokeMethod_result result = new resourceInvokeMethod_result();
-            if (e instanceof org.apache.thrift.transport.TTransportException) {
+            if (e instanceof InterpreterRPCException) {
+              result.ex = (InterpreterRPCException) e;
+              result.setExIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.thrift.transport.TTransportException) {
               _LOGGER.error("TTransportException inside handler", e);
               fb.close();
               return;
@@ -3195,7 +3409,11 @@ public class RemoteInterpreterService {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
             angularObjectUpdate_result result = new angularObjectUpdate_result();
-            if (e instanceof org.apache.thrift.transport.TTransportException) {
+            if (e instanceof InterpreterRPCException) {
+              result.ex = (InterpreterRPCException) e;
+              result.setExIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.thrift.transport.TTransportException) {
               _LOGGER.error("TTransportException inside handler", e);
               fb.close();
               return;
@@ -3255,7 +3473,11 @@ public class RemoteInterpreterService {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
             angularObjectAdd_result result = new angularObjectAdd_result();
-            if (e instanceof org.apache.thrift.transport.TTransportException) {
+            if (e instanceof InterpreterRPCException) {
+              result.ex = (InterpreterRPCException) e;
+              result.setExIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.thrift.transport.TTransportException) {
               _LOGGER.error("TTransportException inside handler", e);
               fb.close();
               return;
@@ -3315,7 +3537,11 @@ public class RemoteInterpreterService {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
             angularObjectRemove_result result = new angularObjectRemove_result();
-            if (e instanceof org.apache.thrift.transport.TTransportException) {
+            if (e instanceof InterpreterRPCException) {
+              result.ex = (InterpreterRPCException) e;
+              result.setExIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.thrift.transport.TTransportException) {
               _LOGGER.error("TTransportException inside handler", e);
               fb.close();
               return;
@@ -3375,7 +3601,11 @@ public class RemoteInterpreterService {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
             angularRegistryPush_result result = new angularRegistryPush_result();
-            if (e instanceof org.apache.thrift.transport.TTransportException) {
+            if (e instanceof InterpreterRPCException) {
+              result.ex = (InterpreterRPCException) e;
+              result.setExIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.thrift.transport.TTransportException) {
               _LOGGER.error("TTransportException inside handler", e);
               fb.close();
               return;
@@ -3436,7 +3666,11 @@ public class RemoteInterpreterService {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
             loadApplication_result result = new loadApplication_result();
-            if (e instanceof org.apache.thrift.transport.TTransportException) {
+            if (e instanceof InterpreterRPCException) {
+              result.ex = (InterpreterRPCException) e;
+              result.setExIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.thrift.transport.TTransportException) {
               _LOGGER.error("TTransportException inside handler", e);
               fb.close();
               return;
@@ -3497,7 +3731,11 @@ public class RemoteInterpreterService {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
             unloadApplication_result result = new unloadApplication_result();
-            if (e instanceof org.apache.thrift.transport.TTransportException) {
+            if (e instanceof InterpreterRPCException) {
+              result.ex = (InterpreterRPCException) e;
+              result.setExIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.thrift.transport.TTransportException) {
               _LOGGER.error("TTransportException inside handler", e);
               fb.close();
               return;
@@ -3558,7 +3796,11 @@ public class RemoteInterpreterService {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
             runApplication_result result = new runApplication_result();
-            if (e instanceof org.apache.thrift.transport.TTransportException) {
+            if (e instanceof InterpreterRPCException) {
+              result.ex = (InterpreterRPCException) e;
+              result.setExIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.thrift.transport.TTransportException) {
               _LOGGER.error("TTransportException inside handler", e);
               fb.close();
               return;
@@ -4434,14 +4676,16 @@ public class RemoteInterpreterService {
   public static class createInterpreter_result implements org.apache.thrift.TBase<createInterpreter_result, createInterpreter_result._Fields>, java.io.Serializable, Cloneable, Comparable<createInterpreter_result>   {
     private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("createInterpreter_result");
 
+    private static final org.apache.thrift.protocol.TField EX_FIELD_DESC = new org.apache.thrift.protocol.TField("ex", org.apache.thrift.protocol.TType.STRUCT, (short)1);
 
     private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new createInterpreter_resultStandardSchemeFactory();
     private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new createInterpreter_resultTupleSchemeFactory();
 
+    public @org.apache.thrift.annotation.Nullable InterpreterRPCException ex; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-;
+      EX((short)1, "ex");
 
       private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
 
@@ -4457,6 +4701,8 @@ public class RemoteInterpreterService {
       @org.apache.thrift.annotation.Nullable
       public static _Fields findByThriftId(int fieldId) {
         switch(fieldId) {
+          case 1: // EX
+            return EX;
           default:
             return null;
         }
@@ -4496,9 +4742,13 @@ public class RemoteInterpreterService {
         return _fieldName;
       }
     }
+
+    // isset id assignments
     public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
     static {
       java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.EX, new org.apache.thrift.meta_data.FieldMetaData("ex", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, InterpreterRPCException.class)));
       metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
       org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(createInterpreter_result.class, metaDataMap);
     }
@@ -4506,10 +4756,20 @@ public class RemoteInterpreterService {
     public createInterpreter_result() {
     }
 
+    public createInterpreter_result(
+      InterpreterRPCException ex)
+    {
+      this();
+      this.ex = ex;
+    }
+
     /**
      * Performs a deep copy on <i>other</i>.
      */
     public createInterpreter_result(createInterpreter_result other) {
+      if (other.isSetEx()) {
+        this.ex = new InterpreterRPCException(other.ex);
+      }
     }
 
     public createInterpreter_result deepCopy() {
@@ -4518,16 +4778,53 @@ public class RemoteInterpreterService {
 
     @Override
     public void clear() {
+      this.ex = null;
+    }
+
+    @org.apache.thrift.annotation.Nullable
+    public InterpreterRPCException getEx() {
+      return this.ex;
+    }
+
+    public createInterpreter_result setEx(@org.apache.thrift.annotation.Nullable InterpreterRPCException ex) {
+      this.ex = ex;
+      return this;
+    }
+
+    public void unsetEx() {
+      this.ex = null;
+    }
+
+    /** Returns true if field ex is set (has been assigned a value) and false otherwise */
+    public boolean isSetEx() {
+      return this.ex != null;
+    }
+
+    public void setExIsSet(boolean value) {
+      if (!value) {
+        this.ex = null;
+      }
     }
 
     public void setFieldValue(_Fields field, @org.apache.thrift.annotation.Nullable java.lang.Object value) {
       switch (field) {
+      case EX:
+        if (value == null) {
+          unsetEx();
+        } else {
+          setEx((InterpreterRPCException)value);
+        }
+        break;
+
       }
     }
 
     @org.apache.thrift.annotation.Nullable
     public java.lang.Object getFieldValue(_Fields field) {
       switch (field) {
+      case EX:
+        return getEx();
+
       }
       throw new java.lang.IllegalStateException();
     }
@@ -4539,6 +4836,8 @@ public class RemoteInterpreterService {
       }
 
       switch (field) {
+      case EX:
+        return isSetEx();
       }
       throw new java.lang.IllegalStateException();
     }
@@ -4558,6 +4857,15 @@ public class RemoteInterpreterService {
       if (this == that)
         return true;
 
+      boolean this_present_ex = true && this.isSetEx();
+      boolean that_present_ex = true && that.isSetEx();
+      if (this_present_ex || that_present_ex) {
+        if (!(this_present_ex && that_present_ex))
+          return false;
+        if (!this.ex.equals(that.ex))
+          return false;
+      }
+
       return true;
     }
 
@@ -4565,6 +4873,10 @@ public class RemoteInterpreterService {
     public int hashCode() {
       int hashCode = 1;
 
+      hashCode = hashCode * 8191 + ((isSetEx()) ? 131071 : 524287);
+      if (isSetEx())
+        hashCode = hashCode * 8191 + ex.hashCode();
+
       return hashCode;
     }
 
@@ -4576,6 +4888,16 @@ public class RemoteInterpreterService {
 
       int lastComparison = 0;
 
+      lastComparison = java.lang.Boolean.valueOf(isSetEx()).compareTo(other.isSetEx());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetEx()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.ex, other.ex);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
       return 0;
     }
 
@@ -4597,6 +4919,13 @@ public class RemoteInterpreterService {
       java.lang.StringBuilder sb = new java.lang.StringBuilder("createInterpreter_result(");
       boolean first = true;
 
+      sb.append("ex:");
+      if (this.ex == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.ex);
+      }
+      first = false;
       sb.append(")");
       return sb.toString();
     }
@@ -4640,6 +4969,15 @@ public class RemoteInterpreterService {
             break;
           }
           switch (schemeField.id) {
+            case 1: // EX
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+                struct.ex = new InterpreterRPCException();
+                struct.ex.read(iprot);
+                struct.setExIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
             default:
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
           }
@@ -4655,6 +4993,11 @@ public class RemoteInterpreterService {
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.ex != null) {
+          oprot.writeFieldBegin(EX_FIELD_DESC);
+          struct.ex.write(oprot);
+          oprot.writeFieldEnd();
+        }
         oprot.writeFieldStop();
         oprot.writeStructEnd();
       }
@@ -4672,11 +5015,25 @@ public class RemoteInterpreterService {
       @Override
       public void write(org.apache.thrift.protocol.TProtocol prot, createInterpreter_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet optionals = new java.util.BitSet();
+        if (struct.isSetEx()) {
+          optionals.set(0);
+        }
+        oprot.writeBitSet(optionals, 1);
+        if (struct.isSetEx()) {
+          struct.ex.write(oprot);
+        }
       }
 
       @Override
       public void read(org.apache.thrift.protocol.TProtocol prot, createInterpreter_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet incoming = iprot.readBitSet(1);
+        if (incoming.get(0)) {
+          struct.ex = new InterpreterRPCException();
+          struct.ex.read(iprot);
+          struct.setExIsSet(true);
+        }
       }
     }
 
@@ -5107,14 +5464,16 @@ public class RemoteInterpreterService {
   public static class init_result implements org.apache.thrift.TBase<init_result, init_result._Fields>, java.io.Serializable, Cloneable, Comparable<init_result>   {
     private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("init_result");
 
+    private static final org.apache.thrift.protocol.TField EX_FIELD_DESC = new org.apache.thrift.protocol.TField("ex", org.apache.thrift.protocol.TType.STRUCT, (short)1);
 
     private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new init_resultStandardSchemeFactory();
     private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new init_resultTupleSchemeFactory();
 
+    public @org.apache.thrift.annotation.Nullable InterpreterRPCException ex; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-;
+      EX((short)1, "ex");
 
       private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
 
@@ -5130,6 +5489,8 @@ public class RemoteInterpreterService {
       @org.apache.thrift.annotation.Nullable
       public static _Fields findByThriftId(int fieldId) {
         switch(fieldId) {
+          case 1: // EX
+            return EX;
           default:
             return null;
         }
@@ -5169,9 +5530,13 @@ public class RemoteInterpreterService {
         return _fieldName;
       }
     }
+
+    // isset id assignments
     public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
     static {
       java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.EX, new org.apache.thrift.meta_data.FieldMetaData("ex", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, InterpreterRPCException.class)));
       metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
       org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(init_result.class, metaDataMap);
     }
@@ -5179,10 +5544,20 @@ public class RemoteInterpreterService {
     public init_result() {
     }
 
+    public init_result(
+      InterpreterRPCException ex)
+    {
+      this();
+      this.ex = ex;
+    }
+
     /**
      * Performs a deep copy on <i>other</i>.
      */
     public init_result(init_result other) {
+      if (other.isSetEx()) {
+        this.ex = new InterpreterRPCException(other.ex);
+      }
     }
 
     public init_result deepCopy() {
@@ -5191,16 +5566,53 @@ public class RemoteInterpreterService {
 
     @Override
     public void clear() {
+      this.ex = null;
+    }
+
+    @org.apache.thrift.annotation.Nullable
+    public InterpreterRPCException getEx() {
+      return this.ex;
+    }
+
+    public init_result setEx(@org.apache.thrift.annotation.Nullable InterpreterRPCException ex) {
+      this.ex = ex;
+      return this;
+    }
+
+    public void unsetEx() {
+      this.ex = null;
+    }
+
+    /** Returns true if field ex is set (has been assigned a value) and false otherwise */
+    public boolean isSetEx() {
+      return this.ex != null;
+    }
+
+    public void setExIsSet(boolean value) {
+      if (!value) {
+        this.ex = null;
+      }
     }
 
     public void setFieldValue(_Fields field, @org.apache.thrift.annotation.Nullable java.lang.Object value) {
       switch (field) {
+      case EX:
+        if (value == null) {
+          unsetEx();
+        } else {
+          setEx((InterpreterRPCException)value);
+        }
+        break;
+
       }
     }
 
     @org.apache.thrift.annotation.Nullable
     public java.lang.Object getFieldValue(_Fields field) {
       switch (field) {
+      case EX:
+        return getEx();
+
       }
       throw new java.lang.IllegalStateException();
     }
@@ -5212,6 +5624,8 @@ public class RemoteInterpreterService {
       }
 
       switch (field) {
+      case EX:
+        return isSetEx();
       }
       throw new java.lang.IllegalStateException();
     }
@@ -5231,6 +5645,15 @@ public class RemoteInterpreterService {
       if (this == that)
         return true;
 
+      boolean this_present_ex = true && this.isSetEx();
+      boolean that_present_ex = true && that.isSetEx();
+      if (this_present_ex || that_present_ex) {
+        if (!(this_present_ex && that_present_ex))
+          return false;
+        if (!this.ex.equals(that.ex))
+          return false;
+      }
+
       return true;
     }
 
@@ -5238,6 +5661,10 @@ public class RemoteInterpreterService {
     public int hashCode() {
       int hashCode = 1;
 
+      hashCode = hashCode * 8191 + ((isSetEx()) ? 131071 : 524287);
+      if (isSetEx())
+        hashCode = hashCode * 8191 + ex.hashCode();
+
       return hashCode;
     }
 
@@ -5249,6 +5676,16 @@ public class RemoteInterpreterService {
 
       int lastComparison = 0;
 
+      lastComparison = java.lang.Boolean.valueOf(isSetEx()).compareTo(other.isSetEx());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetEx()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.ex, other.ex);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
       return 0;
     }
 
@@ -5270,6 +5707,13 @@ public class RemoteInterpreterService {
       java.lang.StringBuilder sb = new java.lang.StringBuilder("init_result(");
       boolean first = true;
 
+      sb.append("ex:");
+      if (this.ex == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.ex);
+      }
+      first = false;
       sb.append(")");
       return sb.toString();
     }
@@ -5313,6 +5757,15 @@ public class RemoteInterpreterService {
             break;
           }
           switch (schemeField.id) {
+            case 1: // EX
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+                struct.ex = new InterpreterRPCException();
+                struct.ex.read(iprot);
+                struct.setExIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
             default:
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
           }
@@ -5328,6 +5781,11 @@ public class RemoteInterpreterService {
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.ex != null) {
+          oprot.writeFieldBegin(EX_FIELD_DESC);
+          struct.ex.write(oprot);
+          oprot.writeFieldEnd();
+        }
         oprot.writeFieldStop();
         oprot.writeStructEnd();
       }
@@ -5345,11 +5803,25 @@ public class RemoteInterpreterService {
       @Override
       public void write(org.apache.thrift.protocol.TProtocol prot, init_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet optionals = new java.util.BitSet();
+        if (struct.isSetEx()) {
+          optionals.set(0);
+        }
+        oprot.writeBitSet(optionals, 1);
+        if (struct.isSetEx()) {
+          struct.ex.write(oprot);
+        }
       }
 
       @Override
       public void read(org.apache.thrift.protocol.TProtocol prot, init_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet incoming = iprot.readBitSet(1);
+        if (incoming.get(0)) {
+          struct.ex = new InterpreterRPCException();
+          struct.ex.read(iprot);
+          struct.setExIsSet(true);
+        }
       }
     }
 
@@ -5833,14 +6305,16 @@ public class RemoteInterpreterService {
   public static class open_result implements org.apache.thrift.TBase<open_result, open_result._Fields>, java.io.Serializable, Cloneable, Comparable<open_result>   {
     private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("open_result");
 
+    private static final org.apache.thrift.protocol.TField EX_FIELD_DESC = new org.apache.thrift.protocol.TField("ex", org.apache.thrift.protocol.TType.STRUCT, (short)1);
 
     private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new open_resultStandardSchemeFactory();
     private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new open_resultTupleSchemeFactory();
 
+    public @org.apache.thrift.annotation.Nullable InterpreterRPCException ex; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-;
+      EX((short)1, "ex");
 
       private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
 
@@ -5856,6 +6330,8 @@ public class RemoteInterpreterService {
       @org.apache.thrift.annotation.Nullable
       public static _Fields findByThriftId(int fieldId) {
         switch(fieldId) {
+          case 1: // EX
+            return EX;
           default:
             return null;
         }
@@ -5895,9 +6371,13 @@ public class RemoteInterpreterService {
         return _fieldName;
       }
     }
+
+    // isset id assignments
     public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
     static {
       java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.EX, new org.apache.thrift.meta_data.FieldMetaData("ex", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, InterpreterRPCException.class)));
       metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
       org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(open_result.class, metaDataMap);
     }
@@ -5905,10 +6385,20 @@ public class RemoteInterpreterService {
     public open_result() {
     }
 
+    public open_result(
+      InterpreterRPCException ex)
+    {
+      this();
+      this.ex = ex;
+    }
+
     /**
      * Performs a deep copy on <i>other</i>.
      */
     public open_result(open_result other) {
+      if (other.isSetEx()) {
+        this.ex = new InterpreterRPCException(other.ex);
+      }
     }
 
     public open_result deepCopy() {
@@ -5917,16 +6407,53 @@ public class RemoteInterpreterService {
 
     @Override
     public void clear() {
+      this.ex = null;
+    }
+
+    @org.apache.thrift.annotation.Nullable
+    public InterpreterRPCException getEx() {
+      return this.ex;
+    }
+
+    public open_result setEx(@org.apache.thrift.annotation.Nullable InterpreterRPCException ex) {
+      this.ex = ex;
+      return this;
+    }
+
+    public void unsetEx() {
+      this.ex = null;
+    }
+
+    /** Returns true if field ex is set (has been assigned a value) and false otherwise */
+    public boolean isSetEx() {
+      return this.ex != null;
+    }
+
+    public void setExIsSet(boolean value) {
+      if (!value) {
+        this.ex = null;
+      }
     }
 
     public void setFieldValue(_Fields field, @org.apache.thrift.annotation.Nullable java.lang.Object value) {
       switch (field) {
+      case EX:
+        if (value == null) {
+          unsetEx();
+        } else {
+          setEx((InterpreterRPCException)value);
+        }
+        break;
+
       }
     }
 
     @org.apache.thrift.annotation.Nullable
     public java.lang.Object getFieldValue(_Fields field) {
       switch (field) {
+      case EX:
+        return getEx();
+
       }
       throw new java.lang.IllegalStateException();
     }
@@ -5938,6 +6465,8 @@ public class RemoteInterpreterService {
       }
 
       switch (field) {
+      case EX:
+        return isSetEx();
       }
       throw new java.lang.IllegalStateException();
     }
@@ -5957,6 +6486,15 @@ public class RemoteInterpreterService {
       if (this == that)
         return true;
 
+      boolean this_present_ex = true && this.isSetEx();
+      boolean that_present_ex = true && that.isSetEx();
+      if (this_present_ex || that_present_ex) {
+        if (!(this_present_ex && that_present_ex))
+          return false;
+        if (!this.ex.equals(that.ex))
+          return false;
+      }
+
       return true;
     }
 
@@ -5964,6 +6502,10 @@ public class RemoteInterpreterService {
     public int hashCode() {
       int hashCode = 1;
 
+      hashCode = hashCode * 8191 + ((isSetEx()) ? 131071 : 524287);
+      if (isSetEx())
+        hashCode = hashCode * 8191 + ex.hashCode();
+
       return hashCode;
     }
 
@@ -5975,6 +6517,16 @@ public class RemoteInterpreterService {
 
       int lastComparison = 0;
 
+      lastComparison = java.lang.Boolean.valueOf(isSetEx()).compareTo(other.isSetEx());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetEx()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.ex, other.ex);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
       return 0;
     }
 
@@ -5996,6 +6548,13 @@ public class RemoteInterpreterService {
       java.lang.StringBuilder sb = new java.lang.StringBuilder("open_result(");
       boolean first = true;
 
+      sb.append("ex:");
+      if (this.ex == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.ex);
+      }
+      first = false;
       sb.append(")");
       return sb.toString();
     }
@@ -6039,6 +6598,15 @@ public class RemoteInterpreterService {
             break;
           }
           switch (schemeField.id) {
+            case 1: // EX
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+                struct.ex = new InterpreterRPCException();
+                struct.ex.read(iprot);
+                struct.setExIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
             default:
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
           }
@@ -6054,6 +6622,11 @@ public class RemoteInterpreterService {
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.ex != null) {
+          oprot.writeFieldBegin(EX_FIELD_DESC);
+          struct.ex.write(oprot);
+          oprot.writeFieldEnd();
+        }
         oprot.writeFieldStop();
         oprot.writeStructEnd();
       }
@@ -6071,11 +6644,25 @@ public class RemoteInterpreterService {
       @Override
       public void write(org.apache.thrift.protocol.TProtocol prot, open_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet optionals = new java.util.BitSet();
+        if (struct.isSetEx()) {
+          optionals.set(0);
+        }
+        oprot.writeBitSet(optionals, 1);
+        if (struct.isSetEx()) {
+          struct.ex.write(oprot);
+        }
       }
 
       @Override
       public void read(org.apache.thrift.protocol.TProtocol prot, open_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet incoming = iprot.readBitSet(1);
+        if (incoming.get(0)) {
+          struct.ex = new InterpreterRPCException();
+          struct.ex.read(iprot);
+          struct.setExIsSet(true);
+        }
       }
     }
 
@@ -6559,14 +7146,16 @@ public class RemoteInterpreterService {
   public static class close_result implements org.apache.thrift.TBase<close_result, close_result._Fields>, java.io.Serializable, Cloneable, Comparable<close_result>   {
     private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("close_result");
 
+    private static final org.apache.thrift.protocol.TField EX_FIELD_DESC = new org.apache.thrift.protocol.TField("ex", org.apache.thrift.protocol.TType.STRUCT, (short)1);
 
     private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new close_resultStandardSchemeFactory();
     private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new close_resultTupleSchemeFactory();
 
+    public @org.apache.thrift.annotation.Nullable InterpreterRPCException ex; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-;
+      EX((short)1, "ex");
 
       private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
 
@@ -6582,6 +7171,8 @@ public class RemoteInterpreterService {
       @org.apache.thrift.annotation.Nullable
       public static _Fields findByThriftId(int fieldId) {
         switch(fieldId) {
+          case 1: // EX
+            return EX;
           default:
             return null;
         }
@@ -6621,9 +7212,13 @@ public class RemoteInterpreterService {
         return _fieldName;
       }
     }
+
+    // isset id assignments
     public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
     static {
       java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.EX, new org.apache.thrift.meta_data.FieldMetaData("ex", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, InterpreterRPCException.class)));
       metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
       org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(close_result.class, metaDataMap);
     }
@@ -6631,10 +7226,20 @@ public class RemoteInterpreterService {
     public close_result() {
     }
 
+    public close_result(
+      InterpreterRPCException ex)
+    {
+      this();
+      this.ex = ex;
+    }
+
     /**
      * Performs a deep copy on <i>other</i>.
      */
     public close_result(close_result other) {
+      if (other.isSetEx()) {
+        this.ex = new InterpreterRPCException(other.ex);
+      }
     }
 
     public close_result deepCopy() {
@@ -6643,16 +7248,53 @@ public class RemoteInterpreterService {
 
     @Override
     public void clear() {
+      this.ex = null;
+    }
+
+    @org.apache.thrift.annotation.Nullable
+    public InterpreterRPCException getEx() {
+      return this.ex;
+    }
+
+    public close_result setEx(@org.apache.thrift.annotation.Nullable InterpreterRPCException ex) {
+      this.ex = ex;
+      return this;
+    }
+
+    public void unsetEx() {
+      this.ex = null;
+    }
+
+    /** Returns true if field ex is set (has been assigned a value) and false otherwise */
+    public boolean isSetEx() {
+      return this.ex != null;
+    }
+
+    public void setExIsSet(boolean value) {
+      if (!value) {
+        this.ex = null;
+      }
     }
 
     public void setFieldValue(_Fields field, @org.apache.thrift.annotation.Nullable java.lang.Object value) {
       switch (field) {
+      case EX:
+        if (value == null) {
+          unsetEx();
+        } else {
+          setEx((InterpreterRPCException)value);
+        }
+        break;
+
       }
     }
 
     @org.apache.thrift.annotation.Nullable
     public java.lang.Object getFieldValue(_Fields field) {
       switch (field) {
+      case EX:
+        return getEx();
+
       }
       throw new java.lang.IllegalStateException();
     }
@@ -6664,6 +7306,8 @@ public class RemoteInterpreterService {
       }
 
       switch (field) {
+      case EX:
+        return isSetEx();
       }
       throw new java.lang.IllegalStateException();
     }
@@ -6683,6 +7327,15 @@ public class RemoteInterpreterService {
       if (this == that)
         return true;
 
+      boolean this_present_ex = true && this.isSetEx();
+      boolean that_present_ex = true && that.isSetEx();
+      if (this_present_ex || that_present_ex) {
+        if (!(this_present_ex && that_present_ex))
+          return false;
+        if (!this.ex.equals(that.ex))
+          return false;
+      }
+
       return true;
     }
 
@@ -6690,6 +7343,10 @@ public class RemoteInterpreterService {
     public int hashCode() {
       int hashCode = 1;
 
+      hashCode = hashCode * 8191 + ((isSetEx()) ? 131071 : 524287);
+      if (isSetEx())
+        hashCode = hashCode * 8191 + ex.hashCode();
+
       return hashCode;
     }
 
@@ -6701,6 +7358,16 @@ public class RemoteInterpreterService {
 
       int lastComparison = 0;
 
+      lastComparison = java.lang.Boolean.valueOf(isSetEx()).compareTo(other.isSetEx());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetEx()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.ex, other.ex);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
       return 0;
     }
 
@@ -6722,6 +7389,13 @@ public class RemoteInterpreterService {
       java.lang.StringBuilder sb = new java.lang.StringBuilder("close_result(");
       boolean first = true;
 
+      sb.append("ex:");
+      if (this.ex == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.ex);
+      }
+      first = false;
       sb.append(")");
       return sb.toString();
     }
@@ -6765,6 +7439,15 @@ public class RemoteInterpreterService {
             break;
           }
           switch (schemeField.id) {
+            case 1: // EX
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+                struct.ex = new InterpreterRPCException();
+                struct.ex.read(iprot);
+                struct.setExIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
             default:
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
           }
@@ -6780,6 +7463,11 @@ public class RemoteInterpreterService {
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.ex != null) {
+          oprot.writeFieldBegin(EX_FIELD_DESC);
+          struct.ex.write(oprot);
+          oprot.writeFieldEnd();
+        }
         oprot.writeFieldStop();
         oprot.writeStructEnd();
       }
@@ -6797,11 +7485,25 @@ public class RemoteInterpreterService {
       @Override
       public void write(org.apache.thrift.protocol.TProtocol prot, close_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet optionals = new java.util.BitSet();
+        if (struct.isSetEx()) {
+          optionals.set(0);
+        }
+        oprot.writeBitSet(optionals, 1);
+        if (struct.isSetEx()) {
+          struct.ex.write(oprot);
+        }
       }
 
       @Override
       public void read(org.apache.thrift.protocol.TProtocol prot, close_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet incoming = iprot.readBitSet(1);
+        if (incoming.get(0)) {
+          struct.ex = new InterpreterRPCException();
+          struct.ex.read(iprot);
+          struct.setExIsSet(true);
+        }
       }
     }
 
@@ -7280,14 +7982,16 @@ public class RemoteInterpreterService {
   public static class reconnect_result implements org.apache.thrift.TBase<reconnect_result, reconnect_result._Fields>, java.io.Serializable, Cloneable, Comparable<reconnect_result>   {
     private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("reconnect_result");
 
+    private static final org.apache.thrift.protocol.TField EX_FIELD_DESC = new org.apache.thrift.protocol.TField("ex", org.apache.thrift.protocol.TType.STRUCT, (short)1);
 
     private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new reconnect_resultStandardSchemeFactory();
     private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new reconnect_resultTupleSchemeFactory();
 
+    public @org.apache.thrift.annotation.Nullable InterpreterRPCException ex; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-;
+      EX((short)1, "ex");
 
       private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
 
@@ -7303,6 +8007,8 @@ public class RemoteInterpreterService {
       @org.apache.thrift.annotation.Nullable
       public static _Fields findByThriftId(int fieldId) {
         switch(fieldId) {
+          case 1: // EX
+            return EX;
           default:
             return null;
         }
@@ -7342,9 +8048,13 @@ public class RemoteInterpreterService {
         return _fieldName;
       }
     }
+
+    // isset id assignments
     public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
     static {
       java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.EX, new org.apache.thrift.meta_data.FieldMetaData("ex", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, InterpreterRPCException.class)));
       metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
       org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(reconnect_result.class, metaDataMap);
     }
@@ -7352,10 +8062,20 @@ public class RemoteInterpreterService {
     public reconnect_result() {
     }
 
+    public reconnect_result(
+      InterpreterRPCException ex)
+    {
+      this();
+      this.ex = ex;
+    }
+
     /**
      * Performs a deep copy on <i>other</i>.
      */
     public reconnect_result(reconnect_result other) {
+      if (other.isSetEx()) {
+        this.ex = new InterpreterRPCException(other.ex);
+      }
     }
 
     public reconnect_result deepCopy() {
@@ -7364,16 +8084,53 @@ public class RemoteInterpreterService {
 
     @Override
     public void clear() {
+      this.ex = null;
+    }
+
+    @org.apache.thrift.annotation.Nullable
+    public InterpreterRPCException getEx() {
+      return this.ex;
+    }
+
+    public reconnect_result setEx(@org.apache.thrift.annotation.Nullable InterpreterRPCException ex) {
+      this.ex = ex;
+      return this;
+    }
+
+    public void unsetEx() {
+      this.ex = null;
+    }
+
+    /** Returns true if field ex is set (has been assigned a value) and false otherwise */
+    public boolean isSetEx() {
+      return this.ex != null;
+    }
+
+    public void setExIsSet(boolean value) {
+      if (!value) {
+        this.ex = null;
+      }
     }
 
     public void setFieldValue(_Fields field, @org.apache.thrift.annotation.Nullable java.lang.Object value) {
       switch (field) {
+      case EX:
+        if (value == null) {
+          unsetEx();
+        } else {
+          setEx((InterpreterRPCException)value);
+        }
+        break;
+
       }
     }
 
     @org.apache.thrift.annotation.Nullable
     public java.lang.Object getFieldValue(_Fields field) {
       switch (field) {
+      case EX:
+        return getEx();
+
       }
       throw new java.lang.IllegalStateException();
     }
@@ -7385,6 +8142,8 @@ public class RemoteInterpreterService {
       }
 
       switch (field) {
+      case EX:
+        return isSetEx();
       }
       throw new java.lang.IllegalStateException();
     }
@@ -7404,6 +8163,15 @@ public class RemoteInterpreterService {
       if (this == that)
         return true;
 
+      boolean this_present_ex = true && this.isSetEx();
+      boolean that_present_ex = true && that.isSetEx();
+      if (this_present_ex || that_present_ex) {
+        if (!(this_present_ex && that_present_ex))
+          return false;
+        if (!this.ex.equals(that.ex))
+          return false;
+      }
+
       return true;
     }
 
@@ -7411,6 +8179,10 @@ public class RemoteInterpreterService {
     public int hashCode() {
       int hashCode = 1;
 
+      hashCode = hashCode * 8191 + ((isSetEx()) ? 131071 : 524287);
+      if (isSetEx())
+        hashCode = hashCode * 8191 + ex.hashCode();
+
       return hashCode;
     }
 
@@ -7422,6 +8194,16 @@ public class RemoteInterpreterService {
 
       int lastComparison = 0;
 
+      lastComparison = java.lang.Boolean.valueOf(isSetEx()).compareTo(other.isSetEx());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetEx()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.ex, other.ex);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
       return 0;
     }
 
@@ -7443,6 +8225,13 @@ public class RemoteInterpreterService {
       java.lang.StringBuilder sb = new java.lang.StringBuilder("reconnect_result(");
       boolean first = true;
 
+      sb.append("ex:");
+      if (this.ex == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.ex);
+      }
+      first = false;
       sb.append(")");
       return sb.toString();
     }
@@ -7486,6 +8275,15 @@ public class RemoteInterpreterService {
             break;
           }
           switch (schemeField.id) {
+            case 1: // EX
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+                struct.ex = new InterpreterRPCException();
+                struct.ex.read(iprot);
+                struct.setExIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
             default:
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
           }
@@ -7501,6 +8299,11 @@ public class RemoteInterpreterService {
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.ex != null) {
+          oprot.writeFieldBegin(EX_FIELD_DESC);
+          struct.ex.write(oprot);
+          oprot.writeFieldEnd();
+        }
         oprot.writeFieldStop();
         oprot.writeStructEnd();
       }
@@ -7518,11 +8321,25 @@ public class RemoteInterpreterService {
       @Override
       public void write(org.apache.thrift.protocol.TProtocol prot, reconnect_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet optionals = new java.util.BitSet();
+        if (struct.isSetEx()) {
+          optionals.set(0);
+        }
+        oprot.writeBitSet(optionals, 1);
+        if (struct.isSetEx()) {
+          struct.ex.write(oprot);
+        }
       }
 
       @Override
       public void read(org.apache.thrift.protocol.TProtocol prot, reconnect_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet incoming = iprot.readBitSet(1);
+        if (incoming.get(0)) {
+          struct.ex = new InterpreterRPCException();
+          struct.ex.read(iprot);
+          struct.setExIsSet(true);
+        }
       }
     }
 
@@ -8222,15 +9039,18 @@ public class RemoteInterpreterService {
     private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("interpret_result");
 
     private static final org.apache.thrift.protocol.TField SUCCESS_FIELD_DESC = new org.apache.thrift.protocol.TField("success", org.apache.thrift.protocol.TType.STRUCT, (short)0);
+    private static final org.apache.thrift.protocol.TField EX_FIELD_DESC = new org.apache.thrift.protocol.TField("ex", org.apache.thrift.protocol.TType.STRUCT, (short)1);
 
     private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new interpret_resultStandardSchemeFactory();
     private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new interpret_resultTupleSchemeFactory();
 
     public @org.apache.thrift.annotation.Nullable RemoteInterpreterResult success; // required
+    public @org.apache.thrift.annotation.Nullable InterpreterRPCException ex; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-      SUCCESS((short)0, "success");
+      SUCCESS((short)0, "success"),
+      EX((short)1, "ex");
 
       private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
 
@@ -8248,6 +9068,8 @@ public class RemoteInterpreterService {
         switch(fieldId) {
           case 0: // SUCCESS
             return SUCCESS;
+          case 1: // EX
+            return EX;
           default:
             return null;
         }
@@ -8294,6 +9116,8 @@ public class RemoteInterpreterService {
       java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
       tmpMap.put(_Fields.SUCCESS, new org.apache.thrift.meta_data.FieldMetaData("success", org.apache.thrift.TFieldRequirementType.DEFAULT, 
           new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, RemoteInterpreterResult.class)));
+      tmpMap.put(_Fields.EX, new org.apache.thrift.meta_data.FieldMetaData("ex", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, InterpreterRPCException.class)));
       metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
       org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(interpret_result.class, metaDataMap);
     }
@@ -8302,10 +9126,12 @@ public class RemoteInterpreterService {
     }
 
     public interpret_result(
-      RemoteInterpreterResult success)
+      RemoteInterpreterResult success,
+      InterpreterRPCException ex)
     {
       this();
       this.success = success;
+      this.ex = ex;
     }
 
     /**
@@ -8315,6 +9141,9 @@ public class RemoteInterpreterService {
       if (other.isSetSuccess()) {
         this.success = new RemoteInterpreterResult(other.success);
       }
+      if (other.isSetEx()) {
+        this.ex = new InterpreterRPCException(other.ex);
+      }
     }
 
     public interpret_result deepCopy() {
@@ -8324,6 +9153,7 @@ public class RemoteInterpreterService {
     @Override
     public void clear() {
       this.success = null;
+      this.ex = null;
     }
 
     @org.apache.thrift.annotation.Nullable
@@ -8351,6 +9181,31 @@ public class RemoteInterpreterService {
       }
     }
 
+    @org.apache.thrift.annotation.Nullable
+    public InterpreterRPCException getEx() {
+      return this.ex;
+    }
+
+    public interpret_result setEx(@org.apache.thrift.annotation.Nullable InterpreterRPCException ex) {
+      this.ex = ex;
+      return this;
+    }
+
+    public void unsetEx() {
+      this.ex = null;
+    }
+
+    /** Returns true if field ex is set (has been assigned a value) and false otherwise */
+    public boolean isSetEx() {
+      return this.ex != null;
+    }
+
+    public void setExIsSet(boolean value) {
+      if (!value) {
+        this.ex = null;
+      }
+    }
+
     public void setFieldValue(_Fields field, @org.apache.thrift.annotation.Nullable java.lang.Object value) {
       switch (field) {
       case SUCCESS:
@@ -8361,6 +9216,14 @@ public class RemoteInterpreterService {
         }
         break;
 
+      case EX:
+        if (value == null) {
+          unsetEx();
+        } else {
+          setEx((InterpreterRPCException)value);
+        }
+        break;
+
       }
     }
 
@@ -8370,6 +9233,9 @@ public class RemoteInterpreterService {
       case SUCCESS:
         return getSuccess();
 
+      case EX:
+        return getEx();
+
       }
       throw new java.lang.IllegalStateException();
     }
@@ -8383,6 +9249,8 @@ public class RemoteInterpreterService {
       switch (field) {
       case SUCCESS:
         return isSetSuccess();
+      case EX:
+        return isSetEx();
       }
       throw new java.lang.IllegalStateException();
     }
@@ -8411,6 +9279,15 @@ public class RemoteInterpreterService {
           return false;
       }
 
+      boolean this_present_ex = true && this.isSetEx();
+      boolean that_present_ex = true && that.isSetEx();
+      if (this_present_ex || that_present_ex) {
+        if (!(this_present_ex && that_present_ex))
+          return false;
+        if (!this.ex.equals(that.ex))
+          return false;
+      }
+
       return true;
     }
 
@@ -8422,6 +9299,10 @@ public class RemoteInterpreterService {
       if (isSetSuccess())
         hashCode = hashCode * 8191 + success.hashCode();
 
+      hashCode = hashCode * 8191 + ((isSetEx()) ? 131071 : 524287);
+      if (isSetEx())
+        hashCode = hashCode * 8191 + ex.hashCode();
+
       return hashCode;
     }
 
@@ -8443,6 +9324,16 @@ public class RemoteInterpreterService {
           return lastComparison;
         }
       }
+      lastComparison = java.lang.Boolean.valueOf(isSetEx()).compareTo(other.isSetEx());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetEx()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.ex, other.ex);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
       return 0;
     }
 
@@ -8471,6 +9362,14 @@ public class RemoteInterpreterService {
         sb.append(this.success);
       }
       first = false;
+      if (!first) sb.append(", ");
+      sb.append("ex:");
+      if (this.ex == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.ex);
+      }
+      first = false;
       sb.append(")");
       return sb.toString();
     }
@@ -8526,6 +9425,15 @@ public class RemoteInterpreterService {
                 org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
               }
               break;
+            case 1: // EX
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+                struct.ex = new InterpreterRPCException();
+                struct.ex.read(iprot);
+                struct.setExIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
             default:
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
           }
@@ -8546,6 +9454,11 @@ public class RemoteInterpreterService {
           struct.success.write(oprot);
           oprot.writeFieldEnd();
         }
+        if (struct.ex != null) {
+          oprot.writeFieldBegin(EX_FIELD_DESC);
+          struct.ex.write(oprot);
+          oprot.writeFieldEnd();
+        }
         oprot.writeFieldStop();
         oprot.writeStructEnd();
       }
@@ -8567,21 +9480,32 @@ public class RemoteInterpreterService {
         if (struct.isSetSuccess()) {
           optionals.set(0);
         }
-        oprot.writeBitSet(optionals, 1);
+        if (struct.isSetEx()) {
+          optionals.set(1);
+        }
+        oprot.writeBitSet(optionals, 2);
         if (struct.isSetSuccess()) {
           struct.success.write(oprot);
         }
+        if (struct.isSetEx()) {
+          struct.ex.write(oprot);
+        }
       }
 
       @Override
       public void read(org.apache.thrift.protocol.TProtocol prot, interpret_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
-        java.util.BitSet incoming = iprot.readBitSet(1);
+        java.util.BitSet incoming = iprot.readBitSet(2);
         if (incoming.get(0)) {
           struct.success = new RemoteInterpreterResult();
           struct.success.read(iprot);
           struct.setSuccessIsSet(true);
         }
+        if (incoming.get(1)) {
+          struct.ex = new InterpreterRPCException();
+          struct.ex.read(iprot);
+          struct.setExIsSet(true);
+        }
       }
     }
 
@@ -9175,14 +10099,16 @@ public class RemoteInterpreterService {
   public static class cancel_result implements org.apache.thrift.TBase<cancel_result, cancel_result._Fields>, java.io.Serializable, Cloneable, Comparable<cancel_result>   {
     private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("cancel_result");
 
... 4438 lines suppressed ...