From 7bb061158bedff0013bb9d83fe378d051fb30b5d Mon Sep 17 00:00:00 2001 From: TheR1sing3un <87409330+TheR1sing3un@users.noreply.github.com> Date: Wed, 26 Apr 2023 11:55:21 +0800 Subject: [PATCH] [ISSUE #6648]: Fix the bug that not all message fetch requests are processed via TieredStorage when level is FORCE (#6649) * fix(tieredstorage): fix the bug that not all message fetch request is processed via tieredStorage when enable FORCE 1. fix the bug that not all message fetch request is processed via tieredStorage when enable FORCE * style(tieredstorage): use rmq code style 1. use rmq code style * feat(tieredstorage): add more comments for `TieredStorageLevel` 1. add more comments for `TieredStorageLevel` --- .../tieredstore/TieredMessageStore.java | 7 ++++++- .../common/TieredMessageStoreConfig.java | 18 ++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/tieredstore/src/main/java/org/apache/rocketmq/tieredstore/TieredMessageStore.java b/tieredstore/src/main/java/org/apache/rocketmq/tieredstore/TieredMessageStore.java index 9322891047..78b6ae3bcf 100644 --- a/tieredstore/src/main/java/org/apache/rocketmq/tieredstore/TieredMessageStore.java +++ b/tieredstore/src/main/java/org/apache/rocketmq/tieredstore/TieredMessageStore.java @@ -99,6 +99,11 @@ public class TieredMessageStore extends AbstractPluginMessageStore { public boolean viaTieredStorage(String topic, int queueId, long offset, int batchSize) { TieredMessageStoreConfig.TieredStorageLevel deepStorageLevel = storeConfig.getTieredStorageLevel(); + + if (deepStorageLevel.check(TieredMessageStoreConfig.TieredStorageLevel.FORCE)) { + return true; + } + if (!deepStorageLevel.isEnable()) { return false; } @@ -122,7 +127,7 @@ public class TieredMessageStore extends AbstractPluginMessageStore { && !next.checkInMemByConsumeOffset(topic, queueId, offset, batchSize)) { return true; } - return deepStorageLevel.check(TieredMessageStoreConfig.TieredStorageLevel.FORCE); + return false; } @Override diff --git a/tieredstore/src/main/java/org/apache/rocketmq/tieredstore/common/TieredMessageStoreConfig.java b/tieredstore/src/main/java/org/apache/rocketmq/tieredstore/common/TieredMessageStoreConfig.java index 2d43b9f6b5..8b44837b57 100644 --- a/tieredstore/src/main/java/org/apache/rocketmq/tieredstore/common/TieredMessageStoreConfig.java +++ b/tieredstore/src/main/java/org/apache/rocketmq/tieredstore/common/TieredMessageStoreConfig.java @@ -24,10 +24,28 @@ public class TieredMessageStoreConfig { private String brokerName = localHostName(); private String brokerClusterName = "DefaultCluster"; private TieredStorageLevel tieredStorageLevel = TieredStorageLevel.NOT_IN_DISK; + + /** + * All fetch requests are judged against this level first, + * and if the message cannot be read from the TiredMessageStore, + * these requests will still go to the next store for fallback processing. + */ public enum TieredStorageLevel { + /** + * Disable tiered storage, all fetch request will be handled by default message store. + */ DISABLE(0), + /** + * Only fetch request with offset not in disk will be handled by tiered storage. + */ NOT_IN_DISK(1), + /** + * Only fetch request with offset not in memory(page cache) will be handled by tiered storage. + */ NOT_IN_MEM(2), + /** + * All fetch request will be handled by tiered storage. + */ FORCE(3); private final int value;