From c438f0c84220451485705f0872e12a9da3a45c27 Mon Sep 17 00:00:00 2001 From: Philippe Date: Wed, 10 Jun 2020 00:32:08 -0300 Subject: [PATCH] [BAEL-2322] Relocate module --- .../tutorials/bookkeeper/LedgerReader.java | 5 - .../tutorials/bookkeeper/LedgerWriter.java | 12 - .../baeldung/tutorials/bookkeeper/Main.java | 13 - .../bookkeeper/BkHelperIntegrationTest.java | 208 ---------------- .../apache-bookkeeper}/Dockerfile | 0 .../apache-bookkeeper}/data/.gitignore | 0 .../apache-bookkeeper}/data/bk1/.gitignore | 0 .../apache-bookkeeper}/data/bk2/.gitignore | 0 .../apache-bookkeeper}/data/zk/.gitignore | 0 .../apache-bookkeeper}/docker-compose.yml | 0 .../apache-bookkeeper}/pom.xml | 24 +- .../tutorials/bookkeeper/BkHelper.java | 143 ++++++----- .../bookkeeper/BkHelperLiveTest.java | 229 ++++++++++++++++++ .../src/test/resources/logback-test.xml | 0 libraries-data-2/pom.xml | 4 + 15 files changed, 312 insertions(+), 326 deletions(-) delete mode 100644 apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/LedgerReader.java delete mode 100644 apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/LedgerWriter.java delete mode 100644 apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/Main.java delete mode 100644 apache-bookkeeper/src/test/java/com/baeldung/tutorials/bookkeeper/BkHelperIntegrationTest.java rename {apache-bookkeeper => libraries-data-2/apache-bookkeeper}/Dockerfile (100%) rename {apache-bookkeeper => libraries-data-2/apache-bookkeeper}/data/.gitignore (100%) rename {apache-bookkeeper => libraries-data-2/apache-bookkeeper}/data/bk1/.gitignore (100%) rename {apache-bookkeeper => libraries-data-2/apache-bookkeeper}/data/bk2/.gitignore (100%) rename {apache-bookkeeper => libraries-data-2/apache-bookkeeper}/data/zk/.gitignore (100%) rename {apache-bookkeeper => libraries-data-2/apache-bookkeeper}/docker-compose.yml (100%) rename {apache-bookkeeper => libraries-data-2/apache-bookkeeper}/pom.xml (66%) rename {apache-bookkeeper => libraries-data-2/apache-bookkeeper}/src/main/java/com/baeldung/tutorials/bookkeeper/BkHelper.java (56%) create mode 100644 libraries-data-2/apache-bookkeeper/src/test/java/com/baeldung/tutorials/bookkeeper/BkHelperLiveTest.java rename {apache-bookkeeper => libraries-data-2/apache-bookkeeper}/src/test/resources/logback-test.xml (100%) diff --git a/apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/LedgerReader.java b/apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/LedgerReader.java deleted file mode 100644 index 14eaf7ee58..0000000000 --- a/apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/LedgerReader.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.baeldung.tutorials.bookkeeper; - -public class LedgerReader { - -} diff --git a/apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/LedgerWriter.java b/apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/LedgerWriter.java deleted file mode 100644 index fc5de1b86e..0000000000 --- a/apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/LedgerWriter.java +++ /dev/null @@ -1,12 +0,0 @@ -/** - * - */ -package com.baeldung.tutorials.bookkeeper; - -/** - * @author Philippe - * - */ -public class LedgerWriter { - -} diff --git a/apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/Main.java b/apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/Main.java deleted file mode 100644 index 0160526832..0000000000 --- a/apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/Main.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.baeldung.tutorials.bookkeeper; - -import org.apache.bookkeeper.client.BookKeeper; - -public class Main { - - public static void main(String args[]) { - - BookKeeper bk = BkHelper.createBkClient(args[0]); - System.out.println("Connect OK"); - - } -} \ No newline at end of file diff --git a/apache-bookkeeper/src/test/java/com/baeldung/tutorials/bookkeeper/BkHelperIntegrationTest.java b/apache-bookkeeper/src/test/java/com/baeldung/tutorials/bookkeeper/BkHelperIntegrationTest.java deleted file mode 100644 index 3995874ba7..0000000000 --- a/apache-bookkeeper/src/test/java/com/baeldung/tutorials/bookkeeper/BkHelperIntegrationTest.java +++ /dev/null @@ -1,208 +0,0 @@ -package com.baeldung.tutorials.bookkeeper; - -import static org.junit.jupiter.api.Assertions.*; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.Enumeration; -import java.util.List; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicInteger; - -import org.apache.bookkeeper.client.AsyncCallback.AddCallback; -import org.apache.bookkeeper.client.AsyncCallback.CreateCallback; -import org.apache.bookkeeper.client.AsyncCallback.ReadCallback; -import org.apache.bookkeeper.client.BKException; -import org.apache.bookkeeper.client.BookKeeper; -import org.apache.bookkeeper.client.LedgerEntry; -import org.apache.bookkeeper.client.LedgerHandle; -import org.apache.bookkeeper.client.api.DigestType; -import org.apache.bookkeeper.client.api.ReadHandle; -import org.apache.bookkeeper.client.api.WriteAdvHandle; -import org.apache.bookkeeper.client.api.WriteHandle; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.zookeeper.AsyncCallback; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; - -class BkHelperIntegrationTest extends BkHelper { - - private static BookKeeper bk; - private byte[] ledgerPassword = "SuperS3cR37".getBytes(); - - private static final Log log = LogFactory.getLog(BkHelperIntegrationTest.class); - - @BeforeAll - static void initBkClient() { - bk = createBkClient("192.168.99.101:2181"); - } - - @Test - void whenCreateLedger_thenSuccess() throws Exception { - - LedgerHandle lh = bk.createLedger(BookKeeper.DigestType.MAC, ledgerPassword); - assertNotNull(lh); - assertNotNull(lh.getId()); - - CreateCallback cb = (rc, ll, ctx) -> { - - }; - - bk.asyncCreateLedger(3, 2, 2, BookKeeper.DigestType.MAC, "passwd".getBytes(), cb, null, Collections.emptyMap()); - //lh.get - -// CompletableFuture cf = bk.newCreateLedgerOp() -// .withDigestType(org.apache.bookkeeper.client.api.DigestType.MAC) -// .withPassword("password".getBytes()) -// .makeAdv() -// .execute(); - - log.info("[I33] Ledge created: id=" + lh.getId()); - } - - @Test - void whenListLedgers_thenSuccess() throws Exception { - - final AtomicInteger returnCode = new AtomicInteger(BKException.Code.OK); - final CountDownLatch processDone = new CountDownLatch(1); - - // There's no standard "list" operation. Instead, BK offers a generalized way to - // iterate over all available ledgers using an async visitor callback. - // The second callback will be called when there are no more ledgers do process or if an - // error occurs. - bk.getLedgerManager() - .asyncProcessLedgers( - (data,cb) -> processLedger(data,cb), - (rc, s, obj) -> { - returnCode.set(rc); - processDone.countDown(); - }, - null, - BKException.Code.OK, - BKException.Code.ReadException); - - processDone.await(5, TimeUnit.MINUTES); - } - - @Test - void whenWriteEntries_thenSuccess() throws Exception { - - LedgerHandle lh = createLedger(bk,"myledger",ledgerPassword); - - long start = System.currentTimeMillis(); - for ( int i = 0 ; i < 1000 ; i++ ) { - byte[] data = new String("message-" + i).getBytes(); - lh.append(data); - } - - byte[] data = new byte[] {}; - - CompletableFuture f = lh.appendAsync(data); - AddCallback cbw = (rc,ll,entryId,ctx) -> { - - }; - - lh.asyncAddEntry(data, cbw, null); - - lh.close(); - long elapsed = System.currentTimeMillis() - start; - log.info("Entries added to ledgerId " + lh.getId() + ". count=1000, elapsed=" + elapsed); - - - } - - @Test - void whenWriteAndReadEntries_thenSuccess() throws Exception { - - LedgerHandle lh = createLedger(bk,"myledger",ledgerPassword); - - long start = System.currentTimeMillis(); - for ( int i = 0 ; i < 1000 ; i++ ) { - byte[] data = new String("message-" + i).getBytes(); - lh.append(data); - } - - lh.close(); - long elapsed = System.currentTimeMillis() - start; - log.info("Entries added to ledgerId " + lh.getId() + ", elapsed=" + elapsed); - - Long ledgerId = findLedgerByName(bk,"myledger").orElse(null); - assertNotNull(ledgerId); - - lh = bk.openLedger(ledgerId, BookKeeper.DigestType.MAC, ledgerPassword); - long lastId = lh.readLastConfirmed(); - Enumeration entries = lh.readEntries(0, lastId); - - ReadCallback cbr; - lh.asyncReadEntries(0, lastId, - (rc,ledgerHandle,ee,ctx) -> { - while(ee.hasMoreElements()) { - LedgerEntry e = ee.nextElement(); - } - }, null); - - ReadHandle rh = bk.newOpenLedgerOp() - .withLedgerId(ledgerId) - .withDigestType(DigestType.MAC) - .withPassword("password".getBytes()) - .execute().get(); - - rh.read(0, lastId).forEach((entry) -> { - - }); - - rh.readAsync(0, lastId).thenAccept((ee) -> { - ee.forEach((entry) -> { - // .. - }); - }); - - while(entries.hasMoreElements()) { - LedgerEntry entry = entries.nextElement(); - String msg = new String(entry.getEntry()); - log.info("Entry: id=" + entry.getEntryId() + ", data=" + msg); - } - - } - - private void processLedger(long ledgerId, AsyncCallback.VoidCallback cb) { - log.info("ledgerId: " + ledgerId); - cb.processResult(BKException.Code.OK, null, null); - } - - - private CompletableFuture> listAllLedgers(BookKeeper bk) { - - final List ledgers = Collections.synchronizedList(new ArrayList<>()); - final CountDownLatch processDone = new CountDownLatch(1); - - bk.getLedgerManager() - .asyncProcessLedgers( - (ledgerId,cb) -> { - ledgers.add(ledgerId); - cb.processResult(BKException.Code.OK, null, null); - }, - (rc, s, obj) -> { - processDone.countDown(); - }, - null, BKException.Code.OK, BKException.Code.ReadException); - - CompletableFuture> cf = CompletableFuture.supplyAsync(() -> { - try { - processDone.await(1,TimeUnit.MINUTES); - return ledgers; - } - catch(InterruptedException ie) { - throw new RuntimeException(ie); - } - }); - - return cf; - } - - - -} diff --git a/apache-bookkeeper/Dockerfile b/libraries-data-2/apache-bookkeeper/Dockerfile similarity index 100% rename from apache-bookkeeper/Dockerfile rename to libraries-data-2/apache-bookkeeper/Dockerfile diff --git a/apache-bookkeeper/data/.gitignore b/libraries-data-2/apache-bookkeeper/data/.gitignore similarity index 100% rename from apache-bookkeeper/data/.gitignore rename to libraries-data-2/apache-bookkeeper/data/.gitignore diff --git a/apache-bookkeeper/data/bk1/.gitignore b/libraries-data-2/apache-bookkeeper/data/bk1/.gitignore similarity index 100% rename from apache-bookkeeper/data/bk1/.gitignore rename to libraries-data-2/apache-bookkeeper/data/bk1/.gitignore diff --git a/apache-bookkeeper/data/bk2/.gitignore b/libraries-data-2/apache-bookkeeper/data/bk2/.gitignore similarity index 100% rename from apache-bookkeeper/data/bk2/.gitignore rename to libraries-data-2/apache-bookkeeper/data/bk2/.gitignore diff --git a/apache-bookkeeper/data/zk/.gitignore b/libraries-data-2/apache-bookkeeper/data/zk/.gitignore similarity index 100% rename from apache-bookkeeper/data/zk/.gitignore rename to libraries-data-2/apache-bookkeeper/data/zk/.gitignore diff --git a/apache-bookkeeper/docker-compose.yml b/libraries-data-2/apache-bookkeeper/docker-compose.yml similarity index 100% rename from apache-bookkeeper/docker-compose.yml rename to libraries-data-2/apache-bookkeeper/docker-compose.yml diff --git a/apache-bookkeeper/pom.xml b/libraries-data-2/apache-bookkeeper/pom.xml similarity index 66% rename from apache-bookkeeper/pom.xml rename to libraries-data-2/apache-bookkeeper/pom.xml index 61bd582fd3..46a7982b12 100644 --- a/apache-bookkeeper/pom.xml +++ b/libraries-data-2/apache-bookkeeper/pom.xml @@ -13,6 +13,7 @@ com.baeldung parent-modules 1.0.0-SNAPSHOT + ../../ @@ -41,29 +42,6 @@ 4.10.0 - - - - org.apache.maven.plugins - maven-shade-plugin - 3.2.3 - - - com.baeldung.tutorials.bookkeeper.Main - true - - - - package - - shade - - - - - - diff --git a/apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/BkHelper.java b/libraries-data-2/apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/BkHelper.java similarity index 56% rename from apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/BkHelper.java rename to libraries-data-2/apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/BkHelper.java index 2fc07c13b3..7cba88af19 100644 --- a/apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/BkHelper.java +++ b/libraries-data-2/apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/BkHelper.java @@ -1,8 +1,10 @@ package com.baeldung.tutorials.bookkeeper; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.Optional; import java.util.Map.Entry; @@ -15,29 +17,22 @@ import org.apache.bookkeeper.client.BookKeeper; import org.apache.bookkeeper.client.BookKeeper.DigestType; import org.apache.bookkeeper.client.LedgerHandle; import org.apache.bookkeeper.client.api.LedgerMetadata; -import org.apache.bookkeeper.conf.ClientConfiguration; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.zookeeper.AsyncCallback; public class BkHelper { - + private static final Log log = LogFactory.getLog(BkHelper.class); - + public static BookKeeper createBkClient(String zkConnectionString) { try { - ClientConfiguration cfg = new ClientConfiguration(); - cfg.setMetadataServiceUri("zk+null://zookeeper-host:2131"); - BookKeeper.forConfig(cfg).build(); - - return new BookKeeper(zkConnectionString); - } - catch(Exception ex) { + } catch (Exception ex) { throw new RuntimeException(ex); } } - + /** * Creates a Ledger with the given name added as custom metadata * @param bk @@ -47,17 +42,12 @@ public class BkHelper { */ public static LedgerHandle createLedger(BookKeeper bk, String name, byte[] password) { try { - - return bk.createLedger(3,2,2, - DigestType.MAC, - password, - Collections.singletonMap("name", name.getBytes())); - } - catch(Exception ex) { + return bk.createLedger(3, 2, 2, DigestType.MAC, password, Collections.singletonMap("name", name.getBytes())); + } catch (Exception ex) { throw new RuntimeException(ex); } } - + /** * Iterates over all available ledgers and returns the first one that has * a metadata key 'name' equals to the given name @@ -67,78 +57,101 @@ public class BkHelper { * @throws Exception */ public static Optional findLedgerByName(BookKeeper bk, String name) throws Exception { - - Map ledgers = new HashMap(); + + Map ledgers = new HashMap(); final AtomicInteger returnCode = new AtomicInteger(BKException.Code.OK); - final CountDownLatch processDone = new CountDownLatch(1); - + final CountDownLatch processDone = new CountDownLatch(1); + // There's no standard "list" operation. Instead, BK offers a generalized way to // iterate over all available ledgers using an async visitor callback. // The second callback will be called when there are no more ledgers do process or if an // error occurs. bk.getLedgerManager() - .asyncProcessLedgers( - (data,cb) -> collectLedgers(bk,data,cb,ledgers), - (rc, s, obj) -> { - returnCode.set(rc); - processDone.countDown(); - }, - null, - BKException.Code.OK, - BKException.Code.ReadException); - + .asyncProcessLedgers((ledgerId, cb) -> collectLedgers(bk, ledgerId, cb, ledgers), + (rc, s, obj) -> { + returnCode.set(rc); + processDone.countDown(); + }, null, BKException.Code.OK, BKException.Code.ReadException); + processDone.await(5, TimeUnit.MINUTES); - + log.info("Ledgers collected: total found=" + ledgers.size()); - + byte[] nameBytes = name.getBytes(); - - Optional> entry = ledgers.entrySet().stream().filter((e) -> { - Map meta = e.getValue().getCustomMetadata(); - if ( meta != null ) { - log.info("ledger: " + e.getKey() + ", customMeta=" + meta); - byte[] data = meta.get("name"); - if ( data != null && Arrays.equals(data, nameBytes)) { - return true; - } - else { + + Optional> entry = ledgers.entrySet() + .stream() + .filter((e) -> { + Map meta = e.getValue().getCustomMetadata(); + if (meta != null) { + log.info("ledger: " + e.getKey() + ", customMeta=" + meta); + byte[] data = meta.get("name"); + if (data != null && Arrays.equals(data, nameBytes)) { + return true; + } else { + return false; + } + } else { + log.info("ledger: " + e.getKey() + ", no meta"); return false; } - } - else { - log.info("ledger: " + e.getKey() + ", no meta"); - return false; - } - }) - .findFirst(); - - + }) + .findFirst(); + if (entry.isPresent()) { return Optional.of(entry.get().getKey()); - } - else { + } else { return Optional.empty(); - } + } } - - public static void collectLedgers(BookKeeper bk, long ledgerId, AsyncCallback.VoidCallback cb, Map ledgers) { - log.info("ledgerId: " + ledgerId); - + + public static void collectLedgers(BookKeeper bk, long ledgerId, AsyncCallback.VoidCallback cb, Map ledgers) { + log.debug("ledgerId: " + ledgerId); + try { bk.getLedgerManager() .readLedgerMetadata(ledgerId) .thenAccept((v) -> { - log.info("Got ledger metadata"); - ledgers.put(ledgerId,v.getValue()); + log.debug("Got ledger metadata"); + ledgers.put(ledgerId, v.getValue()); }) .thenAccept((v) -> { cb.processResult(BKException.Code.OK, null, null); }); - } - catch(Exception ex) { + } catch (Exception ex) { throw new RuntimeException(ex); } } + /** + * Return a list with all available Ledgers + * @param bk + * @return + */ + public static List listAllLedgers(BookKeeper bk) { + + final List ledgers = Collections.synchronizedList(new ArrayList<>()); + final CountDownLatch processDone = new CountDownLatch(1); + + bk.getLedgerManager() + .asyncProcessLedgers( + (ledgerId,cb) -> { + ledgers.add(ledgerId); + cb.processResult(BKException.Code.OK, null, null); + }, + (rc, s, obj) -> { + processDone.countDown(); + }, + null, BKException.Code.OK, BKException.Code.ReadException); + + try { + processDone.await(1,TimeUnit.MINUTES); + return ledgers; + } + catch(InterruptedException ie) { + throw new RuntimeException(ie); + } + } + } diff --git a/libraries-data-2/apache-bookkeeper/src/test/java/com/baeldung/tutorials/bookkeeper/BkHelperLiveTest.java b/libraries-data-2/apache-bookkeeper/src/test/java/com/baeldung/tutorials/bookkeeper/BkHelperLiveTest.java new file mode 100644 index 0000000000..2bbf54e2b7 --- /dev/null +++ b/libraries-data-2/apache-bookkeeper/src/test/java/com/baeldung/tutorials/bookkeeper/BkHelperLiveTest.java @@ -0,0 +1,229 @@ +package com.baeldung.tutorials.bookkeeper; + +import static org.junit.jupiter.api.Assertions.*; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Enumeration; +import java.util.Iterator; +import java.util.List; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicLong; +import java.util.concurrent.atomic.AtomicReference; +import java.util.stream.Collectors; + +import org.apache.bookkeeper.client.AsyncCallback.AddCallback; +import org.apache.bookkeeper.client.AsyncCallback.CreateCallback; +import org.apache.bookkeeper.client.AsyncCallback.ReadCallback; +import org.apache.bookkeeper.client.BKException; +import org.apache.bookkeeper.client.BookKeeper; +import org.apache.bookkeeper.client.LedgerEntry; +import org.apache.bookkeeper.client.LedgerHandle; +import org.apache.bookkeeper.client.api.DigestType; +import org.apache.bookkeeper.client.api.LedgerEntries; +import org.apache.bookkeeper.client.api.ReadHandle; +import org.apache.bookkeeper.client.api.WriteAdvHandle; +import org.apache.bookkeeper.client.api.WriteHandle; +import org.apache.bookkeeper.tools.cli.commands.bookie.ListLedgersCommand; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.zookeeper.AsyncCallback; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +import com.google.common.collect.Iterables; + +class BkHelperLiveTest extends BkHelper { + + private static BookKeeper bk; + private byte[] ledgerPassword = "SuperS3cR37".getBytes(); + + private static final Log log = LogFactory.getLog(BkHelperLiveTest.class); + + @BeforeAll + static void initBkClient() { + bk = createBkClient("192.168.99.101:2181"); + } + + @Test + void whenCreateLedger_thenSuccess() throws Exception { + + LedgerHandle lh = bk.createLedger(BookKeeper.DigestType.MAC, ledgerPassword); + assertNotNull(lh); + assertNotNull(lh.getId()); + + log.info("[I33] Ledge created: id=" + lh.getId()); + } + + + @Test + void whenCreateLedgerAsync_thenSuccess() throws Exception { + + CompletableFuture cf = bk.newCreateLedgerOp() + .withDigestType(org.apache.bookkeeper.client.api.DigestType.MAC) + .withPassword("password".getBytes()) + .execute(); + + WriteHandle handle = cf.get(1, TimeUnit.MINUTES); + assertNotNull(handle); + handle.close(); + + } + + + @Test + void whenAsyncCreateLedger_thenSuccess() throws Exception { + + CountDownLatch latch = new CountDownLatch(1); + AtomicReference handleRef =new AtomicReference<>(); + + bk.asyncCreateLedger(3, 2, 2, + BookKeeper.DigestType.MAC, + ledgerPassword, + (rc, lh, ctx) -> { + handleRef.set(lh); + latch.countDown(); + }, + null, + Collections.emptyMap()); + + latch.await(1, TimeUnit.MINUTES); + LedgerHandle lh = handleRef.get(); + assertNotNull(lh); + assertFalse(lh.isClosed(),"Ledger should be writeable"); + } + + + @Test + void whenListLedgers_thenSuccess() throws Exception { + + List ledgers = listAllLedgers(bk); + assertNotNull(ledgers); + } + + @Test + void whenWriteEntries_thenSuccess() throws Exception { + + LedgerHandle lh = createLedger(bk,"myledger",ledgerPassword); + + long start = System.currentTimeMillis(); + for ( int i = 0 ; i < 1000 ; i++ ) { + byte[] data = new String("message-" + i).getBytes(); + lh.append(data); + } + + lh.close(); + long elapsed = System.currentTimeMillis() - start; + log.info("Entries added to ledgerId " + lh.getId() + ". count=1000, elapsed=" + elapsed); + } + + @Test + void whenWriteEntriesAsync_thenSuccess() throws Exception { + + CompletableFuture f = bk.newCreateLedgerOp() + .withDigestType(DigestType.MAC) + .withPassword(ledgerPassword) + .execute() + .thenApply((wh) -> { + List> ops = new ArrayList<>(); + for( int i = 0; i < 1000 ; i++ ) { + byte[] data = String.format("message-%04d", i).getBytes(); + ops.add(wh.appendAsync(data)); + } + + return CompletableFuture + .allOf(ops.stream().toArray(CompletableFuture[]::new)) + .thenCompose((v) -> wh.closeAsync()); + }); + + f.get(5, TimeUnit.MINUTES); + } + + @Test + void whenWriteAndReadEntriesAsync_thenSuccess() throws Exception { + + CompletableFuture f = bk.newCreateLedgerOp() + .withDigestType(DigestType.MAC) + .withPassword(ledgerPassword) + .execute() + .thenApply((wh) -> { + List> ops = new ArrayList<>(); + for( int i = 0; i < 1000 ; i++ ) { + byte[] data = String.format("message-%04d", i).getBytes(); + ops.add(wh.appendAsync(data)); + } + + + return CompletableFuture + .allOf(ops.stream().toArray(CompletableFuture[]::new)) + .thenCompose((v) -> wh.closeAsync()) + .thenApply((v) -> wh.getId()); + }) + .thenCompose((lf) -> lf); // flatten the + + Long ledgerId = f.get(5, TimeUnit.MINUTES); + log.info("Ledger created with 1000 entries: ledgerId=" + ledgerId); + + // Now let's read data back... + CompletableFuture ef = bk.newOpenLedgerOp() + .withLedgerId(ledgerId) + .withPassword(ledgerPassword) + .withDigestType(DigestType.MAC) + .execute() + .thenCompose((rh) -> { + return rh.readLastAddConfirmedAsync() + .thenCompose((lastId) -> rh.readAsync(0, lastId)); + }); + + LedgerEntries entries = ef.get(5,TimeUnit.MINUTES); + + + long count = 0; + Iterator it = entries.iterator(); + while ( it.hasNext()) { + org.apache.bookkeeper.client.api.LedgerEntry e = it.next(); + String msg = new String(e.getEntryBytes()); + assertEquals(String.format("message-%04d", count),msg); + count++; + } + + assertEquals(1000,count); + + log.info("Got entries: count=" + count); + + } + + + @Test + void whenWriteAndReadEntries_thenSuccess() throws Exception { + + LedgerHandle lh = createLedger(bk,"myledger",ledgerPassword); + + long start = System.currentTimeMillis(); + for ( int i = 0 ; i < 1000 ; i++ ) { + byte[] data = new String("message-" + i).getBytes(); + lh.append(data); + } + + lh.close(); + long elapsed = System.currentTimeMillis() - start; + log.info("Entries added to ledgerId " + lh.getId() + ", elapsed=" + elapsed); + + Long ledgerId = findLedgerByName(bk,"myledger").orElse(null); + assertNotNull(ledgerId); + + lh = bk.openLedger(ledgerId, BookKeeper.DigestType.MAC, ledgerPassword); + long lastId = lh.readLastConfirmed(); + Enumeration entries = lh.readEntries(0, lastId); + + while(entries.hasMoreElements()) { + LedgerEntry entry = entries.nextElement(); + String msg = new String(entry.getEntry()); + log.info("Entry: id=" + entry.getEntryId() + ", data=" + msg); + } + } +} diff --git a/apache-bookkeeper/src/test/resources/logback-test.xml b/libraries-data-2/apache-bookkeeper/src/test/resources/logback-test.xml similarity index 100% rename from apache-bookkeeper/src/test/resources/logback-test.xml rename to libraries-data-2/apache-bookkeeper/src/test/resources/logback-test.xml diff --git a/libraries-data-2/pom.xml b/libraries-data-2/pom.xml index 2d27ec2107..a05b25956f 100644 --- a/libraries-data-2/pom.xml +++ b/libraries-data-2/pom.xml @@ -216,5 +216,9 @@ + + + apache-bookkeeper + \ No newline at end of file