{"record":{"id":"59abaa9b41a8f923","repo":"apache/hadoop","slug":"state-store-does-not-have-an-interface-for-59abaa","errorCode":null,"errorMessage":"State Store does not have an interface for {}","messagePattern":"State Store does not have an interface for (.+?)","errorType":"exception","errorClass":"IOException","httpStatus":null,"severity":"error","filePath":"hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/resolver/MountTableResolver.java","lineNumber":214,"sourceCode":"   *\n   * @return Router for this resolver.\n   */\n  protected Router getRouter() {\n    return this.router;\n  }\n\n  /**\n   * Get the mount table store for this resolver.\n   *\n   * @return Mount table store.\n   * @throws IOException If it cannot connect to the State Store.\n   */\n  protected MountTableStore getMountTableStore() throws IOException {\n    if (this.mountTableStore == null) {\n      this.mountTableStore = this.stateStore.getRegisteredRecordStore(\n          MountTableStore.class);\n      if (this.mountTableStore == null) {\n        throw new IOException(\"State Store does not have an interface for \" +\n            MountTableStore.class);\n      }\n    }\n    return this.mountTableStore;\n  }\n\n  /**\n   * Add a mount entry to the table.\n   *\n   * @param entry The mount table record to add from the state store.\n   */\n  public void addEntry(final MountTable entry) {\n    writeLock.lock();\n    try {\n      String srcPath = entry.getSourcePath();\n      this.tree.put(srcPath, entry);\n      invalidateLocationCache(srcPath);\n    } finally {","sourceCodeStart":196,"sourceCodeEnd":232,"githubUrl":"https://github.com/apache/hadoop/blob/2add9630210752f88ceb1bb74eb65e37bf41da8e/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/resolver/MountTableResolver.java#L196-L232","documentation":"MountTableResolver.getMountTableStore() lazily fetches the MountTableStore record store from the State Store; if stateStore.getRegisteredRecordStore(MountTableStore.class) returns null it throws IOException('State Store does not have an interface for MountTableStore'), meaning the state store driver never registered the mount table record store. Every mount table read (addEntry, getMounts, lookups after cache load) funnels through this method.","triggerScenarios":"The router's StateStoreService initialized with a driver that did not register MountTableStore — driver misconfiguration, backend failure at registration time, custom driver without mount table support — or the resolver is constructed/used before state store registration completed.","commonSituations":"dfs.federation.router.store.driver pointing at the wrong class; ZooKeeper/DB unreachable during router startup; tools embedding MountTableResolver against a bare StateStore without registering stores first.","solutions":["Confirm dfs.federation.router.store.driver is a supported implementation and the backend is reachable from the router host","Check router logs for state store initialization errors; the mount table store registers during StateStoreService init","Restart the router after state store recovery so MountTableStore re-registers","In embedded/tool usage, register record stores on the StateStore before creating the resolver"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// Verify mount table store registration before use\nif (stateStore.getRegisteredRecordStore(MountTableStore.class) == null) {\n  throw new IOException(\n      \"MountTableStore not registered in state store; \"\n          + \"check dfs.federation.router.store.driver\");\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Health-check the state store driver before starting routers","In embedded usage, register record stores on the StateStore before constructing MountTableResolver","Alert on state store service startup failures so resolvers never run unregistered"],"tags":["hadoop","rbf","state-store","mount-table","resolver","configuration"],"backgroundTag":"store-interface-not-registered","analyzedSha":"2add9630210752f88ceb1bb74eb65e37bf41da8e","analyzedAt":"2026-08-22T19:55:07.957Z","schemaVersion":2},"datasetVersion":"2026-08-22T20:17:22.307Z"}