hadoop-zookeeper-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From André Oriani <ra078...@students.ic.unicamp.br>
Subject BookKeeper Doubts
Date Sun, 18 Jul 2010 00:02:24 GMT
Hi,


I was not sure if I had understood the behavior of BookKeeper from
documentation. So I made  a little program, reproduced below, to see what
BookKeeper looks like in action. Assuming my code is correct ( you never
know  when your code has some nasty obvious bugs that only other person than
you can see ) , I could draw the follow conclusions:

1) Only the creator can add entries to a ledger, even though you can  open
the ledger, get a handle and call addEntry on it. No exception is thrown  i.
In other words, you cannot open a ledger for append.

2) Readers are able to see only the entries that were added to a ledger
until someone had opened it for reading. If you want to ensure  readers will
see all the entries, you must add all entries before any reader attempts to
read from the ledger.

Could someone please tell me if those conclusions are correct or if I am
mistaken? In the later case, could that person also tell me what is wrong ?

Thanks a lot for the attention and the patience with this BookKeeper newbie,
André




package br.unicamp.zooexp.booexp;


import java.io.IOException;

import java.util.Enumeration;


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.BookKeeper.DigestType;

import org.apache.zookeeper.KeeperException;


public class BookTest {


    public static void main (String ... args) throws IOException,
InterruptedException, KeeperException, BKException{

        BookKeeper bk = new BookKeeper("127.0.0.1");

        LedgerHandle lh = bk.createLedger(DigestType.CRC32, "123"
.getBytes());

        long lh_id = lh.getId();

        lh.addEntry("Teste".getBytes());

        lh.addEntry("Test2".getBytes());

        System.out.printf("Got %d entries for lh\n"
,lh.getLastAddConfirmed()+1);




        lh.addEntry("Test3".getBytes());

        LedgerHandle lh1 = bk.openLedger(lh_id, DigestType.CRC32, "123"
.getBytes());

        System.out.printf("Got %d entries for lh1\n"
,lh1.getLastAddConfirmed()+1);

        lh.addEntry("Test4".getBytes());


        lh.addEntry("Test5".getBytes());

        lh.addEntry("Test6".getBytes());

        System.out.printf("Got %d entries for lh\n"
,lh.getLastAddConfirmed()+1);

        Enumeration<LedgerEntry> seq = lh.readEntries(0,
lh.getLastAddConfirmed());

        while (seq.hasMoreElements()){

            System.out.println(new String(seq.nextElement().getEntry()));

        }

        lh.close();



        lh1.addEntry("Test7".getBytes());

        lh1.addEntry("Test8".getBytes());


        System.out.printf("Got %d entries for lh1\n"
,lh1.getLastAddConfirmed()+1);


        seq = lh1.readEntries(0, lh1.getLastAddConfirmed());

        while (seq.hasMoreElements()){

            System.out.println(new String(seq.nextElement().getEntry()));

        }



        lh1.close();


        LedgerHandle lh2 = bk.openLedger(lh_id, DigestType.CRC32, "123"
.getBytes());

        lh2.addEntry("Test9".getBytes());


        System.out.printf("Got %d entries for lh2 \n"
,lh2.getLastAddConfirmed()+1);


        seq = lh2.readEntries(0, lh2.getLastAddConfirmed());

        while (seq.hasMoreElements()){

            System.out.println(new String(seq.nextElement().getEntry()));

        }


        bk.halt();


    }

}


Output:

Got 2 entries for lh

Got 3 entries for lh1

Got 6 entries for lh

Teste

Test2

Test3

Test4

Test5

Test6

Got 3 entries for lh1

Teste

Test2

Test3

Got 3 entries for lh2

Teste

Test2

Test3

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message