Index: src/main/java/org/apache/hadoop/hbase/util/FSTableDescriptors.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/util/FSTableDescriptors.java (revision 1573968) +++ src/main/java/org/apache/hadoop/hbase/util/FSTableDescriptors.java (working copy) @@ -229,7 +229,15 @@ if (HConstants.HBASE_NON_USER_TABLE_DIRS.contains(htd.getNameAsString())) { throw new NotImplementedException(); } - if (!this.fsreadonly) updateHTableDescriptor(this.fs, this.rootdir, htd); + if (fsreadonly) { + // Cannot cache here. + // We can't know if a modtime from the most recent file found in a + // directory listing at some arbitrary point in time still corresponds + // to the latest, nor that our htd is the latest. + return; + } + updateHTableDescriptor(this.fs, this.rootdir, htd); + // Cache with the modtime of the descriptor we wrote String tableName = htd.getNameAsString(); long modtime = getTableInfoModtime(this.fs, this.rootdir, tableName); long dirmodtime = getTableDirModtime(this.fs, this.rootdir, tableName);