|
@@ -63,52 +63,52 @@ import org.junit.Test;
|
|
|
*/
|
|
|
|
|
|
public class BookieReadWriteTest
|
|
|
- extends junit.framework.TestCase
|
|
|
- implements AddCallback, ReadCallback{
|
|
|
+ extends junit.framework.TestCase
|
|
|
+ implements AddCallback, ReadCallback{
|
|
|
|
|
|
- //Depending on the taste, select the amount of logging
|
|
|
- // by decommenting one of the two lines below
|
|
|
- //static Logger LOG = Logger.getRootLogger();
|
|
|
- static Logger LOG = Logger.getLogger(BookieClientTest.class);
|
|
|
+ //Depending on the taste, select the amount of logging
|
|
|
+ // by decommenting one of the two lines below
|
|
|
+ //static Logger LOG = Logger.getRootLogger();
|
|
|
+ static Logger LOG = Logger.getLogger(BookieReadWriteTest.class);
|
|
|
|
|
|
- static ConsoleAppender ca = new ConsoleAppender(new PatternLayout());
|
|
|
+ static ConsoleAppender ca = new ConsoleAppender(new PatternLayout());
|
|
|
|
|
|
- // ZooKeeper related variables
|
|
|
+ // ZooKeeper related variables
|
|
|
private static final String HOSTPORT = "127.0.0.1:2181";
|
|
|
- static Integer ZooKeeperDefaultPort = 2181;
|
|
|
- ZooKeeperServer zks;
|
|
|
- ZooKeeper zkc; //zookeeper client
|
|
|
- NIOServerCnxn.Factory serverFactory;
|
|
|
- File ZkTmpDir;
|
|
|
-
|
|
|
- //BookKeeper
|
|
|
- File tmpDirB1, tmpDirB2, tmpDirB3;
|
|
|
- BookieServer bs1, bs2, bs3;
|
|
|
- Integer initialPort = 5000;
|
|
|
- BookKeeper bkc; // bookkeeper client
|
|
|
- byte[] ledgerPassword = "aaa".getBytes();
|
|
|
- LedgerHandle lh, lh2;
|
|
|
- long ledgerId;
|
|
|
- LedgerSequence ls;
|
|
|
-
|
|
|
- //test related variables
|
|
|
- int numEntriesToWrite = 20;
|
|
|
- int maxInt = 2147483647;
|
|
|
- Random rng; // Random Number Generator
|
|
|
- ArrayList<byte[]> entries; // generated entries
|
|
|
- ArrayList<Integer> entriesSize;
|
|
|
-
|
|
|
- // Synchronization
|
|
|
- SyncObj sync;
|
|
|
- Set<Object> syncObjs;
|
|
|
-
|
|
|
+ static Integer ZooKeeperDefaultPort = 2181;
|
|
|
+ ZooKeeperServer zks;
|
|
|
+ ZooKeeper zkc; //zookeeper client
|
|
|
+ NIOServerCnxn.Factory serverFactory;
|
|
|
+ File ZkTmpDir;
|
|
|
+
|
|
|
+ //BookKeeper
|
|
|
+ File tmpDirB1, tmpDirB2, tmpDirB3;
|
|
|
+ BookieServer bs1, bs2, bs3;
|
|
|
+ Integer initialPort = 5000;
|
|
|
+ BookKeeper bkc; // bookkeeper client
|
|
|
+ byte[] ledgerPassword = "aaa".getBytes();
|
|
|
+ LedgerHandle lh, lh2;
|
|
|
+ long ledgerId;
|
|
|
+ LedgerSequence ls;
|
|
|
+
|
|
|
+ //test related variables
|
|
|
+ int numEntriesToWrite = 200;
|
|
|
+ int maxInt = 2147483647;
|
|
|
+ Random rng; // Random Number Generator
|
|
|
+ ArrayList<byte[]> entries; // generated entries
|
|
|
+ ArrayList<Integer> entriesSize;
|
|
|
+
|
|
|
+ // Synchronization
|
|
|
+ SyncObj sync;
|
|
|
+ Set<Object> syncObjs;
|
|
|
+
|
|
|
class SyncObj {
|
|
|
- int counter;
|
|
|
- boolean value;
|
|
|
- public SyncObj() {
|
|
|
- counter = 0;
|
|
|
- value = false;
|
|
|
- }
|
|
|
+ int counter;
|
|
|
+ boolean value;
|
|
|
+ public SyncObj() {
|
|
|
+ counter = 0;
|
|
|
+ value = false;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
@Test
|
|
@@ -137,7 +137,7 @@ public class BookieReadWriteTest
|
|
|
// create a buffer of a single bytes
|
|
|
// and check for corner cases
|
|
|
String toWrite = "we need to check for this string to match " +
|
|
|
- "and for the record mahadev is the best";
|
|
|
+ "and for the record mahadev is the best";
|
|
|
LedgerOutputStream lout = new LedgerOutputStream(lh , 1);
|
|
|
byte[] b = toWrite.getBytes();
|
|
|
lout.write(b);
|
|
@@ -181,252 +181,255 @@ public class BookieReadWriteTest
|
|
|
|
|
|
|
|
|
@Test
|
|
|
- public void testReadWriteAsyncSingleClient() throws IOException{
|
|
|
- try {
|
|
|
- // Create a BookKeeper client and a ledger
|
|
|
- bkc = new BookKeeper("127.0.0.1");
|
|
|
- lh = bkc.createLedger(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.asyncAddEntry(entry.array(), this, sync);
|
|
|
- }
|
|
|
-
|
|
|
- // wait for all entries to be acknowledged
|
|
|
- synchronized (sync) {
|
|
|
- while (sync.counter < numEntriesToWrite){
|
|
|
- LOG.debug("Entries counter = " + sync.counter);
|
|
|
- sync.wait();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- LOG.debug("*** WRITE COMPLETE ***");
|
|
|
- // close ledger
|
|
|
- lh.close();
|
|
|
-
|
|
|
- //*** WRITING PART COMPLETE // READ PART BEGINS ***
|
|
|
-
|
|
|
- // open ledger
|
|
|
- lh = bkc.openLedger(ledgerId, ledgerPassword);
|
|
|
- LOG.debug("Number of entries written: " + lh.getLast());
|
|
|
- assertTrue("Verifying number of entries written", lh.getLast() == (numEntriesToWrite - 1));
|
|
|
-
|
|
|
- //read entries
|
|
|
- lh.asyncReadEntries(0, numEntriesToWrite - 1, this, (Object) sync);
|
|
|
-
|
|
|
- synchronized (sync) {
|
|
|
- while(sync.value == false){
|
|
|
- sync.wait();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- assertTrue("Checking number of read entries", ls.size() == numEntriesToWrite);
|
|
|
-
|
|
|
- LOG.debug("*** READ COMPLETE ***");
|
|
|
-
|
|
|
- // at this point, LedgerSequence ls is filled with the returned values
|
|
|
- int i = 0;
|
|
|
- while(ls.hasMoreElements()){
|
|
|
- ByteBuffer origbb = ByteBuffer.wrap(entries.get(i));
|
|
|
- Integer origEntry = origbb.getInt();
|
|
|
- byte[] entry = ls.nextElement().getEntry();
|
|
|
- ByteBuffer result = ByteBuffer.wrap(entry);
|
|
|
- LOG.debug("Length of result: " + result.capacity());
|
|
|
- LOG.debug("Original entry: " + origEntry);
|
|
|
+ public void testReadWriteAsyncSingleClient() throws IOException{
|
|
|
+ try {
|
|
|
+ // Create a BookKeeper client and a ledger
|
|
|
+ bkc = new BookKeeper("127.0.0.1");
|
|
|
+ lh = bkc.createLedger(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.asyncAddEntry(entry.array(), this, sync);
|
|
|
+ }
|
|
|
+
|
|
|
+ // wait for all entries to be acknowledged
|
|
|
+ synchronized (sync) {
|
|
|
+ while (sync.counter < numEntriesToWrite){
|
|
|
+ LOG.debug("Entries counter = " + sync.counter);
|
|
|
+ sync.wait();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ LOG.debug("*** WRITE COMPLETE ***");
|
|
|
+ // close ledger
|
|
|
+ lh.close();
|
|
|
+
|
|
|
+ //*** WRITING PART COMPLETE // READ PART BEGINS ***
|
|
|
+
|
|
|
+ // open ledger
|
|
|
+ lh = bkc.openLedger(ledgerId, ledgerPassword);
|
|
|
+ LOG.debug("Number of entries written: " + lh.getLast());
|
|
|
+ assertTrue("Verifying number of entries written", lh.getLast() == (numEntriesToWrite - 1));
|
|
|
+
|
|
|
+ //read entries
|
|
|
+ lh.asyncReadEntries(0, numEntriesToWrite - 1, this, (Object) sync);
|
|
|
+
|
|
|
+ synchronized (sync) {
|
|
|
+ while(sync.value == false){
|
|
|
+ sync.wait();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ assertTrue("Checking number of read entries", ls.size() == numEntriesToWrite);
|
|
|
+
|
|
|
+ LOG.debug("*** READ COMPLETE ***");
|
|
|
+
|
|
|
+ // at this point, LedgerSequence ls is filled with the returned values
|
|
|
+ int i = 0;
|
|
|
+ while(ls.hasMoreElements()){
|
|
|
+ ByteBuffer origbb = ByteBuffer.wrap(entries.get(i));
|
|
|
+ Integer origEntry = origbb.getInt();
|
|
|
+ byte[] entry = ls.nextElement().getEntry();
|
|
|
+ ByteBuffer result = ByteBuffer.wrap(entry);
|
|
|
+ LOG.debug("Length of result: " + result.capacity());
|
|
|
+ LOG.debug("Original entry: " + origEntry);
|
|
|
|
|
|
- Integer retrEntry = result.getInt();
|
|
|
- LOG.debug("Retrieved entry: " + retrEntry);
|
|
|
- assertTrue("Checking entry " + i + " for equality", origEntry.equals(retrEntry));
|
|
|
- assertTrue("Checking entry " + i + " for size", entry.length == entriesSize.get(i).intValue());
|
|
|
- i++;
|
|
|
- }
|
|
|
- lh.close();
|
|
|
- } catch (KeeperException e) {
|
|
|
- e.printStackTrace();
|
|
|
- } catch (BKException e) {
|
|
|
- e.printStackTrace();
|
|
|
- } catch (InterruptedException e) {
|
|
|
- e.printStackTrace();
|
|
|
- } //catch (NoSuchAlgorithmException e) {
|
|
|
- // e.printStackTrace();
|
|
|
- //}
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
+ Integer retrEntry = result.getInt();
|
|
|
+ LOG.debug("Retrieved entry: " + retrEntry);
|
|
|
+ assertTrue("Checking entry " + i + " for equality", origEntry.equals(retrEntry));
|
|
|
+ assertTrue("Checking entry " + i + " for size", entry.length == entriesSize.get(i).intValue());
|
|
|
+ i++;
|
|
|
+ }
|
|
|
+ lh.close();
|
|
|
+ } catch (KeeperException e) {
|
|
|
+ LOG.error("Test failed", e);
|
|
|
+ fail("Test failed due to ZooKeeper exception");
|
|
|
+ } catch (BKException e) {
|
|
|
+ LOG.error("Test failed", e);
|
|
|
+ fail("Test failed due to BookKeeper exception");
|
|
|
+ } catch (InterruptedException e) {
|
|
|
+ LOG.error("Test failed", e);
|
|
|
+ fail("Test failed due to interruption");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
@Test
|
|
|
- public void testSyncReadAsyncWriteStringsSingleClient() throws IOException{
|
|
|
- LOG.info("TEST READ WRITE STRINGS MIXED SINGLE CLIENT");
|
|
|
- String charset = "utf-8";
|
|
|
- LOG.debug("Default charset: " + Charset.defaultCharset());
|
|
|
- try {
|
|
|
- // Create a BookKeeper client and a ledger
|
|
|
- bkc = new BookKeeper("127.0.0.1");
|
|
|
- lh = bkc.createLedger(ledgerPassword);
|
|
|
- //bkc.initMessageDigest("SHA1");
|
|
|
- ledgerId = lh.getId();
|
|
|
- LOG.info("Ledger ID: " + lh.getId());
|
|
|
- for(int i = 0; i < numEntriesToWrite; i++){
|
|
|
- int randomInt = rng.nextInt(maxInt);
|
|
|
- byte[] entry = new String(Integer.toString(randomInt)).getBytes(charset);
|
|
|
- entries.add(entry);
|
|
|
- lh.asyncAddEntry(entry, this, sync);
|
|
|
- }
|
|
|
-
|
|
|
- // wait for all entries to be acknowledged
|
|
|
- synchronized (sync) {
|
|
|
- while (sync.counter < numEntriesToWrite){
|
|
|
- LOG.debug("Entries counter = " + sync.counter);
|
|
|
- sync.wait();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- LOG.debug("*** ASYNC WRITE COMPLETE ***");
|
|
|
- // close ledger
|
|
|
- lh.close();
|
|
|
-
|
|
|
- //*** WRITING PART COMPLETED // READ PART BEGINS ***
|
|
|
-
|
|
|
- // open ledger
|
|
|
- lh = bkc.openLedger(ledgerId, ledgerPassword);
|
|
|
- LOG.debug("Number of entries written: " + lh.getLast());
|
|
|
- assertTrue("Verifying number of entries written", lh.getLast() == (numEntriesToWrite - 1));
|
|
|
-
|
|
|
- //read entries
|
|
|
- ls = lh.readEntries(0, numEntriesToWrite - 1);
|
|
|
-
|
|
|
- assertTrue("Checking number of read entries", ls.size() == numEntriesToWrite);
|
|
|
-
|
|
|
- LOG.debug("*** SYNC READ COMPLETE ***");
|
|
|
-
|
|
|
- // at this point, LedgerSequence ls is filled with the returned values
|
|
|
- int i = 0;
|
|
|
- while(ls.hasMoreElements()){
|
|
|
- byte[] origEntryBytes = entries.get(i++);
|
|
|
- byte[] retrEntryBytes = ls.nextElement().getEntry();
|
|
|
-
|
|
|
- LOG.debug("Original byte entry size: " + origEntryBytes.length);
|
|
|
- LOG.debug("Saved byte entry size: " + retrEntryBytes.length);
|
|
|
-
|
|
|
- String origEntry = new String(origEntryBytes, charset);
|
|
|
- String retrEntry = new String(retrEntryBytes, charset);
|
|
|
-
|
|
|
- LOG.debug("Original entry: " + origEntry);
|
|
|
- LOG.debug("Retrieved entry: " + retrEntry);
|
|
|
-
|
|
|
- assertTrue("Checking entry " + i + " for equality", origEntry.equals(retrEntry));
|
|
|
- }
|
|
|
- lh.close();
|
|
|
- } catch (KeeperException e) {
|
|
|
- e.printStackTrace();
|
|
|
- } catch (BKException e) {
|
|
|
- e.printStackTrace();
|
|
|
- } catch (InterruptedException e) {
|
|
|
- e.printStackTrace();
|
|
|
- } //catch (NoSuchAlgorithmException e) {
|
|
|
- // e.printStackTrace();
|
|
|
- //}
|
|
|
-
|
|
|
- }
|
|
|
+ public void testSyncReadAsyncWriteStringsSingleClient() throws IOException{
|
|
|
+ LOG.info("TEST READ WRITE STRINGS MIXED SINGLE CLIENT");
|
|
|
+ String charset = "utf-8";
|
|
|
+ LOG.debug("Default charset: " + Charset.defaultCharset());
|
|
|
+ try {
|
|
|
+ // Create a BookKeeper client and a ledger
|
|
|
+ bkc = new BookKeeper("127.0.0.1");
|
|
|
+ lh = bkc.createLedger(ledgerPassword);
|
|
|
+ //bkc.initMessageDigest("SHA1");
|
|
|
+ ledgerId = lh.getId();
|
|
|
+ LOG.info("Ledger ID: " + lh.getId());
|
|
|
+ for(int i = 0; i < numEntriesToWrite; i++){
|
|
|
+ int randomInt = rng.nextInt(maxInt);
|
|
|
+ byte[] entry = new String(Integer.toString(randomInt)).getBytes(charset);
|
|
|
+ entries.add(entry);
|
|
|
+ lh.asyncAddEntry(entry, this, sync);
|
|
|
+ }
|
|
|
+
|
|
|
+ // wait for all entries to be acknowledged
|
|
|
+ synchronized (sync) {
|
|
|
+ while (sync.counter < numEntriesToWrite){
|
|
|
+ LOG.debug("Entries counter = " + sync.counter);
|
|
|
+ sync.wait();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ LOG.debug("*** ASYNC WRITE COMPLETE ***");
|
|
|
+ // close ledger
|
|
|
+ lh.close();
|
|
|
+
|
|
|
+ //*** WRITING PART COMPLETED // READ PART BEGINS ***
|
|
|
+
|
|
|
+ // open ledger
|
|
|
+ lh = bkc.openLedger(ledgerId, ledgerPassword);
|
|
|
+ LOG.debug("Number of entries written: " + lh.getLast());
|
|
|
+ assertTrue("Verifying number of entries written", lh.getLast() == (numEntriesToWrite - 1));
|
|
|
+
|
|
|
+ //read entries
|
|
|
+ ls = lh.readEntries(0, numEntriesToWrite - 1);
|
|
|
+
|
|
|
+ assertTrue("Checking number of read entries", ls.size() == numEntriesToWrite);
|
|
|
+
|
|
|
+ LOG.debug("*** SYNC READ COMPLETE ***");
|
|
|
+
|
|
|
+ // at this point, LedgerSequence ls is filled with the returned values
|
|
|
+ int i = 0;
|
|
|
+ while(ls.hasMoreElements()){
|
|
|
+ byte[] origEntryBytes = entries.get(i++);
|
|
|
+ byte[] retrEntryBytes = ls.nextElement().getEntry();
|
|
|
+
|
|
|
+ LOG.debug("Original byte entry size: " + origEntryBytes.length);
|
|
|
+ LOG.debug("Saved byte entry size: " + retrEntryBytes.length);
|
|
|
+
|
|
|
+ String origEntry = new String(origEntryBytes, charset);
|
|
|
+ String retrEntry = new String(retrEntryBytes, charset);
|
|
|
+
|
|
|
+ LOG.debug("Original entry: " + origEntry);
|
|
|
+ LOG.debug("Retrieved entry: " + retrEntry);
|
|
|
+
|
|
|
+ assertTrue("Checking entry " + i + " for equality", origEntry.equals(retrEntry));
|
|
|
+ }
|
|
|
+ lh.close();
|
|
|
+ } catch (KeeperException e) {
|
|
|
+ LOG.error("Test failed", e);
|
|
|
+ fail("Test failed due to ZooKeeper exception");
|
|
|
+ } catch (BKException e) {
|
|
|
+ LOG.error("Test failed", e);
|
|
|
+ fail("Test failed due to BookKeeper exception");
|
|
|
+ } catch (InterruptedException e) {
|
|
|
+ LOG.error("Test failed", e);
|
|
|
+ fail("Test failed due to interruption");
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
@Test
|
|
|
public void testReadWriteSyncSingleClient() throws IOException {
|
|
|
- try {
|
|
|
- // Create a BookKeeper client and a ledger
|
|
|
- bkc = new BookKeeper("127.0.0.1");
|
|
|
- lh = bkc.createLedger(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());
|
|
|
- lh.addEntry(entry.array());
|
|
|
- }
|
|
|
- lh.close();
|
|
|
- lh = bkc.openLedger(ledgerId, ledgerPassword);
|
|
|
- LOG.debug("Number of entries written: " + lh.getLast());
|
|
|
- assertTrue("Verifying number of entries written", lh.getLast() == (numEntriesToWrite - 1));
|
|
|
-
|
|
|
- ls = lh.readEntries(0, numEntriesToWrite - 1);
|
|
|
- int i = 0;
|
|
|
- while(ls.hasMoreElements()){
|
|
|
- ByteBuffer origbb = ByteBuffer.wrap(entries.get(i++));
|
|
|
- Integer origEntry = origbb.getInt();
|
|
|
- ByteBuffer result = ByteBuffer.wrap(ls.nextElement().getEntry());
|
|
|
- LOG.debug("Length of result: " + result.capacity());
|
|
|
- LOG.debug("Original entry: " + origEntry);
|
|
|
+ try {
|
|
|
+ // Create a BookKeeper client and a ledger
|
|
|
+ bkc = new BookKeeper("127.0.0.1");
|
|
|
+ lh = bkc.createLedger(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());
|
|
|
+ lh.addEntry(entry.array());
|
|
|
+ }
|
|
|
+ lh.close();
|
|
|
+ lh = bkc.openLedger(ledgerId, ledgerPassword);
|
|
|
+ LOG.debug("Number of entries written: " + lh.getLast());
|
|
|
+ assertTrue("Verifying number of entries written", lh.getLast() == (numEntriesToWrite - 1));
|
|
|
+
|
|
|
+ ls = lh.readEntries(0, numEntriesToWrite - 1);
|
|
|
+ int i = 0;
|
|
|
+ while(ls.hasMoreElements()){
|
|
|
+ ByteBuffer origbb = ByteBuffer.wrap(entries.get(i++));
|
|
|
+ Integer origEntry = origbb.getInt();
|
|
|
+ ByteBuffer result = ByteBuffer.wrap(ls.nextElement().getEntry());
|
|
|
+ LOG.debug("Length of result: " + result.capacity());
|
|
|
+ LOG.debug("Original entry: " + origEntry);
|
|
|
|
|
|
- Integer retrEntry = result.getInt();
|
|
|
- LOG.debug("Retrieved entry: " + retrEntry);
|
|
|
- assertTrue("Checking entry " + i + " for equality", origEntry.equals(retrEntry));
|
|
|
- }
|
|
|
- lh.close();
|
|
|
- } catch (KeeperException e) {
|
|
|
- e.printStackTrace();
|
|
|
- } catch (BKException e) {
|
|
|
- e.printStackTrace();
|
|
|
- } catch (InterruptedException e) {
|
|
|
- e.printStackTrace();
|
|
|
- } //catch (NoSuchAlgorithmException e) {
|
|
|
- // e.printStackTrace();
|
|
|
- //}
|
|
|
- }
|
|
|
-
|
|
|
+ Integer retrEntry = result.getInt();
|
|
|
+ LOG.debug("Retrieved entry: " + retrEntry);
|
|
|
+ assertTrue("Checking entry " + i + " for equality", origEntry.equals(retrEntry));
|
|
|
+ }
|
|
|
+ lh.close();
|
|
|
+ } catch (KeeperException e) {
|
|
|
+ LOG.error("Test failed", e);
|
|
|
+ fail("Test failed due to ZooKeeper exception");
|
|
|
+ } catch (BKException e) {
|
|
|
+ LOG.error("Test failed", e);
|
|
|
+ fail("Test failed due to BookKeeper exception");
|
|
|
+ } catch (InterruptedException e) {
|
|
|
+ LOG.error("Test failed", e);
|
|
|
+ fail("Test failed due to interruption");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
@Test
|
|
|
public void testReadWriteZero() throws IOException {
|
|
|
- try {
|
|
|
- // Create a BookKeeper client and a ledger
|
|
|
- bkc = new BookKeeper("127.0.0.1");
|
|
|
- lh = bkc.createLedger(ledgerPassword);
|
|
|
- //bkc.initMessageDigest("SHA1");
|
|
|
- ledgerId = lh.getId();
|
|
|
- LOG.info("Ledger ID: " + lh.getId());
|
|
|
- for(int i = 0; i < numEntriesToWrite; i++){
|
|
|
- lh.addEntry(new byte[0]);
|
|
|
- }
|
|
|
-
|
|
|
- /*
|
|
|
- * Write a non-zero entry
|
|
|
- */
|
|
|
- ByteBuffer entry = ByteBuffer.allocate(4);
|
|
|
- entry.putInt(rng.nextInt(maxInt));
|
|
|
- entry.position(0);
|
|
|
- entries.add(entry.array());
|
|
|
- lh.addEntry( entry.array());
|
|
|
-
|
|
|
- lh.close();
|
|
|
- lh = bkc.openLedger(ledgerId, ledgerPassword);
|
|
|
- LOG.debug("Number of entries written: " + lh.getLast());
|
|
|
- assertTrue("Verifying number of entries written", lh.getLast() == numEntriesToWrite);
|
|
|
-
|
|
|
- ls = lh.readEntries(0, numEntriesToWrite - 1);
|
|
|
- int i = 0;
|
|
|
- while(ls.hasMoreElements()){
|
|
|
- ByteBuffer result = ByteBuffer.wrap(ls.nextElement().getEntry());
|
|
|
- LOG.debug("Length of result: " + result.capacity());
|
|
|
-
|
|
|
- assertTrue("Checking if entry " + i + " has zero bytes", result.capacity() == 0);
|
|
|
- }
|
|
|
- lh.close();
|
|
|
- } catch (KeeperException e) {
|
|
|
- e.printStackTrace();
|
|
|
- } catch (BKException e) {
|
|
|
- e.printStackTrace();
|
|
|
- } catch (InterruptedException e) {
|
|
|
- e.printStackTrace();
|
|
|
- } //catch (NoSuchAlgorithmException e) {
|
|
|
- // e.printStackTrace();
|
|
|
- //}
|
|
|
- }
|
|
|
+ try {
|
|
|
+ // Create a BookKeeper client and a ledger
|
|
|
+ bkc = new BookKeeper("127.0.0.1");
|
|
|
+ lh = bkc.createLedger(ledgerPassword);
|
|
|
+ //bkc.initMessageDigest("SHA1");
|
|
|
+ ledgerId = lh.getId();
|
|
|
+ LOG.info("Ledger ID: " + lh.getId());
|
|
|
+ for(int i = 0; i < numEntriesToWrite; i++){
|
|
|
+ lh.addEntry(new byte[0]);
|
|
|
+ }
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Write a non-zero entry
|
|
|
+ */
|
|
|
+ ByteBuffer entry = ByteBuffer.allocate(4);
|
|
|
+ entry.putInt(rng.nextInt(maxInt));
|
|
|
+ entry.position(0);
|
|
|
+ entries.add(entry.array());
|
|
|
+ lh.addEntry( entry.array());
|
|
|
+
|
|
|
+ lh.close();
|
|
|
+ lh = bkc.openLedger(ledgerId, ledgerPassword);
|
|
|
+ LOG.debug("Number of entries written: " + lh.getLast());
|
|
|
+ assertTrue("Verifying number of entries written", lh.getLast() == numEntriesToWrite);
|
|
|
+
|
|
|
+ ls = lh.readEntries(0, numEntriesToWrite - 1);
|
|
|
+ int i = 0;
|
|
|
+ while(ls.hasMoreElements()){
|
|
|
+ ByteBuffer result = ByteBuffer.wrap(ls.nextElement().getEntry());
|
|
|
+ LOG.debug("Length of result: " + result.capacity());
|
|
|
+
|
|
|
+ assertTrue("Checking if entry " + i + " has zero bytes", result.capacity() == 0);
|
|
|
+ }
|
|
|
+ lh.close();
|
|
|
+ } catch (KeeperException e) {
|
|
|
+ LOG.error("Test failed", e);
|
|
|
+ fail("Test failed due to ZooKeeper exception");
|
|
|
+ } catch (BKException e) {
|
|
|
+ LOG.error("Test failed", e);
|
|
|
+ fail("Test failed due to BookKeeper exception");
|
|
|
+ } catch (InterruptedException e) {
|
|
|
+ LOG.error("Test failed", e);
|
|
|
+ fail("Test failed due to interruption");
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
@Test
|
|
|
public void testMultiLedger() throws IOException {
|
|
@@ -473,159 +476,160 @@ public class BookieReadWriteTest
|
|
|
|
|
|
assertTrue("Checking if entry " + i + " has zero bytes", result.capacity() == 0);
|
|
|
}
|
|
|
-
|
|
|
lh2.close();
|
|
|
} catch (KeeperException e) {
|
|
|
- e.printStackTrace();
|
|
|
+ LOG.error("Test failed", e);
|
|
|
+ fail("Test failed due to ZooKeeper exception");
|
|
|
} catch (BKException e) {
|
|
|
- e.printStackTrace();
|
|
|
+ LOG.error("Test failed", e);
|
|
|
+ fail("Test failed due to BookKeeper exception");
|
|
|
} catch (InterruptedException e) {
|
|
|
- e.printStackTrace();
|
|
|
- } //catch (NoSuchAlgorithmException e) {
|
|
|
- // e.printStackTrace();
|
|
|
- //}
|
|
|
+ LOG.error("Test failed", e);
|
|
|
+ fail("Test failed due to interruption");
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
|
|
|
- public void addComplete(int rc,
|
|
|
- LedgerHandle lh,
|
|
|
- long entryId,
|
|
|
- Object ctx) {
|
|
|
- SyncObj x = (SyncObj) ctx;
|
|
|
- synchronized (x) {
|
|
|
- x.counter++;
|
|
|
- x.notify();
|
|
|
- }
|
|
|
- }
|
|
|
+ public void addComplete(int rc,
|
|
|
+ LedgerHandle lh,
|
|
|
+ long entryId,
|
|
|
+ Object ctx) {
|
|
|
+ SyncObj x = (SyncObj) ctx;
|
|
|
+ synchronized (x) {
|
|
|
+ x.counter++;
|
|
|
+ x.notify();
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- public void readComplete(int rc,
|
|
|
- LedgerHandle lh,
|
|
|
- LedgerSequence seq,
|
|
|
- Object ctx) {
|
|
|
- ls = seq;
|
|
|
- synchronized (sync) {
|
|
|
- sync.value = true;
|
|
|
- sync.notify();
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- protected void setUp() throws IOException {
|
|
|
- LOG.addAppender(ca);
|
|
|
- LOG.setLevel((Level) Level.DEBUG);
|
|
|
-
|
|
|
- // create a ZooKeeper server(dataDir, dataLogDir, port)
|
|
|
- LOG.debug("Running ZK server");
|
|
|
- //ServerStats.registerAsConcrete();
|
|
|
- ClientBase.setupTestEnv();
|
|
|
- ZkTmpDir = File.createTempFile("zookeeper", "test");
|
|
|
+ public void readComplete(int rc,
|
|
|
+ LedgerHandle lh,
|
|
|
+ LedgerSequence seq,
|
|
|
+ Object ctx) {
|
|
|
+ ls = seq;
|
|
|
+ synchronized (sync) {
|
|
|
+ sync.value = true;
|
|
|
+ sync.notify();
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ protected void setUp() throws IOException, InterruptedException {
|
|
|
+ LOG.addAppender(ca);
|
|
|
+ LOG.setLevel((Level) Level.DEBUG);
|
|
|
+
|
|
|
+ // create a ZooKeeper server(dataDir, dataLogDir, port)
|
|
|
+ LOG.debug("Running ZK server");
|
|
|
+ //ServerStats.registerAsConcrete();
|
|
|
+ ClientBase.setupTestEnv();
|
|
|
+ ZkTmpDir = File.createTempFile("zookeeper", "test");
|
|
|
ZkTmpDir.delete();
|
|
|
ZkTmpDir.mkdir();
|
|
|
-
|
|
|
- try {
|
|
|
- zks = new ZooKeeperServer(ZkTmpDir, ZkTmpDir, ZooKeeperDefaultPort);
|
|
|
- serverFactory = new NIOServerCnxn.Factory(ZooKeeperDefaultPort);
|
|
|
- serverFactory.startup(zks);
|
|
|
- } catch (IOException e1) {
|
|
|
- // TODO Auto-generated catch block
|
|
|
- e1.printStackTrace();
|
|
|
- } catch (InterruptedException e) {
|
|
|
- // TODO Auto-generated catch block
|
|
|
- e.printStackTrace();
|
|
|
- }
|
|
|
+
|
|
|
+ try {
|
|
|
+ zks = new ZooKeeperServer(ZkTmpDir, ZkTmpDir, ZooKeeperDefaultPort);
|
|
|
+ serverFactory = new NIOServerCnxn.Factory(ZooKeeperDefaultPort);
|
|
|
+ serverFactory.startup(zks);
|
|
|
+ } catch (IOException e1) {
|
|
|
+ // TODO Auto-generated catch block
|
|
|
+ e1.printStackTrace();
|
|
|
+ } catch (InterruptedException e) {
|
|
|
+ // TODO Auto-generated catch block
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
boolean b = ClientBase.waitForServerUp(HOSTPORT, ClientBase.CONNECTION_TIMEOUT);
|
|
|
-
|
|
|
+
|
|
|
LOG.debug("Server up: " + b);
|
|
|
|
|
|
- // create a zookeeper client
|
|
|
- LOG.debug("Instantiate ZK Client");
|
|
|
- zkc = new ZooKeeper("127.0.0.1", ZooKeeperDefaultPort, new emptyWatcher());
|
|
|
-
|
|
|
- //initialize the zk client with values
|
|
|
- try {
|
|
|
- zkc.create("/ledgers", new byte[0], Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
|
|
|
- zkc.create("/ledgers/available", new byte[0], Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
|
|
|
- zkc.create("/ledgers/available/127.0.0.1:" + Integer.toString(initialPort), new byte[0], Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
|
|
|
- zkc.create("/ledgers/available/127.0.0.1:" + Integer.toString(initialPort + 1), new byte[0], Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
|
|
|
- zkc.create("/ledgers/available/127.0.0.1:" + Integer.toString(initialPort + 2), new byte[0], Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
|
|
|
- } catch (KeeperException e) {
|
|
|
- // TODO Auto-generated catch block
|
|
|
- e.printStackTrace();
|
|
|
- } catch (InterruptedException e) {
|
|
|
- // TODO Auto-generated catch block
|
|
|
- e.printStackTrace();
|
|
|
- }
|
|
|
-
|
|
|
- // Create Bookie Servers (B1, B2, B3)
|
|
|
- tmpDirB1 = File.createTempFile("bookie1", "test");
|
|
|
+ // create a zookeeper client
|
|
|
+ LOG.debug("Instantiate ZK Client");
|
|
|
+ zkc = new ZooKeeper("127.0.0.1", ZooKeeperDefaultPort, new emptyWatcher());
|
|
|
+
|
|
|
+ //initialize the zk client with values
|
|
|
+ try {
|
|
|
+ zkc.create("/ledgers", new byte[0], Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
|
|
|
+ zkc.create("/ledgers/available", new byte[0], Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
|
|
|
+ zkc.create("/ledgers/available/127.0.0.1:" + Integer.toString(initialPort), new byte[0], Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
|
|
|
+ zkc.create("/ledgers/available/127.0.0.1:" + Integer.toString(initialPort + 1), new byte[0], Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
|
|
|
+ zkc.create("/ledgers/available/127.0.0.1:" + Integer.toString(initialPort + 2), new byte[0], Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
|
|
|
+ } catch (KeeperException e) {
|
|
|
+ // TODO Auto-generated catch block
|
|
|
+ e.printStackTrace();
|
|
|
+ } catch (InterruptedException e) {
|
|
|
+ // TODO Auto-generated catch block
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+
|
|
|
+ // Create Bookie Servers (B1, B2, B3)
|
|
|
+ tmpDirB1 = File.createTempFile("bookie1", "test");
|
|
|
tmpDirB1.delete();
|
|
|
tmpDirB1.mkdir();
|
|
|
-
|
|
|
- bs1 = new BookieServer(initialPort, tmpDirB1, new File[]{tmpDirB1});
|
|
|
- bs1.start();
|
|
|
-
|
|
|
- tmpDirB2 = File.createTempFile("bookie2", "test");
|
|
|
+
|
|
|
+ bs1 = new BookieServer(initialPort, tmpDirB1, new File[]{tmpDirB1});
|
|
|
+ bs1.start();
|
|
|
+
|
|
|
+ tmpDirB2 = File.createTempFile("bookie2", "test");
|
|
|
tmpDirB2.delete();
|
|
|
tmpDirB2.mkdir();
|
|
|
-
|
|
|
- bs2 = new BookieServer(initialPort + 1, tmpDirB2, new File[]{tmpDirB2});
|
|
|
- bs2.start();
|
|
|
+
|
|
|
+ bs2 = new BookieServer(initialPort + 1, tmpDirB2, new File[]{tmpDirB2});
|
|
|
+ bs2.start();
|
|
|
|
|
|
- tmpDirB3 = File.createTempFile("bookie3", "test");
|
|
|
+ tmpDirB3 = File.createTempFile("bookie3", "test");
|
|
|
tmpDirB3.delete();
|
|
|
tmpDirB3.mkdir();
|
|
|
|
|
|
- bs3 = new BookieServer(initialPort + 2, tmpDirB3, new File[]{tmpDirB3});
|
|
|
- bs3.start();
|
|
|
-
|
|
|
- rng = new Random(System.currentTimeMillis()); // Initialize the Random Number Generator
|
|
|
- entries = new ArrayList<byte[]>(); // initialize the entries list
|
|
|
- entriesSize = new ArrayList<Integer>();
|
|
|
- sync = new SyncObj(); // initialize the synchronization data structure
|
|
|
- }
|
|
|
-
|
|
|
- protected void tearDown(){
|
|
|
- LOG.info("TearDown");
|
|
|
+ bs3 = new BookieServer(initialPort + 2, tmpDirB3, new File[]{tmpDirB3});
|
|
|
+ bs3.start();
|
|
|
+
|
|
|
+ rng = new Random(System.currentTimeMillis()); // Initialize the Random Number Generator
|
|
|
+ entries = new ArrayList<byte[]>(); // initialize the entries list
|
|
|
+ entriesSize = new ArrayList<Integer>();
|
|
|
+ sync = new SyncObj(); // initialize the synchronization data structure
|
|
|
+ zkc.close();
|
|
|
+ }
|
|
|
+
|
|
|
+ protected void tearDown(){
|
|
|
+ LOG.info("TearDown");
|
|
|
|
|
|
- //shutdown bookie servers
|
|
|
- try {
|
|
|
- bs1.shutdown();
|
|
|
- bs2.shutdown();
|
|
|
- bs3.shutdown();
|
|
|
- } catch (InterruptedException e) {
|
|
|
- e.printStackTrace();
|
|
|
- }
|
|
|
- cleanUpDir(tmpDirB1);
|
|
|
- cleanUpDir(tmpDirB2);
|
|
|
- cleanUpDir(tmpDirB3);
|
|
|
-
|
|
|
- //shutdown ZK server
|
|
|
- serverFactory.shutdown();
|
|
|
- assertTrue("waiting for server down",
|
|
|
+ //shutdown bookie servers
|
|
|
+ try {
|
|
|
+ bs1.shutdown();
|
|
|
+ bs2.shutdown();
|
|
|
+ bs3.shutdown();
|
|
|
+ } catch (InterruptedException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ cleanUpDir(tmpDirB1);
|
|
|
+ cleanUpDir(tmpDirB2);
|
|
|
+ cleanUpDir(tmpDirB3);
|
|
|
+
|
|
|
+ //shutdown ZK server
|
|
|
+ serverFactory.shutdown();
|
|
|
+ assertTrue("waiting for server down",
|
|
|
ClientBase.waitForServerDown(HOSTPORT,
|
|
|
ClientBase.CONNECTION_TIMEOUT));
|
|
|
- //ServerStats.unregister();
|
|
|
- cleanUpDir(ZkTmpDir);
|
|
|
-
|
|
|
- }
|
|
|
+ //ServerStats.unregister();
|
|
|
+ cleanUpDir(ZkTmpDir);
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
- /* Clean up a directory recursively */
|
|
|
- protected boolean cleanUpDir(File dir){
|
|
|
- if (dir.isDirectory()) {
|
|
|
- LOG.info("Cleaning up " + dir.getName());
|
|
|
+ /* Clean up a directory recursively */
|
|
|
+ protected boolean cleanUpDir(File dir){
|
|
|
+ if (dir.isDirectory()) {
|
|
|
+ LOG.info("Cleaning up " + dir.getName());
|
|
|
String[] children = dir.list();
|
|
|
for (String string : children) {
|
|
|
- boolean success = cleanUpDir(new File(dir, string));
|
|
|
- if (!success) return false;
|
|
|
- }
|
|
|
+ boolean success = cleanUpDir(new File(dir, string));
|
|
|
+ if (!success) return false;
|
|
|
+ }
|
|
|
}
|
|
|
// The directory is now empty so delete it
|
|
|
- return dir.delete();
|
|
|
- }
|
|
|
+ return dir.delete();
|
|
|
+ }
|
|
|
|
|
|
- /* User for testing purposes, void */
|
|
|
- class emptyWatcher implements Watcher{
|
|
|
- public void process(WatchedEvent event) {}
|
|
|
- }
|
|
|
+ /* User for testing purposes, void */
|
|
|
+ class emptyWatcher implements Watcher{
|
|
|
+ public void process(WatchedEvent event) {}
|
|
|
+ }
|
|
|
|
|
|
}
|