I filled ZOOKEEPER-824 and ZOOKEEPER-825

tks,
André

On Mon, Jul 19, 2010 at 19:44, Benjamin Reed <br...@yahoo-inc.com> wrote:

> you have concluded correctly.
>
> 1) bookkeeper was designed for a process to use as a write-ahead log, so as
> a simplifying assumption we assume a single writer to a log. we should be
> throwing an exception if you try to write to a handle that you obtained
> using openLedger. can you open a jira for that?
>
> 2) this is mostly true, there are some exceptions. the creater of a ledger
> can read entries even though the ledger is still being written to. we would
> like to add the ability for a reader to assert the last entry in a ledger
> and read up to that entry, but this is not yet in the code.
>
> 3) there is one other bug you are seeing, before a ledger can be read, it
> must be closed. as your code shows, a process can open a ledger for reading
> while it is still being written to, which causes an implicit close that is
> not detected by the writer.
>
> this is a nice test case :) thanx
> ben
>
>
> On 07/17/2010 05:02 PM, André Oriani wrote:
>
>> 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
>>
>>
>
>

Reply via email to