You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bookkeeper.apache.org by ch...@apache.org on 2023/07/14 10:42:49 UTC

[bookkeeper] 16/31: Return activeLogChannel if new create (#3894)

This is an automated email from the ASF dual-hosted git repository.

chenhang pushed a commit to branch branch-4.14
in repository https://gitbox.apache.org/repos/asf/bookkeeper.git

commit 397788ac13012527cddcb86b926af0677773b456
Author: houxiaoyu <ho...@apache.org>
AuthorDate: Fri May 12 19:07:24 2023 +0800

    Return activeLogChannel if new create (#3894)
    
    * Return activeLogChannel if new create
    
    (cherry picked from commit 5beb8948baa0f287e597ff2a29ec672ac2cb1220)
---
 .../bookie/EntryLogManagerForSingleEntryLog.java    |  1 +
 .../org/apache/bookkeeper/bookie/TestEntryLog.java  | 21 +++++++++++++++++++++
 2 files changed, 22 insertions(+)

diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/EntryLogManagerForSingleEntryLog.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/EntryLogManagerForSingleEntryLog.java
index f5b8823711..a21870dccf 100644
--- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/EntryLogManagerForSingleEntryLog.java
+++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/EntryLogManagerForSingleEntryLog.java
@@ -93,6 +93,7 @@ class EntryLogManagerForSingleEntryLog extends EntryLogManagerBase {
         if (null == activeLogChannel) {
             // log channel can be null because the file is deferred to be created
             createNewLog(UNASSIGNED_LEDGERID, "because current active log channel has not initialized yet");
+            return activeLogChannel;
         }
 
         boolean reachEntryLogLimit = rollLog ? reachEntryLogLimit(activeLogChannel, entrySize)
diff --git a/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/TestEntryLog.java b/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/TestEntryLog.java
index b360708474..8cd5b04de0 100644
--- a/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/TestEntryLog.java
+++ b/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/TestEntryLog.java
@@ -26,6 +26,12 @@ import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
 import com.google.common.collect.Sets;
 
 import io.netty.buffer.ByteBuf;
@@ -1432,6 +1438,21 @@ public class TestEntryLog {
         }
     }
 
+    @Test
+    public void testSingleEntryLogCreateNewLog() throws Exception {
+        Assert.assertTrue(entryLogger.getEntryLogManager() instanceof EntryLogManagerForSingleEntryLog);
+        EntryLogManagerForSingleEntryLog singleEntryLog =
+                (EntryLogManagerForSingleEntryLog) entryLogger.getEntryLogManager();
+        EntryLogManagerForSingleEntryLog mockSingleEntryLog = spy(singleEntryLog);
+        BufferedLogChannel activeLogChannel = mockSingleEntryLog.getCurrentLogForLedgerForAddEntry(1, 1024, true);
+        Assert.assertTrue(activeLogChannel != null);
+
+        verify(mockSingleEntryLog, times(1)).createNewLog(anyLong(), anyString());
+        // `readEntryLogHardLimit` and `reachEntryLogLimit` should not call if new create log
+        verify(mockSingleEntryLog, times(0)).reachEntryLogLimit(any(), anyLong());
+        verify(mockSingleEntryLog, times(0)).readEntryLogHardLimit(any(), anyLong());
+    }
+
     /*
      * with entryLogPerLedger enabled, create multiple entrylogs, add entries of ledgers and read them before and after
      * flush