[ https://issues.apache.org/jira/browse/HBASE-28287?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17800318#comment-17800318 ]
WenjingLiu commented on HBASE-28287: ------------------------------------ Hi [~zhangduo] , Here is the exception when I read mob data from a Time-To-Live table: hbase(main):003:0> get 'tbl1_1days', 'rowkey1' COLUMN CELL ERROR: org.apache.hadoop.hbase.DoNotRetryIOException: java.io.FileNotFoundException: File does not exist: \{HBASE_DIR}/archive/\{namespace}/\{tableName}/\{regionEncodedName}/\{columnFamilyName}/\{mobFileName} at org.apache.hadoop.hbase.regionserver.HMobStore.readCell(HMobStore.java:434) at org.apache.hadoop.hbase.regionserver.HMobStore.resolve(HMobStore.java:348) at org.apache.hadoop.hbase.regionserver.MobStoreScanner.next(MobStoreScanner.java:73) at org.apache.hadoop.hbase.regionserver.KeyValueHeap.next(KeyValueHeap.java:178) at org.apache.hadoop.hbase.regionserver.HRegion$RegionScannerImpl.populateResult(HRegion.java:6636) at org.apache.hadoop.hbase.regionserver.HRegion$RegionScannerImpl.nextInternal(HRegion.java:6824) at org.apache.hadoop.hbase.regionserver.HRegion$RegionScannerImpl.nextRaw(HRegion.java:6573) at org.apache.hadoop.hbase.regionserver.HRegion$RegionScannerImpl.next(HRegion.java:6550) at org.apache.hadoop.hbase.regionserver.HRegion$RegionScannerImpl.next(HRegion.java:6537) at org.apache.hadoop.hbase.regionserver.RSRpcServices.get(RSRpcServices.java:2599) at org.apache.hadoop.hbase.regionserver.RSRpcServices.get(RSRpcServices.java:2520) at org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos$ClientService$2.callBlockingMethod(ClientProtos.java:41998) at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:413) at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:138) at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:338) at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:318) Caused by: java.io.FileNotFoundException: File does not exist: \{HBASE_DIR}/archive/\{namespace}/\{tableName}/\{regionEncodedName}/\{columnFamilyName}/\{mobFileName} at org.apache.hadoop.hdfs.DistributedFileSystem$29.doCall(DistributedFileSystem.java:1587) at org.apache.hadoop.hdfs.DistributedFileSystem$29.doCall(DistributedFileSystem.java:1580) at org.apache.hadoop.fs.FileSystemLinkResolver.resolve(FileSystemLinkResolver.java:81) at org.apache.hadoop.hdfs.DistributedFileSystem.getFileStatus(DistributedFileSystem.java:1595) at org.apache.hadoop.fs.FilterFileSystem.getFileStatus(FilterFileSystem.java:454) at org.apache.hadoop.hbase.regionserver.StoreFileInfo.<init>(StoreFileInfo.java:139) at org.apache.hadoop.hbase.regionserver.HStoreFile.<init>(HStoreFile.java:220) at org.apache.hadoop.hbase.mob.CachedMobFile.create(CachedMobFile.java:49) at org.apache.hadoop.hbase.mob.MobFileCache.openFile(MobFileCache.java:221) at org.apache.hadoop.hbase.regionserver.HMobStore.readCell(HMobStore.java:395) ... 15 more For usage try 'help "get"' Took 1.2261 seconds Looking forward to your feedback. > MOB HFiles are expired earlier than their reference data > -------------------------------------------------------- > > Key: HBASE-28287 > URL: https://issues.apache.org/jira/browse/HBASE-28287 > Project: HBase > Issue Type: Bug > Components: mob > Affects Versions: 2.5.0 > Reporter: WenjingLiu > Priority: Major > > I have observed that mob HFiles are expired earlier than their reference > data. Upon reviewing the relevant code, it was observed that the standard > expired timestamp is not accurately set. The issue arises from the fact that > if we do not set the calendar to the MILLISECOND level, a three-digit random > number is appended to the end of the expired timestamp, leading to > inaccuracies. > For instance, if we write mob data to a Time-To-Live (1 day) table at 22:00 > on 12/20/2023, and the ExpiredMobFileCleaner begins to work at 20:00 on > 12/21/2023, the timestamp of the mob HFile will be parsed as 1703001600000, > and the StandardExpiredTS is calculated as 1703001600314 with the three-digit > random number as MILLISECOND. Consequently, the StandardExpiredTS >= > MobHfileTS, thus indicating that the mob HFile should be expired. However, it > is observed that this mob HFile only exists for 22 hours, which is less than > the specified one-day-time threshold. -- This message was sent by Atlassian Jira (v8.20.10#820010)