FreePastry/docs/javadoc/rice/p2p/splitstream/SplitStreamScribePolicy.html

734 lines
40 KiB
HTML
Raw Normal View History

2019-05-13 16:45:05 +04:00
<!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:00 CET 2009 -->
<TITLE>
SplitStreamScribePolicy (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="SplitStreamScribePolicy (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/SplitStreamScribePolicy.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/p2p/splitstream/SplitStreamImpl.html" title="class in rice.p2p.splitstream"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../rice/p2p/splitstream/SplitStreamScribePolicyFactory.html" title="interface in rice.p2p.splitstream"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
<A HREF="../../../index.html?rice/p2p/splitstream/SplitStreamScribePolicy.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="SplitStreamScribePolicy.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.p2p.splitstream</FONT>
<BR>
Class SplitStreamScribePolicy</H2>
<PRE>
java.lang.Object
<IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../rice/p2p/scribe/ScribePolicy.DefaultScribePolicy.html" title="class in rice.p2p.scribe">rice.p2p.scribe.ScribePolicy.DefaultScribePolicy</A>
<IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>rice.p2p.splitstream.SplitStreamScribePolicy</B>
</PRE>
<DL>
<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../rice/p2p/scribe/ScribePolicy.html" title="interface in rice.p2p.scribe">ScribePolicy</A></DD>
</DL>
<HR>
<DL>
<DT><PRE>public class <B>SplitStreamScribePolicy</B><DT>extends <A HREF="../../../rice/p2p/scribe/ScribePolicy.DefaultScribePolicy.html" title="class in rice.p2p.scribe">ScribePolicy.DefaultScribePolicy</A></DL>
</PRE>
<P>
This class represents SplitStream's policy for Scribe, which only allows children
according to the bandwidth manager and makes anycasts first traverse all nodes
who have the stripe in question as their primary stripe, and then the nodes
who do not.
<P>
<P>
<DL>
<DT><B>Version:</B></DT>
<DD>$Id: SplitStreamScribePolicy.java 4654 2009-01-08 16:33:07Z jeffh $</DD>
<DT><B>Author:</B></DT>
<DD>Alan Mislove, Atul Singh</DD>
</DL>
<HR>
<P>
<!-- ======== NESTED CLASS SUMMARY ======== -->
<A NAME="nested_class_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>Nested Class Summary</B></FONT></TH>
</TR>
</TABLE>
&nbsp;<A NAME="nested_classes_inherited_from_class_rice.p2p.scribe.ScribePolicy"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Nested classes/interfaces inherited from interface rice.p2p.scribe.<A HREF="../../../rice/p2p/scribe/ScribePolicy.html" title="interface in rice.p2p.scribe">ScribePolicy</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><A HREF="../../../rice/p2p/scribe/ScribePolicy.DefaultScribePolicy.html" title="class in rice.p2p.scribe">ScribePolicy.DefaultScribePolicy</A>, <A HREF="../../../rice/p2p/scribe/ScribePolicy.LimitedScribePolicy.html" title="class in rice.p2p.scribe">ScribePolicy.LimitedScribePolicy</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<!-- =========== 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>&nbsp;int</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../rice/p2p/splitstream/SplitStreamScribePolicy.html#DEFAULT_MAXIMUM_CHILDREN">DEFAULT_MAXIMUM_CHILDREN</A></B></CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The default maximum number of children per channel</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;java.util.Hashtable&lt;<A HREF="../../../rice/p2p/splitstream/ChannelId.html" title="class in rice.p2p.splitstream">ChannelId</A>,java.lang.Integer&gt;</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../rice/p2p/splitstream/SplitStreamScribePolicy.html#policy">policy</A></B></CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A mapping from channelId -> maximum children</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;<A HREF="../../../rice/p2p/scribe/Scribe.html" title="interface in rice.p2p.scribe">Scribe</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../rice/p2p/splitstream/SplitStreamScribePolicy.html#scribe">scribe</A></B></CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A reference to this policy's scribe object</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;<A HREF="../../../rice/p2p/splitstream/SplitStream.html" title="interface in rice.p2p.splitstream">SplitStream</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../rice/p2p/splitstream/SplitStreamScribePolicy.html#splitStream">splitStream</A></B></CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A reference to this policy's splitstream object</TD>
</TR>
</TABLE>
&nbsp;<A NAME="fields_inherited_from_class_rice.p2p.scribe.ScribePolicy.DefaultScribePolicy"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Fields inherited from class rice.p2p.scribe.<A HREF="../../../rice/p2p/scribe/ScribePolicy.DefaultScribePolicy.html" title="class in rice.p2p.scribe">ScribePolicy.DefaultScribePolicy</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><A HREF="../../../rice/p2p/scribe/ScribePolicy.DefaultScribePolicy.html#environment">environment</A></CODE></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/p2p/splitstream/SplitStreamScribePolicy.html#SplitStreamScribePolicy(rice.p2p.scribe.Scribe, rice.p2p.splitstream.SplitStream)">SplitStreamScribePolicy</A></B>(<A HREF="../../../rice/p2p/scribe/Scribe.html" title="interface in rice.p2p.scribe">Scribe</A>&nbsp;scribe,
<A HREF="../../../rice/p2p/splitstream/SplitStream.html" title="interface in rice.p2p.splitstream">SplitStream</A>&nbsp;splitStream)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructor which takes a splitStream object</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/p2p/splitstream/SplitStreamScribePolicy.html#allowSubscribe(rice.p2p.scribe.messaging.SubscribeMessage, rice.p2p.scribe.ScribeClient[], rice.p2p.commonapi.NodeHandle[])">allowSubscribe</A></B>(<A HREF="../../../rice/p2p/scribe/messaging/SubscribeMessage.html" title="class in rice.p2p.scribe.messaging">SubscribeMessage</A>&nbsp;message,
<A HREF="../../../rice/p2p/scribe/ScribeClient.html" title="interface in rice.p2p.scribe">ScribeClient</A>[]&nbsp;clients,
<A HREF="../../../rice/p2p/commonapi/NodeHandle.html" title="class in rice.p2p.commonapi">NodeHandle</A>[]&nbsp;children)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This method implements the "locating parent" algorithm of SplitStream.</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/p2p/splitstream/SplitStreamScribePolicy.html#childAdded(rice.p2p.scribe.Topic, rice.p2p.commonapi.NodeHandle)">childAdded</A></B>(<A HREF="../../../rice/p2p/scribe/Topic.html" title="class in rice.p2p.scribe">Topic</A>&nbsp;topic,
<A HREF="../../../rice/p2p/commonapi/NodeHandle.html" title="class in rice.p2p.commonapi">NodeHandle</A>&nbsp;child)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Informs this policy that a child was added to a topic - the topic is free to ignore this
upcall if it doesn't care.</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/p2p/splitstream/SplitStreamScribePolicy.html#childRemoved(rice.p2p.scribe.Topic, rice.p2p.commonapi.NodeHandle)">childRemoved</A></B>(<A HREF="../../../rice/p2p/scribe/Topic.html" title="class in rice.p2p.scribe">Topic</A>&nbsp;topic,
<A HREF="../../../rice/p2p/commonapi/NodeHandle.html" title="class in rice.p2p.commonapi">NodeHandle</A>&nbsp;child)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Informs this policy that a child was removed from a topic - the topic is free to ignore this
upcall if it doesn't care.</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/p2p/splitstream/SplitStreamScribePolicy.html#directAnycast(rice.p2p.scribe.messaging.AnycastMessage, rice.p2p.commonapi.NodeHandle, java.util.Collection)">directAnycast</A></B>(<A HREF="../../../rice/p2p/scribe/messaging/AnycastMessage.html" title="class in rice.p2p.scribe.messaging">AnycastMessage</A>&nbsp;message,
<A HREF="../../../rice/p2p/commonapi/NodeHandle.html" title="class in rice.p2p.commonapi">NodeHandle</A>&nbsp;parent,
java.util.Collection&lt;<A HREF="../../../rice/p2p/commonapi/NodeHandle.html" title="class in rice.p2p.commonapi">NodeHandle</A>&gt;&nbsp;children)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This method adds the parent and child in such a way that the nodes who have this stripe as
their primary strpe are examined first.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../rice/p2p/commonapi/NodeHandle.html" title="class in rice.p2p.commonapi">NodeHandle</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../rice/p2p/splitstream/SplitStreamScribePolicy.html#freeBandwidth(rice.p2p.splitstream.Channel, rice.p2p.commonapi.NodeHandle, rice.p2p.commonapi.Id)">freeBandwidth</A></B>(<A HREF="../../../rice/p2p/splitstream/Channel.html" title="class in rice.p2p.splitstream">Channel</A>&nbsp;channel,
<A HREF="../../../rice/p2p/commonapi/NodeHandle.html" title="class in rice.p2p.commonapi">NodeHandle</A>&nbsp;newChild,
<A HREF="../../../rice/p2p/commonapi/Id.html" title="interface in rice.p2p.commonapi">Id</A>&nbsp;stripeId)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This method attempts to free bandwidth from our primary stripe.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;java.util.Vector</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../rice/p2p/splitstream/SplitStreamScribePolicy.html#freeBandwidthUltimate(rice.p2p.commonapi.Id)">freeBandwidthUltimate</A></B>(<A HREF="../../../rice/p2p/commonapi/Id.html" title="interface in rice.p2p.commonapi">Id</A>&nbsp;stripeId)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This method makes an attempt to free up bandwidth
from non-primary, non-root stripes (for which local node is not root).</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/p2p/splitstream/SplitStreamScribePolicy.html#getMaxChildren(rice.p2p.splitstream.ChannelId)">getMaxChildren</A></B>(<A HREF="../../../rice/p2p/splitstream/ChannelId.html" title="class in rice.p2p.splitstream">ChannelId</A>&nbsp;id)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gets the max bandwidth for a channel.</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/p2p/splitstream/SplitStreamScribePolicy.html#getPrefixMatch(rice.p2p.commonapi.Id, rice.p2p.commonapi.Id, int)">getPrefixMatch</A></B>(<A HREF="../../../rice/p2p/commonapi/Id.html" title="interface in rice.p2p.commonapi">Id</A>&nbsp;target,
<A HREF="../../../rice/p2p/commonapi/Id.html" title="interface in rice.p2p.commonapi">Id</A>&nbsp;sample,
int&nbsp;digitLength)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Helper method for finding prefix match between two Ids.</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/p2p/splitstream/SplitStreamScribePolicy.html#getTotalChildren(rice.p2p.splitstream.Channel)">getTotalChildren</A></B>(<A HREF="../../../rice/p2p/splitstream/Channel.html" title="class in rice.p2p.splitstream">Channel</A>&nbsp;channel)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the total number of children for the given channel</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/p2p/splitstream/SplitStreamScribePolicy.html#intermediateNode(rice.p2p.scribe.messaging.ScribeMessage)">intermediateNode</A></B>(<A HREF="../../../rice/p2p/scribe/messaging/ScribeMessage.html" title="class in rice.p2p.scribe.messaging">ScribeMessage</A>&nbsp;message)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This is invoked whenever this message arrives on any overlay node, this gives the ScribeClient's power
to tap into some datastructures they might wanna edit</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/p2p/splitstream/SplitStreamScribePolicy.html#recvAnycastFail(rice.p2p.scribe.Topic, rice.p2p.commonapi.NodeHandle, rice.p2p.scribe.ScribeContent)">recvAnycastFail</A></B>(<A HREF="../../../rice/p2p/scribe/Topic.html" title="class in rice.p2p.scribe">Topic</A>&nbsp;topic,
<A HREF="../../../rice/p2p/commonapi/NodeHandle.html" title="class in rice.p2p.commonapi">NodeHandle</A>&nbsp;failedAtNode,
<A HREF="../../../rice/p2p/scribe/ScribeContent.html" title="interface in rice.p2p.scribe">ScribeContent</A>&nbsp;content)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This notifies us when we receive a failure for a anycast</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/p2p/splitstream/SplitStreamScribePolicy.html#setMaxChildren(rice.p2p.splitstream.ChannelId, int)">setMaxChildren</A></B>(<A HREF="../../../rice/p2p/splitstream/ChannelId.html" title="class in rice.p2p.splitstream">ChannelId</A>&nbsp;id,
int&nbsp;children)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adjust the max bandwidth for this channel.</TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_rice.p2p.scribe.ScribePolicy.DefaultScribePolicy"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Methods inherited from class rice.p2p.scribe.<A HREF="../../../rice/p2p/scribe/ScribePolicy.DefaultScribePolicy.html" title="class in rice.p2p.scribe">ScribePolicy.DefaultScribePolicy</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><A HREF="../../../rice/p2p/scribe/ScribePolicy.DefaultScribePolicy.html#allowSubscribe(rice.p2p.scribe.Scribe, rice.p2p.commonapi.NodeHandle, java.util.List, rice.p2p.scribe.ScribeContent)">allowSubscribe</A>, <A HREF="../../../rice/p2p/scribe/ScribePolicy.DefaultScribePolicy.html#divideContent(java.util.List, rice.p2p.scribe.ScribeContent)">divideContent</A></CODE></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="DEFAULT_MAXIMUM_CHILDREN"><!-- --></A><H3>
DEFAULT_MAXIMUM_CHILDREN</H3>
<PRE>
public final int <B>DEFAULT_MAXIMUM_CHILDREN</B></PRE>
<DL>
<DD>The default maximum number of children per channel
<P>
<DL>
</DL>
</DL>
<HR>
<A NAME="splitStream"><!-- --></A><H3>
splitStream</H3>
<PRE>
protected <A HREF="../../../rice/p2p/splitstream/SplitStream.html" title="interface in rice.p2p.splitstream">SplitStream</A> <B>splitStream</B></PRE>
<DL>
<DD>A reference to this policy's splitstream object
<P>
<DL>
</DL>
</DL>
<HR>
<A NAME="scribe"><!-- --></A><H3>
scribe</H3>
<PRE>
protected <A HREF="../../../rice/p2p/scribe/Scribe.html" title="interface in rice.p2p.scribe">Scribe</A> <B>scribe</B></PRE>
<DL>
<DD>A reference to this policy's scribe object
<P>
<DL>
</DL>
</DL>
<HR>
<A NAME="policy"><!-- --></A><H3>
policy</H3>
<PRE>
protected java.util.Hashtable&lt;<A HREF="../../../rice/p2p/splitstream/ChannelId.html" title="class in rice.p2p.splitstream">ChannelId</A>,java.lang.Integer&gt; <B>policy</B></PRE>
<DL>
<DD>A mapping from channelId -> maximum children
<P>
<DL>
</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="SplitStreamScribePolicy(rice.p2p.scribe.Scribe, rice.p2p.splitstream.SplitStream)"><!-- --></A><H3>
SplitStreamScribePolicy</H3>
<PRE>
public <B>SplitStreamScribePolicy</B>(<A HREF="../../../rice/p2p/scribe/Scribe.html" title="interface in rice.p2p.scribe">Scribe</A>&nbsp;scribe,
<A HREF="../../../rice/p2p/splitstream/SplitStream.html" title="interface in rice.p2p.splitstream">SplitStream</A>&nbsp;splitStream)</PRE>
<DL>
<DD>Constructor which takes a splitStream object
<P>
<DL>
<DT><B>Parameters:</B><DD><CODE>splitStream</CODE> - The local splitstream</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="getMaxChildren(rice.p2p.splitstream.ChannelId)"><!-- --></A><H3>
getMaxChildren</H3>
<PRE>
public int <B>getMaxChildren</B>(<A HREF="../../../rice/p2p/splitstream/ChannelId.html" title="class in rice.p2p.splitstream">ChannelId</A>&nbsp;id)</PRE>
<DL>
<DD>Gets the max bandwidth for a channel.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>id</CODE> - The id to get the max bandwidth of
<DT><B>Returns:</B><DD>The amount of bandwidth used</DL>
</DD>
</DL>
<HR>
<A NAME="setMaxChildren(rice.p2p.splitstream.ChannelId, int)"><!-- --></A><H3>
setMaxChildren</H3>
<PRE>
public void <B>setMaxChildren</B>(<A HREF="../../../rice/p2p/splitstream/ChannelId.html" title="class in rice.p2p.splitstream">ChannelId</A>&nbsp;id,
int&nbsp;children)</PRE>
<DL>
<DD>Adjust the max bandwidth for this channel.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>id</CODE> - The id to get the max bandwidth of<DD><CODE>children</CODE> - The new maximum bandwidth for this channel</DL>
</DD>
</DL>
<HR>
<A NAME="allowSubscribe(rice.p2p.scribe.messaging.SubscribeMessage, rice.p2p.scribe.ScribeClient[], rice.p2p.commonapi.NodeHandle[])"><!-- --></A><H3>
allowSubscribe</H3>
<PRE>
public boolean <B>allowSubscribe</B>(<A HREF="../../../rice/p2p/scribe/messaging/SubscribeMessage.html" title="class in rice.p2p.scribe.messaging">SubscribeMessage</A>&nbsp;message,
<A HREF="../../../rice/p2p/scribe/ScribeClient.html" title="interface in rice.p2p.scribe">ScribeClient</A>[]&nbsp;clients,
<A HREF="../../../rice/p2p/commonapi/NodeHandle.html" title="class in rice.p2p.commonapi">NodeHandle</A>[]&nbsp;children)</PRE>
<DL>
<DD>This method implements the "locating parent" algorithm of SplitStream. Whenever a node receives
subscription request, it executes following algorithm :
1) Checks if it has available capacity,
if yes, take it
if no, go to step 2
2) If subscription is for primary stripe,
if no, dont take it, return false
if yes, need to drop someone
first check if our children list for this topic is non-zero
if yes, find a child which shares less prefix match than the new subscriber
if found one, send it a drop message and accept newe subscriber, return true
if no, dont accept the new subscriber, return false
if no, look for children in other stripes which we can drop
we select a stripe such that it is not
a) primary stripe
b) we are not the root for the stripe (may happen in very small networks)
c) we have non-zero children for this stripe
if found such a stripe, we drop a random child from that stripe and accept the new
subscriber, return true.
3) Checks if one of our child for a stripe sent us a request message for dropping it and taking
the new subscriber (STAGE_3), then we drop the child and return true to accept the subscriber.
<P>
<DD><DL>
<DT><B>Overrides:</B><DD><CODE><A HREF="../../../rice/p2p/scribe/ScribePolicy.DefaultScribePolicy.html#allowSubscribe(rice.p2p.scribe.messaging.SubscribeMessage, rice.p2p.scribe.ScribeClient[], rice.p2p.commonapi.NodeHandle[])">allowSubscribe</A></CODE> in class <CODE><A HREF="../../../rice/p2p/scribe/ScribePolicy.DefaultScribePolicy.html" title="class in rice.p2p.scribe">ScribePolicy.DefaultScribePolicy</A></CODE></DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>message</CODE> - The subscribe message in question<DD><CODE>children</CODE> - The list of children who are currently subscribed to this topic<DD><CODE>clients</CODE> - The list of clients are are currently subscribed to this topic
<DT><B>Returns:</B><DD>Whether or not this child should be allowed add.</DL>
</DD>
</DL>
<HR>
<A NAME="directAnycast(rice.p2p.scribe.messaging.AnycastMessage, rice.p2p.commonapi.NodeHandle, java.util.Collection)"><!-- --></A><H3>
directAnycast</H3>
<PRE>
public void <B>directAnycast</B>(<A HREF="../../../rice/p2p/scribe/messaging/AnycastMessage.html" title="class in rice.p2p.scribe.messaging">AnycastMessage</A>&nbsp;message,
<A HREF="../../../rice/p2p/commonapi/NodeHandle.html" title="class in rice.p2p.commonapi">NodeHandle</A>&nbsp;parent,
java.util.Collection&lt;<A HREF="../../../rice/p2p/commonapi/NodeHandle.html" title="class in rice.p2p.commonapi">NodeHandle</A>&gt;&nbsp;children)</PRE>
<DL>
<DD>This method adds the parent and child in such a way that the nodes who have this stripe as
their primary strpe are examined first.
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../../rice/p2p/scribe/ScribePolicy.html#directAnycast(rice.p2p.scribe.messaging.AnycastMessage, rice.p2p.commonapi.NodeHandle, java.util.Collection)">directAnycast</A></CODE> in interface <CODE><A HREF="../../../rice/p2p/scribe/ScribePolicy.html" title="interface in rice.p2p.scribe">ScribePolicy</A></CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../rice/p2p/scribe/ScribePolicy.DefaultScribePolicy.html#directAnycast(rice.p2p.scribe.messaging.AnycastMessage, rice.p2p.commonapi.NodeHandle, java.util.Collection)">directAnycast</A></CODE> in class <CODE><A HREF="../../../rice/p2p/scribe/ScribePolicy.DefaultScribePolicy.html" title="class in rice.p2p.scribe">ScribePolicy.DefaultScribePolicy</A></CODE></DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>message</CODE> - The anycast message in question<DD><CODE>parent</CODE> - Our current parent for this message's topic<DD><CODE>children</CODE> - Our current children for this message's topic</DL>
</DD>
</DL>
<HR>
<A NAME="getTotalChildren(rice.p2p.splitstream.Channel)"><!-- --></A><H3>
getTotalChildren</H3>
<PRE>
public int <B>getTotalChildren</B>(<A HREF="../../../rice/p2p/splitstream/Channel.html" title="class in rice.p2p.splitstream">Channel</A>&nbsp;channel)</PRE>
<DL>
<DD>Returns the total number of children for the given channel
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>channel</CODE> - The channel to get the children for
<DT><B>Returns:</B><DD>The total number of children for that channel</DL>
</DD>
</DL>
<HR>
<A NAME="freeBandwidthUltimate(rice.p2p.commonapi.Id)"><!-- --></A><H3>
freeBandwidthUltimate</H3>
<PRE>
public java.util.Vector <B>freeBandwidthUltimate</B>(<A HREF="../../../rice/p2p/commonapi/Id.html" title="interface in rice.p2p.commonapi">Id</A>&nbsp;stripeId)</PRE>
<DL>
<DD>This method makes an attempt to free up bandwidth
from non-primary, non-root stripes (for which local node is not root).
<P>
<DD><DL>
<DT><B>Returns:</B><DD>A vector containing the child to be dropped and
the corresponding stripeId</DL>
</DD>
</DL>
<HR>
<A NAME="freeBandwidth(rice.p2p.splitstream.Channel, rice.p2p.commonapi.NodeHandle, rice.p2p.commonapi.Id)"><!-- --></A><H3>
freeBandwidth</H3>
<PRE>
public <A HREF="../../../rice/p2p/commonapi/NodeHandle.html" title="class in rice.p2p.commonapi">NodeHandle</A> <B>freeBandwidth</B>(<A HREF="../../../rice/p2p/splitstream/Channel.html" title="class in rice.p2p.splitstream">Channel</A>&nbsp;channel,
<A HREF="../../../rice/p2p/commonapi/NodeHandle.html" title="class in rice.p2p.commonapi">NodeHandle</A>&nbsp;newChild,
<A HREF="../../../rice/p2p/commonapi/Id.html" title="interface in rice.p2p.commonapi">Id</A>&nbsp;stripeId)</PRE>
<DL>
<DD>This method attempts to free bandwidth from our primary stripe.
It selects a child whose prefix match with the stripe is minimum, and drops it.
If multiple such child exist and newChild has same prefix match as them, then
new child is not taken, otherwise a random selection is made.
Otherwise, new child is taken and victim child is dropped.
<P>
<DD><DL>
<DT><B>Returns:</B><DD>The victim child to drop.</DL>
</DD>
</DL>
<HR>
<A NAME="getPrefixMatch(rice.p2p.commonapi.Id, rice.p2p.commonapi.Id, int)"><!-- --></A><H3>
getPrefixMatch</H3>
<PRE>
public static int <B>getPrefixMatch</B>(<A HREF="../../../rice/p2p/commonapi/Id.html" title="interface in rice.p2p.commonapi">Id</A>&nbsp;target,
<A HREF="../../../rice/p2p/commonapi/Id.html" title="interface in rice.p2p.commonapi">Id</A>&nbsp;sample,
int&nbsp;digitLength)</PRE>
<DL>
<DD>Helper method for finding prefix match between two Ids.
<P>
<DD><DL>
<DT><B>Returns:</B><DD>The number of most significant digits that match.</DL>
</DD>
</DL>
<HR>
<A NAME="childAdded(rice.p2p.scribe.Topic, rice.p2p.commonapi.NodeHandle)"><!-- --></A><H3>
childAdded</H3>
<PRE>
public void <B>childAdded</B>(<A HREF="../../../rice/p2p/scribe/Topic.html" title="class in rice.p2p.scribe">Topic</A>&nbsp;topic,
<A HREF="../../../rice/p2p/commonapi/NodeHandle.html" title="class in rice.p2p.commonapi">NodeHandle</A>&nbsp;child)</PRE>
<DL>
<DD>Informs this policy that a child was added to a topic - the topic is free to ignore this
upcall if it doesn't care.
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../../rice/p2p/scribe/ScribePolicy.html#childAdded(rice.p2p.scribe.Topic, rice.p2p.commonapi.NodeHandle)">childAdded</A></CODE> in interface <CODE><A HREF="../../../rice/p2p/scribe/ScribePolicy.html" title="interface in rice.p2p.scribe">ScribePolicy</A></CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../rice/p2p/scribe/ScribePolicy.DefaultScribePolicy.html#childAdded(rice.p2p.scribe.Topic, rice.p2p.commonapi.NodeHandle)">childAdded</A></CODE> in class <CODE><A HREF="../../../rice/p2p/scribe/ScribePolicy.DefaultScribePolicy.html" title="class in rice.p2p.scribe">ScribePolicy.DefaultScribePolicy</A></CODE></DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>topic</CODE> - The topic to unsubscribe from<DD><CODE>child</CODE> - The child that was added</DL>
</DD>
</DL>
<HR>
<A NAME="childRemoved(rice.p2p.scribe.Topic, rice.p2p.commonapi.NodeHandle)"><!-- --></A><H3>
childRemoved</H3>
<PRE>
public void <B>childRemoved</B>(<A HREF="../../../rice/p2p/scribe/Topic.html" title="class in rice.p2p.scribe">Topic</A>&nbsp;topic,
<A HREF="../../../rice/p2p/commonapi/NodeHandle.html" title="class in rice.p2p.commonapi">NodeHandle</A>&nbsp;child)</PRE>
<DL>
<DD>Informs this policy that a child was removed from a topic - the topic is free to ignore this
upcall if it doesn't care.
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../../rice/p2p/scribe/ScribePolicy.html#childRemoved(rice.p2p.scribe.Topic, rice.p2p.commonapi.NodeHandle)">childRemoved</A></CODE> in interface <CODE><A HREF="../../../rice/p2p/scribe/ScribePolicy.html" title="interface in rice.p2p.scribe">ScribePolicy</A></CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../rice/p2p/scribe/ScribePolicy.DefaultScribePolicy.html#childRemoved(rice.p2p.scribe.Topic, rice.p2p.commonapi.NodeHandle)">childRemoved</A></CODE> in class <CODE><A HREF="../../../rice/p2p/scribe/ScribePolicy.DefaultScribePolicy.html" title="class in rice.p2p.scribe">ScribePolicy.DefaultScribePolicy</A></CODE></DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>topic</CODE> - The topic to unsubscribe from<DD><CODE>child</CODE> - The child that was removed</DL>
</DD>
</DL>
<HR>
<A NAME="intermediateNode(rice.p2p.scribe.messaging.ScribeMessage)"><!-- --></A><H3>
intermediateNode</H3>
<PRE>
public void <B>intermediateNode</B>(<A HREF="../../../rice/p2p/scribe/messaging/ScribeMessage.html" title="class in rice.p2p.scribe.messaging">ScribeMessage</A>&nbsp;message)</PRE>
<DL>
<DD><B>Description copied from interface: <CODE><A HREF="../../../rice/p2p/scribe/ScribePolicy.html#intermediateNode(rice.p2p.scribe.messaging.ScribeMessage)">ScribePolicy</A></CODE></B></DD>
<DD>This is invoked whenever this message arrives on any overlay node, this gives the ScribeClient's power
to tap into some datastructures they might wanna edit
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../../rice/p2p/scribe/ScribePolicy.html#intermediateNode(rice.p2p.scribe.messaging.ScribeMessage)">intermediateNode</A></CODE> in interface <CODE><A HREF="../../../rice/p2p/scribe/ScribePolicy.html" title="interface in rice.p2p.scribe">ScribePolicy</A></CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../rice/p2p/scribe/ScribePolicy.DefaultScribePolicy.html#intermediateNode(rice.p2p.scribe.messaging.ScribeMessage)">intermediateNode</A></CODE> in class <CODE><A HREF="../../../rice/p2p/scribe/ScribePolicy.DefaultScribePolicy.html" title="class in rice.p2p.scribe">ScribePolicy.DefaultScribePolicy</A></CODE></DL>
</DD>
<DD><DL>
</DL>
</DD>
</DL>
<HR>
<A NAME="recvAnycastFail(rice.p2p.scribe.Topic, rice.p2p.commonapi.NodeHandle, rice.p2p.scribe.ScribeContent)"><!-- --></A><H3>
recvAnycastFail</H3>
<PRE>
public void <B>recvAnycastFail</B>(<A HREF="../../../rice/p2p/scribe/Topic.html" title="class in rice.p2p.scribe">Topic</A>&nbsp;topic,
<A HREF="../../../rice/p2p/commonapi/NodeHandle.html" title="class in rice.p2p.commonapi">NodeHandle</A>&nbsp;failedAtNode,
<A HREF="../../../rice/p2p/scribe/ScribeContent.html" title="interface in rice.p2p.scribe">ScribeContent</A>&nbsp;content)</PRE>
<DL>
<DD><B>Description copied from interface: <CODE><A HREF="../../../rice/p2p/scribe/ScribePolicy.html#recvAnycastFail(rice.p2p.scribe.Topic, rice.p2p.commonapi.NodeHandle, rice.p2p.scribe.ScribeContent)">ScribePolicy</A></CODE></B></DD>
<DD>This notifies us when we receive a failure for a anycast
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../../rice/p2p/scribe/ScribePolicy.html#recvAnycastFail(rice.p2p.scribe.Topic, rice.p2p.commonapi.NodeHandle, rice.p2p.scribe.ScribeContent)">recvAnycastFail</A></CODE> in interface <CODE><A HREF="../../../rice/p2p/scribe/ScribePolicy.html" title="interface in rice.p2p.scribe">ScribePolicy</A></CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../rice/p2p/scribe/ScribePolicy.DefaultScribePolicy.html#recvAnycastFail(rice.p2p.scribe.Topic, rice.p2p.commonapi.NodeHandle, rice.p2p.scribe.ScribeContent)">recvAnycastFail</A></CODE> in class <CODE><A HREF="../../../rice/p2p/scribe/ScribePolicy.DefaultScribePolicy.html" title="class in rice.p2p.scribe">ScribePolicy.DefaultScribePolicy</A></CODE></DL>
</DD>
<DD><DL>
</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/SplitStreamScribePolicy.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/p2p/splitstream/SplitStreamImpl.html" title="class in rice.p2p.splitstream"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../rice/p2p/splitstream/SplitStreamScribePolicyFactory.html" title="interface in rice.p2p.splitstream"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
<A HREF="../../../index.html?rice/p2p/splitstream/SplitStreamScribePolicy.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="SplitStreamScribePolicy.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>