<!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> &gt; <a href="http://zookeeper.apache.org/">ZooKeeper</a> &gt; <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">&nbsp; 
                    <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">

             &nbsp;
           </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 &amp; 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&lt;LedgerEntry&gt; 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&lt;LedgerEntry&gt; 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&lt;LedgerEntry&gt; </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">&nbsp;</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 &copy;
         2008-2013 <a href="http://www.apache.org/licenses/">The Apache Software Foundation.</a>
</div>
<!--+
    |end bottomstrip
    +-->
</div>
</body>
</html>
