hbase-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From bus...@apache.org
Subject [03/51] [partial] hbase git commit: Published site at e73a9594c218ed969a2f5b0b356d7b8d0e1474c0.
Date Thu, 26 Nov 2015 04:29:28 GMT
http://git-wip-us.apache.org/repos/asf/hbase/blob/a986dfe6/xref/org/apache/hadoop/hbase/io/BoundedByteBufferPool.html
----------------------------------------------------------------------
diff --git a/xref/org/apache/hadoop/hbase/io/BoundedByteBufferPool.html b/xref/org/apache/hadoop/hbase/io/BoundedByteBufferPool.html
index a04e86f..e703a52 100644
--- a/xref/org/apache/hadoop/hbase/io/BoundedByteBufferPool.html
+++ b/xref/org/apache/hadoop/hbase/io/BoundedByteBufferPool.html
@@ -86,118 +86,122 @@
 <a class="jxr_linenumber" name="76" href="#76">76</a>    <em class="jxr_comment">//
queued buffers in any transition.</em>
 <a class="jxr_linenumber" name="77" href="#77">77</a>    <strong class="jxr_keyword">private</strong>
<strong class="jxr_keyword">final</strong> AtomicLong stateRef = <strong class="jxr_keyword">new</strong>
AtomicLong();
 <a class="jxr_linenumber" name="78" href="#78">78</a>  
-<a class="jxr_linenumber" name="79" href="#79">79</a>    <strong class="jxr_keyword">private</strong>
<strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">int</strong>
toCountOfBuffers(<strong class="jxr_keyword">long</strong> state) {
-<a class="jxr_linenumber" name="80" href="#80">80</a>      <strong class="jxr_keyword">return</strong>
(<strong class="jxr_keyword">int</strong>)state;
-<a class="jxr_linenumber" name="81" href="#81">81</a>    }
-<a class="jxr_linenumber" name="82" href="#82">82</a>  
-<a class="jxr_linenumber" name="83" href="#83">83</a>    <strong class="jxr_keyword">private</strong>
<strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">int</strong>
toTotalCapacity(<strong class="jxr_keyword">long</strong> state) {
-<a class="jxr_linenumber" name="84" href="#84">84</a>      <strong class="jxr_keyword">return</strong>
(<strong class="jxr_keyword">int</strong>)(state &gt;&gt;&gt; 32);
-<a class="jxr_linenumber" name="85" href="#85">85</a>    }
-<a class="jxr_linenumber" name="86" href="#86">86</a>  
-<a class="jxr_linenumber" name="87" href="#87">87</a>    <strong class="jxr_keyword">private</strong>
<strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">long</strong>
toState(<strong class="jxr_keyword">int</strong> countOfBuffers, <strong class="jxr_keyword">int</strong>
totalCapacity) {
-<a class="jxr_linenumber" name="88" href="#88">88</a>      <strong class="jxr_keyword">return</strong>
((<strong class="jxr_keyword">long</strong>)totalCapacity &lt;&lt; 32)
| totalCapacity;
-<a class="jxr_linenumber" name="89" href="#89">89</a>    }
-<a class="jxr_linenumber" name="90" href="#90">90</a>  
-<a class="jxr_linenumber" name="91" href="#91">91</a>    <strong class="jxr_keyword">private</strong>
<strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">long</strong>
subtractOneBufferFromState(<strong class="jxr_keyword">long</strong> state, <strong
class="jxr_keyword">int</strong> capacity) {
-<a class="jxr_linenumber" name="92" href="#92">92</a>      <strong class="jxr_keyword">return</strong>
state - ((<strong class="jxr_keyword">long</strong>)capacity &lt;&lt;
32) - 1;
-<a class="jxr_linenumber" name="93" href="#93">93</a>    }
-<a class="jxr_linenumber" name="94" href="#94">94</a>  
-<a class="jxr_linenumber" name="95" href="#95">95</a>    <em class="jxr_comment">//
For reporting, only used in the log</em>
-<a class="jxr_linenumber" name="96" href="#96">96</a>    <strong class="jxr_keyword">private</strong>
<strong class="jxr_keyword">final</strong> AtomicLong allocationsRef = <strong
class="jxr_keyword">new</strong> AtomicLong();
-<a class="jxr_linenumber" name="97" href="#97">97</a>  
-<a class="jxr_linenumber" name="98" href="#98">98</a>    <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="99" href="#99">99</a>  <em class="jxr_javadoccomment">
  * @param maxByteBufferSizeToCache</em>
-<a class="jxr_linenumber" name="100" href="#100">100</a> <em class="jxr_javadoccomment">
  * @param initialByteBufferSize</em>
-<a class="jxr_linenumber" name="101" href="#101">101</a> <em class="jxr_javadoccomment">
  * @param maxToCache</em>
-<a class="jxr_linenumber" name="102" href="#102">102</a> <em class="jxr_javadoccomment">
  */</em>
-<a class="jxr_linenumber" name="103" href="#103">103</a>   <strong class="jxr_keyword">public</strong>
<a href="../../../../../org/apache/hadoop/hbase/io/BoundedByteBufferPool.html">BoundedByteBufferPool</a>(<strong
class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong>
maxByteBufferSizeToCache, <strong class="jxr_keyword">final</strong> <strong
class="jxr_keyword">int</strong> initialByteBufferSize,
-<a class="jxr_linenumber" name="104" href="#104">104</a>       <strong class="jxr_keyword">final</strong>
<strong class="jxr_keyword">int</strong> maxToCache) {
-<a class="jxr_linenumber" name="105" href="#105">105</a>     <strong class="jxr_keyword">this</strong>.maxByteBufferSizeToCache
= maxByteBufferSizeToCache;
-<a class="jxr_linenumber" name="106" href="#106">106</a>     <strong class="jxr_keyword">this</strong>.runningAverageRef
= <strong class="jxr_keyword">new</strong> AtomicInteger(initialByteBufferSize);
-<a class="jxr_linenumber" name="107" href="#107">107</a>     <strong class="jxr_keyword">this</strong>.maxToCache
= maxToCache;
-<a class="jxr_linenumber" name="108" href="#108">108</a>   }
-<a class="jxr_linenumber" name="109" href="#109">109</a> 
-<a class="jxr_linenumber" name="110" href="#110">110</a>   <strong class="jxr_keyword">public</strong>
ByteBuffer getBuffer() {
-<a class="jxr_linenumber" name="111" href="#111">111</a>     ByteBuffer bb =
buffers.poll();
-<a class="jxr_linenumber" name="112" href="#112">112</a>     <strong class="jxr_keyword">if</strong>
(bb != <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="113" href="#113">113</a>       <strong class="jxr_keyword">long</strong>
state;
-<a class="jxr_linenumber" name="114" href="#114">114</a>       <strong class="jxr_keyword">while</strong>
(<strong class="jxr_keyword">true</strong>) {
-<a class="jxr_linenumber" name="115" href="#115">115</a>         <strong class="jxr_keyword">long</strong>
prevState = stateRef.get();
-<a class="jxr_linenumber" name="116" href="#116">116</a>         state = subtractOneBufferFromState(prevState,
bb.capacity());
-<a class="jxr_linenumber" name="117" href="#117">117</a>         <strong class="jxr_keyword">if</strong>
(stateRef.compareAndSet(prevState, state)) {
-<a class="jxr_linenumber" name="118" href="#118">118</a>           <strong
class="jxr_keyword">break</strong>;
-<a class="jxr_linenumber" name="119" href="#119">119</a>         }
-<a class="jxr_linenumber" name="120" href="#120">120</a>       }
-<a class="jxr_linenumber" name="121" href="#121">121</a>       <em class="jxr_comment">//
Clear sets limit == capacity. Postion == 0.</em>
-<a class="jxr_linenumber" name="122" href="#122">122</a>       bb.clear();
-<a class="jxr_linenumber" name="123" href="#123">123</a> 
-<a class="jxr_linenumber" name="124" href="#124">124</a>       <strong class="jxr_keyword">if</strong>
(LOG.isTraceEnabled()) {
-<a class="jxr_linenumber" name="125" href="#125">125</a>         <strong class="jxr_keyword">int</strong>
countOfBuffers = toCountOfBuffers(state);
-<a class="jxr_linenumber" name="126" href="#126">126</a>         <strong class="jxr_keyword">int</strong>
totalCapacity = toTotalCapacity(state);
-<a class="jxr_linenumber" name="127" href="#127">127</a>         LOG.trace(<span
class="jxr_string">"totalCapacity="</span> + totalCapacity + <span class="jxr_string">",
count="</span> + countOfBuffers);
-<a class="jxr_linenumber" name="128" href="#128">128</a>       }
-<a class="jxr_linenumber" name="129" href="#129">129</a>       <strong class="jxr_keyword">return</strong>
bb;
-<a class="jxr_linenumber" name="130" href="#130">130</a>     }
-<a class="jxr_linenumber" name="131" href="#131">131</a> 
-<a class="jxr_linenumber" name="132" href="#132">132</a>     <strong class="jxr_keyword">int</strong>
runningAverage = runningAverageRef.get();
-<a class="jxr_linenumber" name="133" href="#133">133</a>     bb = ByteBuffer.allocateDirect(runningAverage);
-<a class="jxr_linenumber" name="134" href="#134">134</a> 
-<a class="jxr_linenumber" name="135" href="#135">135</a>     <strong class="jxr_keyword">if</strong>
(LOG.isTraceEnabled()) {
-<a class="jxr_linenumber" name="136" href="#136">136</a>       <strong class="jxr_keyword">long</strong>
allocations = allocationsRef.incrementAndGet();
-<a class="jxr_linenumber" name="137" href="#137">137</a>       LOG.trace(<span
class="jxr_string">"runningAverage="</span> + runningAverage + <span class="jxr_string">",
alloctions="</span> + allocations);
-<a class="jxr_linenumber" name="138" href="#138">138</a>     }
-<a class="jxr_linenumber" name="139" href="#139">139</a>     <strong class="jxr_keyword">return</strong>
bb;
-<a class="jxr_linenumber" name="140" href="#140">140</a>   }
-<a class="jxr_linenumber" name="141" href="#141">141</a> 
-<a class="jxr_linenumber" name="142" href="#142">142</a>   <strong class="jxr_keyword">public</strong>
<strong class="jxr_keyword">void</strong> putBuffer(ByteBuffer bb) {
-<a class="jxr_linenumber" name="143" href="#143">143</a>     <em class="jxr_comment">//
If buffer is larger than we want to keep around, just let it go.</em>
-<a class="jxr_linenumber" name="144" href="#144">144</a>     <strong class="jxr_keyword">if</strong>
(bb.capacity() &gt; maxByteBufferSizeToCache) {
-<a class="jxr_linenumber" name="145" href="#145">145</a>       <strong class="jxr_keyword">return</strong>;
-<a class="jxr_linenumber" name="146" href="#146">146</a>     }
-<a class="jxr_linenumber" name="147" href="#147">147</a> 
-<a class="jxr_linenumber" name="148" href="#148">148</a>     <strong class="jxr_keyword">int</strong>
countOfBuffers;
-<a class="jxr_linenumber" name="149" href="#149">149</a>     <strong class="jxr_keyword">int</strong>
totalCapacity;
-<a class="jxr_linenumber" name="150" href="#150">150</a>     <strong class="jxr_keyword">while</strong>
(<strong class="jxr_keyword">true</strong>) {
-<a class="jxr_linenumber" name="151" href="#151">151</a>       <strong class="jxr_keyword">long</strong>
prevState = stateRef.get();
-<a class="jxr_linenumber" name="152" href="#152">152</a>       countOfBuffers
= toCountOfBuffers(prevState);
-<a class="jxr_linenumber" name="153" href="#153">153</a>       <strong class="jxr_keyword">if</strong>
(countOfBuffers &gt;= maxToCache) {
-<a class="jxr_linenumber" name="154" href="#154">154</a>         <strong class="jxr_keyword">if</strong>
(LOG.isWarnEnabled()) {
-<a class="jxr_linenumber" name="155" href="#155">155</a>           LOG.warn(<span
class="jxr_string">"At capacity: "</span> + countOfBuffers);
-<a class="jxr_linenumber" name="156" href="#156">156</a>         }
-<a class="jxr_linenumber" name="157" href="#157">157</a>         <strong class="jxr_keyword">return</strong>;
-<a class="jxr_linenumber" name="158" href="#158">158</a>       }
-<a class="jxr_linenumber" name="159" href="#159">159</a>       countOfBuffers++;
-<a class="jxr_linenumber" name="160" href="#160">160</a>       assert 0 &lt;
countOfBuffers &amp;&amp; countOfBuffers &lt;= maxToCache;
-<a class="jxr_linenumber" name="161" href="#161">161</a> 
-<a class="jxr_linenumber" name="162" href="#162">162</a>       totalCapacity
= toTotalCapacity(prevState) + bb.capacity();
-<a class="jxr_linenumber" name="163" href="#163">163</a>       <strong class="jxr_keyword">if</strong>
(totalCapacity &lt; 0) {
-<a class="jxr_linenumber" name="164" href="#164">164</a>         <strong class="jxr_keyword">if</strong>
(LOG.isWarnEnabled()) {
-<a class="jxr_linenumber" name="165" href="#165">165</a>           LOG.warn(<span
class="jxr_string">"Overflowed total capacity."</span>);
-<a class="jxr_linenumber" name="166" href="#166">166</a>         }
-<a class="jxr_linenumber" name="167" href="#167">167</a>         <strong class="jxr_keyword">return</strong>;
-<a class="jxr_linenumber" name="168" href="#168">168</a>       }
-<a class="jxr_linenumber" name="169" href="#169">169</a> 
-<a class="jxr_linenumber" name="170" href="#170">170</a>       <strong class="jxr_keyword">long</strong>
state = toState(countOfBuffers, totalCapacity);
-<a class="jxr_linenumber" name="171" href="#171">171</a>       <strong class="jxr_keyword">if</strong>
(stateRef.compareAndSet(prevState, state)) {
-<a class="jxr_linenumber" name="172" href="#172">172</a>         <strong class="jxr_keyword">break</strong>;
-<a class="jxr_linenumber" name="173" href="#173">173</a>       }
-<a class="jxr_linenumber" name="174" href="#174">174</a>     }
-<a class="jxr_linenumber" name="175" href="#175">175</a> 
-<a class="jxr_linenumber" name="176" href="#176">176</a>     <em class="jxr_comment">//
ConcurrentLinkQueue#offer says "this method will never return false"</em>
-<a class="jxr_linenumber" name="177" href="#177">177</a>     buffers.offer(bb);
-<a class="jxr_linenumber" name="178" href="#178">178</a> 
-<a class="jxr_linenumber" name="179" href="#179">179</a>     <strong class="jxr_keyword">int</strong>
runningAverageUpdate = Math.min(
-<a class="jxr_linenumber" name="180" href="#180">180</a>         totalCapacity
/ countOfBuffers, <em class="jxr_comment">// size will never be 0.</em>
-<a class="jxr_linenumber" name="181" href="#181">181</a>         maxByteBufferSizeToCache);
-<a class="jxr_linenumber" name="182" href="#182">182</a>     <strong class="jxr_keyword">while</strong>
(<strong class="jxr_keyword">true</strong>) {
-<a class="jxr_linenumber" name="183" href="#183">183</a>       <strong class="jxr_keyword">int</strong>
prev = runningAverageRef.get();
-<a class="jxr_linenumber" name="184" href="#184">184</a>       <strong class="jxr_keyword">if</strong>
(prev &gt;= runningAverageUpdate || <em class="jxr_comment">// only rises, never
recedes</em>
-<a class="jxr_linenumber" name="185" href="#185">185</a>           runningAverageRef.compareAndSet(prev,
runningAverageUpdate)) {
-<a class="jxr_linenumber" name="186" href="#186">186</a>         <strong class="jxr_keyword">break</strong>;
-<a class="jxr_linenumber" name="187" href="#187">187</a>       }
-<a class="jxr_linenumber" name="188" href="#188">188</a>     }
-<a class="jxr_linenumber" name="189" href="#189">189</a>   }
-<a class="jxr_linenumber" name="190" href="#190">190</a> }
+<a class="jxr_linenumber" name="79" href="#79">79</a>    @VisibleForTesting
+<a class="jxr_linenumber" name="80" href="#80">80</a>    <strong class="jxr_keyword">static</strong>
<strong class="jxr_keyword">int</strong> toCountOfBuffers(<strong class="jxr_keyword">long</strong>
state) {
+<a class="jxr_linenumber" name="81" href="#81">81</a>      <strong class="jxr_keyword">return</strong>
(<strong class="jxr_keyword">int</strong>)state;
+<a class="jxr_linenumber" name="82" href="#82">82</a>    }
+<a class="jxr_linenumber" name="83" href="#83">83</a>  
+<a class="jxr_linenumber" name="84" href="#84">84</a>    @VisibleForTesting
+<a class="jxr_linenumber" name="85" href="#85">85</a>    <strong class="jxr_keyword">static</strong>
<strong class="jxr_keyword">int</strong> toTotalCapacity(<strong class="jxr_keyword">long</strong>
state) {
+<a class="jxr_linenumber" name="86" href="#86">86</a>      <strong class="jxr_keyword">return</strong>
(<strong class="jxr_keyword">int</strong>)(state &gt;&gt;&gt; 32);
+<a class="jxr_linenumber" name="87" href="#87">87</a>    }
+<a class="jxr_linenumber" name="88" href="#88">88</a>  
+<a class="jxr_linenumber" name="89" href="#89">89</a>    @VisibleForTesting
+<a class="jxr_linenumber" name="90" href="#90">90</a>    <strong class="jxr_keyword">static</strong>
<strong class="jxr_keyword">long</strong> toState(<strong class="jxr_keyword">int</strong>
countOfBuffers, <strong class="jxr_keyword">int</strong> totalCapacity) {
+<a class="jxr_linenumber" name="91" href="#91">91</a>      <strong class="jxr_keyword">return</strong>
((<strong class="jxr_keyword">long</strong>)totalCapacity &lt;&lt; 32)
| countOfBuffers;
+<a class="jxr_linenumber" name="92" href="#92">92</a>    }
+<a class="jxr_linenumber" name="93" href="#93">93</a>  
+<a class="jxr_linenumber" name="94" href="#94">94</a>    @VisibleForTesting
+<a class="jxr_linenumber" name="95" href="#95">95</a>    <strong class="jxr_keyword">static</strong>
<strong class="jxr_keyword">long</strong> subtractOneBufferFromState(<strong
class="jxr_keyword">long</strong> state, <strong class="jxr_keyword">int</strong>
capacity) {
+<a class="jxr_linenumber" name="96" href="#96">96</a>      <strong class="jxr_keyword">return</strong>
state - ((<strong class="jxr_keyword">long</strong>)capacity &lt;&lt;
32) - 1;
+<a class="jxr_linenumber" name="97" href="#97">97</a>    }
+<a class="jxr_linenumber" name="98" href="#98">98</a>  
+<a class="jxr_linenumber" name="99" href="#99">99</a>    <em class="jxr_comment">//
For reporting, only used in the log</em>
+<a class="jxr_linenumber" name="100" href="#100">100</a>   <strong class="jxr_keyword">private</strong>
<strong class="jxr_keyword">final</strong> AtomicLong allocationsRef = <strong
class="jxr_keyword">new</strong> AtomicLong();
+<a class="jxr_linenumber" name="101" href="#101">101</a> 
+<a class="jxr_linenumber" name="102" href="#102">102</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="103" href="#103">103</a> <em class="jxr_javadoccomment">
  * @param maxByteBufferSizeToCache</em>
+<a class="jxr_linenumber" name="104" href="#104">104</a> <em class="jxr_javadoccomment">
  * @param initialByteBufferSize</em>
+<a class="jxr_linenumber" name="105" href="#105">105</a> <em class="jxr_javadoccomment">
  * @param maxToCache</em>
+<a class="jxr_linenumber" name="106" href="#106">106</a> <em class="jxr_javadoccomment">
  */</em>
+<a class="jxr_linenumber" name="107" href="#107">107</a>   <strong class="jxr_keyword">public</strong>
<a href="../../../../../org/apache/hadoop/hbase/io/BoundedByteBufferPool.html">BoundedByteBufferPool</a>(<strong
class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong>
maxByteBufferSizeToCache, <strong class="jxr_keyword">final</strong> <strong
class="jxr_keyword">int</strong> initialByteBufferSize,
+<a class="jxr_linenumber" name="108" href="#108">108</a>       <strong class="jxr_keyword">final</strong>
<strong class="jxr_keyword">int</strong> maxToCache) {
+<a class="jxr_linenumber" name="109" href="#109">109</a>     <strong class="jxr_keyword">this</strong>.maxByteBufferSizeToCache
= maxByteBufferSizeToCache;
+<a class="jxr_linenumber" name="110" href="#110">110</a>     <strong class="jxr_keyword">this</strong>.runningAverageRef
= <strong class="jxr_keyword">new</strong> AtomicInteger(initialByteBufferSize);
+<a class="jxr_linenumber" name="111" href="#111">111</a>     <strong class="jxr_keyword">this</strong>.maxToCache
= maxToCache;
+<a class="jxr_linenumber" name="112" href="#112">112</a>   }
+<a class="jxr_linenumber" name="113" href="#113">113</a> 
+<a class="jxr_linenumber" name="114" href="#114">114</a>   <strong class="jxr_keyword">public</strong>
ByteBuffer getBuffer() {
+<a class="jxr_linenumber" name="115" href="#115">115</a>     ByteBuffer bb =
buffers.poll();
+<a class="jxr_linenumber" name="116" href="#116">116</a>     <strong class="jxr_keyword">if</strong>
(bb != <strong class="jxr_keyword">null</strong>) {
+<a class="jxr_linenumber" name="117" href="#117">117</a>       <strong class="jxr_keyword">long</strong>
state;
+<a class="jxr_linenumber" name="118" href="#118">118</a>       <strong class="jxr_keyword">while</strong>
(<strong class="jxr_keyword">true</strong>) {
+<a class="jxr_linenumber" name="119" href="#119">119</a>         <strong class="jxr_keyword">long</strong>
prevState = stateRef.get();
+<a class="jxr_linenumber" name="120" href="#120">120</a>         state = subtractOneBufferFromState(prevState,
bb.capacity());
+<a class="jxr_linenumber" name="121" href="#121">121</a>         <strong class="jxr_keyword">if</strong>
(stateRef.compareAndSet(prevState, state)) {
+<a class="jxr_linenumber" name="122" href="#122">122</a>           <strong
class="jxr_keyword">break</strong>;
+<a class="jxr_linenumber" name="123" href="#123">123</a>         }
+<a class="jxr_linenumber" name="124" href="#124">124</a>       }
+<a class="jxr_linenumber" name="125" href="#125">125</a>       <em class="jxr_comment">//
Clear sets limit == capacity. Postion == 0.</em>
+<a class="jxr_linenumber" name="126" href="#126">126</a>       bb.clear();
+<a class="jxr_linenumber" name="127" href="#127">127</a> 
+<a class="jxr_linenumber" name="128" href="#128">128</a>       <strong class="jxr_keyword">if</strong>
(LOG.isTraceEnabled()) {
+<a class="jxr_linenumber" name="129" href="#129">129</a>         <strong class="jxr_keyword">int</strong>
countOfBuffers = toCountOfBuffers(state);
+<a class="jxr_linenumber" name="130" href="#130">130</a>         <strong class="jxr_keyword">int</strong>
totalCapacity = toTotalCapacity(state);
+<a class="jxr_linenumber" name="131" href="#131">131</a>         LOG.trace(<span
class="jxr_string">"totalCapacity="</span> + totalCapacity + <span class="jxr_string">",
count="</span> + countOfBuffers);
+<a class="jxr_linenumber" name="132" href="#132">132</a>       }
+<a class="jxr_linenumber" name="133" href="#133">133</a>       <strong class="jxr_keyword">return</strong>
bb;
+<a class="jxr_linenumber" name="134" href="#134">134</a>     }
+<a class="jxr_linenumber" name="135" href="#135">135</a> 
+<a class="jxr_linenumber" name="136" href="#136">136</a>     <strong class="jxr_keyword">int</strong>
runningAverage = runningAverageRef.get();
+<a class="jxr_linenumber" name="137" href="#137">137</a>     bb = ByteBuffer.allocateDirect(runningAverage);
+<a class="jxr_linenumber" name="138" href="#138">138</a> 
+<a class="jxr_linenumber" name="139" href="#139">139</a>     <strong class="jxr_keyword">if</strong>
(LOG.isTraceEnabled()) {
+<a class="jxr_linenumber" name="140" href="#140">140</a>       <strong class="jxr_keyword">long</strong>
allocations = allocationsRef.incrementAndGet();
+<a class="jxr_linenumber" name="141" href="#141">141</a>       LOG.trace(<span
class="jxr_string">"runningAverage="</span> + runningAverage + <span class="jxr_string">",
alloctions="</span> + allocations);
+<a class="jxr_linenumber" name="142" href="#142">142</a>     }
+<a class="jxr_linenumber" name="143" href="#143">143</a>     <strong class="jxr_keyword">return</strong>
bb;
+<a class="jxr_linenumber" name="144" href="#144">144</a>   }
+<a class="jxr_linenumber" name="145" href="#145">145</a> 
+<a class="jxr_linenumber" name="146" href="#146">146</a>   <strong class="jxr_keyword">public</strong>
<strong class="jxr_keyword">void</strong> putBuffer(ByteBuffer bb) {
+<a class="jxr_linenumber" name="147" href="#147">147</a>     <em class="jxr_comment">//
If buffer is larger than we want to keep around, just let it go.</em>
+<a class="jxr_linenumber" name="148" href="#148">148</a>     <strong class="jxr_keyword">if</strong>
(bb.capacity() &gt; maxByteBufferSizeToCache) {
+<a class="jxr_linenumber" name="149" href="#149">149</a>       <strong class="jxr_keyword">return</strong>;
+<a class="jxr_linenumber" name="150" href="#150">150</a>     }
+<a class="jxr_linenumber" name="151" href="#151">151</a> 
+<a class="jxr_linenumber" name="152" href="#152">152</a>     <strong class="jxr_keyword">int</strong>
countOfBuffers;
+<a class="jxr_linenumber" name="153" href="#153">153</a>     <strong class="jxr_keyword">int</strong>
totalCapacity;
+<a class="jxr_linenumber" name="154" href="#154">154</a>     <strong class="jxr_keyword">while</strong>
(<strong class="jxr_keyword">true</strong>) {
+<a class="jxr_linenumber" name="155" href="#155">155</a>       <strong class="jxr_keyword">long</strong>
prevState = stateRef.get();
+<a class="jxr_linenumber" name="156" href="#156">156</a>       countOfBuffers
= toCountOfBuffers(prevState);
+<a class="jxr_linenumber" name="157" href="#157">157</a>       <strong class="jxr_keyword">if</strong>
(countOfBuffers &gt;= maxToCache) {
+<a class="jxr_linenumber" name="158" href="#158">158</a>         <strong class="jxr_keyword">if</strong>
(LOG.isWarnEnabled()) {
+<a class="jxr_linenumber" name="159" href="#159">159</a>           LOG.warn(<span
class="jxr_string">"At capacity: "</span> + countOfBuffers);
+<a class="jxr_linenumber" name="160" href="#160">160</a>         }
+<a class="jxr_linenumber" name="161" href="#161">161</a>         <strong class="jxr_keyword">return</strong>;
+<a class="jxr_linenumber" name="162" href="#162">162</a>       }
+<a class="jxr_linenumber" name="163" href="#163">163</a>       countOfBuffers++;
+<a class="jxr_linenumber" name="164" href="#164">164</a>       assert 0 &lt;
countOfBuffers &amp;&amp; countOfBuffers &lt;= maxToCache;
+<a class="jxr_linenumber" name="165" href="#165">165</a> 
+<a class="jxr_linenumber" name="166" href="#166">166</a>       totalCapacity
= toTotalCapacity(prevState) + bb.capacity();
+<a class="jxr_linenumber" name="167" href="#167">167</a>       <strong class="jxr_keyword">if</strong>
(totalCapacity &lt; 0) {
+<a class="jxr_linenumber" name="168" href="#168">168</a>         <strong class="jxr_keyword">if</strong>
(LOG.isWarnEnabled()) {
+<a class="jxr_linenumber" name="169" href="#169">169</a>           LOG.warn(<span
class="jxr_string">"Overflowed total capacity."</span>);
+<a class="jxr_linenumber" name="170" href="#170">170</a>         }
+<a class="jxr_linenumber" name="171" href="#171">171</a>         <strong class="jxr_keyword">return</strong>;
+<a class="jxr_linenumber" name="172" href="#172">172</a>       }
+<a class="jxr_linenumber" name="173" href="#173">173</a> 
+<a class="jxr_linenumber" name="174" href="#174">174</a>       <strong class="jxr_keyword">long</strong>
state = toState(countOfBuffers, totalCapacity);
+<a class="jxr_linenumber" name="175" href="#175">175</a>       <strong class="jxr_keyword">if</strong>
(stateRef.compareAndSet(prevState, state)) {
+<a class="jxr_linenumber" name="176" href="#176">176</a>         <strong class="jxr_keyword">break</strong>;
+<a class="jxr_linenumber" name="177" href="#177">177</a>       }
+<a class="jxr_linenumber" name="178" href="#178">178</a>     }
+<a class="jxr_linenumber" name="179" href="#179">179</a> 
+<a class="jxr_linenumber" name="180" href="#180">180</a>     <em class="jxr_comment">//
ConcurrentLinkQueue#offer says "this method will never return false"</em>
+<a class="jxr_linenumber" name="181" href="#181">181</a>     buffers.offer(bb);
+<a class="jxr_linenumber" name="182" href="#182">182</a> 
+<a class="jxr_linenumber" name="183" href="#183">183</a>     <strong class="jxr_keyword">int</strong>
runningAverageUpdate = Math.min(
+<a class="jxr_linenumber" name="184" href="#184">184</a>         totalCapacity
/ countOfBuffers, <em class="jxr_comment">// size will never be 0.</em>
+<a class="jxr_linenumber" name="185" href="#185">185</a>         maxByteBufferSizeToCache);
+<a class="jxr_linenumber" name="186" href="#186">186</a>     <strong class="jxr_keyword">while</strong>
(<strong class="jxr_keyword">true</strong>) {
+<a class="jxr_linenumber" name="187" href="#187">187</a>       <strong class="jxr_keyword">int</strong>
prev = runningAverageRef.get();
+<a class="jxr_linenumber" name="188" href="#188">188</a>       <strong class="jxr_keyword">if</strong>
(prev &gt;= runningAverageUpdate || <em class="jxr_comment">// only rises, never
recedes</em>
+<a class="jxr_linenumber" name="189" href="#189">189</a>           runningAverageRef.compareAndSet(prev,
runningAverageUpdate)) {
+<a class="jxr_linenumber" name="190" href="#190">190</a>         <strong class="jxr_keyword">break</strong>;
+<a class="jxr_linenumber" name="191" href="#191">191</a>       }
+<a class="jxr_linenumber" name="192" href="#192">192</a>     }
+<a class="jxr_linenumber" name="193" href="#193">193</a>   }
+<a class="jxr_linenumber" name="194" href="#194">194</a> }
 </pre>
 <hr/><div id="footer">This page was automatically generated by <a href="http://maven.apache.org/">Maven</a></div></body>
 </html>


Mime
View raw message