FreePastry/docs/javadoc/rice/persistence/PersistentStorage.html
ChronosX88 aaa73fe8b3 Pew
2019-05-13 16:45:05 +04:00

1251 lines
54 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_07) on Fri Mar 13 20:01:03 CET 2009 -->
<TITLE>
PersistentStorage (Rice Pastry - API Specifications)
</TITLE>
<META NAME="date" CONTENT="2009-03-13">
<LINK REL ="stylesheet" TYPE="text/css" HREF="../../stylesheet.css" TITLE="Style">
<SCRIPT type="text/javascript">
function windowTitle()
{
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="PersistentStorage (Rice Pastry - API Specifications)";
}
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>
</HEAD>
<BODY BGCOLOR="white" onload="windowTitle();">
<HR>
<!-- ========= START OF TOP NAVBAR ======= -->
<A NAME="navbar_top"><!-- --></A>
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/PersistentStorage.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
</TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
Rice Pastry API</EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../rice/persistence/MemoryStorage.html" title="class in rice.persistence"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../rice/persistence/Storage.html" title="interface in rice.persistence"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
<A HREF="../../index.html?rice/persistence/PersistentStorage.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="PersistentStorage.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
if(window==top) {
document.writeln('<A HREF="../../allclasses-noframe.html"><B>All Classes</B></A>');
}
//-->
</SCRIPT>
<NOSCRIPT>
<A HREF="../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->
<HR>
<!-- ======== START OF CLASS DATA ======== -->
<H2>
<FONT SIZE="-1">
rice.persistence</FONT>
<BR>
Class PersistentStorage</H2>
<PRE>
java.lang.Object
<IMG SRC="../../resources/inherit.gif" ALT="extended by "><B>rice.persistence.PersistentStorage</B>
</PRE>
<DL>
<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../rice/persistence/Catalog.html" title="interface in rice.persistence">Catalog</A>, <A HREF="../../rice/persistence/Storage.html" title="interface in rice.persistence">Storage</A></DD>
</DL>
<HR>
<DL>
<DT><PRE>public class <B>PersistentStorage</B><DT>extends java.lang.Object<DT>implements <A HREF="../../rice/persistence/Storage.html" title="interface in rice.persistence">Storage</A></DL>
</PRE>
<P>
This class is an implementation of Storage which provides
persistent storage to disk. This class also guarantees that
the data will be consistent, even after a crash. This class
also provides these services is a non-blocking fashion by
launching a separate thread which is tasked with actually
writing the data to disk.
This class was initially designed to support only Ids whose toString()
method returns a String of constant length. It has been extended to
support variable-length toString()s, but we have the caveat that
not toString() can be a substring of another toString() - this
will cause undefined behavior. <b>Additionally, the toString() method on the key Ids
*CANNOT* have the period ('.') or exclamation point ('!')
characters in them - these are used for internal purposes.<b>
The serialized objects are stored on-disk in a GZIPed XML format,
which provides extensibility with reasonable storage and processing
costs. Additionally, any metadata, if provided, is also stored
in the on-disk file. The format of the file is
[Key, Object, Version, Gzipped XML]
[Metadata, Gzipped XML]
[persistence magic number, long]
[persistence version, long]
[persistence revision, long]
[metadata length, long]
The persistence package is set up to automatically upgrade older
versions of the on-disk format as new data is written under the
key.
Persistence also supports the metadata interface specified in the
Catalog interface. All metadata is guaranteed to be stored
in memory, so fetching the metadata of a given key is an efficient
operation.
<P>
<P>
<HR>
<P>
<!-- =========== FIELD SUMMARY =========== -->
<A NAME="field_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Field Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../rice/persistence/PersistentStorage.html#BACKUP_DIRECTORY">BACKUP_DIRECTORY</A></B></CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Static variables which define the location of the storage root</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../rice/persistence/PersistentStorage.html#LOST_AND_FOUND_DIRECTORY">LOST_AND_FOUND_DIRECTORY</A></B></CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;int</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../rice/persistence/PersistentStorage.html#MAX_DIRECTORIES">MAX_DIRECTORIES</A></B></CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The maximum number of subdirectories in a directory before splitting</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;int</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../rice/persistence/PersistentStorage.html#MAX_FILES">MAX_FILES</A></B></CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The splitting factor, or the number of files in one directory</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../rice/persistence/PersistentStorage.html#METADATA_FILENAME">METADATA_FILENAME</A></B></CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;int</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../rice/persistence/PersistentStorage.html#METADATA_SYNC_TIME">METADATA_SYNC_TIME</A></B></CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The amount of time before re-writing the metadata file</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;long</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../rice/persistence/PersistentStorage.html#PERSISTENCE_MAGIC_NUMBER">PERSISTENCE_MAGIC_NUMBER</A></B></CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Static variables defining the layout of the on-disk storage</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;long</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../rice/persistence/PersistentStorage.html#PERSISTENCE_REVISION_2_0">PERSISTENCE_REVISION_2_0</A></B></CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;long</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../rice/persistence/PersistentStorage.html#PERSISTENCE_REVISION_2_1">PERSISTENCE_REVISION_2_1</A></B></CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;long</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../rice/persistence/PersistentStorage.html#PERSISTENCE_VERSION_2">PERSISTENCE_VERSION_2</A></B></CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../rice/persistence/PersistentStorage.html#ZERO_LENGTH_NAME">ZERO_LENGTH_NAME</A></B></CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Special placeholder for the file whose name should be zero-length</TD>
</TR>
</TABLE>
&nbsp;
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../rice/persistence/PersistentStorage.html#PersistentStorage(rice.p2p.commonapi.IdFactory, java.lang.String, long, rice.environment.Environment)">PersistentStorage</A></B>(<A HREF="../../rice/p2p/commonapi/IdFactory.html" title="interface in rice.p2p.commonapi">IdFactory</A>&nbsp;factory,
java.lang.String&nbsp;rootDir,
long&nbsp;size,
<A HREF="../../rice/environment/Environment.html" title="class in rice.environment">Environment</A>&nbsp;env)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Builds a PersistentStorage given a root directory in which to
persist the data.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../rice/persistence/PersistentStorage.html#PersistentStorage(rice.p2p.commonapi.IdFactory, java.lang.String, java.lang.String, long, boolean, rice.environment.Environment)">PersistentStorage</A></B>(<A HREF="../../rice/p2p/commonapi/IdFactory.html" title="interface in rice.p2p.commonapi">IdFactory</A>&nbsp;factory,
java.lang.String&nbsp;name,
java.lang.String&nbsp;rootDir,
long&nbsp;size,
boolean&nbsp;index,
<A HREF="../../rice/environment/Environment.html" title="class in rice.environment">Environment</A>&nbsp;env)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Builds a PersistentStorage given and an instance name
and a root directory in which to persist the data.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../rice/persistence/PersistentStorage.html#PersistentStorage(rice.p2p.commonapi.IdFactory, java.lang.String, java.lang.String, long, rice.environment.Environment)">PersistentStorage</A></B>(<A HREF="../../rice/p2p/commonapi/IdFactory.html" title="interface in rice.p2p.commonapi">IdFactory</A>&nbsp;factory,
java.lang.String&nbsp;name,
java.lang.String&nbsp;rootDir,
long&nbsp;size,
<A HREF="../../rice/environment/Environment.html" title="class in rice.environment">Environment</A>&nbsp;env)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Builds a PersistentStorage given and an instance name
and a root directory in which to persist the data.</TD>
</TR>
</TABLE>
&nbsp;
<!-- ========== METHOD SUMMARY =========== -->
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../rice/persistence/PersistentStorage.html#exists(rice.p2p.commonapi.Id)">exists</A></B>(<A HREF="../../rice/p2p/commonapi/Id.html" title="interface in rice.p2p.commonapi">Id</A>&nbsp;id)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns whether or not an object is present in the location <code>id</code>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../rice/persistence/PersistentStorage.html#flush(rice.Continuation)">flush</A></B>(<A HREF="../../rice/Continuation.html" title="interface in rice">Continuation</A>&nbsp;c)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method which is used to erase all data stored in the Catalog.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;java.io.Serializable</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../rice/persistence/PersistentStorage.html#getMetadata(rice.p2p.commonapi.Id)">getMetadata</A></B>(<A HREF="../../rice/p2p/commonapi/Id.html" title="interface in rice.p2p.commonapi">Id</A>&nbsp;id)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the metadata associated with the provided object, or null if
no metadata exists.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;java.lang.String</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../rice/persistence/PersistentStorage.html#getName()">getName</A></B>()</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gets the name of this instance</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../rice/persistence/PersistentStorage.html#getObject(rice.p2p.commonapi.Id, rice.Continuation)">getObject</A></B>(<A HREF="../../rice/p2p/commonapi/Id.html" title="interface in rice.p2p.commonapi">Id</A>&nbsp;id,
<A HREF="../../rice/Continuation.html" title="interface in rice">Continuation</A>&nbsp;c)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the object identified by the given id.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;<A HREF="../../rice/p2p/commonapi/IdRange.html" title="interface in rice.p2p.commonapi">IdRange</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../rice/persistence/PersistentStorage.html#getRangeForDirectory(java.io.File)">getRangeForDirectory</A></B>(java.io.File&nbsp;dir)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Utility function which returns the range of keys which a directory
corresponds to.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;java.lang.String</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../rice/persistence/PersistentStorage.html#getRoot()">getRoot</A></B>()</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gets the root directory that the persistence Manager uses</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;int</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../rice/persistence/PersistentStorage.html#getSize()">getSize</A></B>()</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of Ids currently stored in the catalog</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;long</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../rice/persistence/PersistentStorage.html#getStorageSize()">getStorageSize</A></B>()</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gets the amount of storage that the persistence Manager uses</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;long</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../rice/persistence/PersistentStorage.html#getTotalSize()">getTotalSize</A></B>()</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the total size of the stored data in bytes.The result
is returned via the receiveResult method on the provided
Continuation with an Integer representing the size.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../rice/persistence/PersistentStorage.html#rename(rice.p2p.commonapi.Id, rice.p2p.commonapi.Id, rice.Continuation)">rename</A></B>(<A HREF="../../rice/p2p/commonapi/Id.html" title="interface in rice.p2p.commonapi">Id</A>&nbsp;oldId,
<A HREF="../../rice/p2p/commonapi/Id.html" title="interface in rice.p2p.commonapi">Id</A>&nbsp;newId,
<A HREF="../../rice/Continuation.html" title="interface in rice">Continuation</A>&nbsp;c)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Renames the given object to the new id.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../rice/p2p/commonapi/IdSet.html" title="interface in rice.p2p.commonapi">IdSet</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../rice/persistence/PersistentStorage.html#scan()">scan</A></B>()</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the objects identified by the given range of ids.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../rice/p2p/commonapi/IdSet.html" title="interface in rice.p2p.commonapi">IdSet</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../rice/persistence/PersistentStorage.html#scan(rice.p2p.commonapi.IdRange)">scan</A></B>(<A HREF="../../rice/p2p/commonapi/IdRange.html" title="interface in rice.p2p.commonapi">IdRange</A>&nbsp;range)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the objects identified by the given range of ids.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;java.util.SortedMap</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../rice/persistence/PersistentStorage.html#scanMetadata()">scanMetadata</A></B>()</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a map which contains keys mapping ids to the associated
metadata.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;java.util.SortedMap</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../rice/persistence/PersistentStorage.html#scanMetadata(rice.p2p.commonapi.IdRange)">scanMetadata</A></B>(<A HREF="../../rice/p2p/commonapi/IdRange.html" title="interface in rice.p2p.commonapi">IdRange</A>&nbsp;range)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a map which contains keys mapping ids to the associated
metadata.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;java.util.SortedMap</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../rice/persistence/PersistentStorage.html#scanMetadataValuesHead(java.lang.Object)">scanMetadataValuesHead</A></B>(java.lang.Object&nbsp;value)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the submapping of ids which have metadata less than the provided
value.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;java.util.SortedMap</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../rice/persistence/PersistentStorage.html#scanMetadataValuesNull()">scanMetadataValuesNull</A></B>()</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the submapping of ids which have metadata null</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../rice/persistence/PersistentStorage.html#setMetadata(rice.p2p.commonapi.Id, java.io.Serializable, rice.Continuation)">setMetadata</A></B>(<A HREF="../../rice/p2p/commonapi/Id.html" title="interface in rice.p2p.commonapi">Id</A>&nbsp;id,
java.io.Serializable&nbsp;metadata,
<A HREF="../../rice/Continuation.html" title="interface in rice">Continuation</A>&nbsp;c)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Updates the metadata stored under the given key to be the provided
value.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../rice/persistence/PersistentStorage.html#setRoot(java.lang.String)">setRoot</A></B>(java.lang.String&nbsp;dir)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sets the root directory that the persistence Manager uses</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../rice/persistence/PersistentStorage.html#setStorageSize(long)">setStorageSize</A></B>(long&nbsp;size)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sets the amount of storage that the persistence Manager uses</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../rice/persistence/PersistentStorage.html#setTimer(rice.selector.Timer)">setTimer</A></B>(<A HREF="../../rice/selector/Timer.html" title="interface in rice.selector">Timer</A>&nbsp;timer)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method which allows the persistence root to schedule an event which will tell it to
sync the metadata cached.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../rice/persistence/PersistentStorage.html#store(rice.p2p.commonapi.Id, java.io.Serializable, java.io.Serializable, rice.Continuation)">store</A></B>(<A HREF="../../rice/p2p/commonapi/Id.html" title="interface in rice.p2p.commonapi">Id</A>&nbsp;id,
java.io.Serializable&nbsp;metadata,
java.io.Serializable&nbsp;obj,
<A HREF="../../rice/Continuation.html" title="interface in rice">Continuation</A>&nbsp;c)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Makes the object persistent to disk and stored permanantly
If the object is already persistent, this method will
simply update the object's serialized image.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../rice/persistence/PersistentStorage.html#unstore(rice.p2p.commonapi.Id, rice.Continuation)">unstore</A></B>(<A HREF="../../rice/p2p/commonapi/Id.html" title="interface in rice.p2p.commonapi">Id</A>&nbsp;id,
<A HREF="../../rice/Continuation.html" title="interface in rice">Continuation</A>&nbsp;c)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Request to remove the object from the list of persistend objects.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../rice/persistence/PersistentStorage.html#writeDirty()">writeDirty</A></B>()</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Function which writes out all of the dirty metadata files and marks
them as clean.</TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
<!-- ============ FIELD DETAIL =========== -->
<A NAME="field_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
<B>Field Detail</B></FONT></TH>
</TR>
</TABLE>
<A NAME="PERSISTENCE_MAGIC_NUMBER"><!-- --></A><H3>
PERSISTENCE_MAGIC_NUMBER</H3>
<PRE>
public static final long <B>PERSISTENCE_MAGIC_NUMBER</B></PRE>
<DL>
<DD>Static variables defining the layout of the on-disk storage
<P>
<DL>
<DT><B>See Also:</B><DD><A HREF="../../constant-values.html#rice.persistence.PersistentStorage.PERSISTENCE_MAGIC_NUMBER">Constant Field Values</A></DL>
</DL>
<HR>
<A NAME="PERSISTENCE_VERSION_2"><!-- --></A><H3>
PERSISTENCE_VERSION_2</H3>
<PRE>
public static final long <B>PERSISTENCE_VERSION_2</B></PRE>
<DL>
<DL>
<DT><B>See Also:</B><DD><A HREF="../../constant-values.html#rice.persistence.PersistentStorage.PERSISTENCE_VERSION_2">Constant Field Values</A></DL>
</DL>
<HR>
<A NAME="PERSISTENCE_REVISION_2_0"><!-- --></A><H3>
PERSISTENCE_REVISION_2_0</H3>
<PRE>
public static final long <B>PERSISTENCE_REVISION_2_0</B></PRE>
<DL>
<DL>
<DT><B>See Also:</B><DD><A HREF="../../constant-values.html#rice.persistence.PersistentStorage.PERSISTENCE_REVISION_2_0">Constant Field Values</A></DL>
</DL>
<HR>
<A NAME="PERSISTENCE_REVISION_2_1"><!-- --></A><H3>
PERSISTENCE_REVISION_2_1</H3>
<PRE>
public static final long <B>PERSISTENCE_REVISION_2_1</B></PRE>
<DL>
<DL>
<DT><B>See Also:</B><DD><A HREF="../../constant-values.html#rice.persistence.PersistentStorage.PERSISTENCE_REVISION_2_1">Constant Field Values</A></DL>
</DL>
<HR>
<A NAME="BACKUP_DIRECTORY"><!-- --></A><H3>
BACKUP_DIRECTORY</H3>
<PRE>
public static final java.lang.String <B>BACKUP_DIRECTORY</B></PRE>
<DL>
<DD>Static variables which define the location of the storage root
<P>
<DL>
<DT><B>See Also:</B><DD><A HREF="../../constant-values.html#rice.persistence.PersistentStorage.BACKUP_DIRECTORY">Constant Field Values</A></DL>
</DL>
<HR>
<A NAME="LOST_AND_FOUND_DIRECTORY"><!-- --></A><H3>
LOST_AND_FOUND_DIRECTORY</H3>
<PRE>
public static final java.lang.String <B>LOST_AND_FOUND_DIRECTORY</B></PRE>
<DL>
<DL>
<DT><B>See Also:</B><DD><A HREF="../../constant-values.html#rice.persistence.PersistentStorage.LOST_AND_FOUND_DIRECTORY">Constant Field Values</A></DL>
</DL>
<HR>
<A NAME="METADATA_FILENAME"><!-- --></A><H3>
METADATA_FILENAME</H3>
<PRE>
public static final java.lang.String <B>METADATA_FILENAME</B></PRE>
<DL>
<DL>
<DT><B>See Also:</B><DD><A HREF="../../constant-values.html#rice.persistence.PersistentStorage.METADATA_FILENAME">Constant Field Values</A></DL>
</DL>
<HR>
<A NAME="MAX_FILES"><!-- --></A><H3>
MAX_FILES</H3>
<PRE>
public static final int <B>MAX_FILES</B></PRE>
<DL>
<DD>The splitting factor, or the number of files in one directory
<P>
<DL>
<DT><B>See Also:</B><DD><A HREF="../../constant-values.html#rice.persistence.PersistentStorage.MAX_FILES">Constant Field Values</A></DL>
</DL>
<HR>
<A NAME="MAX_DIRECTORIES"><!-- --></A><H3>
MAX_DIRECTORIES</H3>
<PRE>
public static final int <B>MAX_DIRECTORIES</B></PRE>
<DL>
<DD>The maximum number of subdirectories in a directory before splitting
<P>
<DL>
<DT><B>See Also:</B><DD><A HREF="../../constant-values.html#rice.persistence.PersistentStorage.MAX_DIRECTORIES">Constant Field Values</A></DL>
</DL>
<HR>
<A NAME="METADATA_SYNC_TIME"><!-- --></A><H3>
METADATA_SYNC_TIME</H3>
<PRE>
public static final int <B>METADATA_SYNC_TIME</B></PRE>
<DL>
<DD>The amount of time before re-writing the metadata file
<P>
<DL>
<DT><B>See Also:</B><DD><A HREF="../../constant-values.html#rice.persistence.PersistentStorage.METADATA_SYNC_TIME">Constant Field Values</A></DL>
</DL>
<HR>
<A NAME="ZERO_LENGTH_NAME"><!-- --></A><H3>
ZERO_LENGTH_NAME</H3>
<PRE>
public static final java.lang.String <B>ZERO_LENGTH_NAME</B></PRE>
<DL>
<DD>Special placeholder for the file whose name should be zero-length
<P>
<DL>
<DT><B>See Also:</B><DD><A HREF="../../constant-values.html#rice.persistence.PersistentStorage.ZERO_LENGTH_NAME">Constant Field Values</A></DL>
</DL>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
<A NAME="PersistentStorage(rice.p2p.commonapi.IdFactory, java.lang.String, long, rice.environment.Environment)"><!-- --></A><H3>
PersistentStorage</H3>
<PRE>
public <B>PersistentStorage</B>(<A HREF="../../rice/p2p/commonapi/IdFactory.html" title="interface in rice.p2p.commonapi">IdFactory</A>&nbsp;factory,
java.lang.String&nbsp;rootDir,
long&nbsp;size,
<A HREF="../../rice/environment/Environment.html" title="class in rice.environment">Environment</A>&nbsp;env)
throws java.io.IOException</PRE>
<DL>
<DD>Builds a PersistentStorage given a root directory in which to
persist the data. Uses a default instance name.
<P>
<DL>
<DT><B>Parameters:</B><DD><CODE>factory</CODE> - The factory to use for creating Ids.<DD><CODE>rootDir</CODE> - The root directory of the persisted disk.<DD><CODE>size</CODE> - the size of the storage in bytes, or -1 for unlimited
<DT><B>Throws:</B>
<DD><CODE>java.io.IOException</CODE></DL>
</DL>
<HR>
<A NAME="PersistentStorage(rice.p2p.commonapi.IdFactory, java.lang.String, java.lang.String, long, rice.environment.Environment)"><!-- --></A><H3>
PersistentStorage</H3>
<PRE>
public <B>PersistentStorage</B>(<A HREF="../../rice/p2p/commonapi/IdFactory.html" title="interface in rice.p2p.commonapi">IdFactory</A>&nbsp;factory,
java.lang.String&nbsp;name,
java.lang.String&nbsp;rootDir,
long&nbsp;size,
<A HREF="../../rice/environment/Environment.html" title="class in rice.environment">Environment</A>&nbsp;env)
throws java.io.IOException</PRE>
<DL>
<DD>Builds a PersistentStorage given and an instance name
and a root directory in which to persist the data.
<P>
<DL>
<DT><B>Parameters:</B><DD><CODE>factory</CODE> - The factory to use for creating Ids.<DD><CODE>name</CODE> - the name of this instance<DD><CODE>rootDir</CODE> - The root directory of the persisted disk.<DD><CODE>size</CODE> - the size of the storage in bytes, or -1 for unlimited
<DT><B>Throws:</B>
<DD><CODE>java.io.IOException</CODE></DL>
</DL>
<HR>
<A NAME="PersistentStorage(rice.p2p.commonapi.IdFactory, java.lang.String, java.lang.String, long, boolean, rice.environment.Environment)"><!-- --></A><H3>
PersistentStorage</H3>
<PRE>
public <B>PersistentStorage</B>(<A HREF="../../rice/p2p/commonapi/IdFactory.html" title="interface in rice.p2p.commonapi">IdFactory</A>&nbsp;factory,
java.lang.String&nbsp;name,
java.lang.String&nbsp;rootDir,
long&nbsp;size,
boolean&nbsp;index,
<A HREF="../../rice/environment/Environment.html" title="class in rice.environment">Environment</A>&nbsp;env)
throws java.io.IOException</PRE>
<DL>
<DD>Builds a PersistentStorage given and an instance name
and a root directory in which to persist the data.
<P>
<DL>
<DT><B>Parameters:</B><DD><CODE>factory</CODE> - The factory to use for creating Ids.<DD><CODE>name</CODE> - the name of this instance<DD><CODE>rootDir</CODE> - The root directory of the persisted disk.<DD><CODE>size</CODE> - the size of the storage in bytes, or -1 for unlimited<DD><CODE>index</CODE> - Whether or not to index the objects
<DT><B>Throws:</B>
<DD><CODE>java.io.IOException</CODE></DL>
</DL>
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
<A NAME="setTimer(rice.selector.Timer)"><!-- --></A><H3>
setTimer</H3>
<PRE>
public void <B>setTimer</B>(<A HREF="../../rice/selector/Timer.html" title="interface in rice.selector">Timer</A>&nbsp;timer)</PRE>
<DL>
<DD>Method which allows the persistence root to schedule an event which will tell it to
sync the metadata cached. Should be called exactly once after the persistence root is
created.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>timer</CODE> - The timer to use to schedule the events</DL>
</DD>
</DL>
<HR>
<A NAME="rename(rice.p2p.commonapi.Id, rice.p2p.commonapi.Id, rice.Continuation)"><!-- --></A><H3>
rename</H3>
<PRE>
public void <B>rename</B>(<A HREF="../../rice/p2p/commonapi/Id.html" title="interface in rice.p2p.commonapi">Id</A>&nbsp;oldId,
<A HREF="../../rice/p2p/commonapi/Id.html" title="interface in rice.p2p.commonapi">Id</A>&nbsp;newId,
<A HREF="../../rice/Continuation.html" title="interface in rice">Continuation</A>&nbsp;c)</PRE>
<DL>
<DD>Renames the given object to the new id. This method is potentially faster
than store/cache and unstore/uncache.
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../rice/persistence/Catalog.html#rename(rice.p2p.commonapi.Id, rice.p2p.commonapi.Id, rice.Continuation)">rename</A></CODE> in interface <CODE><A HREF="../../rice/persistence/Catalog.html" title="interface in rice.persistence">Catalog</A></CODE></DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>oldId</CODE> - The id of the object in question.<DD><CODE>newId</CODE> - The new id of the object in question.<DD><CODE>c</CODE> - The command to run once the operation is complete</DL>
</DD>
</DL>
<HR>
<A NAME="store(rice.p2p.commonapi.Id, java.io.Serializable, java.io.Serializable, rice.Continuation)"><!-- --></A><H3>
store</H3>
<PRE>
public void <B>store</B>(<A HREF="../../rice/p2p/commonapi/Id.html" title="interface in rice.p2p.commonapi">Id</A>&nbsp;id,
java.io.Serializable&nbsp;metadata,
java.io.Serializable&nbsp;obj,
<A HREF="../../rice/Continuation.html" title="interface in rice">Continuation</A>&nbsp;c)</PRE>
<DL>
<DD>Makes the object persistent to disk and stored permanantly
If the object is already persistent, this method will
simply update the object's serialized image.
This is implemented atomically so that this may succeed
and store the new object, or fail and leave the previous
object intact.
This method completes by calling recieveResult() of the provided continuation
with the success or failure of the operation.
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../rice/persistence/Storage.html#store(rice.p2p.commonapi.Id, java.io.Serializable, java.io.Serializable, rice.Continuation)">store</A></CODE> in interface <CODE><A HREF="../../rice/persistence/Storage.html" title="interface in rice.persistence">Storage</A></CODE></DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>obj</CODE> - The object to be made persistent.<DD><CODE>id</CODE> - The object's id.<DD><CODE>metadata</CODE> - The object's metadata<DD><CODE>c</CODE> - The command to run once the operation is complete</DL>
</DD>
</DL>
<HR>
<A NAME="unstore(rice.p2p.commonapi.Id, rice.Continuation)"><!-- --></A><H3>
unstore</H3>
<PRE>
public void <B>unstore</B>(<A HREF="../../rice/p2p/commonapi/Id.html" title="interface in rice.p2p.commonapi">Id</A>&nbsp;id,
<A HREF="../../rice/Continuation.html" title="interface in rice">Continuation</A>&nbsp;c)</PRE>
<DL>
<DD>Request to remove the object from the list of persistend objects.
Delete the serialized image of the object from stable storage. If
necessary. If the object was not in the cached list in the first place,
nothing happens and <code>false</code> is returned.
This method also guarantees that the data on disk will remain consistent,
even after a crash by performing the delete atomically.
This method completes by calling recieveResult() of the provided continuation
with the success or failure of the operation.
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../rice/persistence/Storage.html#unstore(rice.p2p.commonapi.Id, rice.Continuation)">unstore</A></CODE> in interface <CODE><A HREF="../../rice/persistence/Storage.html" title="interface in rice.persistence">Storage</A></CODE></DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>id</CODE> - The object's persistence id<DD><CODE>c</CODE> - The command to run once the operation is complete</DL>
</DD>
</DL>
<HR>
<A NAME="exists(rice.p2p.commonapi.Id)"><!-- --></A><H3>
exists</H3>
<PRE>
public boolean <B>exists</B>(<A HREF="../../rice/p2p/commonapi/Id.html" title="interface in rice.p2p.commonapi">Id</A>&nbsp;id)</PRE>
<DL>
<DD>Returns whether or not an object is present in the location <code>id</code>.
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../rice/persistence/Catalog.html#exists(rice.p2p.commonapi.Id)">exists</A></CODE> in interface <CODE><A HREF="../../rice/persistence/Catalog.html" title="interface in rice.persistence">Catalog</A></CODE></DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>id</CODE> - The id of the object in question.
<DT><B>Returns:</B><DD>Whether or not an object is present at id.</DL>
</DD>
</DL>
<HR>
<A NAME="getMetadata(rice.p2p.commonapi.Id)"><!-- --></A><H3>
getMetadata</H3>
<PRE>
public java.io.Serializable <B>getMetadata</B>(<A HREF="../../rice/p2p/commonapi/Id.html" title="interface in rice.p2p.commonapi">Id</A>&nbsp;id)</PRE>
<DL>
<DD>Returns the metadata associated with the provided object, or null if
no metadata exists. The metadata must be stored in memory, so this
operation is guaranteed to be fast and non-blocking.
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../rice/persistence/Catalog.html#getMetadata(rice.p2p.commonapi.Id)">getMetadata</A></CODE> in interface <CODE><A HREF="../../rice/persistence/Catalog.html" title="interface in rice.persistence">Catalog</A></CODE></DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>id</CODE> - The id for which the metadata is needed
<DT><B>Returns:</B><DD>The metadata, or null of non exists</DL>
</DD>
</DL>
<HR>
<A NAME="setMetadata(rice.p2p.commonapi.Id, java.io.Serializable, rice.Continuation)"><!-- --></A><H3>
setMetadata</H3>
<PRE>
public void <B>setMetadata</B>(<A HREF="../../rice/p2p/commonapi/Id.html" title="interface in rice.p2p.commonapi">Id</A>&nbsp;id,
java.io.Serializable&nbsp;metadata,
<A HREF="../../rice/Continuation.html" title="interface in rice">Continuation</A>&nbsp;c)</PRE>
<DL>
<DD>Updates the metadata stored under the given key to be the provided
value. As this may require a disk access, the requestor must
also provide a continuation to return the result to.
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../rice/persistence/Catalog.html#setMetadata(rice.p2p.commonapi.Id, java.io.Serializable, rice.Continuation)">setMetadata</A></CODE> in interface <CODE><A HREF="../../rice/persistence/Catalog.html" title="interface in rice.persistence">Catalog</A></CODE></DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>id</CODE> - The id for the metadata<DD><CODE>metadata</CODE> - The metadata to store<DD><CODE>c</CODE> - The command to run once the operation is complete</DL>
</DD>
</DL>
<HR>
<A NAME="getObject(rice.p2p.commonapi.Id, rice.Continuation)"><!-- --></A><H3>
getObject</H3>
<PRE>
public void <B>getObject</B>(<A HREF="../../rice/p2p/commonapi/Id.html" title="interface in rice.p2p.commonapi">Id</A>&nbsp;id,
<A HREF="../../rice/Continuation.html" title="interface in rice">Continuation</A>&nbsp;c)</PRE>
<DL>
<DD>Returns the object identified by the given id.
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../rice/persistence/Catalog.html#getObject(rice.p2p.commonapi.Id, rice.Continuation)">getObject</A></CODE> in interface <CODE><A HREF="../../rice/persistence/Catalog.html" title="interface in rice.persistence">Catalog</A></CODE></DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>id</CODE> - The id of the object in question.<DD><CODE>c</CODE> - The command to run once the operation is complete</DL>
</DD>
</DL>
<HR>
<A NAME="scan(rice.p2p.commonapi.IdRange)"><!-- --></A><H3>
scan</H3>
<PRE>
public <A HREF="../../rice/p2p/commonapi/IdSet.html" title="interface in rice.p2p.commonapi">IdSet</A> <B>scan</B>(<A HREF="../../rice/p2p/commonapi/IdRange.html" title="interface in rice.p2p.commonapi">IdRange</A>&nbsp;range)</PRE>
<DL>
<DD>Return the objects identified by the given range of ids. The IdSet
returned contains the Ids of the stored objects. The range is
partially inclusive, the lower range is inclusive, and the upper
exclusive.
NOTE: This method blocks so if the behavior of this method changes and
uses the disk, this method may be deprecated.
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../rice/persistence/Catalog.html#scan(rice.p2p.commonapi.IdRange)">scan</A></CODE> in interface <CODE><A HREF="../../rice/persistence/Catalog.html" title="interface in rice.persistence">Catalog</A></CODE></DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>range</CODE> - The range to query
<DT><B>Returns:</B><DD>The idset containing the keys</DL>
</DD>
</DL>
<HR>
<A NAME="scan()"><!-- --></A><H3>
scan</H3>
<PRE>
public <A HREF="../../rice/p2p/commonapi/IdSet.html" title="interface in rice.p2p.commonapi">IdSet</A> <B>scan</B>()</PRE>
<DL>
<DD>Return the objects identified by the given range of ids. The IdSet
returned contains the Ids of the stored objects. The range is
partially inclusive, the lower range is inclusive, and the upper
exclusive.
NOTE: This method blocks so if the behavior of this method changes and
uses the disk, this method may be deprecated.
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../rice/persistence/Catalog.html#scan()">scan</A></CODE> in interface <CODE><A HREF="../../rice/persistence/Catalog.html" title="interface in rice.persistence">Catalog</A></CODE></DL>
</DD>
<DD><DL>
<DT><B>Returns:</B><DD>The idset containing the keys</DL>
</DD>
</DL>
<HR>
<A NAME="scanMetadata(rice.p2p.commonapi.IdRange)"><!-- --></A><H3>
scanMetadata</H3>
<PRE>
public java.util.SortedMap <B>scanMetadata</B>(<A HREF="../../rice/p2p/commonapi/IdRange.html" title="interface in rice.p2p.commonapi">IdRange</A>&nbsp;range)</PRE>
<DL>
<DD>Returns a map which contains keys mapping ids to the associated
metadata.
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../rice/persistence/Catalog.html#scanMetadata(rice.p2p.commonapi.IdRange)">scanMetadata</A></CODE> in interface <CODE><A HREF="../../rice/persistence/Catalog.html" title="interface in rice.persistence">Catalog</A></CODE></DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>range</CODE> - The range to query
<DT><B>Returns:</B><DD>The map containing the keys</DL>
</DD>
</DL>
<HR>
<A NAME="scanMetadata()"><!-- --></A><H3>
scanMetadata</H3>
<PRE>
public java.util.SortedMap <B>scanMetadata</B>()</PRE>
<DL>
<DD>Returns a map which contains keys mapping ids to the associated
metadata.
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../rice/persistence/Catalog.html#scanMetadata()">scanMetadata</A></CODE> in interface <CODE><A HREF="../../rice/persistence/Catalog.html" title="interface in rice.persistence">Catalog</A></CODE></DL>
</DD>
<DD><DL>
<DT><B>Returns:</B><DD>The treemap mapping ids to metadata</DL>
</DD>
</DL>
<HR>
<A NAME="scanMetadataValuesHead(java.lang.Object)"><!-- --></A><H3>
scanMetadataValuesHead</H3>
<PRE>
public java.util.SortedMap <B>scanMetadataValuesHead</B>(java.lang.Object&nbsp;value)</PRE>
<DL>
<DD>Returns the submapping of ids which have metadata less than the provided
value.
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../rice/persistence/Catalog.html#scanMetadataValuesHead(java.lang.Object)">scanMetadataValuesHead</A></CODE> in interface <CODE><A HREF="../../rice/persistence/Catalog.html" title="interface in rice.persistence">Catalog</A></CODE></DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>value</CODE> - The maximal metadata value
<DT><B>Returns:</B><DD>The submapping</DL>
</DD>
</DL>
<HR>
<A NAME="scanMetadataValuesNull()"><!-- --></A><H3>
scanMetadataValuesNull</H3>
<PRE>
public java.util.SortedMap <B>scanMetadataValuesNull</B>()</PRE>
<DL>
<DD>Returns the submapping of ids which have metadata null
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../rice/persistence/Catalog.html#scanMetadataValuesNull()">scanMetadataValuesNull</A></CODE> in interface <CODE><A HREF="../../rice/persistence/Catalog.html" title="interface in rice.persistence">Catalog</A></CODE></DL>
</DD>
<DD><DL>
<DT><B>Returns:</B><DD>The submapping</DL>
</DD>
</DL>
<HR>
<A NAME="getTotalSize()"><!-- --></A><H3>
getTotalSize</H3>
<PRE>
public long <B>getTotalSize</B>()</PRE>
<DL>
<DD>Returns the total size of the stored data in bytes.The result
is returned via the receiveResult method on the provided
Continuation with an Integer representing the size.
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../rice/persistence/Catalog.html#getTotalSize()">getTotalSize</A></CODE> in interface <CODE><A HREF="../../rice/persistence/Catalog.html" title="interface in rice.persistence">Catalog</A></CODE></DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>c</CODE> - The command to run once the operation is complete
<DT><B>Returns:</B><DD>The total size, in bytes, of data stored.</DL>
</DD>
</DL>
<HR>
<A NAME="getSize()"><!-- --></A><H3>
getSize</H3>
<PRE>
public int <B>getSize</B>()</PRE>
<DL>
<DD>Returns the number of Ids currently stored in the catalog
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../rice/persistence/Catalog.html#getSize()">getSize</A></CODE> in interface <CODE><A HREF="../../rice/persistence/Catalog.html" title="interface in rice.persistence">Catalog</A></CODE></DL>
</DD>
<DD><DL>
<DT><B>Returns:</B><DD>The number of ids in the catalog</DL>
</DD>
</DL>
<HR>
<A NAME="flush(rice.Continuation)"><!-- --></A><H3>
flush</H3>
<PRE>
public void <B>flush</B>(<A HREF="../../rice/Continuation.html" title="interface in rice">Continuation</A>&nbsp;c)</PRE>
<DL>
<DD>Method which is used to erase all data stored in the Catalog.
Use this method with care!
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../rice/persistence/Catalog.html#flush(rice.Continuation)">flush</A></CODE> in interface <CODE><A HREF="../../rice/persistence/Catalog.html" title="interface in rice.persistence">Catalog</A></CODE></DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>c</CODE> - The command to run once done</DL>
</DD>
</DL>
<HR>
<A NAME="writeDirty()"><!-- --></A><H3>
writeDirty</H3>
<PRE>
protected void <B>writeDirty</B>()</PRE>
<DL>
<DD>Function which writes out all of the dirty metadata files and marks
them as clean.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
</DL>
</DD>
</DL>
<HR>
<A NAME="getRangeForDirectory(java.io.File)"><!-- --></A><H3>
getRangeForDirectory</H3>
<PRE>
protected <A HREF="../../rice/p2p/commonapi/IdRange.html" title="interface in rice.p2p.commonapi">IdRange</A> <B>getRangeForDirectory</B>(java.io.File&nbsp;dir)</PRE>
<DL>
<DD>Utility function which returns the range of keys which a directory
corresponds to.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>dir</CODE> - The directory</DL>
</DD>
</DL>
<HR>
<A NAME="setRoot(java.lang.String)"><!-- --></A><H3>
setRoot</H3>
<PRE>
public boolean <B>setRoot</B>(java.lang.String&nbsp;dir)</PRE>
<DL>
<DD>Sets the root directory that the persistence Manager uses
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>dir</CODE> - the String representing the directory to use
<DT><B>Returns:</B><DD>boolean, true if the operation succeeds false if it doesn't</DL>
</DD>
</DL>
<HR>
<A NAME="getRoot()"><!-- --></A><H3>
getRoot</H3>
<PRE>
public java.lang.String <B>getRoot</B>()</PRE>
<DL>
<DD>gets the root directory that the persistence Manager uses
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Returns:</B><DD>String the directory for the root</DL>
</DD>
</DL>
<HR>
<A NAME="getStorageSize()"><!-- --></A><H3>
getStorageSize</H3>
<PRE>
public long <B>getStorageSize</B>()</PRE>
<DL>
<DD>gets the amount of storage that the persistence Manager uses
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Returns:</B><DD>int the amount of storage in bytes allocated for use</DL>
</DD>
</DL>
<HR>
<A NAME="setStorageSize(long)"><!-- --></A><H3>
setStorageSize</H3>
<PRE>
public boolean <B>setStorageSize</B>(long&nbsp;size)</PRE>
<DL>
<DD>Sets the amount of storage that the persistence Manager uses
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>size</CODE> - the amount of storage available to use in bytes
<DT><B>Returns:</B><DD>boolean, true if the operation succeeds false if it doesn't</DL>
</DD>
</DL>
<HR>
<A NAME="getName()"><!-- --></A><H3>
getName</H3>
<PRE>
public java.lang.String <B>getName</B>()</PRE>
<DL>
<DD>Gets the name of this instance
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Returns:</B><DD>String the name of the instance</DL>
</DD>
</DL>
<!-- ========= END OF CLASS DATA ========= -->
<HR>
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/PersistentStorage.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
</TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
Rice Pastry API</EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../rice/persistence/MemoryStorage.html" title="class in rice.persistence"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../rice/persistence/Storage.html" title="interface in rice.persistence"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
<A HREF="../../index.html?rice/persistence/PersistentStorage.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="PersistentStorage.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
if(window==top) {
document.writeln('<A HREF="../../allclasses-noframe.html"><B>All Classes</B></A>');
}
//-->
</SCRIPT>
<NOSCRIPT>
<A HREF="../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
<i>Copyright &#169; 2001-2005 - Rice Pastry.</i>
</BODY>
</HTML>