| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> |
| <html> |
| <head> |
| <META http-equiv="Content-Type" content="text/html; charset=UTF-8"> |
| <meta content="Apache Forrest" name="Generator"> |
| <meta name="Forrest-version" content="0.9"> |
| <meta name="Forrest-skin-name" content="pelt"> |
| <title>BookKeeper Getting Started Guide</title> |
| <link type="text/css" href="skin/basic.css" rel="stylesheet"> |
| <link media="screen" type="text/css" href="skin/screen.css" rel="stylesheet"> |
| <link media="print" type="text/css" href="skin/print.css" rel="stylesheet"> |
| <link type="text/css" href="skin/profile.css" rel="stylesheet"> |
| <script src="skin/getBlank.js" language="javascript" type="text/javascript"></script><script src="skin/getMenu.js" language="javascript" type="text/javascript"></script><script src="skin/fontsize.js" language="javascript" type="text/javascript"></script> |
| <link rel="shortcut icon" href="images/favicon.ico"> |
| </head> |
| <body onload="init()"> |
| <script type="text/javascript">ndeSetTextSize();</script> |
| <div id="top"> |
| <!--+ |
| |breadtrail |
| +--> |
| <div class="breadtrail"> |
| <a href="http://www.apache.org/">Apache</a> > <a href="http://zookeeper.apache.org/">ZooKeeper</a> > <a href="http://zookeeper.apache.org/">ZooKeeper</a><script src="skin/breadcrumbs.js" language="JavaScript" type="text/javascript"></script> |
| </div> |
| <!--+ |
| |header |
| +--> |
| <div class="header"> |
| <!--+ |
| |start group logo |
| +--> |
| <div class="grouplogo"> |
| <a href="http://hadoop.apache.org/"><img class="logoImage" alt="Hadoop" src="images/hadoop-logo.jpg" title="Apache Hadoop"></a> |
| </div> |
| <!--+ |
| |end group logo |
| +--> |
| <!--+ |
| |start Project Logo |
| +--> |
| <div class="projectlogo"> |
| <a href="http://zookeeper.apache.org/"><img class="logoImage" alt="ZooKeeper" src="images/zookeeper_small.gif" title="ZooKeeper: distributed coordination"></a> |
| </div> |
| <!--+ |
| |end Project Logo |
| +--> |
| <!--+ |
| |start Search |
| +--> |
| <div class="searchbox"> |
| <form action="http://www.google.com/search" method="get" class="roundtopsmall"> |
| <input value="zookeeper.apache.org" name="sitesearch" type="hidden"><input onFocus="getBlank (this, 'Search the site with google');" size="25" name="q" id="query" type="text" value="Search the site with google"> |
| <input name="Search" value="Search" type="submit"> |
| </form> |
| </div> |
| <!--+ |
| |end search |
| +--> |
| <!--+ |
| |start Tabs |
| +--> |
| <ul id="tabs"> |
| <li> |
| <a class="unselected" href="http://zookeeper.apache.org/">Project</a> |
| </li> |
| <li> |
| <a class="unselected" href="https://cwiki.apache.org/confluence/display/ZOOKEEPER/">Wiki</a> |
| </li> |
| <li class="current"> |
| <a class="selected" href="index.html">ZooKeeper 3.4 Documentation</a> |
| </li> |
| </ul> |
| <!--+ |
| |end Tabs |
| +--> |
| </div> |
| </div> |
| <div id="main"> |
| <div id="publishedStrip"> |
| <!--+ |
| |start Subtabs |
| +--> |
| <div id="level2tabs"></div> |
| <!--+ |
| |end Endtabs |
| +--> |
| <script type="text/javascript"><!-- |
| document.write("Last Published: " + document.lastModified); |
| // --></script> |
| </div> |
| <!--+ |
| |breadtrail |
| +--> |
| <div class="breadtrail"> |
| |
| |
| </div> |
| <!--+ |
| |start Menu, mainarea |
| +--> |
| <!--+ |
| |start Menu |
| +--> |
| <div id="menu"> |
| <div onclick="SwitchMenu('menu_1.1', 'skin/')" id="menu_1.1Title" class="menutitle">Overview</div> |
| <div id="menu_1.1" class="menuitemgroup"> |
| <div class="menuitem"> |
| <a href="index.html">Welcome</a> |
| </div> |
| <div class="menuitem"> |
| <a href="zookeeperOver.html">Overview</a> |
| </div> |
| <div class="menuitem"> |
| <a href="zookeeperStarted.html">Getting Started</a> |
| </div> |
| <div class="menuitem"> |
| <a href="releasenotes.html">Release Notes</a> |
| </div> |
| </div> |
| <div onclick="SwitchMenu('menu_1.2', 'skin/')" id="menu_1.2Title" class="menutitle">Developer</div> |
| <div id="menu_1.2" class="menuitemgroup"> |
| <div class="menuitem"> |
| <a href="api/index.html">API Docs</a> |
| </div> |
| <div class="menuitem"> |
| <a href="zookeeperProgrammers.html">Programmer's Guide</a> |
| </div> |
| <div class="menuitem"> |
| <a href="javaExample.html">Java Example</a> |
| </div> |
| <div class="menuitem"> |
| <a href="zookeeperTutorial.html">Barrier and Queue Tutorial</a> |
| </div> |
| <div class="menuitem"> |
| <a href="recipes.html">Recipes</a> |
| </div> |
| </div> |
| <div onclick="SwitchMenu('menu_selected_1.3', 'skin/')" id="menu_selected_1.3Title" class="menutitle" style="background-image: url('skin/images/chapter_open.gif');">BookKeeper</div> |
| <div id="menu_selected_1.3" class="selectedmenuitemgroup" style="display: block;"> |
| <div class="menuitem"> |
| <a href="bookkeeperStarted.html">Getting started</a> |
| </div> |
| <div class="menuitem"> |
| <a href="bookkeeperOverview.html">Overview</a> |
| </div> |
| <div class="menuitem"> |
| <a href="bookkeeperConfig.html">Setup guide</a> |
| </div> |
| <div class="menupage"> |
| <div class="menupagetitle">Programmer's guide</div> |
| </div> |
| </div> |
| <div onclick="SwitchMenu('menu_1.4', 'skin/')" id="menu_1.4Title" class="menutitle">Admin & Ops</div> |
| <div id="menu_1.4" class="menuitemgroup"> |
| <div class="menuitem"> |
| <a href="zookeeperAdmin.html">Administrator's Guide</a> |
| </div> |
| <div class="menuitem"> |
| <a href="zookeeperQuotas.html">Quota Guide</a> |
| </div> |
| <div class="menuitem"> |
| <a href="zookeeperJMX.html">JMX</a> |
| </div> |
| <div class="menuitem"> |
| <a href="zookeeperObservers.html">Observers Guide</a> |
| </div> |
| </div> |
| <div onclick="SwitchMenu('menu_1.5', 'skin/')" id="menu_1.5Title" class="menutitle">Contributor</div> |
| <div id="menu_1.5" class="menuitemgroup"> |
| <div class="menuitem"> |
| <a href="zookeeperInternals.html">ZooKeeper Internals</a> |
| </div> |
| </div> |
| <div onclick="SwitchMenu('menu_1.6', 'skin/')" id="menu_1.6Title" class="menutitle">Miscellaneous</div> |
| <div id="menu_1.6" class="menuitemgroup"> |
| <div class="menuitem"> |
| <a href="https://cwiki.apache.org/confluence/display/ZOOKEEPER">Wiki</a> |
| </div> |
| <div class="menuitem"> |
| <a href="https://cwiki.apache.org/confluence/display/ZOOKEEPER/FAQ">FAQ</a> |
| </div> |
| <div class="menuitem"> |
| <a href="http://zookeeper.apache.org/mailing_lists.html">Mailing Lists</a> |
| </div> |
| </div> |
| <div id="credit"></div> |
| <div id="roundbottom"> |
| <img style="display: none" class="corner" height="15" width="15" alt="" src="skin/images/rc-b-l-15-1body-2menu-3menu.png"></div> |
| <!--+ |
| |alternative credits |
| +--> |
| <div id="credit2"></div> |
| </div> |
| <!--+ |
| |end Menu |
| +--> |
| <!--+ |
| |start content |
| +--> |
| <div id="content"> |
| <div title="Portable Document Format" class="pdflink"> |
| <a class="dida" href="bookkeeperProgrammer.pdf"><img alt="PDF -icon" src="skin/images/pdfdoc.gif" class="skin"><br> |
| PDF</a> |
| </div> |
| <h1>BookKeeper Getting Started Guide</h1> |
| <div id="front-matter"> |
| <div id="minitoc-area"> |
| <ul class="minitoc"> |
| <li> |
| <a href="#bk_GettingStarted">Programming with BookKeeper</a> |
| <ul class="minitoc"> |
| <li> |
| <a href="#bk_instance"> Instantiating BookKeeper.</a> |
| </li> |
| <li> |
| <a href="#bk_createLedger"> Creating a ledger. </a> |
| </li> |
| <li> |
| <a href="#bk_writeLedger"> Adding entries to a ledger. </a> |
| </li> |
| <li> |
| <a href="#bk_closeLedger"> Closing a ledger. </a> |
| </li> |
| <li> |
| <a href="#bk_openLedger"> Opening a ledger. </a> |
| </li> |
| <li> |
| <a href="#bk_readLedger"> Reading from ledger </a> |
| </li> |
| <li> |
| <a href="#bk_deleteLedger"> Deleting a ledger </a> |
| </li> |
| </ul> |
| </li> |
| </ul> |
| </div> |
| </div> |
| |
| |
| |
| |
| <a name="bk_GettingStarted"></a> |
| <h2 class="h3">Programming with BookKeeper</h2> |
| <div class="section"> |
| <ul> |
| |
| <li> |
| |
| <p> |
| <a href="#bk_instance"> Instantiating BookKeeper.</a> |
| </p> |
| |
| </li> |
| |
| |
| <li> |
| |
| <p> |
| <a href="#bk_createLedger"> Creating a ledger. </a> |
| </p> |
| |
| </li> |
| |
| |
| <li> |
| |
| <p> |
| <a href="#bk_writeLedger"> Adding entries to a ledger. </a> |
| </p> |
| |
| </li> |
| |
| |
| <li> |
| |
| <p> |
| <a href="#bk_closeLedger"> Closing a ledger. </a> |
| </p> |
| |
| </li> |
| |
| |
| <li> |
| |
| <p> |
| <a href="#bk_openLedger"> Opening a ledger. </a> |
| </p> |
| |
| </li> |
| |
| |
| <li> |
| |
| <p> |
| <a href="#bk_readLedger"> Reading from ledger </a> |
| </p> |
| |
| </li> |
| |
| |
| <li> |
| |
| <p> |
| <a href="#bk_deleteLedger"> Deleting a ledger </a> |
| </p> |
| |
| </li> |
| |
| |
| </ul> |
| <a name="bk_instance"></a> |
| <h3 class="h4"> Instantiating BookKeeper.</h3> |
| <p> |
| The first step to use BookKeeper is to instantiate a BookKeeper object: |
| </p> |
| <p> |
| |
| <span class="codefrag computeroutput"> |
| org.apache.bookkeeper.BookKeeper |
| </span> |
| |
| </p> |
| <p> |
| There are three BookKeeper constructors: |
| </p> |
| <p> |
| |
| <span class="codefrag computeroutput"> |
| public BookKeeper(String servers) |
| throws KeeperException, IOException |
| </span> |
| |
| </p> |
| <p> |
| where: |
| </p> |
| <ul> |
| |
| <li> |
| |
| <p> |
| |
| <span class="codefrag computeroutput">servers</span> is a comma-separated list of ZooKeeper servers. |
| </p> |
| |
| </li> |
| |
| </ul> |
| <p> |
| |
| <span class="codefrag computeroutput"> |
| public BookKeeper(ZooKeeper zk) |
| throws InterruptedException, KeeperException |
| </span> |
| |
| </p> |
| <p> |
| where: |
| </p> |
| <ul> |
| |
| <li> |
| |
| <p> |
| |
| <span class="codefrag computeroutput">zk</span> is a ZooKeeper object. This constructor is useful when |
| the application also using ZooKeeper and wants to have a single instance of ZooKeeper. |
| </p> |
| |
| </li> |
| |
| </ul> |
| <p> |
| |
| <span class="codefrag computeroutput"> |
| public BookKeeper(ZooKeeper zk, ClientSocketChannelFactory channelFactory) |
| throws InterruptedException, KeeperException |
| </span> |
| |
| </p> |
| <p> |
| where: |
| </p> |
| <ul> |
| |
| <li> |
| |
| <p> |
| |
| <span class="codefrag computeroutput">zk</span> is a ZooKeeper object. This constructor is useful when |
| the application also using ZooKeeper and wants to have a single instance of ZooKeeper. |
| </p> |
| |
| </li> |
| |
| |
| <li> |
| |
| <p> |
| |
| <span class="codefrag computeroutput">channelFactory</span> is a netty channel object |
| (<span class="codefrag computeroutput">org.jboss.netty.channel.socket</span>). |
| </p> |
| |
| </li> |
| |
| </ul> |
| <a name="bk_createLedger"></a> |
| <h3 class="h4"> Creating a ledger. </h3> |
| <p> Before writing entries to BookKeeper, it is necessary to create a ledger. |
| With the current BookKeeper API, it is possible to create a ledger both synchronously |
| or asynchronously. The following methods belong |
| to <span class="codefrag computeroutput">org.apache.bookkeeper.client.BookKeeper</span>. |
| </p> |
| <p> |
| |
| <strong>Synchronous call:</strong> |
| |
| </p> |
| <p> |
| |
| <span class="codefrag computeroutput"> |
| public LedgerHandle createLedger(int ensSize, int qSize, DigestType type, byte passwd[]) |
| throws KeeperException, InterruptedException, |
| IOException, BKException |
| </span> |
| |
| </p> |
| <p> |
| where: |
| </p> |
| <ul> |
| |
| <li> |
| |
| <p> |
| |
| <span class="codefrag computeroutput">ensSize</span> is the number of bookies (ensemble size); |
| </p> |
| |
| </li> |
| |
| |
| <li> |
| |
| <p> |
| |
| <span class="codefrag computeroutput">qSize</span> is the write quorum size; |
| </p> |
| |
| </li> |
| |
| |
| <li> |
| |
| <p> |
| |
| <span class="codefrag computeroutput">type</span> is the type of digest used with entries: either MAC or CRC32. |
| </p> |
| |
| </li> |
| |
| |
| <li> |
| |
| <p> |
| |
| <span class="codefrag computeroutput">passwd</span> is a password that authorizes the client to write to the |
| ledger being created. |
| </p> |
| |
| </li> |
| |
| </ul> |
| <p> |
| All further operations on a ledger are invoked through the <span class="codefrag computeroutput">LedgerHandle</span> |
| object returned. |
| </p> |
| <p> |
| As a convenience, we provide a <span class="codefrag computeroutput">createLedger</span> with default parameters (3,2,VERIFIABLE), |
| and the only two input parameters it requires are a digest type and a password. |
| </p> |
| <p> |
| |
| <strong>Asynchronous call:</strong> |
| |
| </p> |
| <p> |
| |
| <span class="codefrag computeroutput"> |
| public void asyncCreateLedger(int ensSize, |
| int qSize, |
| DigestType type, |
| byte passwd[], |
| CreateCallback cb, |
| Object ctx |
| ) |
| </span> |
| |
| </p> |
| <p> |
| The parameters are the same of the synchronous version, with the |
| exception of <span class="codefrag computeroutput">cb</span> and <span class="codefrag computeroutput">ctx</span>. <span class="codefrag computeroutput">CreateCallback</span> |
| is an interface in <span class="codefrag computeroutput">org.apache.bookkeeper.client.AsyncCallback</span>, and |
| a class implementing it has to implement a method called <span class="codefrag computeroutput">createComplete</span> |
| that has the following signature: |
| </p> |
| <p> |
| |
| <span class="codefrag computeroutput"> |
| void createComplete(int rc, LedgerHandle lh, Object ctx); |
| </span> |
| |
| </p> |
| <p> |
| where: |
| </p> |
| <ul> |
| |
| <li> |
| |
| <p> |
| |
| <span class="codefrag computeroutput">rc</span> is a return code (please refer to <span class="codefrag computeroutput">org.apache.bookeeper.client.BKException</span> for a list); |
| </p> |
| |
| </li> |
| |
| |
| <li> |
| |
| <p> |
| |
| <span class="codefrag computeroutput">lh</span> is a <span class="codefrag computeroutput">LedgerHandle</span> object to manipulate a ledger; |
| </p> |
| |
| </li> |
| |
| |
| <li> |
| |
| <p> |
| |
| <span class="codefrag computeroutput">ctx</span> is a control object for accountability purposes. It can be essentially any object the application is happy with. |
| </p> |
| |
| </li> |
| |
| </ul> |
| <p> |
| The <span class="codefrag computeroutput">ctx</span> object passed as a parameter to the call to create a ledger |
| is the one same returned in the callback. |
| </p> |
| <a name="bk_writeLedger"></a> |
| <h3 class="h4"> Adding entries to a ledger. </h3> |
| <p> |
| Once we have a ledger handle <span class="codefrag computeroutput">lh</span> obtained through a call to create a ledger, we |
| can start writing entries. As with creating ledgers, we can write both synchronously and |
| asynchronously. The following methods belong |
| to <span class="codefrag computeroutput">org.apache.bookkeeper.client.LedgerHandle</span>. |
| </p> |
| <p> |
| |
| <strong>Synchronous call:</strong> |
| |
| </p> |
| <p> |
| |
| <span class="codefrag computeroutput"> |
| public long addEntry(byte[] data) |
| throws InterruptedException |
| </span> |
| |
| </p> |
| <p> |
| where: |
| </p> |
| <ul> |
| |
| <li> |
| |
| <p> |
| |
| <span class="codefrag computeroutput">data</span> is a byte array; |
| </p> |
| |
| </li> |
| |
| </ul> |
| <p> |
| A call to <span class="codefrag computeroutput">addEntry</span> returns the status of the operation (please refer to <span class="codefrag computeroutput">org.apache.bookeeper.client.BKDefs</span> for a list); |
| </p> |
| <p> |
| |
| <strong>Asynchronous call:</strong> |
| |
| </p> |
| <p> |
| |
| <span class="codefrag computeroutput"> |
| public void asyncAddEntry(byte[] data, AddCallback cb, Object ctx) |
| </span> |
| |
| </p> |
| <p> |
| It also takes a byte array as the sequence of bytes to be stored as an entry. Additionaly, it takes |
| a callback object <span class="codefrag computeroutput">cb</span> and a control object <span class="codefrag computeroutput">ctx</span>. The callback object must implement |
| the <span class="codefrag computeroutput">AddCallback</span> interface in <span class="codefrag computeroutput">org.apache.bookkeeper.client.AsyncCallback</span>, and |
| a class implementing it has to implement a method called <span class="codefrag computeroutput">addComplete</span> |
| that has the following signature: |
| </p> |
| <p> |
| |
| <span class="codefrag computeroutput"> |
| void addComplete(int rc, LedgerHandle lh, long entryId, Object ctx); |
| </span> |
| |
| </p> |
| <p> |
| where: |
| </p> |
| <ul> |
| |
| <li> |
| |
| <p> |
| |
| <span class="codefrag computeroutput">rc</span> is a return code (please refer to <span class="codefrag computeroutput">org.apache.bookeeper.client.BKDefs</span> for a list); |
| </p> |
| |
| </li> |
| |
| |
| <li> |
| |
| <p> |
| |
| <span class="codefrag computeroutput">lh</span> is a <span class="codefrag computeroutput">LedgerHandle</span> object to manipulate a ledger; |
| </p> |
| |
| </li> |
| |
| |
| <li> |
| |
| <p> |
| |
| <span class="codefrag computeroutput">entryId</span> is the identifier of entry associated with this request; |
| </p> |
| |
| </li> |
| |
| |
| <li> |
| |
| <p> |
| |
| <span class="codefrag computeroutput">ctx</span> is control object used for accountability purposes. It can be any object the application is happy with. |
| </p> |
| |
| </li> |
| |
| </ul> |
| <a name="bk_closeLedger"></a> |
| <h3 class="h4"> Closing a ledger. </h3> |
| <p> |
| Once a client is done writing, it closes the ledger. The following methods belong |
| to <span class="codefrag computeroutput">org.apache.bookkeeper.client.LedgerHandle</span>. |
| </p> |
| <p> |
| |
| <strong>Synchronous close:</strong> |
| |
| </p> |
| <p> |
| |
| <span class="codefrag computeroutput"> |
| public void close() |
| throws InterruptedException |
| </span> |
| |
| </p> |
| <p> |
| It takes no input parameters. |
| </p> |
| <p> |
| |
| <strong>Asynchronous close:</strong> |
| |
| </p> |
| <p> |
| |
| <span class="codefrag computeroutput"> |
| public void asyncClose(CloseCallback cb, Object ctx) |
| throws InterruptedException |
| </span> |
| |
| </p> |
| <p> |
| It takes a callback object <span class="codefrag computeroutput">cb</span> and a control object <span class="codefrag computeroutput">ctx</span>. The callback object must implement |
| the <span class="codefrag computeroutput">CloseCallback</span> interface in <span class="codefrag computeroutput">org.apache.bookkeeper.client.AsyncCallback</span>, and |
| a class implementing it has to implement a method called <span class="codefrag computeroutput">closeComplete</span> |
| that has the following signature: |
| </p> |
| <p> |
| |
| <span class="codefrag computeroutput"> |
| void closeComplete(int rc, LedgerHandle lh, Object ctx) |
| </span> |
| |
| </p> |
| <p> |
| where: |
| </p> |
| <ul> |
| |
| <li> |
| |
| <p> |
| |
| <span class="codefrag computeroutput">rc</span> is a return code (please refer to <span class="codefrag computeroutput">org.apache.bookeeper.client.BKDefs</span> for a list); |
| </p> |
| |
| </li> |
| |
| |
| <li> |
| |
| <p> |
| |
| <span class="codefrag computeroutput">lh</span> is a <span class="codefrag computeroutput">LedgerHandle</span> object to manipulate a ledger; |
| </p> |
| |
| </li> |
| |
| |
| <li> |
| |
| <p> |
| |
| <span class="codefrag computeroutput">ctx</span> is control object used for accountability purposes. |
| </p> |
| |
| </li> |
| |
| </ul> |
| <a name="bk_openLedger"></a> |
| <h3 class="h4"> Opening a ledger. </h3> |
| <p> |
| To read from a ledger, a client must open it first. The following methods belong |
| to <span class="codefrag computeroutput">org.apache.bookkeeper.client.BookKeeper</span>. |
| </p> |
| <p> |
| |
| <strong>Synchronous open:</strong> |
| |
| </p> |
| <p> |
| |
| <span class="codefrag computeroutput"> |
| public LedgerHandle openLedger(long lId, DigestType type, byte passwd[]) |
| throws InterruptedException, BKException |
| </span> |
| |
| </p> |
| <ul> |
| |
| <li> |
| |
| <p> |
| |
| <span class="codefrag computeroutput">ledgerId</span> is the ledger identifier; |
| </p> |
| |
| </li> |
| |
| |
| <li> |
| |
| <p> |
| |
| <span class="codefrag computeroutput">type</span> is the type of digest used with entries: either MAC or CRC32. |
| </p> |
| |
| </li> |
| |
| |
| <li> |
| |
| <p> |
| |
| <span class="codefrag computeroutput">passwd</span> is a password to access the ledger (used only in the case of <span class="codefrag computeroutput">VERIFIABLE</span> ledgers); |
| </p> |
| |
| </li> |
| |
| </ul> |
| <p> |
| |
| <strong>Asynchronous open:</strong> |
| |
| </p> |
| <p> |
| |
| <span class="codefrag computeroutput"> |
| public void asyncOpenLedger(long lId, DigestType type, byte passwd[], OpenCallback cb, Object ctx) |
| </span> |
| |
| </p> |
| <p> |
| It also takes a a ledger identifier and a password. Additionaly, it takes a callback object |
| <span class="codefrag computeroutput">cb</span> and a control object <span class="codefrag computeroutput">ctx</span>. The callback object must implement |
| the <span class="codefrag computeroutput">OpenCallback</span> interface in <span class="codefrag computeroutput">org.apache.bookkeeper.client.AsyncCallback</span>, and |
| a class implementing it has to implement a method called <span class="codefrag computeroutput">openComplete</span> |
| that has the following signature: |
| </p> |
| <p> |
| |
| <span class="codefrag computeroutput"> |
| public void openComplete(int rc, LedgerHandle lh, Object ctx) |
| </span> |
| |
| </p> |
| <p> |
| where: |
| </p> |
| <ul> |
| |
| <li> |
| |
| <p> |
| |
| <span class="codefrag computeroutput">rc</span> is a return code (please refer to <span class="codefrag computeroutput">org.apache.bookeeper.client.BKDefs</span> for a list); |
| </p> |
| |
| </li> |
| |
| |
| <li> |
| |
| <p> |
| |
| <span class="codefrag computeroutput">lh</span> is a <span class="codefrag computeroutput">LedgerHandle</span> object to manipulate a ledger; |
| </p> |
| |
| </li> |
| |
| |
| <li> |
| |
| <p> |
| |
| <span class="codefrag computeroutput">ctx</span> is control object used for accountability purposes. |
| </p> |
| |
| </li> |
| |
| </ul> |
| <a name="bk_readLedger"></a> |
| <h3 class="h4"> Reading from ledger </h3> |
| <p> |
| Read calls may request one or more consecutive entries. The following methods belong |
| to <span class="codefrag computeroutput">org.apache.bookkeeper.client.LedgerHandle</span>. |
| </p> |
| <p> |
| |
| <strong>Synchronous read:</strong> |
| |
| </p> |
| <p> |
| |
| <span class="codefrag computeroutput"> |
| public Enumeration<LedgerEntry> readEntries(long firstEntry, long lastEntry) |
| throws InterruptedException, BKException |
| </span> |
| |
| </p> |
| <ul> |
| |
| <li> |
| |
| <p> |
| |
| <span class="codefrag computeroutput">firstEntry</span> is the identifier of the first entry in the sequence of entries to read; |
| </p> |
| |
| </li> |
| |
| |
| <li> |
| |
| <p> |
| |
| <span class="codefrag computeroutput">lastEntry</span> is the identifier of the last entry in the sequence of entries to read. |
| </p> |
| |
| </li> |
| |
| </ul> |
| <p> |
| |
| <strong>Asynchronous read:</strong> |
| |
| </p> |
| <p> |
| |
| <span class="codefrag computeroutput"> |
| public void asyncReadEntries(long firstEntry, |
| long lastEntry, ReadCallback cb, Object ctx) |
| throws BKException, InterruptedException |
| </span> |
| |
| </p> |
| <p> |
| It also takes a first and a last entry identifiers. Additionaly, it takes a callback object |
| <span class="codefrag computeroutput">cb</span> and a control object <span class="codefrag computeroutput">ctx</span>. The callback object must implement |
| the <span class="codefrag computeroutput">ReadCallback</span> interface in <span class="codefrag computeroutput">org.apache.bookkeeper.client.AsyncCallback</span>, and |
| a class implementing it has to implement a method called <span class="codefrag computeroutput">readComplete</span> |
| that has the following signature: |
| </p> |
| <p> |
| |
| <span class="codefrag computeroutput"> |
| void readComplete(int rc, LedgerHandle lh, Enumeration<LedgerEntry> seq, Object ctx) |
| </span> |
| |
| </p> |
| <p> |
| where: |
| </p> |
| <ul> |
| |
| <li> |
| |
| <p> |
| |
| <span class="codefrag computeroutput">rc</span> is a return code (please refer to <span class="codefrag computeroutput">org.apache.bookeeper.client.BKDefs</span> for a list); |
| </p> |
| |
| </li> |
| |
| |
| <li> |
| |
| <p> |
| |
| <span class="codefrag computeroutput">lh</span> is a <span class="codefrag computeroutput">LedgerHandle</span> object to manipulate a ledger; |
| </p> |
| |
| </li> |
| |
| |
| <li> |
| |
| <p> |
| |
| <span class="codefrag computeroutput">seq</span> is a <span class="codefrag computeroutput">Enumeration<LedgerEntry> </span> object to containing the list of entries requested; |
| </p> |
| |
| </li> |
| |
| |
| <li> |
| |
| <p> |
| |
| <span class="codefrag computeroutput">ctx</span> is control object used for accountability purposes. |
| </p> |
| |
| </li> |
| |
| </ul> |
| <a name="bk_deleteLedger"></a> |
| <h3 class="h4"> Deleting a ledger </h3> |
| <p> |
| Once a client is done with a ledger and is sure that nobody will ever need to read from it again, they can delete the ledger. |
| The following methods belong to <span class="codefrag computeroutput">org.apache.bookkeeper.client.BookKeeper</span>. |
| </p> |
| <p> |
| |
| <strong>Synchronous delete:</strong> |
| |
| </p> |
| <p> |
| |
| <span class="codefrag computeroutput"> |
| public void deleteLedger(long lId) throws InterruptedException, BKException |
| </span> |
| |
| </p> |
| <ul> |
| |
| <li> |
| |
| <p> |
| |
| <span class="codefrag computeroutput">lId</span> is the ledger identifier; |
| </p> |
| |
| </li> |
| |
| </ul> |
| <p> |
| |
| <strong>Asynchronous delete:</strong> |
| |
| </p> |
| <p> |
| |
| <span class="codefrag computeroutput"> |
| public void asyncDeleteLedger(long lId, DeleteCallback cb, Object ctx) |
| </span> |
| |
| </p> |
| <p> |
| It takes a ledger identifier. Additionally, it takes a callback object |
| <span class="codefrag computeroutput">cb</span> and a control object <span class="codefrag computeroutput">ctx</span>. The callback object must implement |
| the <span class="codefrag computeroutput">DeleteCallback</span> interface in <span class="codefrag computeroutput">org.apache.bookkeeper.client.AsyncCallback</span>, and |
| a class implementing it has to implement a method called <span class="codefrag computeroutput">deleteComplete</span> |
| that has the following signature: |
| </p> |
| <p> |
| |
| <span class="codefrag computeroutput"> |
| void deleteComplete(int rc, Object ctx) |
| </span> |
| |
| </p> |
| <p> |
| where: |
| </p> |
| <ul> |
| |
| <li> |
| |
| <p> |
| |
| <span class="codefrag computeroutput">rc</span> is a return code (please refer to <span class="codefrag computeroutput">org.apache.bookeeper.client.BKDefs</span> for a list); |
| </p> |
| |
| </li> |
| |
| |
| <li> |
| |
| <p> |
| |
| <span class="codefrag computeroutput">ctx</span> is control object used for accountability purposes. |
| </p> |
| |
| </li> |
| |
| </ul> |
| </div> |
| |
| <p align="right"> |
| <font size="-2"></font> |
| </p> |
| </div> |
| <!--+ |
| |end content |
| +--> |
| <div class="clearboth"> </div> |
| </div> |
| <div id="footer"> |
| <!--+ |
| |start bottomstrip |
| +--> |
| <div class="lastmodified"> |
| <script type="text/javascript"><!-- |
| document.write("Last Published: " + document.lastModified); |
| // --></script> |
| </div> |
| <div class="copyright"> |
| Copyright © |
| 2008 <a href="http://www.apache.org/licenses/">The Apache Software Foundation.</a> |
| </div> |
| <!--+ |
| |end bottomstrip |
| +--> |
| </div> |
| </body> |
| </html> |