Skip to content

Commit 1a8e7cb

Browse files
authored
[ISSUE #7345] Fix wrong result of searchOffset in tiered storage
1 parent dddd58d commit 1a8e7cb

2 files changed

Lines changed: 46 additions & 5 deletions

File tree

tieredstore/src/main/java/org/apache/rocketmq/tieredstore/file/TieredFlatFile.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -365,7 +365,10 @@ protected TieredFileSegment getFileByTime(long timestamp, BoundaryType boundaryT
365365
if (!segmentList.isEmpty()) {
366366
return boundaryType == BoundaryType.UPPER ? segmentList.get(0) : segmentList.get(segmentList.size() - 1);
367367
}
368-
return fileSegmentList.isEmpty() ? null : fileSegmentList.get(fileSegmentList.size() - 1);
368+
if (fileSegmentList.isEmpty()) {
369+
return null;
370+
}
371+
return boundaryType == BoundaryType.UPPER ? fileSegmentList.get(fileSegmentList.size() - 1) : fileSegmentList.get(0);
369372
} finally {
370373
fileSegmentLock.readLock().unlock();
371374
}

tieredstore/src/test/java/org/apache/rocketmq/tieredstore/file/TieredFlatFileTest.java

Lines changed: 42 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,7 @@
1616
*/
1717
package org.apache.rocketmq.tieredstore.file;
1818

19-
import java.io.IOException;
20-
import java.nio.ByteBuffer;
21-
import java.util.ArrayList;
22-
import java.util.List;
19+
import org.apache.rocketmq.common.BoundaryType;
2320
import org.apache.rocketmq.common.message.MessageQueue;
2421
import org.apache.rocketmq.tieredstore.TieredStoreTestUtil;
2522
import org.apache.rocketmq.tieredstore.common.FileSegmentType;
@@ -35,6 +32,11 @@
3532
import org.junit.Before;
3633
import org.junit.Test;
3734

35+
import java.io.IOException;
36+
import java.nio.ByteBuffer;
37+
import java.util.ArrayList;
38+
import java.util.List;
39+
3840
public class TieredFlatFileTest {
3941

4042
private final String storePath = TieredStoreTestUtil.getRandomStorePath();
@@ -301,4 +303,40 @@ public void testRollingNewFile() {
301303
fileQueue.rollingNewFile();
302304
Assert.assertEquals(2, fileQueue.getFileSegmentCount());
303305
}
306+
307+
@Test
308+
public void testGetFileByTime() {
309+
String filePath = TieredStoreUtil.toPath(queue);
310+
TieredFlatFile tieredFlatFile = fileQueueFactory.createFlatFileForCommitLog(filePath);
311+
TieredFileSegment fileSegment1 = new MemoryFileSegment(FileSegmentType.CONSUME_QUEUE, queue, 1100, storeConfig);
312+
fileSegment1.setMinTimestamp(100);
313+
fileSegment1.setMaxTimestamp(200);
314+
315+
TieredFileSegment fileSegment2 = new MemoryFileSegment(FileSegmentType.CONSUME_QUEUE, queue, 1100, storeConfig);
316+
fileSegment2.setMinTimestamp(200);
317+
fileSegment2.setMaxTimestamp(300);
318+
319+
tieredFlatFile.getFileSegmentList().add(fileSegment1);
320+
tieredFlatFile.getFileSegmentList().add(fileSegment2);
321+
322+
TieredFileSegment segmentUpper = tieredFlatFile.getFileByTime(400, BoundaryType.UPPER);
323+
Assert.assertEquals(fileSegment2, segmentUpper);
324+
325+
TieredFileSegment segmentLower = tieredFlatFile.getFileByTime(400, BoundaryType.LOWER);
326+
Assert.assertEquals(fileSegment2, segmentLower);
327+
328+
329+
TieredFileSegment segmentUpper2 = tieredFlatFile.getFileByTime(0, BoundaryType.UPPER);
330+
Assert.assertEquals(fileSegment1, segmentUpper2);
331+
332+
TieredFileSegment segmentLower2 = tieredFlatFile.getFileByTime(0, BoundaryType.LOWER);
333+
Assert.assertEquals(fileSegment1, segmentLower2);
334+
335+
336+
TieredFileSegment segmentUpper3 = tieredFlatFile.getFileByTime(200, BoundaryType.UPPER);
337+
Assert.assertEquals(fileSegment1, segmentUpper3);
338+
339+
TieredFileSegment segmentLower3 = tieredFlatFile.getFileByTime(200, BoundaryType.LOWER);
340+
Assert.assertEquals(fileSegment2, segmentLower3);
341+
}
304342
}

0 commit comments

Comments
 (0)