You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rocketmq.apache.org by ji...@apache.org on 2023/03/21 00:42:53 UTC
[rocketmq] branch develop updated: [ISSUE #6406] Add more visual comments on IndexFile & IndexHeader & ConsumeQueue
This is an automated email from the ASF dual-hosted git repository.
jinrongtong pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/rocketmq.git
The following commit(s) were added to refs/heads/develop by this push:
new d75ab111f [ISSUE #6406] Add more visual comments on IndexFile & IndexHeader & ConsumeQueue
d75ab111f is described below
commit d75ab111f39deded98918bf4cd033eaffd176593
Author: TheR1sing3un <87...@users.noreply.github.com>
AuthorDate: Tue Mar 21 08:42:40 2023 +0800
[ISSUE #6406] Add more visual comments on IndexFile & IndexHeader & ConsumeQueue
1. add more visual comments
---
.../main/java/org/apache/rocketmq/store/ConsumeQueue.java | 13 +++++++++++++
.../java/org/apache/rocketmq/store/index/IndexFile.java | 13 +++++++++++++
.../java/org/apache/rocketmq/store/index/IndexHeader.java | 13 +++++++++++++
3 files changed, 39 insertions(+)
diff --git a/store/src/main/java/org/apache/rocketmq/store/ConsumeQueue.java b/store/src/main/java/org/apache/rocketmq/store/ConsumeQueue.java
index 3530b1c39..f2a98a83e 100644
--- a/store/src/main/java/org/apache/rocketmq/store/ConsumeQueue.java
+++ b/store/src/main/java/org/apache/rocketmq/store/ConsumeQueue.java
@@ -43,6 +43,19 @@ import org.apache.rocketmq.store.queue.ReferredIterator;
public class ConsumeQueue implements ConsumeQueueInterface, FileQueueLifeCycle {
private static final Logger log = LoggerFactory.getLogger(LoggerName.STORE_LOGGER_NAME);
+ /**
+ * ConsumeQueue's store unit. Format:
+ * <pre>
+ * ┌───────────────────────────────┬───────────────────┬───────────────────────────────┐
+ * │ CommitLog Physical Offset │ Body Size │ Tag HashCode │
+ * │ (8 Bytes) │ (4 Bytes) │ (8 Bytes) │
+ * ├───────────────────────────────┴───────────────────┴───────────────────────────────┤
+ * │ Store Unit │
+ * │ │
+ * </pre>
+ * ConsumeQueue's store unit. Size:
+ * CommitLog Physical Offset(8) + Body Size(4) + Tag HashCode(8) = 20 Bytes
+ */
public static final int CQ_STORE_UNIT_SIZE = 20;
public static final int MSG_TAG_OFFSET_INDEX = 12;
private static final Logger LOG_ERROR = LoggerFactory.getLogger(LoggerName.STORE_ERROR_LOGGER_NAME);
diff --git a/store/src/main/java/org/apache/rocketmq/store/index/IndexFile.java b/store/src/main/java/org/apache/rocketmq/store/index/IndexFile.java
index 27afab806..9e0669fa0 100644
--- a/store/src/main/java/org/apache/rocketmq/store/index/IndexFile.java
+++ b/store/src/main/java/org/apache/rocketmq/store/index/IndexFile.java
@@ -30,6 +30,19 @@ import org.apache.rocketmq.store.logfile.MappedFile;
public class IndexFile {
private static final Logger log = LoggerFactory.getLogger(LoggerName.STORE_LOGGER_NAME);
private static int hashSlotSize = 4;
+ /**
+ * Each index's store unit. Format:
+ * <pre>
+ * ┌───────────────┬───────────────────────────────┬───────────────┬───────────────┐
+ * │ Key HashCode │ Physical Offset │ Time Diff │ Next Index Pos│
+ * │ (4 Bytes) │ (8 Bytes) │ (4 Bytes) │ (4 Bytes) │
+ * ├───────────────┴───────────────────────────────┴───────────────┴───────────────┤
+ * │ Index Store Unit │
+ * │ │
+ * </pre>
+ * Each index's store unit. Size:
+ * Key HashCode(4) + Physical Offset(8) + Time Diff(4) + Next Index Pos(4) = 20 Bytes
+ */
private static int indexSize = 20;
private static int invalidIndex = 0;
private final int hashSlotNum;
diff --git a/store/src/main/java/org/apache/rocketmq/store/index/IndexHeader.java b/store/src/main/java/org/apache/rocketmq/store/index/IndexHeader.java
index fbb3f0847..fe319caad 100644
--- a/store/src/main/java/org/apache/rocketmq/store/index/IndexHeader.java
+++ b/store/src/main/java/org/apache/rocketmq/store/index/IndexHeader.java
@@ -20,6 +20,19 @@ import java.nio.ByteBuffer;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong;
+/**
+ * Index File Header. Format:
+ * <pre>
+ * ┌───────────────────────────────┬───────────────────────────────┬───────────────────────────────┬───────────────────────────────┬───────────────────┬───────────────────┐
+ * │ Begin Timestamp │ End Timestamp │ Begin Physical Offset │ End Physical Offset │ Hash Slot Count │ Index Count │
+ * │ (8 Bytes) │ (8 Bytes) │ (8 Bytes) │ (8 Bytes) │ (4 Bytes) │ (4 Bytes) │
+ * ├───────────────────────────────┴───────────────────────────────┴───────────────────────────────┴───────────────────────────────┴───────────────────┴───────────────────┤
+ * │ Index File Header │
+ * │
+ * </pre>
+ * Index File Header. Size:
+ * Begin Timestamp(8) + End Timestamp(8) + Begin Physical Offset(8) + End Physical Offset(8) + Hash Slot Count(4) + Index Count(4) = 40 Bytes
+ */
public class IndexHeader {
public static final int INDEX_HEADER_SIZE = 40;
private static int beginTimestampIndex = 0;