You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bookkeeper.apache.org by eo...@apache.org on 2022/07/04 15:34:41 UTC

[bookkeeper] branch master updated: BP-47 (task7): DbLedgerStorage add direct entry logger support (#3366)

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

eolivelli pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/bookkeeper.git


The following commit(s) were added to refs/heads/master by this push:
     new d4b3910ca6 BP-47 (task7): DbLedgerStorage add direct entry logger support (#3366)
d4b3910ca6 is described below

commit d4b3910ca69ef90a62bfc853b232049ff1f6df6f
Author: Hang Chen <ch...@apache.org>
AuthorDate: Mon Jul 4 23:34:34 2022 +0800

    BP-47 (task7): DbLedgerStorage add direct entry logger support (#3366)
---
 .../bookie/storage/ldb/DbLedgerStorage.java        | 106 +++++++++++++++++++--
 .../ldb/SingleDirectoryDbLedgerStorage.java        |   9 +-
 .../bookie/storage/ldb/DbLedgerStorageTest.java    |  14 ++-
 .../DbLedgerStorageWithDirectEntryLoggerTest.java  |  60 ++++++++++++
 .../storage/ldb/DbLedgerStorageWriteCacheTest.java |  16 ++--
 5 files changed, 183 insertions(+), 22 deletions(-)

diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/storage/ldb/DbLedgerStorage.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/storage/ldb/DbLedgerStorage.java
index 00c448086c..959ef33581 100644
--- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/storage/ldb/DbLedgerStorage.java
+++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/storage/ldb/DbLedgerStorage.java
@@ -39,6 +39,7 @@ import java.util.ArrayList;
 import java.util.EnumSet;
 import java.util.List;
 import java.util.PrimitiveIterator.OfLong;
+import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
 
@@ -49,18 +50,24 @@ import org.apache.bookkeeper.bookie.BookieException;
 import org.apache.bookkeeper.bookie.CheckpointSource;
 import org.apache.bookkeeper.bookie.CheckpointSource.Checkpoint;
 import org.apache.bookkeeper.bookie.Checkpointer;
+import org.apache.bookkeeper.bookie.DefaultEntryLogger;
 import org.apache.bookkeeper.bookie.GarbageCollectionStatus;
 import org.apache.bookkeeper.bookie.LastAddConfirmedUpdateNotification;
 import org.apache.bookkeeper.bookie.LedgerCache;
 import org.apache.bookkeeper.bookie.LedgerDirsManager;
 import org.apache.bookkeeper.bookie.LedgerStorage;
 import org.apache.bookkeeper.bookie.StateManager;
+import org.apache.bookkeeper.bookie.storage.EntryLogIdsImpl;
+import org.apache.bookkeeper.bookie.storage.EntryLogger;
+import org.apache.bookkeeper.bookie.storage.directentrylogger.DirectEntryLogger;
 import org.apache.bookkeeper.bookie.storage.ldb.KeyValueStorageFactory.DbConfigType;
 import org.apache.bookkeeper.bookie.storage.ldb.SingleDirectoryDbLedgerStorage.LedgerLoggerProcessor;
 import org.apache.bookkeeper.common.util.MathUtils;
 import org.apache.bookkeeper.common.util.Watcher;
+import org.apache.bookkeeper.common.util.nativeio.NativeIOImpl;
 import org.apache.bookkeeper.conf.ServerConfiguration;
 import org.apache.bookkeeper.meta.LedgerManager;
+import org.apache.bookkeeper.slogger.slf4j.Slf4jSlogger;
 import org.apache.bookkeeper.stats.Gauge;
 import org.apache.bookkeeper.stats.NullStatsLogger;
 import org.apache.bookkeeper.stats.StatsLogger;
@@ -76,8 +83,16 @@ import org.apache.commons.lang3.StringUtils;
 public class DbLedgerStorage implements LedgerStorage {
 
     public static final String WRITE_CACHE_MAX_SIZE_MB = "dbStorage_writeCacheMaxSizeMb";
-
     public static final String READ_AHEAD_CACHE_MAX_SIZE_MB = "dbStorage_readAheadCacheMaxSizeMb";
+    public static final String DIRECT_IO_ENTRYLOGGER = "dbStorage_directIOEntryLogger";
+    public static final String DIRECT_IO_ENTRYLOGGER_TOTAL_WRITEBUFFER_SIZE_MB =
+        "dbStorage_directIOEntryLoggerTotalWriteBufferSizeMb";
+    public static final String DIRECT_IO_ENTRYLOGGER_TOTAL_READBUFFER_SIZE_MB =
+        "dbStorage_directIOEntryLoggerTotalReadBufferSizeMb";
+    public static final String DIRECT_IO_ENTRYLOGGER_READBUFFER_SIZE_MB =
+        "dbStorage_directIOEntryLoggerReadBufferSizeMb";
+    public static final String DIRECT_IO_ENTRYLOGGER_MAX_FD_CACHE_TIME_SECONDS =
+        "dbStorage_directIOEntryLoggerMaxFdCacheTimeSeconds";
 
     static final String MAX_THROTTLE_TIME_MILLIS = "dbStorage_maxThrottleTimeMs";
 
@@ -91,6 +106,16 @@ public class DbLedgerStorage implements LedgerStorage {
     static final String READ_AHEAD_CACHE_BATCH_SIZE = "dbStorage_readAheadCacheBatchSize";
     private static final int DEFAULT_READ_AHEAD_CACHE_BATCH_SIZE = 100;
 
+    private static final long DEFAULT_DIRECT_IO_TOTAL_WRITEBUFFER_SIZE_MB =
+        (long) (0.125 * PlatformDependent.estimateMaxDirectMemory())
+            / MB;
+    private static final long DEFAULT_DIRECT_IO_TOTAL_READBUFFER_SIZE_MB =
+        (long) (0.125 * PlatformDependent.estimateMaxDirectMemory())
+            / MB;
+    private static final long DEFAULT_DIRECT_IO_READBUFFER_SIZE_MB = 8;
+
+    private static final int DEFAULT_DIRECT_IO_MAX_FD_CACHE_TIME_SECONDS = 300;
+
     // use the storage assigned to ledger 0 for flags.
     // if the storage configuration changes, the flags may be lost
     // but in that case data integrity should kick off anyhow.
@@ -100,6 +125,8 @@ public class DbLedgerStorage implements LedgerStorage {
 
     // Keep 1 single Bookie GC thread so the the compactions from multiple individual directories are serialized
     private ScheduledExecutorService gcExecutor;
+    private ExecutorService entryLoggerWriteExecutor = null;
+    private ExecutorService entryLoggerFlushExecutor = null;
 
     protected ByteBufAllocator allocator;
 
@@ -127,6 +154,7 @@ public class DbLedgerStorage implements LedgerStorage {
                 DEFAULT_WRITE_CACHE_MAX_SIZE_MB) * MB;
         long readCacheMaxSize = getLongVariableOrDefault(conf, READ_AHEAD_CACHE_MAX_SIZE_MB,
                 DEFAULT_READ_CACHE_MAX_SIZE_MB) * MB;
+        boolean directIOEntryLogger = getBooleanVariableOrDefault(conf, DIRECT_IO_ENTRYLOGGER, false);
 
         this.allocator = allocator;
         this.numberOfDirs = ledgerDirsManager.getAllLedgerDirs().size();
@@ -166,9 +194,54 @@ public class DbLedgerStorage implements LedgerStorage {
             iDirs[0] = indexDir.getParentFile();
             LedgerDirsManager idm = new LedgerDirsManager(conf, iDirs, indexDirsManager.getDiskChecker(), statsLogger);
 
-            ledgerStorageList.add(newSingleDirectoryDbLedgerStorage(conf, ledgerManager, ldm, idm,
-                    statsLogger, gcExecutor, perDirectoryWriteCacheSize,
-                    perDirectoryReadCacheSize, readAheadCacheBatchSize));
+            EntryLogger entrylogger;
+            if (directIOEntryLogger) {
+                long perDirectoryTotalWriteBufferSize = MB * getLongVariableOrDefault(
+                    conf,
+                    DIRECT_IO_ENTRYLOGGER_TOTAL_WRITEBUFFER_SIZE_MB,
+                    DEFAULT_DIRECT_IO_TOTAL_WRITEBUFFER_SIZE_MB) / numberOfDirs;
+                long perDirectoryTotalReadBufferSize = MB * getLongVariableOrDefault(
+                    conf,
+                    DIRECT_IO_ENTRYLOGGER_TOTAL_READBUFFER_SIZE_MB,
+                    DEFAULT_DIRECT_IO_TOTAL_READBUFFER_SIZE_MB) / numberOfDirs;
+                int readBufferSize = MB * (int) getLongVariableOrDefault(
+                    conf,
+                    DIRECT_IO_ENTRYLOGGER_READBUFFER_SIZE_MB,
+                    DEFAULT_DIRECT_IO_READBUFFER_SIZE_MB);
+                int maxFdCacheTimeSeconds = (int) getLongVariableOrDefault(
+                    conf,
+                    DIRECT_IO_ENTRYLOGGER_MAX_FD_CACHE_TIME_SECONDS,
+                    DEFAULT_DIRECT_IO_MAX_FD_CACHE_TIME_SECONDS);
+                Slf4jSlogger slog = new Slf4jSlogger(DbLedgerStorage.class);
+                entryLoggerWriteExecutor = Executors.newSingleThreadExecutor(
+                    new DefaultThreadFactory("EntryLoggerWrite"));
+                entryLoggerFlushExecutor = Executors.newSingleThreadExecutor(
+                    new DefaultThreadFactory("EntryLoggerFlush"));
+
+                int numReadThreads = conf.getNumReadWorkerThreads();
+                if (numReadThreads == 0) {
+                    numReadThreads = conf.getServerNumIOThreads();
+                }
+
+                entrylogger = new DirectEntryLogger(ledgerDir, new EntryLogIdsImpl(ledgerDirsManager, slog),
+                    new NativeIOImpl(),
+                    allocator, entryLoggerWriteExecutor, entryLoggerFlushExecutor,
+                    conf.getEntryLogSizeLimit(),
+                    conf.getNettyMaxFrameSizeBytes() - 500,
+                    perDirectoryTotalWriteBufferSize,
+                    perDirectoryTotalReadBufferSize,
+                    readBufferSize,
+                    numReadThreads,
+                    maxFdCacheTimeSeconds,
+                    slog, statsLogger);
+            } else {
+                entrylogger = new DefaultEntryLogger(conf, ldm, null, statsLogger, allocator);
+            }
+            ledgerStorageList.add(newSingleDirectoryDbLedgerStorage(conf, ledgerManager, ldm,
+                idm, entrylogger,
+                statsLogger, gcExecutor, perDirectoryWriteCacheSize,
+                perDirectoryReadCacheSize,
+                readAheadCacheBatchSize));
             ldm.getListeners().forEach(ledgerDirsManager::addLedgerDirsListener);
             if (!lDirs[0].getPath().equals(iDirs[0].getPath())) {
                 idm.getListeners().forEach(indexDirsManager::addLedgerDirsListener);
@@ -206,10 +279,11 @@ public class DbLedgerStorage implements LedgerStorage {
     @VisibleForTesting
     protected SingleDirectoryDbLedgerStorage newSingleDirectoryDbLedgerStorage(ServerConfiguration conf,
             LedgerManager ledgerManager, LedgerDirsManager ledgerDirsManager, LedgerDirsManager indexDirsManager,
-            StatsLogger statsLogger, ScheduledExecutorService gcExecutor, long writeCacheSize, long readCacheSize,
+            EntryLogger entryLogger, StatsLogger statsLogger,
+            ScheduledExecutorService gcExecutor, long writeCacheSize, long readCacheSize,
             int readAheadCacheBatchSize)
             throws IOException {
-        return new SingleDirectoryDbLedgerStorage(conf, ledgerManager, ledgerDirsManager, indexDirsManager,
+        return new SingleDirectoryDbLedgerStorage(conf, ledgerManager, ledgerDirsManager, indexDirsManager, entryLogger,
                                                   statsLogger, allocator, gcExecutor, writeCacheSize, readCacheSize,
                                                   readAheadCacheBatchSize);
     }
@@ -237,6 +311,13 @@ public class DbLedgerStorage implements LedgerStorage {
         for (LedgerStorage ls : ledgerStorageList) {
             ls.shutdown();
         }
+
+        if (entryLoggerWriteExecutor != null) {
+            entryLoggerWriteExecutor.shutdown();
+        }
+        if (entryLoggerFlushExecutor != null) {
+            entryLoggerFlushExecutor.shutdown();
+        }
     }
 
     @Override
@@ -448,6 +529,19 @@ public class DbLedgerStorage implements LedgerStorage {
         }
     }
 
+    static boolean getBooleanVariableOrDefault(ServerConfiguration conf, String keyName, boolean defaultValue) {
+        Object obj = conf.getProperty(keyName);
+        if (obj instanceof Boolean) {
+            return (Boolean) obj;
+        } else if (obj == null) {
+            return defaultValue;
+        } else if (StringUtils.isEmpty(conf.getString(keyName))) {
+            return defaultValue;
+        } else {
+            return conf.getBoolean(keyName);
+        }
+    }
+
     @Override
     public OfLong getListOfEntriesOfLedger(long ledgerId) throws IOException {
         // check Issue #2078
diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/storage/ldb/SingleDirectoryDbLedgerStorage.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/storage/ldb/SingleDirectoryDbLedgerStorage.java
index 303f131406..9ac56b9649 100644
--- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/storage/ldb/SingleDirectoryDbLedgerStorage.java
+++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/storage/ldb/SingleDirectoryDbLedgerStorage.java
@@ -58,7 +58,6 @@ import org.apache.bookkeeper.bookie.CheckpointSource;
 import org.apache.bookkeeper.bookie.CheckpointSource.Checkpoint;
 import org.apache.bookkeeper.bookie.Checkpointer;
 import org.apache.bookkeeper.bookie.CompactableLedgerStorage;
-import org.apache.bookkeeper.bookie.DefaultEntryLogger;
 import org.apache.bookkeeper.bookie.EntryLocation;
 import org.apache.bookkeeper.bookie.GarbageCollectionStatus;
 import org.apache.bookkeeper.bookie.GarbageCollectorThread;
@@ -147,9 +146,9 @@ public class SingleDirectoryDbLedgerStorage implements CompactableLedgerStorage
     private final Counter flushExecutorTime;
 
     public SingleDirectoryDbLedgerStorage(ServerConfiguration conf, LedgerManager ledgerManager,
-            LedgerDirsManager ledgerDirsManager, LedgerDirsManager indexDirsManager, StatsLogger statsLogger,
-            ByteBufAllocator allocator, ScheduledExecutorService gcExecutor, long writeCacheSize, long readCacheSize,
-            int readAheadCacheBatchSize) throws IOException {
+            LedgerDirsManager ledgerDirsManager, LedgerDirsManager indexDirsManager, EntryLogger entryLogger,
+            StatsLogger statsLogger, ByteBufAllocator allocator, ScheduledExecutorService gcExecutor,
+            long writeCacheSize, long readCacheSize, int readAheadCacheBatchSize) throws IOException {
         checkArgument(ledgerDirsManager.getAllLedgerDirs().size() == 1,
                 "Db implementation only allows for one storage dir");
 
@@ -193,7 +192,7 @@ public class SingleDirectoryDbLedgerStorage implements CompactableLedgerStorage
                 TransientLedgerInfo.LEDGER_INFO_CACHING_TIME_MINUTES,
                 TransientLedgerInfo.LEDGER_INFO_CACHING_TIME_MINUTES, TimeUnit.MINUTES);
 
-        entryLogger = new DefaultEntryLogger(conf, ledgerDirsManager, null, statsLogger, allocator);
+        this.entryLogger = entryLogger;
         gcThread = new GarbageCollectorThread(conf, ledgerManager, ledgerDirsManager, this, entryLogger, statsLogger);
 
         dbLedgerStorageStats = new DbLedgerStorageStats(
diff --git a/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/storage/ldb/DbLedgerStorageTest.java b/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/storage/ldb/DbLedgerStorageTest.java
index 30bf397b72..09c12c35c3 100644
--- a/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/storage/ldb/DbLedgerStorageTest.java
+++ b/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/storage/ldb/DbLedgerStorageTest.java
@@ -35,6 +35,7 @@ import org.apache.bookkeeper.bookie.Bookie;
 import org.apache.bookkeeper.bookie.Bookie.NoEntryException;
 import org.apache.bookkeeper.bookie.BookieException;
 import org.apache.bookkeeper.bookie.BookieImpl;
+import org.apache.bookkeeper.bookie.DefaultEntryLogger;
 import org.apache.bookkeeper.bookie.EntryLocation;
 import org.apache.bookkeeper.bookie.LedgerDirsManager;
 import org.apache.bookkeeper.bookie.LedgerStorage;
@@ -55,10 +56,10 @@ import org.slf4j.LoggerFactory;
  */
 public class DbLedgerStorageTest {
     private static final Logger log = LoggerFactory.getLogger(DbLedgerStorageTest.class);
-    private DbLedgerStorage storage;
-    private File tmpDir;
-    private LedgerDirsManager ledgerDirsManager;
-    private ServerConfiguration conf;
+    protected DbLedgerStorage storage;
+    protected File tmpDir;
+    protected LedgerDirsManager ledgerDirsManager;
+    protected ServerConfiguration conf;
 
     @Before
     public void setup() throws Exception {
@@ -77,6 +78,10 @@ public class DbLedgerStorageTest {
 
         ledgerDirsManager = bookie.getLedgerDirsManager();
         storage = (DbLedgerStorage) bookie.getLedgerStorage();
+
+        storage.getLedgerStorageList().forEach(singleDirectoryDbLedgerStorage -> {
+            assertTrue(singleDirectoryDbLedgerStorage.getEntryLogger() instanceof DefaultEntryLogger);
+        });
     }
 
     @After
@@ -228,6 +233,7 @@ public class DbLedgerStorageTest {
         newEntry3.writeLong(3); // entry id
         newEntry3.writeBytes("new-entry-3".getBytes());
         long location = entryLogger.addEntry(4L, newEntry3);
+        newEntry3.resetReaderIndex();
 
         List<EntryLocation> locations = Lists.newArrayList(new EntryLocation(4, 3, location));
         singleDirStorage.updateEntriesLocations(locations);
diff --git a/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/storage/ldb/DbLedgerStorageWithDirectEntryLoggerTest.java b/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/storage/ldb/DbLedgerStorageWithDirectEntryLoggerTest.java
new file mode 100644
index 0000000000..e1dfe71d2b
--- /dev/null
+++ b/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/storage/ldb/DbLedgerStorageWithDirectEntryLoggerTest.java
@@ -0,0 +1,60 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.bookkeeper.bookie.storage.ldb;
+
+import static org.junit.Assert.assertTrue;
+import java.io.File;
+import org.apache.bookkeeper.bookie.BookieImpl;
+import org.apache.bookkeeper.bookie.TestBookieImpl;
+import org.apache.bookkeeper.bookie.storage.directentrylogger.DirectEntryLogger;
+import org.apache.bookkeeper.conf.TestBKConfiguration;
+import org.junit.Before;
+
+/**
+ * Unit test for {@link DbLedgerStorage} with directIO entrylogger.
+ */
+public class DbLedgerStorageWithDirectEntryLoggerTest extends DbLedgerStorageTest {
+
+    @Override
+    @Before
+    public void setup() throws Exception {
+        tmpDir = File.createTempFile("bkTest", ".dir");
+        tmpDir.delete();
+        tmpDir.mkdir();
+        File curDir = BookieImpl.getCurrentDirectory(tmpDir);
+        BookieImpl.checkDirectoryStructure(curDir);
+
+        int gcWaitTime = 1000;
+        conf = TestBKConfiguration.newServerConfiguration();
+        conf.setGcWaitTime(gcWaitTime);
+        conf.setLedgerStorageClass(DbLedgerStorage.class.getName());
+        conf.setLedgerDirNames(new String[] { tmpDir.toString() });
+        conf.setProperty("dbStorage_directIOEntryLogger", true);
+        BookieImpl bookie = new TestBookieImpl(conf);
+
+        ledgerDirsManager = bookie.getLedgerDirsManager();
+        storage = (DbLedgerStorage) bookie.getLedgerStorage();
+
+        storage.getLedgerStorageList().forEach(singleDirectoryDbLedgerStorage -> {
+            assertTrue(singleDirectoryDbLedgerStorage.getEntryLogger() instanceof DirectEntryLogger);
+        });
+    }
+}
diff --git a/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/storage/ldb/DbLedgerStorageWriteCacheTest.java b/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/storage/ldb/DbLedgerStorageWriteCacheTest.java
index 955115351f..6434b6f95e 100644
--- a/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/storage/ldb/DbLedgerStorageWriteCacheTest.java
+++ b/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/storage/ldb/DbLedgerStorageWriteCacheTest.java
@@ -33,6 +33,7 @@ import org.apache.bookkeeper.bookie.BookieException.OperationRejectedException;
 import org.apache.bookkeeper.bookie.BookieImpl;
 import org.apache.bookkeeper.bookie.LedgerDirsManager;
 import org.apache.bookkeeper.bookie.TestBookieImpl;
+import org.apache.bookkeeper.bookie.storage.EntryLogger;
 import org.apache.bookkeeper.conf.ServerConfiguration;
 import org.apache.bookkeeper.conf.TestBKConfiguration;
 import org.apache.bookkeeper.meta.LedgerManager;
@@ -53,21 +54,22 @@ public class DbLedgerStorageWriteCacheTest {
 
         @Override
         protected SingleDirectoryDbLedgerStorage newSingleDirectoryDbLedgerStorage(ServerConfiguration conf,
-                LedgerManager ledgerManager, LedgerDirsManager ledgerDirsManager, LedgerDirsManager indexDirsManager,
-                StatsLogger statsLogger, ScheduledExecutorService gcExecutor,
-                long writeCacheSize, long readCacheSize, int readAheadCacheBatchSize)
+            LedgerManager ledgerManager, LedgerDirsManager ledgerDirsManager, LedgerDirsManager indexDirsManager,
+            EntryLogger entryLogger, StatsLogger statsLogger, ScheduledExecutorService gcExecutor,
+            long writeCacheSize, long readCacheSize, int readAheadCacheBatchSize)
                 throws IOException {
             return new MockedSingleDirectoryDbLedgerStorage(conf, ledgerManager, ledgerDirsManager, indexDirsManager,
-                                                            statsLogger, allocator, gcExecutor, writeCacheSize,
-                                                            readCacheSize, readAheadCacheBatchSize);
+                entryLogger, statsLogger, allocator, gcExecutor, writeCacheSize,
+                readCacheSize, readAheadCacheBatchSize);
         }
 
         private static class MockedSingleDirectoryDbLedgerStorage extends SingleDirectoryDbLedgerStorage {
             public MockedSingleDirectoryDbLedgerStorage(ServerConfiguration conf, LedgerManager ledgerManager,
-                    LedgerDirsManager ledgerDirsManager, LedgerDirsManager indexDirsManager, StatsLogger statsLogger,
+                    LedgerDirsManager ledgerDirsManager, LedgerDirsManager indexDirsManager, EntryLogger entryLogger,
+                    StatsLogger statsLogger,
                     ByteBufAllocator allocator, ScheduledExecutorService gcExecutor, long writeCacheSize,
                     long readCacheSize, int readAheadCacheBatchSize) throws IOException {
-                super(conf, ledgerManager, ledgerDirsManager, indexDirsManager,
+                super(conf, ledgerManager, ledgerDirsManager, indexDirsManager, entryLogger,
                       statsLogger, allocator, gcExecutor, writeCacheSize, readCacheSize, readAheadCacheBatchSize);
             }