You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zookeeper.apache.org by fp...@apache.org on 2013/05/31 12:03:00 UTC
svn commit: r1488138 - in /zookeeper/bookkeeper/trunk: ./
bookkeeper-server/src/test/java/org/apache/bookkeeper/replication/
bookkeeper-server/src/test/java/org/apache/bookkeeper/test/
Author: fpj
Date: Fri May 31 10:02:59 2013
New Revision: 1488138
URL: http://svn.apache.org/r1488138
Log:
BOOKKEEPER-611: Speed up bookkeeper tests (ivank via fpj)
Modified:
zookeeper/bookkeeper/trunk/CHANGES.txt
zookeeper/bookkeeper/trunk/bookkeeper-server/src/test/java/org/apache/bookkeeper/replication/AuditorLedgerCheckerTest.java
zookeeper/bookkeeper/trunk/bookkeeper-server/src/test/java/org/apache/bookkeeper/replication/AuditorPeriodicCheckTest.java
zookeeper/bookkeeper/trunk/bookkeeper-server/src/test/java/org/apache/bookkeeper/replication/TestLedgerUnderreplicationManager.java
zookeeper/bookkeeper/trunk/bookkeeper-server/src/test/java/org/apache/bookkeeper/replication/TestReplicationWorker.java
zookeeper/bookkeeper/trunk/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/BookieJournalRollingTest.java
zookeeper/bookkeeper/trunk/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/BookieReadWriteTest.java
zookeeper/bookkeeper/trunk/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/LedgerDeleteTest.java
Modified: zookeeper/bookkeeper/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/zookeeper/bookkeeper/trunk/CHANGES.txt?rev=1488138&r1=1488137&r2=1488138&view=diff
==============================================================================
--- zookeeper/bookkeeper/trunk/CHANGES.txt (original)
+++ zookeeper/bookkeeper/trunk/CHANGES.txt Fri May 31 10:02:59 2013
@@ -80,6 +80,8 @@ Trunk (unreleased changes)
BOOKKEEPER-583: Read from a ReadOnlyBookie fails if index fileinfo is not in ledger cache (vinay via sijie)
+ BOOKKEEPER-611: Speed up bookkeeper tests (ivank via fpj)
+
NEW FEATURE:
BOOKKEEPER-562: Ability to tell if a ledger is closed or not (fpj)
Modified: zookeeper/bookkeeper/trunk/bookkeeper-server/src/test/java/org/apache/bookkeeper/replication/AuditorLedgerCheckerTest.java
URL: http://svn.apache.org/viewvc/zookeeper/bookkeeper/trunk/bookkeeper-server/src/test/java/org/apache/bookkeeper/replication/AuditorLedgerCheckerTest.java?rev=1488138&r1=1488137&r2=1488138&view=diff
==============================================================================
--- zookeeper/bookkeeper/trunk/bookkeeper-server/src/test/java/org/apache/bookkeeper/replication/AuditorLedgerCheckerTest.java (original)
+++ zookeeper/bookkeeper/trunk/bookkeeper-server/src/test/java/org/apache/bookkeeper/replication/AuditorLedgerCheckerTest.java Fri May 31 10:02:59 2013
@@ -30,9 +30,11 @@ import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Set;
+import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
+import org.apache.bookkeeper.client.AsyncCallback.AddCallback;
import org.apache.bookkeeper.client.BKException;
import org.apache.bookkeeper.client.LedgerHandle;
import org.apache.bookkeeper.client.BookKeeper.DigestType;
@@ -174,10 +176,7 @@ public class AuditorLedgerCheckerTest ex
ledgerList.add(lh2.getId());
LOG.debug("Created following ledgers : " + ledgerList);
- // 2 is added to the latch, since after the ledger reformation, again
- // the reformed bookie is stopped. So auditor will modify the zk
- // underreplicated metadata
- int count = ledgerList.size() + 2;
+ int count = ledgerList.size();
final CountDownLatch underReplicaLatch = registerUrLedgerWatcher(count);
int bkShutdownIndex = bs.size() - 1;
@@ -190,7 +189,7 @@ public class AuditorLedgerCheckerTest ex
// grace period for publishing the bk-ledger
LOG.debug("Waiting for ledgers to be marked as under replicated");
- underReplicaLatch.await(5, TimeUnit.SECONDS);
+ assertTrue("latch should have completed", underReplicaLatch.await(5, TimeUnit.SECONDS));
Map<Long, String> urLedgerData = getUrLedgerData(urLedgerList);
assertEquals("Missed identifying under replicated ledgers", 2,
@@ -272,7 +271,7 @@ public class AuditorLedgerCheckerTest ex
shutdownBookieList.add(shutdownBookie(bs.size() - 1));
assertFalse("Ledger replication is not disabled!", urReplicaLatch
- .await(5, TimeUnit.SECONDS));
+ .await(1, TimeUnit.SECONDS));
// enabling ledger replication
urLedgerMgr.enableLedgerReplication();
@@ -345,12 +344,25 @@ public class AuditorLedgerCheckerTest ex
private void addEntry(int numEntriesToWrite, LedgerHandle lh)
throws InterruptedException, BKException {
+ final CountDownLatch completeLatch = new CountDownLatch(numEntriesToWrite);
+ final AtomicInteger rc = new AtomicInteger(BKException.Code.OK);
+
for (int i = 0; i < numEntriesToWrite; i++) {
ByteBuffer entry = ByteBuffer.allocate(4);
entry.putInt(rng.nextInt(Integer.MAX_VALUE));
entry.position(0);
- lh.addEntry(entry.array());
+ lh.asyncAddEntry(entry.array(), new AddCallback() {
+ public void addComplete(int rc2, LedgerHandle lh, long entryId, Object ctx) {
+ rc.compareAndSet(BKException.Code.OK, rc2);
+ completeLatch.countDown();
+ }
+ }, null);
+ }
+ completeLatch.await();
+ if (rc.get() != BKException.Code.OK) {
+ throw BKException.create(rc.get());
}
+
}
private Map<Long, String> getUrLedgerData(Set<Long> urLedgerList)
Modified: zookeeper/bookkeeper/trunk/bookkeeper-server/src/test/java/org/apache/bookkeeper/replication/AuditorPeriodicCheckTest.java
URL: http://svn.apache.org/viewvc/zookeeper/bookkeeper/trunk/bookkeeper-server/src/test/java/org/apache/bookkeeper/replication/AuditorPeriodicCheckTest.java?rev=1488138&r1=1488137&r2=1488138&view=diff
==============================================================================
--- zookeeper/bookkeeper/trunk/bookkeeper-server/src/test/java/org/apache/bookkeeper/replication/AuditorPeriodicCheckTest.java (original)
+++ zookeeper/bookkeeper/trunk/bookkeeper-server/src/test/java/org/apache/bookkeeper/replication/AuditorPeriodicCheckTest.java Fri May 31 10:02:59 2013
@@ -27,6 +27,7 @@ import java.util.concurrent.atomic.Atomi
import java.util.concurrent.CountDownLatch;
import java.util.HashMap;
import java.util.List;
+import java.util.ArrayList;
import java.util.LinkedList;
import java.io.File;
import java.io.FileOutputStream;
@@ -39,6 +40,8 @@ import org.apache.bookkeeper.util.String
import org.apache.bookkeeper.zookeeper.ZooKeeperWatcherBase;
import org.apache.bookkeeper.client.BookKeeper.DigestType;
import org.apache.bookkeeper.client.LedgerHandle;
+import org.apache.bookkeeper.client.BKException;
+import org.apache.bookkeeper.client.AsyncCallback.AddCallback;
import org.apache.bookkeeper.conf.ServerConfiguration;
import org.apache.bookkeeper.meta.LedgerManagerFactory;
import org.apache.bookkeeper.meta.LedgerUnderreplicationManager;
@@ -66,7 +69,7 @@ public class AuditorPeriodicCheckTest ex
private HashMap<String, AuditorElector> auditorElectors = new HashMap<String, AuditorElector>();
private List<ZooKeeper> zkClients = new LinkedList<ZooKeeper>();
- private final static int CHECK_INTERVAL = 1000; // run every second
+ private final static int CHECK_INTERVAL = 100; // run every 100ms
public AuditorPeriodicCheckTest() {
super(3);
@@ -215,15 +218,32 @@ public class AuditorPeriodicCheckTest ex
LedgerManagerFactory mFactory = LedgerManagerFactory.newLedgerManagerFactory(bsConfs.get(0), zkc);
final LedgerUnderreplicationManager underReplicationManager = mFactory.newLedgerUnderreplicationManager();
final int numLedgers = 100;
+ final int numMsgs = 100;
+ final CountDownLatch completeLatch = new CountDownLatch(numMsgs*numLedgers);
+ final AtomicInteger rc = new AtomicInteger(BKException.Code.OK);
+ List<LedgerHandle> lhs = new ArrayList<LedgerHandle>();
for (int i = 0; i < numLedgers; i++) {
LedgerHandle lh = bkc.createLedger(3, 3, DigestType.CRC32, "passwd".getBytes());
-
+ lhs.add(lh);
for (int j = 0; j < 100; j++) {
- lh.addEntry("testdata".getBytes());
+ lh.asyncAddEntry("testdata".getBytes(), new AddCallback() {
+ public void addComplete(int rc2, LedgerHandle lh, long entryId, Object ctx) {
+ rc.compareAndSet(BKException.Code.OK, rc2);
+ completeLatch.countDown();
+ }
+ }, null);
}
+ }
+ completeLatch.await();
+ if (rc.get() != BKException.Code.OK) {
+ throw BKException.create(rc.get());
+ }
+
+ for (LedgerHandle lh : lhs) {
lh.close();
}
+
underReplicationManager.disableLedgerReplication();
final AtomicInteger numReads = new AtomicInteger(0);
Modified: zookeeper/bookkeeper/trunk/bookkeeper-server/src/test/java/org/apache/bookkeeper/replication/TestLedgerUnderreplicationManager.java
URL: http://svn.apache.org/viewvc/zookeeper/bookkeeper/trunk/bookkeeper-server/src/test/java/org/apache/bookkeeper/replication/TestLedgerUnderreplicationManager.java?rev=1488138&r1=1488137&r2=1488138&view=diff
==============================================================================
--- zookeeper/bookkeeper/trunk/bookkeeper-server/src/test/java/org/apache/bookkeeper/replication/TestLedgerUnderreplicationManager.java (original)
+++ zookeeper/bookkeeper/trunk/bookkeeper-server/src/test/java/org/apache/bookkeeper/replication/TestLedgerUnderreplicationManager.java Fri May 31 10:02:59 2013
@@ -186,7 +186,7 @@ public class TestLedgerUnderreplicationM
Future<Long> f = getLedgerToReplicate(m);
try {
- f.get(5, TimeUnit.SECONDS);
+ f.get(1, TimeUnit.SECONDS);
fail("Shouldn't be able to find a ledger to replicate");
} catch (TimeoutException te) {
// correct behaviour
@@ -218,7 +218,7 @@ public class TestLedgerUnderreplicationM
f = getLedgerToReplicate(m2);
try {
- f.get(5, TimeUnit.SECONDS);
+ f.get(1, TimeUnit.SECONDS);
fail("Shouldn't be able to find a ledger to replicate");
} catch (TimeoutException te) {
// correct behaviour
@@ -264,7 +264,7 @@ public class TestLedgerUnderreplicationM
Future<Long> f = getLedgerToReplicate(m2);
try {
- f.get(5, TimeUnit.SECONDS);
+ f.get(1, TimeUnit.SECONDS);
fail("Shouldn't be able to find a ledger to replicate");
} catch (TimeoutException te) {
// correct behaviour
@@ -308,7 +308,7 @@ public class TestLedgerUnderreplicationM
Future<Long> f = getLedgerToReplicate(m2);
try {
- f.get(5, TimeUnit.SECONDS);
+ f.get(1, TimeUnit.SECONDS);
fail("Shouldn't be able to find a ledger to replicate");
} catch (TimeoutException te) {
// correct behaviour
@@ -388,7 +388,7 @@ public class TestLedgerUnderreplicationM
Future<Long> f = getLedgerToReplicate(m2);
try {
- f.get(5, TimeUnit.SECONDS);
+ f.get(1, TimeUnit.SECONDS);
fail("Shouldn't be able to find a ledger to replicate");
} catch (TimeoutException te) {
// correct behaviour
@@ -506,7 +506,7 @@ public class TestLedgerUnderreplicationM
Future<Long> fA = getLedgerToReplicate(replicaMgr);
try {
- fA.get(5, TimeUnit.SECONDS);
+ fA.get(1, TimeUnit.SECONDS);
fail("Shouldn't be able to find a ledger to replicate");
} catch (TimeoutException te) {
// expected behaviour, as the replication is disabled
@@ -522,7 +522,7 @@ public class TestLedgerUnderreplicationM
* should continue getLedgerToRereplicate() task
*/
@Test(timeout = 20000)
- public void testEnableLedegerReplication() throws Exception {
+ public void testEnableLedgerReplication() throws Exception {
isLedgerReplicationDisabled = true;
final LedgerUnderreplicationManager replicaMgr = lmf1
.newLedgerUnderreplicationManager();
@@ -574,7 +574,7 @@ public class TestLedgerUnderreplicationM
thread1.start();
try {
- znodeLatch.await(5, TimeUnit.SECONDS);
+ assertFalse("shouldn't complete", znodeLatch.await(1, TimeUnit.SECONDS));
assertTrue("Ledger replication is not disabled!",
isLedgerReplicationDisabled);
assertEquals("Failed to disable ledger replication!", 2, znodeLatch
@@ -645,7 +645,7 @@ public class TestLedgerUnderreplicationM
final LedgerUnderreplicationManager replicaMgr2 = lmf2
.newLedgerUnderreplicationManager();
- final int iterations = 1000;
+ final int iterations = 100;
final AtomicBoolean threadFailed = new AtomicBoolean(false);
Thread markUnder = new Thread() {
public void run() {
Modified: zookeeper/bookkeeper/trunk/bookkeeper-server/src/test/java/org/apache/bookkeeper/replication/TestReplicationWorker.java
URL: http://svn.apache.org/viewvc/zookeeper/bookkeeper/trunk/bookkeeper-server/src/test/java/org/apache/bookkeeper/replication/TestReplicationWorker.java?rev=1488138&r1=1488137&r2=1488138&view=diff
==============================================================================
--- zookeeper/bookkeeper/trunk/bookkeeper-server/src/test/java/org/apache/bookkeeper/replication/TestReplicationWorker.java (original)
+++ zookeeper/bookkeeper/trunk/bookkeeper-server/src/test/java/org/apache/bookkeeper/replication/TestReplicationWorker.java Fri May 31 10:02:59 2013
@@ -173,7 +173,7 @@ public class TestReplicationWorker exten
try {
underReplicationManager.markLedgerUnderreplicated(lh.getId(),
replicaToKill.toString());
- int counter = 100;
+ int counter = 30;
while (counter-- > 0) {
assertTrue("Expecting that replication should not complete",
ReplicationTestUtil.isLedgerInUnderReplication(zkc, lh
@@ -398,6 +398,8 @@ public class TestReplicationWorker exten
.getLocalHost().getHostAddress(), startNewBookie);
LOG.info("New Bookie addr :" + newBkAddr);
+ // set to 3s instead of default 30s
+ baseConf.setOpenLedgerRereplicationGracePeriod("3000");
ReplicationWorker rw = new ReplicationWorker(zkc, baseConf, newBkAddr);
LedgerManagerFactory mFactory = LedgerManagerFactory
Modified: zookeeper/bookkeeper/trunk/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/BookieJournalRollingTest.java
URL: http://svn.apache.org/viewvc/zookeeper/bookkeeper/trunk/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/BookieJournalRollingTest.java?rev=1488138&r1=1488137&r2=1488138&view=diff
==============================================================================
--- zookeeper/bookkeeper/trunk/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/BookieJournalRollingTest.java (original)
+++ zookeeper/bookkeeper/trunk/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/BookieJournalRollingTest.java Fri May 31 10:02:59 2013
@@ -22,14 +22,17 @@ package org.apache.bookkeeper.test;
*/
import java.io.File;
import java.util.Enumeration;
-import java.util.List;
+
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.CountDownLatch;
import org.apache.bookkeeper.conf.ServerConfiguration;
import org.apache.bookkeeper.bookie.Bookie;
import org.apache.bookkeeper.client.LedgerEntry;
import org.apache.bookkeeper.client.LedgerHandle;
import org.apache.bookkeeper.client.BookKeeper.DigestType;
-import org.apache.bookkeeper.proto.BookieServer;
+import org.apache.bookkeeper.client.BKException;
+import org.apache.bookkeeper.client.AsyncCallback.AddCallback;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -48,7 +51,7 @@ public class BookieJournalRollingTest ex
DigestType digestType;
public BookieJournalRollingTest() {
- super(3);
+ super(1);
this.digestType = DigestType.CRC32;
}
@@ -75,7 +78,7 @@ public class BookieJournalRollingTest ex
LedgerHandle[] lhs = new LedgerHandle[numLedgers];
long[] ledgerIds = new long[numLedgers];
for (int i = 0; i < numLedgers; i++) {
- lhs[i] = bkc.createLedger(digestType, "".getBytes());
+ lhs[i] = bkc.createLedger(1, 1, digestType, "".getBytes());
ledgerIds[i] = lhs[i].getId();
}
writeLedgerEntries(lhs, msgSize, numMsgs);
@@ -91,15 +94,27 @@ public class BookieJournalRollingTest ex
}
String msg = msgSB.toString();
+ final CountDownLatch completeLatch = new CountDownLatch(numMsgs*lhs.length);
+ final AtomicInteger rc = new AtomicInteger(BKException.Code.OK);
+
// Write all of the entries for all of the ledgers
for (int i = 0; i < numMsgs; i++) {
for (int j = 0; j < lhs.length; j++) {
StringBuilder sb = new StringBuilder();
sb.append(lhs[j].getId()).append('-').append(i).append('-')
.append(msg);
- lhs[j].addEntry(sb.toString().getBytes());
+ lhs[j].asyncAddEntry(sb.toString().getBytes(), new AddCallback() {
+ public void addComplete(int rc2, LedgerHandle lh, long entryId, Object ctx) {
+ rc.compareAndSet(BKException.Code.OK, rc2);
+ completeLatch.countDown();
+ }
+ }, null);
}
}
+ completeLatch.await();
+ if (rc.get() != BKException.Code.OK) {
+ throw BKException.create(rc.get());
+ }
}
private void validLedgerEntries(long[] ledgerIds, int msgSize, int numMsgs) throws Exception {
@@ -163,6 +178,7 @@ public class BookieJournalRollingTest ex
long[] ledgerIds = new long[lhs.length];
for (int i=0; i<lhs.length; i++) {
ledgerIds[i] = lhs[i].getId();
+ lhs[i].close();
}
// Sleep for a while to ensure data are flushed
@@ -210,6 +226,7 @@ public class BookieJournalRollingTest ex
long[] ledgerIds = new long[lhs.length];
for (int i=0; i<lhs.length; i++) {
ledgerIds[i] = lhs[i].getId();
+ lhs[i].close();
}
// ledger indexes are not flushed
Modified: zookeeper/bookkeeper/trunk/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/BookieReadWriteTest.java
URL: http://svn.apache.org/viewvc/zookeeper/bookkeeper/trunk/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/BookieReadWriteTest.java?rev=1488138&r1=1488137&r2=1488138&view=diff
==============================================================================
--- zookeeper/bookkeeper/trunk/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/BookieReadWriteTest.java (original)
+++ zookeeper/bookkeeper/trunk/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/BookieReadWriteTest.java Fri May 31 10:02:59 2013
@@ -34,6 +34,7 @@ import java.util.Random;
import java.util.Set;
import java.util.Arrays;
import java.util.concurrent.Semaphore;
+import java.util.concurrent.CountDownLatch;
import java.util.concurrent.atomic.AtomicInteger;
import org.apache.bookkeeper.client.AsyncCallback.AddCallback;
@@ -541,8 +542,20 @@ public class BookieReadWriteTest extends
// bkc.initMessageDigest("SHA1");
ledgerId = lh.getId();
LOG.info("Ledger ID: " + lh.getId());
+ final CountDownLatch completeLatch = new CountDownLatch(numEntriesToWrite);
+ final AtomicInteger rc = new AtomicInteger(BKException.Code.OK);
+
for (int i = 0; i < numEntriesToWrite; i++) {
- lh.addEntry(new byte[0]);
+ lh.asyncAddEntry(new byte[0], new AddCallback() {
+ public void addComplete(int rccb, LedgerHandle lh, long entryId, Object ctx) {
+ rc.compareAndSet(BKException.Code.OK, rccb);
+ completeLatch.countDown();
+ }
+ }, null);
+ }
+ completeLatch.await();
+ if (rc.get() != BKException.Code.OK) {
+ throw BKException.create(rc.get());
}
/*
@@ -587,11 +600,28 @@ public class BookieReadWriteTest extends
long ledgerId = lh.getId();
long ledgerId2 = lh2.getId();
+ final CountDownLatch completeLatch = new CountDownLatch(numEntriesToWrite*2);
+ final AtomicInteger rc = new AtomicInteger(BKException.Code.OK);
+
// bkc.initMessageDigest("SHA1");
LOG.info("Ledger ID 1: " + lh.getId() + ", Ledger ID 2: " + lh2.getId());
for (int i = 0; i < numEntriesToWrite; i++) {
- lh.addEntry(new byte[0]);
- lh2.addEntry(new byte[0]);
+ lh.asyncAddEntry(new byte[0], new AddCallback() {
+ public void addComplete(int rc2, LedgerHandle lh, long entryId, Object ctx) {
+ rc.compareAndSet(BKException.Code.OK, rc2);
+ completeLatch.countDown();
+ }
+ }, null);
+ lh2.asyncAddEntry(new byte[0], new AddCallback() {
+ public void addComplete(int rc2, LedgerHandle lh, long entryId, Object ctx) {
+ rc.compareAndSet(BKException.Code.OK, rc2);
+ completeLatch.countDown();
+ }
+ }, null);
+ }
+ completeLatch.await();
+ if (rc.get() != BKException.Code.OK) {
+ throw BKException.create(rc.get());
}
lh.close();
@@ -684,49 +714,81 @@ public class BookieReadWriteTest extends
}
}
+ private long writeNEntriesLastWriteSync(LedgerHandle lh, int numToWrite) throws Exception {
+ final CountDownLatch completeLatch = new CountDownLatch(numToWrite - 1);
+ final AtomicInteger rc = new AtomicInteger(BKException.Code.OK);
+
+ ByteBuffer entry = ByteBuffer.allocate(4);
+ for (int i = 0; i < numToWrite - 1; i++) {
+ entry = ByteBuffer.allocate(4);
+ entry.putInt(rng.nextInt(maxInt));
+ entry.position(0);
+
+ entries.add(entry.array());
+ entriesSize.add(entry.array().length);
+ lh.asyncAddEntry(entry.array(), new AddCallback() {
+ public void addComplete(int rccb, LedgerHandle lh, long entryId, Object ctx) {
+ rc.compareAndSet(BKException.Code.OK, rccb);
+ completeLatch.countDown();
+ }
+ }, null);
+ }
+ completeLatch.await();
+ if (rc.get() != BKException.Code.OK) {
+ throw BKException.create(rc.get());
+ }
+
+ entry = ByteBuffer.allocate(4);
+ entry.putInt(rng.nextInt(maxInt));
+ entry.position(0);
+
+ entries.add(entry.array());
+ entriesSize.add(entry.array().length);
+ lh.addEntry(entry.array());
+ return lh.getLastAddConfirmed();
+ }
+
@Test(timeout=60000)
- public void testReadFromOpenLedger() throws IOException {
+ public void testReadFromOpenLedger() throws Exception {
try {
// Create a ledger
lh = bkc.createLedger(digestType, ledgerPassword);
// bkc.initMessageDigest("SHA1");
ledgerId = lh.getId();
LOG.info("Ledger ID: " + lh.getId());
- for (int i = 0; i < numEntriesToWrite; i++) {
+
+ long lac = writeNEntriesLastWriteSync(lh, numEntriesToWrite);
+
+ LedgerHandle lhOpen = bkc.openLedgerNoRecovery(ledgerId, digestType, ledgerPassword);
+ // no recovery opened ledger 's last confirmed entry id is less than written
+ // and it just can read until (i-1)
+ long toRead = lac - 1;
+
+ Enumeration<LedgerEntry> readEntry = lhOpen.readEntries(toRead, toRead);
+ assertTrue("Enumeration of ledger entries has no element", readEntry.hasMoreElements() == true);
+ LedgerEntry e = readEntry.nextElement();
+ assertEquals(toRead, e.getEntryId());
+ Assert.assertArrayEquals(entries.get((int)toRead), e.getEntry());
+ // should not written to a read only ledger
+ try {
ByteBuffer entry = ByteBuffer.allocate(4);
entry.putInt(rng.nextInt(maxInt));
entry.position(0);
- entries.add(entry.array());
- entriesSize.add(entry.array().length);
- lh.addEntry(entry.array());
- if(i == numEntriesToWrite/2) {
- LedgerHandle lhOpen = bkc.openLedgerNoRecovery(ledgerId, digestType, ledgerPassword);
- // no recovery opened ledger 's last confirmed entry id is less than written
- // and it just can read until (i-1)
- int toRead = i - 1;
- Enumeration<LedgerEntry> readEntry = lhOpen.readEntries(toRead, toRead);
- assertTrue("Enumeration of ledger entries has no element", readEntry.hasMoreElements() == true);
- LedgerEntry e = readEntry.nextElement();
- assertEquals(toRead, e.getEntryId());
- Assert.assertArrayEquals(entries.get(toRead), e.getEntry());
- // should not written to a read only ledger
- try {
- lhOpen.addEntry(entry.array());
- fail("Should have thrown an exception here");
- } catch (BKException.BKIllegalOpException bkioe) {
- // this is the correct response
- } catch (Exception ex) {
- LOG.error("Unexpected exception", ex);
- fail("Unexpected exception");
- }
- // close read only ledger should not change metadata
- lhOpen.close();
- }
+ lhOpen.addEntry(entry.array());
+ fail("Should have thrown an exception here");
+ } catch (BKException.BKIllegalOpException bkioe) {
+ // this is the correct response
+ } catch (Exception ex) {
+ LOG.error("Unexpected exception", ex);
+ fail("Unexpected exception");
}
+ // close read only ledger should not change metadata
+ lhOpen.close();
- long last = lh.readLastConfirmed();
- assertTrue("Last confirmed add: " + last, last == (numEntriesToWrite - 2));
+ lac = writeNEntriesLastWriteSync(lh, numEntriesToWrite);
+
+ assertEquals("Last confirmed add: ", lac, (numEntriesToWrite * 2) - 1);
LOG.debug("*** WRITE COMPLETE ***");
// close ledger
@@ -737,17 +799,8 @@ public class BookieReadWriteTest extends
lh = bkc.createLedger(digestType, ledgerPassword);
// bkc.initMessageDigest("SHA1");
ledgerId = lh.getId();
- LOG.info("Ledger ID: " + lh.getId());
- for (int i = 0; i < numEntriesToWrite; i++) {
- ByteBuffer entry = ByteBuffer.allocate(4);
- entry.putInt(rng.nextInt(maxInt));
- entry.position(0);
-
- entries.add(entry.array());
- entriesSize.add(entry.array().length);
- lh.addEntry(entry.array());
- }
+ writeNEntriesLastWriteSync(lh, numEntriesToWrite);
SyncObj sync = new SyncObj();
lh.asyncReadLastConfirmed(this, sync);
@@ -761,7 +814,7 @@ public class BookieReadWriteTest extends
assertEquals("Error reading", BKException.Code.OK, sync.getReturnCode());
}
- assertTrue("Last confirmed add: " + sync.lastConfirmed, sync.lastConfirmed == (numEntriesToWrite - 2));
+ assertEquals("Last confirmed add", sync.lastConfirmed, (numEntriesToWrite - 2));
LOG.debug("*** WRITE COMPLETE ***");
// close ledger
@@ -784,40 +837,36 @@ public class BookieReadWriteTest extends
ledgerId = lh.getId();
LOG.info("Ledger ID: " + lh.getId());
LedgerHandle lhOpen = bkc.openLedgerNoRecovery(ledgerId, digestType, ledgerPassword);
- for (int i = 0; i < numEntriesToWrite; i++) {
- ByteBuffer entry = ByteBuffer.allocate(4);
- entry.putInt(rng.nextInt(maxInt));
- entry.position(0);
+ writeNEntriesLastWriteSync(lh, numEntriesToWrite/2);
- entries.add(entry.array());
- entriesSize.add(entry.array().length);
- lh.addEntry(entry.array());
- if (i == numEntriesToWrite / 2) {
- // no recovery opened ledger 's last confirmed entry id is
- // less than written
- // and it just can read until (i-1)
- int toRead = i - 1;
-
- long readLastConfirmed = lhOpen.readLastConfirmed();
- assertTrue(readLastConfirmed != 0);
- Enumeration<LedgerEntry> readEntry = lhOpen.readEntries(toRead, toRead);
- assertTrue("Enumeration of ledger entries has no element", readEntry.hasMoreElements() == true);
- LedgerEntry e = readEntry.nextElement();
- assertEquals(toRead, e.getEntryId());
- Assert.assertArrayEquals(entries.get(toRead), e.getEntry());
- // should not written to a read only ledger
- try {
- lhOpen.addEntry(entry.array());
- fail("Should have thrown an exception here");
- } catch (BKException.BKIllegalOpException bkioe) {
- // this is the correct response
- } catch (Exception ex) {
- LOG.error("Unexpected exception", ex);
- fail("Unexpected exception");
- }
+ ByteBuffer entry = ByteBuffer.allocate(4);
+ entry.putInt(rng.nextInt(maxInt));
+ entry.position(0);
- }
+ // no recovery opened ledger 's last confirmed entry id is
+ // less than written
+ // and it just can read until (i-1)
+ int toRead = numEntriesToWrite/2 - 2;
+
+ long readLastConfirmed = lhOpen.readLastConfirmed();
+ assertTrue(readLastConfirmed != 0);
+ Enumeration<LedgerEntry> readEntry = lhOpen.readEntries(toRead, toRead);
+ assertTrue("Enumeration of ledger entries has no element", readEntry.hasMoreElements() == true);
+ LedgerEntry e = readEntry.nextElement();
+ assertEquals(toRead, e.getEntryId());
+ Assert.assertArrayEquals(entries.get(toRead), e.getEntry());
+ // should not written to a read only ledger
+ try {
+ lhOpen.addEntry(entry.array());
+ fail("Should have thrown an exception here");
+ } catch (BKException.BKIllegalOpException bkioe) {
+ // this is the correct response
+ } catch (Exception ex) {
+ LOG.error("Unexpected exception", ex);
+ fail("Unexpected exception");
}
+ writeNEntriesLastWriteSync(lh, numEntriesToWrite/2);
+
long last = lh.readLastConfirmed();
assertTrue("Last confirmed add: " + last, last == (numEntriesToWrite - 2));
@@ -904,23 +953,15 @@ public class BookieReadWriteTest extends
@Test(timeout=60000)
- public void testLastConfirmedAdd() throws IOException {
+ public void testLastConfirmedAdd() throws Exception {
try {
// Create a ledger
lh = bkc.createLedger(digestType, ledgerPassword);
// bkc.initMessageDigest("SHA1");
ledgerId = lh.getId();
LOG.info("Ledger ID: " + lh.getId());
- for (int i = 0; i < numEntriesToWrite; i++) {
- ByteBuffer entry = ByteBuffer.allocate(4);
- entry.putInt(rng.nextInt(maxInt));
- entry.position(0);
-
- entries.add(entry.array());
- entriesSize.add(entry.array().length);
- lh.addEntry(entry.array());
- }
+ writeNEntriesLastWriteSync(lh, numEntriesToWrite);
long last = lh.readLastConfirmed();
assertTrue("Last confirmed add: " + last, last == (numEntriesToWrite - 2));
@@ -934,16 +975,7 @@ public class BookieReadWriteTest extends
// bkc.initMessageDigest("SHA1");
ledgerId = lh.getId();
LOG.info("Ledger ID: " + lh.getId());
- for (int i = 0; i < numEntriesToWrite; i++) {
- ByteBuffer entry = ByteBuffer.allocate(4);
- entry.putInt(rng.nextInt(maxInt));
- entry.position(0);
-
- entries.add(entry.array());
- entriesSize.add(entry.array().length);
- lh.addEntry(entry.array());
- }
-
+ writeNEntriesLastWriteSync(lh, numEntriesToWrite);
SyncObj sync = new SyncObj();
lh.asyncReadLastConfirmed(this, sync);
Modified: zookeeper/bookkeeper/trunk/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/LedgerDeleteTest.java
URL: http://svn.apache.org/viewvc/zookeeper/bookkeeper/trunk/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/LedgerDeleteTest.java?rev=1488138&r1=1488137&r2=1488138&view=diff
==============================================================================
--- zookeeper/bookkeeper/trunk/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/LedgerDeleteTest.java (original)
+++ zookeeper/bookkeeper/trunk/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/LedgerDeleteTest.java Fri May 31 10:02:59 2013
@@ -22,7 +22,11 @@ package org.apache.bookkeeper.test;
*/
import java.io.File;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.CountDownLatch;
+import org.apache.bookkeeper.client.BKException;
import org.apache.bookkeeper.client.LedgerHandle;
+import org.apache.bookkeeper.client.AsyncCallback.AddCallback;
import org.apache.bookkeeper.client.BookKeeper.DigestType;
import org.apache.bookkeeper.util.TestUtils;
import org.slf4j.Logger;
@@ -39,7 +43,7 @@ public class LedgerDeleteTest extends Mu
DigestType digestType;
public LedgerDeleteTest(String ledgerManagerFactory) {
- super(3);
+ super(1);
LOG.info("Running test case using ledger manager : " + ledgerManagerFactory);
this.digestType = DigestType.CRC32;
// set ledger manager name
@@ -63,7 +67,7 @@ public class LedgerDeleteTest extends Mu
// Create the ledgers
LedgerHandle[] lhs = new LedgerHandle[numLedgers];
for (int i = 0; i < numLedgers; i++) {
- lhs[i] = bkc.createLedger(digestType, "".getBytes());
+ lhs[i] = bkc.createLedger(1, 1, digestType, "".getBytes());
}
// Create a dummy message string to write as ledger entries
@@ -72,13 +76,23 @@ public class LedgerDeleteTest extends Mu
msgSB.append("a");
}
String msg = msgSB.toString();
-
+ final CountDownLatch completeLatch = new CountDownLatch(numMsgs*numLedgers);
+ final AtomicInteger rc = new AtomicInteger(BKException.Code.OK);
// Write all of the entries for all of the ledgers
for (int i = 0; i < numMsgs; i++) {
for (int j = 0; j < numLedgers; j++) {
- lhs[j].addEntry(msg.getBytes());
+ lhs[j].asyncAddEntry(msg.getBytes(), new AddCallback() {
+ public void addComplete(int rc2, LedgerHandle lh, long entryId, Object ctx) {
+ rc.compareAndSet(BKException.Code.OK, rc2);
+ completeLatch.countDown();
+ }
+ }, null);
}
}
+ completeLatch.await();
+ if (rc.get() != BKException.Code.OK) {
+ throw BKException.create(rc.get());
+ }
// Return the ledger handles to the inserted ledgers and entries
return lhs;