@Override
  public HasUserPermissionsResponse hasUserPermissions(RpcController controller,
    HasUserPermissionsRequest request) throws ServiceException {
    try {
      server.checkInitialized();
      if (server.cpHost != null && hasAccessControlServiceCoprocessor(server.cpHost)) {
        User caller = RpcServer.getRequestUser().orElse(null);
        String userName =
          request.hasUserName() ? request.getUserName().toStringUtf8() : caller.getShortName();
        List<Permission> permissions = new ArrayList<>();
        for (int i = 0; i < request.getPermissionCount(); i++) {
          permissions.add(ShadedAccessControlUtil.toPermission(request.getPermission(i)));
        }
        server.getMasterCoprocessorHost().preHasUserPermissions(userName, permissions);
        if (!caller.getShortName().equals(userName)) {
          List<String> groups = AccessChecker.getUserGroups(userName);
          caller = new InputUser(userName, groups.toArray(new String[groups.size()]));
        }
        List<Boolean> hasUserPermissions = new ArrayList<>();
        if (getAccessChecker() != null) {
          for (Permission permission : permissions) {
            boolean hasUserPermission =
              getAccessChecker().hasUserPermission(caller, "hasUserPermissions", permission);
            hasUserPermissions.add(hasUserPermission);
          }
        } else {
          for (int i = 0; i < permissions.size(); i++) {
            hasUserPermissions.add(true);
          }
        }
        server.getMasterCoprocessorHost().postHasUserPermissions(userName, permissions);
        HasUserPermissionsResponse.Builder builder =
          HasUserPermissionsResponse.newBuilder().addAllHasUserPermission(hasUserPermissions);
        return builder.build();
      } else {
        throw new DoNotRetryIOException(
          new UnsupportedOperationException(AccessController.class.getName() + " is not loaded"));
      }
    } catch (IOException ioe) {
      throw new ServiceException(ioe);
    }
  }
Bypass specified procedure to completion. Procedure is marked completed but no actual work is
done from the current state/ step onwards. Parents of the procedure are also marked for bypass.
NOTE: this is a dangerous operation and may be used to unstuck buggy procedures. This may leave
system in incoherent state. This may need to be followed by some cleanup steps/ actions by
operator.
@return BypassProcedureToCompletionResponse indicating success or failure
hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java