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;