apache/hadoop · error · RpcServerException

Processing RPC request caught

Error message

Processing RPC request caught 

What it means

While preparing a coordinated call, the server validates the client's stateId through alignmentContext.receiveRequestState(); any IOException it throws is wrapped as RpcServerException('Processing RPC request caught '). With Observer reads / Router federated state (GlobalStateIdContext), this fires when an Observer NameNode gets a request without a stateId (client not using ObserverReadProxyProvider) or when the Observer is too far behind the client (RetriableException).

Source

Thrown at hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/Server.java:3051

          String methodName;
          String protoName;
          ProtobufRpcEngine2.RpcProtobufRequest req =
              (ProtobufRpcEngine2.RpcProtobufRequest) call.rpcRequest;
          try {
            methodName = req.getRequestHeader().getMethodName();
            protoName = req.getRequestHeader().getDeclaringClassProtocolName();
            if (alignmentContext.isCoordinatedCall(protoName, methodName)) {
              call.markCallCoordinated(true);
              long stateId;
              stateId = alignmentContext.receiveRequestState(
                  header, getMaxIdleTime());
              call.setClientStateId(stateId);
              if (header.hasRouterFederatedState()) {
                call.setFederatedNamespaceState(header.getRouterFederatedState());
              }
            }
          } catch (IOException ioe) {
            throw new RpcServerException("Processing RPC request caught ", ioe);
          }
        }

        try {
          internalQueueCall(call);
        } catch (RpcServerException rse) {
          throw rse;
        } catch (IOException ioe) {
          throw new FatalRpcServerException(
              RpcErrorCodeProto.ERROR_RPC_SERVER, ioe);
        }
        incRpcCount();  // Increment the rpc count
      } finally {
        AuthorizationContext.clear();
      }
    }

    /**

View on GitHub (pinned to 2add963021)

Solutions

  1. Configure clients to use ObserverReadProxyProvider (dfs.client.failover.proxy.provider.<ns>=...ObserverReadProxyProvider) when Observer reads are enabled
  2. RetriableException is retriable: let the client retry (retry policies / multi-proxy failover to another Observer or the Active) instead of failing the job
  3. If Observers lag persistently, investigate edit-log tailing/checkpointing on the Observer so its stateId catches up
  4. For Router federation, verify state store sync and router federated state configuration (see HDFS Router state alignment docs)

Example fix

// before: client without observer support
conf.set("dfs.client.failover.proxy.provider." + ns,
    "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider");

// after: observer-aware provider so requests carry a stateId
conf.set("dfs.client.failover.proxy.provider." + ns,
    "org.apache.hadoop.hdfs.server.namenode.ha.ObserverReadProxyProvider");
Defensive patterns

Strategy: retry

Validate before calling

// client: enable observer-aware failover before opening connections
conf.set("dfs.client.failover.proxy.provider." + ns,
    "org.apache.hadoop.hdfs.server.namenode.ha.ObserverReadProxyProvider");

Try / catch

try {
  return proxy.getMtimeInfo(path);
} catch (RemoteException re) {
  if (re.getClassName().contains("RetriableException")
      || re.getClassName().contains("StandbyException")) {
    // Observer behind or stateId missing: retry via failover policy / Active NN
    return retryWithFailover(() -> proxy.getMtimeInfo(path));
  } else { throw re; }
}

Prevention

When it happens

Trigger: A client uses ConfiguredFailoverProxyProvider against a cluster with Observer NameNodes, so requests carry no stateId; an Observer's stateId lags the client's beyond the estimated catch-up window (clientStateId - serverStateId > threshold); Router federated state alignment detects inconsistent state across namespaces.

Common situations: Enabling dfs.internal.nameservices / Observer reads (RBF or Observer NameNode) while clients keep old proxy providers; observers falling behind after a large edit-log burst or checkpoint lag; failover races where a client's cached stateId is ahead of a freshly promoted node.

Related errors


AI-assisted analysis of apache/hadoop@2add963021 (2026-08-22). Data as JSON: /api/errors/23a7614b1d6b2d17. Report an issue: GitHub.