code: private RPC<V> handleLocal() {
      assert _dt.getCompleter()==null;
      _dt.setCompleter(new H2O.H2OCallback<DTask>() {
          @Override public void callback(DTask dt) {
            synchronized(RPC.this) {
              _done = true;
              RPC.this.notifyAll();
            }
            doAllCompletions();
          }
          @Override public boolean onExceptionalCompletion(Throwable ex, CountedCompleter dt) {
            synchronized(RPC.this) { // Might be called several times
              if( _done ) return true; // Filter down to 1st exceptional completion
              _dt.setException(ex);
              // must be the last set before notify call cause the waiting thread
              // can wake up at any moment independently on notify
              _done = true;
              RPC.this.notifyAll();
            }
            doAllCompletions();
            return true;
          }
        });
      H2O.submitTask(_dt);
      return this;
    }
docs: If running on self, just submit to queues & do locally