DUE TO SPAM, SIGN-UP IS DISABLED. Goto Selfserve wiki signup and request an account.
...
| Code Block |
|---|
BookKeeper bookeeper = ....;
CompletableFuture<WriteHandler> future = bookkeeper.createLedger()
.withEnsembleSize(3)
.withWriteQuorumSize(2)
.withAckQuorumSize(1)
.withDigestType(DigestType.CRC32)
.withCustomMetadata(metadata)
.withPassword(password)
.apply();
WriterHandlerWriteHandler lh = future.get();
CompletableFuture<WriteHandlerAdv>CompletableFuture<WriteAdvHandler> future = bookkeeper.createLedger()
.withEnsembleSize(3)
.withWriteQuorumSize(2)
.withAckQuorumSize(1)
.withDigestType(DigestType.CRC32)
.withCustomMetadata(metadata)
.withPassword(password)
.withLedgerId(ledgerId)
.makeAdv()
.apply();
WriterHandlerAdvWriteAdvHandler lh = future.get();
|
In order to achieve this goal we are going to introduce CreateBuilder and CreateBuilderAdv interfaces
| Code Block |
|---|
interface CreateBuilder {
CreateBuilder withEnsembleSize(...);
CreateBuilder withWriteQuorumSize(...);
...
CreateAdvBuilder makeAdv();
// old style callbacks
void execute(CreateCallback callback, Object ctx);
// support java8 completable future
CompletableFuture<WriteHandler> apply();
// sync method
WriteHandler create() throws BKException, InterruptedException;
}
interface CreateBuilderAdvCreateAdvBuilder {
// old style callbacks
void execute(CreateCallback callback, Object ctx);
// support java8 completable future
CompletableFuture<WriteHandlerAdv>CompletableFuture<WriteAdvHandler> apply();
// sync method
WriteHandlerAdvWriteAdvHandler create() throws BKException, InterruptedException;
}
interface OpenBuilder {
OpenBuilder withRecovery(boolean)
OpenBuilder withPassword(password)
OpenBuilder withDigestType(digestType)
CompleableFuture<ReadHandler> apply(long ledgerId)
void open(long ledgerId, OpenCallback cb, Object ctx)
ReadHandler open(long ledgerId)
}
|
And we will make CrateLedgerOp implement such interfaces.
We are going to introduce an BookKeeperClient a new BookKeeper interface
| Code Block |
|---|
interface BookKeeperClientBookKeeper extends AutoCloseable { CreateBuilder createLedger(); OpenBuilder openLedger(); } |
...
Please note that WriteHandler and WriteHandlerAdv WriteAdvHandler will extend ReadHandler as writer need to be able to read its own writes.
A common LedgerHandler Handler interface will be a base interface for ReadHandler and it will contain basic operations like 'close'
| Code Block |
|---|
interface OpenBuilder { OpenBuilder withRecovery(boolean) OpenBuilder withPassword(password) OpenBuilder withDigestType(digestType) CompleableFuture<ReadHandler> apply(long ledgerId) void open(long ledgerId, OpenCallback cb, Object ctx) ReadHandler open(long ledgerId) } interface LedgerHandler interface Handler extends AutoCloseable { void close(); void asyncClose(CloseCallback cb, Object ctx); } interface ReadHandler extends ILedgerHandlerHandler { void readEntries(); long readLastAddConfirmed(); ..... } interface IWriteHandlerWriteHandler extends IReadHandlerReadHandler { void addEntry(byte[] data) void sync(...) } interface IWriteHandlerAdvWriteAdvHandler extends IReadHandlerReadHandler { void addEntry(long entryID, byte[] data) void sync(...) } |
...
Legacy methods will be retained. No @Deprecated annotation will be added.
Further removal of existing APIs will be evaluated in the future, maybe while starting a new major release, like 5.0.0
...