diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/BookieImpl.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/BookieImpl.java index 0db230d9d3d..0628ec28afa 100644 --- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/BookieImpl.java +++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/BookieImpl.java @@ -69,6 +69,7 @@ import org.apache.bookkeeper.net.BookieId; import org.apache.bookkeeper.net.BookieSocketAddress; import org.apache.bookkeeper.net.DNS; +import org.apache.bookkeeper.proto.BookieRequestHandler; import org.apache.bookkeeper.proto.BookkeeperInternalCallbacks.WriteCallback; import org.apache.bookkeeper.stats.NullStatsLogger; import org.apache.bookkeeper.stats.StatsLogger; @@ -948,6 +949,9 @@ private void addEntryInternal(LedgerDescriptor handle, ByteBuf entry, if (!writeDataToJournal) { cb.writeComplete(0, ledgerId, entryId, null, ctx); + if (ctx instanceof BookieRequestHandler) { + ((BookieRequestHandler) ctx).flushPendingResponse(); + } return; } diff --git a/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/BookieWriteLedgerTest.java b/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/BookieWriteLedgerTest.java index 8ae0b720192..2a57f9952f2 100644 --- a/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/BookieWriteLedgerTest.java +++ b/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/BookieWriteLedgerTest.java @@ -39,6 +39,7 @@ import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.Enumeration; import java.util.HashMap; import java.util.List; @@ -68,6 +69,8 @@ import org.junit.Assert; import org.junit.Before; import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; import org.powermock.reflect.Whitebox; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -75,12 +78,26 @@ /** * Testing ledger write entry cases. */ +@RunWith(Parameterized.class) public class BookieWriteLedgerTest extends BookKeeperClusterTestCase implements AddCallback { private static final Logger LOG = LoggerFactory .getLogger(BookieWriteLedgerTest.class); + @Parameterized.Parameters + public static Collection data() { + return Arrays.asList(new Object[][] { + { true, true }, { true, false }, { false, true }, { false, false } + }); + } + + @Parameterized.Parameter(0) + public boolean useV2; + + @Parameterized.Parameter(1) + public boolean writeJournal; + byte[] ledgerPassword = "aaa".getBytes(); LedgerHandle lh, lh2; Enumeration ls; @@ -119,12 +136,14 @@ public BookieWriteLedgerTest() { String ledgerManagerFactory = "org.apache.bookkeeper.meta.HierarchicalLedgerManagerFactory"; // set ledger manager baseConf.setLedgerManagerFactoryClassName(ledgerManagerFactory); + baseConf.setJournalWriteData(writeJournal); /* * 'testLedgerCreateAdvWithLedgerIdInLoop2' testcase relies on skipListSizeLimit, * so setting it to some small value for making that testcase lite. */ baseConf.setSkipListSizeLimit(4 * 1024 * 1024); baseClientConf.setLedgerManagerFactoryClassName(ledgerManagerFactory); + baseClientConf.setUseV2WireProtocol(useV2); } /**