cassandra-server
Version:
A thin Javascript wrapper around Apache Cassandra to provide out of the box server support
345 lines (342 loc) • 13.5 kB
HTML
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (version 1.7.0_67) on Sun Sep 07 15:29:32 CEST 2014 -->
<title>PendingRangeCalculatorService (apache-cassandra API)</title>
<meta name="date" content="2014-09-07">
<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
</head>
<body>
<script type="text/javascript"><!--
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="PendingRangeCalculatorService (apache-cassandra API)";
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar_top">
<!-- -->
</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/PendingRangeCalculatorService.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../index-all.html">Index</a></li>
<li><a href="../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../org/apache/cassandra/service/NativeAccessMBean.html" title="interface in org.apache.cassandra.service"><span class="strong">Prev Class</span></a></li>
<li><a href="../../../../org/apache/cassandra/service/QueryState.html" title="class in org.apache.cassandra.service"><span class="strong">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../index.html?org/apache/cassandra/service/PendingRangeCalculatorService.html" target="_top">Frames</a></li>
<li><a href="PendingRangeCalculatorService.html" target="_top">No Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary: </li>
<li>Nested | </li>
<li><a href="#field_summary">Field</a> | </li>
<li><a href="#constructor_summary">Constr</a> | </li>
<li><a href="#method_summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail: </li>
<li><a href="#field_detail">Field</a> | </li>
<li><a href="#constructor_detail">Constr</a> | </li>
<li><a href="#method_detail">Method</a></li>
</ul>
</div>
<a name="skip-navbar_top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">org.apache.cassandra.service</div>
<h2 title="Class PendingRangeCalculatorService" class="title">Class PendingRangeCalculatorService</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
<li>org.apache.cassandra.service.PendingRangeCalculatorService</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<hr>
<br>
<pre>public class <span class="strong">PendingRangeCalculatorService</span>
extends java.lang.Object</pre>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- =========== FIELD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="field_summary">
<!-- -->
</a>
<h3>Field Summary</h3>
<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
<caption><span>Fields</span><span class="tabEnd"> </span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Field and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static <a href="../../../../org/apache/cassandra/service/PendingRangeCalculatorService.html" title="class in org.apache.cassandra.service">PendingRangeCalculatorService</a></code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/cassandra/service/PendingRangeCalculatorService.html#instance">instance</a></strong></code> </td>
</tr>
</table>
</li>
</ul>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor_summary">
<!-- -->
</a>
<h3>Constructor Summary</h3>
<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
<caption><span>Constructors</span><span class="tabEnd"> </span></caption>
<tr>
<th class="colOne" scope="col">Constructor and Description</th>
</tr>
<tr class="altColor">
<td class="colOne"><code><strong><a href="../../../../org/apache/cassandra/service/PendingRangeCalculatorService.html#PendingRangeCalculatorService()">PendingRangeCalculatorService</a></strong>()</code> </td>
</tr>
</table>
</li>
</ul>
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method_summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span>Methods</span><span class="tabEnd"> </span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/cassandra/service/PendingRangeCalculatorService.html#blockUntilFinished()">blockUntilFinished</a></strong>()</code> </td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static void</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/cassandra/service/PendingRangeCalculatorService.html#calculatePendingRanges(org.apache.cassandra.locator.AbstractReplicationStrategy,%20java.lang.String)">calculatePendingRanges</a></strong>(<a href="../../../../org/apache/cassandra/locator/AbstractReplicationStrategy.html" title="class in org.apache.cassandra.locator">AbstractReplicationStrategy</a> strategy,
java.lang.String keyspaceName)</code>
<div class="block">Calculate pending ranges according to bootsrapping and leaving nodes.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>java.util.concurrent.Future<?></code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/cassandra/service/PendingRangeCalculatorService.html#update()">update</a></strong>()</code> </td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
<!-- -->
</a>
<h3>Methods inherited from class java.lang.Object</h3>
<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ FIELD DETAIL =========== -->
<ul class="blockList">
<li class="blockList"><a name="field_detail">
<!-- -->
</a>
<h3>Field Detail</h3>
<a name="instance">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>instance</h4>
<pre>public static final <a href="../../../../org/apache/cassandra/service/PendingRangeCalculatorService.html" title="class in org.apache.cassandra.service">PendingRangeCalculatorService</a> instance</pre>
</li>
</ul>
</li>
</ul>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor_detail">
<!-- -->
</a>
<h3>Constructor Detail</h3>
<a name="PendingRangeCalculatorService()">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>PendingRangeCalculatorService</h4>
<pre>public PendingRangeCalculatorService()</pre>
</li>
</ul>
</li>
</ul>
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method_detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a name="update()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>update</h4>
<pre>public java.util.concurrent.Future<?> update()</pre>
</li>
</ul>
<a name="blockUntilFinished()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>blockUntilFinished</h4>
<pre>public void blockUntilFinished()</pre>
</li>
</ul>
<a name="calculatePendingRanges(org.apache.cassandra.locator.AbstractReplicationStrategy, java.lang.String)">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>calculatePendingRanges</h4>
<pre>public static void calculatePendingRanges(<a href="../../../../org/apache/cassandra/locator/AbstractReplicationStrategy.html" title="class in org.apache.cassandra.locator">AbstractReplicationStrategy</a> strategy,
java.lang.String keyspaceName)</pre>
<div class="block">Calculate pending ranges according to bootsrapping and leaving nodes. Reasoning is:
(1) When in doubt, it is better to write too much to a node than too little. That is, if
there are multiple nodes moving, calculate the biggest ranges a node could have. Cleaning
up unneeded data afterwards is better than missing writes during movement.
(2) When a node leaves, ranges for other nodes can only grow (a node might get additional
ranges, but it will not lose any of its current ranges as a result of a leave). Therefore
we will first remove _all_ leaving tokens for the sake of calculation and then check what
ranges would go where if all nodes are to leave. This way we get the biggest possible
ranges with regard current leave operations, covering all subsets of possible final range
values.
(3) When a node bootstraps, ranges of other nodes can only get smaller. Without doing
complex calculations to see if multiple bootstraps overlap, we simply base calculations
on the same token ring used before (reflecting situation after all leave operations have
completed). Bootstrapping nodes will be added and removed one by one to that metadata and
checked what their ranges would be. This will give us the biggest possible ranges the
node could have. It might be that other bootstraps make our actual final ranges smaller,
but it does not matter as we can clean up the data afterwards.
NOTE: This is heavy and ineffective operation. This will be done only once when a node
changes state in the cluster, so it should be manageable.</div>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar_bottom">
<!-- -->
</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/PendingRangeCalculatorService.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../index-all.html">Index</a></li>
<li><a href="../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../org/apache/cassandra/service/NativeAccessMBean.html" title="interface in org.apache.cassandra.service"><span class="strong">Prev Class</span></a></li>
<li><a href="../../../../org/apache/cassandra/service/QueryState.html" title="class in org.apache.cassandra.service"><span class="strong">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../index.html?org/apache/cassandra/service/PendingRangeCalculatorService.html" target="_top">Frames</a></li>
<li><a href="PendingRangeCalculatorService.html" target="_top">No Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary: </li>
<li>Nested | </li>
<li><a href="#field_summary">Field</a> | </li>
<li><a href="#constructor_summary">Constr</a> | </li>
<li><a href="#method_summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail: </li>
<li><a href="#field_detail">Field</a> | </li>
<li><a href="#constructor_detail">Constr</a> | </li>
<li><a href="#method_detail">Method</a></li>
</ul>
</div>
<a name="skip-navbar_bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<p class="legalCopy"><small>Copyright © 2014 The Apache Software Foundation</small></p>
</body>
</html>