From 0e9973a017e2584807e8385c32b1a54dd64d83a7 Mon Sep 17 00:00:00 2001 From: majialong Date: Fri, 24 Jul 2026 00:17:36 +0800 Subject: [PATCH] [ISSUE #10656] Fix incorrect end timestamp recovery in tiered index files --- .../tieredstore/index/IndexStoreFile.java | 2 +- .../tieredstore/index/IndexStoreFileTest.java | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/tieredstore/src/main/java/org/apache/rocketmq/tieredstore/index/IndexStoreFile.java b/tieredstore/src/main/java/org/apache/rocketmq/tieredstore/index/IndexStoreFile.java index 8fd4b2961b9..d94a3b10e9e 100644 --- a/tieredstore/src/main/java/org/apache/rocketmq/tieredstore/index/IndexStoreFile.java +++ b/tieredstore/src/main/java/org/apache/rocketmq/tieredstore/index/IndexStoreFile.java @@ -114,7 +114,7 @@ public IndexStoreFile(MessageStoreConfig storeConfig, long timestamp) throws IOE this.fileChannel = this.mappedFile.getFileChannel(); this.beginTimestamp.set(timestamp); - this.endTimestamp.set(byteBuffer.getLong(INDEX_BEGIN_TIME_STAMP)); + this.endTimestamp.set(byteBuffer.getLong(INDEX_END_TIME_STAMP)); this.hashSlotCount.set(byteBuffer.getInt(INDEX_SLOT_COUNT)); this.indexItemCount.set(byteBuffer.getInt(INDEX_ITEM_INDEX)); this.flushNewMetadata(byteBuffer, indexItemMaxCount == this.indexItemCount.get() + 1); diff --git a/tieredstore/src/test/java/org/apache/rocketmq/tieredstore/index/IndexStoreFileTest.java b/tieredstore/src/test/java/org/apache/rocketmq/tieredstore/index/IndexStoreFileTest.java index dbad2d1abad..60ebfc2a0be 100644 --- a/tieredstore/src/test/java/org/apache/rocketmq/tieredstore/index/IndexStoreFileTest.java +++ b/tieredstore/src/test/java/org/apache/rocketmq/tieredstore/index/IndexStoreFileTest.java @@ -229,6 +229,21 @@ public void recoverFileTest() throws IOException { Assert.assertEquals(indexCount, indexStoreFile.getIndexItemCount()); } + @Test + public void recoverEndTimestampTest() throws IOException { + long beginTimestamp = indexStoreFile.getTimestamp(); + long endTimestamp = beginTimestamp + 10000L; + Assert.assertEquals(AppendResult.SUCCESS, indexStoreFile.putKey( + TOPIC_NAME, TOPIC_ID, QUEUE_ID, KEY_SET, MESSAGE_OFFSET, MESSAGE_SIZE, endTimestamp)); + Assert.assertEquals(endTimestamp, indexStoreFile.getEndTimestamp()); + + indexStoreFile.shutdown(); + indexStoreFile = new IndexStoreFile(storeConfig, beginTimestamp); + + Assert.assertEquals(beginTimestamp, indexStoreFile.getTimestamp()); + Assert.assertEquals(endTimestamp, indexStoreFile.getEndTimestamp()); + } + @Test public void doCompactionTest() { long timestamp = indexStoreFile.getTimestamp();