code: public void start(String channelId) throws AlluxioStatusException {
      try {
        LOG.debug("Starting SASL handshake for ChannelId:{}", channelId);
        // Send the server initial message.
        mRequestObserver.onNext(mSaslHandshakeClientHandler.getInitialMessage(channelId));
        // Wait until authentication status changes.
        mAuthenticated.get(mGrpcAuthTimeoutMs, TimeUnit.MILLISECONDS);
      } catch (SaslException se) {
        throw new UnauthenticatedException(se.getMessage(), se);
      } catch (InterruptedException ie) {
        Thread.currentThread().interrupt();
        throw new UnavailableException(ie.getMessage(), ie);
      } catch (ExecutionException e) {
        Throwable cause = (e.getCause() != null) ? e.getCause() : e;
        if (cause != null && cause instanceof StatusRuntimeException) {
          StatusRuntimeException sre = (StatusRuntimeException) cause;
          // If caught unimplemented, that means server does not support authentication.
          if (sre.getStatus().getCode() == Status.Code.UNIMPLEMENTED) {
            throw new UnauthenticatedException("Authentication is disabled on target host.");
          }
          throw AlluxioStatusException.fromStatusRuntimeException((StatusRuntimeException) cause);
        }
        throw new UnknownException(cause.getMessage(), cause);
      } catch (TimeoutException e) {
        throw new UnavailableException(e);
      }
    }
docs: Starts authentication with the server and wait until completion.
  @param channelId channel that is authenticating with the server
  @throws UnauthenticatedException