{"record":{"id":"0bf85b05ebf45e39","repo":"apache/hadoop","slug":"serverside-implements-the-following-requested-0bf85b","errorCode":null,"errorMessage":"Serverside implements {}. The following requested protocol is unknown: {}","messagePattern":"Serverside implements (.+?)\\. The following requested protocol is unknown: (.+?)","errorType":"exception","errorClass":"IOException","httpStatus":null,"severity":"error","filePath":"hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ha/protocolPB/ZKFCProtocolServerSideTranslatorPB.java","lineNumber":78,"sourceCode":"    try {\n      server.gracefulFailover();\n      return GracefulFailoverResponseProto.getDefaultInstance();\n    } catch (IOException e) {\n      throw new ServiceException(e);\n    }\n  }\n\n  @Override\n  public long getProtocolVersion(String protocol, long clientVersion)\n      throws IOException {\n    return RPC.getProtocolVersion(ZKFCProtocolPB.class);\n  }\n\n  @Override\n  public ProtocolSignature getProtocolSignature(String protocol,\n      long clientVersion, int clientMethodsHash) throws IOException {\n    if (!protocol.equals(RPC.getProtocolName(ZKFCProtocolPB.class))) {\n      throw new IOException(\"Serverside implements \" +\n          RPC.getProtocolName(ZKFCProtocolPB.class) +\n          \". The following requested protocol is unknown: \" + protocol);\n    }\n\n    return ProtocolSignature.getProtocolSignature(clientMethodsHash,\n        RPC.getProtocolVersion(ZKFCProtocolPB.class),\n        HAServiceProtocolPB.class);\n  }\n\n}\n","sourceCodeStart":60,"sourceCodeEnd":89,"githubUrl":"https://github.com/apache/hadoop/blob/2add9630210752f88ceb1bb74eb65e37bf41da8e/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ha/protocolPB/ZKFCProtocolServerSideTranslatorPB.java#L60-L89","documentation":"Same protocol negotiation guard as HAServiceProtocolServerSideTranslatorPB, but for the ZKFC control RPC: the server implements org.apache.hadoop.ha.protocolPB.ZKFCProtocolPB and rejects any client requesting a different protocol name with IOException. This RPC is used by 'hdfs haadmin -failover' to talk to each ZKFC's local port (default 8019).","triggerScenarios":"'hdfs haadmin -failover' or ZKFCProtocol proxy creation where the client's hadoop-common provides a different protocol class (version skew); a hand-written client sending another protocol name to the ZKFC RPC address.","commonSituations":"Running hadoop-client of a different minor release than the cluster nodes; deploying a patched hadoop-common only on servers; gateway hosts with stale jars.","solutions":["Match client and server Hadoop versions (hadoop-common jar on the haadmin host must equal the cluster's)","Check for duplicate/relocated hadoop-common jars on the client classpath","Verify you are connecting to the ZKFC RPC address (dfs.ha.zkfc.port, default 8019) with a ZKFCProtocolPB proxy, not another protocol"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// verify the ZKFC RPC endpoint speaks the protocol you built against\nString expected = \"org.apache.hadoop.ha.protocolPB.ZKFCProtocolPB\";\nassert expected.equals(HAServiceProtocolPB.class.getName().replace(\"HAService\", \"ZKFC\")) : \"sanity\";\n// real check: run 'hadoop version' on gateway and cluster and compare","typeGuard":null,"tryCatchPattern":"try {\n  zkfcProxy.gracefulFailover(timeout);\n} catch (IOException e) {\n  if (e.getMessage() != null && e.getMessage().contains(\"requested protocol is unknown\")) {\n    throw new IllegalStateException(\"hadoop version mismatch between haadmin client and ZKFC\", e);\n  }\n}","preventionTips":["Run haadmin from a host with the same Hadoop distribution as the cluster","Synchronize hadoop-common upgrades so all ZKFCs and gateways move together","Smoke-test 'hdfs haadmin -getServiceState' after upgrades before relying on failover"],"tags":["hadoop","rpc","protocol","version-mismatch","zkfc","ha"],"backgroundTag":"rpc-protocol-version-mismatch","analyzedSha":"2add9630210752f88ceb1bb74eb65e37bf41da8e","analyzedAt":"2026-08-22T19:55:07.957Z","schemaVersion":2},"datasetVersion":"2026-08-23T01:17:44.959Z"}