{"record":{"id":"5f3af1c5d7a4c255","repo":"apache/hadoop","slug":"hdfsconncheckkpath-conn-usrname-s-mtime-on-s","errorCode":null,"errorMessage":"hdfsConnCheckKpath(conn.usrname=%s): mtime on '%s' has changed from '%s' to '%s'.  Condemning the connection because our cached Kerberos credentials have probably changed.\n","messagePattern":"hdfsConnCheckKpath\\(conn\\.usrname=(.+?)\\): mtime on '(.+?)' has changed from '(.+?)' to '(.+?)'\\.  Condemning the connection because our cached Kerberos credentials have probably changed\\.\n","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/fuse-dfs/fuse_connect.c","lineNumber":308,"sourceCode":"\n  if (stat(conn->kpath, &st) < 0) {\n    ret = errno;\n    if (ret == ENOENT) {\n      fprintf(stderr, \"hdfsConnCheckKpath(conn.usrname=%s): the kerberos \"\n              \"ticket cache file '%s' has disappeared.  Condemning the \"\n              \"connection.\\n\", conn->usrname, conn->kpath);\n    } else {\n      fprintf(stderr, \"hdfsConnCheckKpath(conn.usrname=%s): stat(%s) \"\n              \"failed with error code %d.  Pessimistically condemning the \"\n              \"connection.\\n\", conn->usrname, conn->kpath, ret);\n    }\n    return -ret;\n  }\n  if ((st.st_mtim.tv_sec != conn->kPathMtime) ||\n      (st.st_mtim.tv_nsec != conn->kPathMtimeNs)) {\n    timeToStr(conn->kPathMtime, prevTimeBuf, sizeof(prevTimeBuf));\n    timeToStr(st.st_mtim.tv_sec, newTimeBuf, sizeof(newTimeBuf));\n    fprintf(stderr, \"hdfsConnCheckKpath(conn.usrname=%s): mtime on '%s' \"\n            \"has changed from '%s' to '%s'.  Condemning the connection \"\n            \"because our cached Kerberos credentials have probably \"\n            \"changed.\\n\", conn->usrname, conn->kpath, prevTimeBuf, newTimeBuf);\n    return -EINTERNAL;\n  }\n  return 0;\n}\n\n/**\n * Cache expiration logic.\n *\n * This function is called periodically by the cache expiration thread.  For\n * each FUSE connection not currently in use (refcnt == 0) it will decrement the\n * expirationCount for that connection.  Once the expirationCount reaches 0 for\n * a connection, it can be garbage collected.\n *\n * We also check to see if the Kerberos credentials have changed.  If so, the\n * connecton is immediately condemned, even if it is currently in use.","sourceCodeStart":290,"sourceCodeEnd":326,"githubUrl":"https://github.com/apache/hadoop/blob/2add9630210752f88ceb1bb74eb65e37bf41da8e/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/fuse-dfs/fuse_connect.c#L290-L326","documentation":"Error \"hdfsConnCheckKpath(conn.usrname=%s): mtime on '%s' has changed from '%s' to '%s'.  Condemning the connection because our cached Kerberos credentials have probably changed.\n\" thrown in apache/hadoop.","triggerScenarios":"Thrown at hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/fuse-dfs/fuse_connect.c:308 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Avoid refreshing or replacing the Kerberos ticket cache while fuse-dfs is running; re-run kinit and restart/retry the FUSE operation so a new connection with current credentials is established."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"2add9630210752f88ceb1bb74eb65e37bf41da8e","analyzedAt":"2026-08-22T19:55:07.957Z","schemaVersion":2},"datasetVersion":"2026-08-23T01:17:44.959Z"}