Regeneration from plexi 886b5f2
diff --git a/coverage/com.google.enterprise.adaptor.AdaptorContext.html b/coverage/com.google.enterprise.adaptor.AdaptorContext.html
index ddee2f1..65c1b16 100644
--- a/coverage/com.google.enterprise.adaptor.AdaptorContext.html
+++ b/coverage/com.google.enterprise.adaptor.AdaptorContext.html
@@ -122,100 +122,122 @@
<tr> <td class="numLine"> 52</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine"> 53</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Override the default {@link GetDocIdsErrorHandler}.</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * Override the default {@link GetDocIdsErrorHandler} for full push.</span></pre></td></tr>
<tr> <td class="numLine"> 54</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine"> 55</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> setGetDocIdsErrorHandler(GetDocIdsErrorHandler handler);</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> setGetDocIdsFullErrorHandler(GetDocIdsErrorHandler handler);</pre></td></tr>
<tr> <td class="numLine"> 56</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 57</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine"> 58</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Retrieve the current {@link GetDocIdsErrorHandler}.</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * Retrieve the current {@link GetDocIdsErrorHandler} for full push.</span></pre></td></tr>
<tr> <td class="numLine"> 59</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine"> 60</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> GetDocIdsErrorHandler getGetDocIdsErrorHandler();</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> GetDocIdsErrorHandler getGetDocIdsFullErrorHandler();</pre></td></tr>
<tr> <td class="numLine"> 61</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 62</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine"> 63</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Retrieve decoder for sensitive values, like passwords. To protect sensitive</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * Override the default {@link GetDocIdsErrorHandler} for incremental push.</span></pre></td></tr>
<tr> <td class="numLine"> 64</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * values, the user should have previously encoded them using the Dashboard.</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine"> 65</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * However, a user is still allowed to choose to keep sensitive values in</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> setGetDocIdsIncrementalErrorHandler(</pre></td></tr>
<tr> <td class="numLine"> 66</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * plain text.</span></pre></td></tr>
+ <td class="src"><pre class="src"> GetDocIdsErrorHandler handler);</pre></td></tr>
<tr> <td class="numLine"> 67</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 68</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> SensitiveValueDecoder getSensitiveValueDecoder();</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine"> 69</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * Retrieve the current {@link GetDocIdsErrorHandler} for incremental push.</span></pre></td></tr>
<tr> <td class="numLine"> 70</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine"> 71</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Registers a handler with the library's {@link</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> GetDocIdsErrorHandler getGetDocIdsIncrementalErrorHandler();</pre></td></tr>
<tr> <td class="numLine"> 72</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * com.sun.net.httpserver.HttpServer} in similar fashion to {@link</span></pre></td></tr>
-<tr> <td class="numLine"> 73</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * com.sun.net.httpserver.HttpServer#createContext}. Removal of the handler</span></pre></td></tr>
-<tr> <td class="numLine"> 74</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * can be acheived by calling {@code</span></pre></td></tr>
-<tr> <td class="numLine"> 75</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * httpContext.getServer().removeContext(httpContext)} on the returned</span></pre></td></tr>
-<tr> <td class="numLine"> 76</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * context. Handler registration should generally occur during {@link</span></pre></td></tr>
-<tr> <td class="numLine"> 77</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Adaptor#init} and removal during {@link Adaptor#destroy}.</span></pre></td></tr>
-<tr> <td class="numLine"> 78</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
-<tr> <td class="numLine"> 79</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * <p>Although {@code path} may be passed directly to the underlying {@code</span></pre></td></tr>
-<tr> <td class="numLine"> 80</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * HttpServer}, that is not necessarily the case. Thus, implementations should</span></pre></td></tr>
-<tr> <td class="numLine"> 81</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * use the returned context's path when forming URLs to the handler. In</span></pre></td></tr>
-<tr> <td class="numLine"> 82</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * addition, the handler and context may be modified before being returned;</span></pre></td></tr>
-<tr> <td class="numLine"> 83</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * this is primarily to allow adding commonly-needed filters for error</span></pre></td></tr>
-<tr> <td class="numLine"> 84</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * handling and logging, but also available for implementation-specific needs.</span></pre></td></tr>
-<tr> <td class="numLine"> 85</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLine"> 86</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> HttpContext createHttpContext(String path, HttpHandler handler);</pre></td></tr>
-<tr> <td class="numLine"> 87</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 88</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 73</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 89</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Get the session for the user communicating via {@code ex}. If a session</span></pre></td></tr>
-<tr> <td class="numLine"> 90</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * does not already exist, then {@code create} determines if one should be</span></pre></td></tr>
-<tr> <td class="numLine"> 91</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * created.</span></pre></td></tr>
-<tr> <td class="numLine"> 92</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
-<tr> <td class="numLine"> 93</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * @param ex exchange which user issued request</span></pre></td></tr>
-<tr> <td class="numLine"> 94</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * @param create whether a new session should be created if one does not</span></pre></td></tr>
-<tr> <td class="numLine"> 95</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * already exist for this user</span></pre></td></tr>
-<tr> <td class="numLine"> 96</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * @return user's session, or {@code null} if session did not already exist</span></pre></td></tr>
-<tr> <td class="numLine"> 97</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * and {@code create = false}</span></pre></td></tr>
-<tr> <td class="numLine"> 98</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 74</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Retrieve decoder for sensitive values, like passwords. To protect sensitive</span></pre></td></tr>
+<tr> <td class="numLine"> 75</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * values, the user should have previously encoded them using the Dashboard.</span></pre></td></tr>
+<tr> <td class="numLine"> 76</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * However, a user is still allowed to choose to keep sensitive values in</span></pre></td></tr>
+<tr> <td class="numLine"> 77</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * plain text.</span></pre></td></tr>
+<tr> <td class="numLine"> 78</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 79</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> SensitiveValueDecoder getSensitiveValueDecoder();</pre></td></tr>
+<tr> <td class="numLine"> 80</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 81</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 82</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Registers a handler with the library's {@link</span></pre></td></tr>
+<tr> <td class="numLine"> 83</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * com.sun.net.httpserver.HttpServer} in similar fashion to {@link</span></pre></td></tr>
+<tr> <td class="numLine"> 84</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * com.sun.net.httpserver.HttpServer#createContext}. Removal of the handler</span></pre></td></tr>
+<tr> <td class="numLine"> 85</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * can be acheived by calling {@code</span></pre></td></tr>
+<tr> <td class="numLine"> 86</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * httpContext.getServer().removeContext(httpContext)} on the returned</span></pre></td></tr>
+<tr> <td class="numLine"> 87</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * context. Handler registration should generally occur during {@link</span></pre></td></tr>
+<tr> <td class="numLine"> 88</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Adaptor#init} and removal during {@link Adaptor#destroy}.</span></pre></td></tr>
+<tr> <td class="numLine"> 89</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 90</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * <p>Although {@code path} may be passed directly to the underlying {@code</span></pre></td></tr>
+<tr> <td class="numLine"> 91</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * HttpServer}, that is not necessarily the case. Thus, implementations should</span></pre></td></tr>
+<tr> <td class="numLine"> 92</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * use the returned context's path when forming URLs to the handler. In</span></pre></td></tr>
+<tr> <td class="numLine"> 93</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * addition, the handler and context may be modified before being returned;</span></pre></td></tr>
+<tr> <td class="numLine"> 94</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * this is primarily to allow adding commonly-needed filters for error</span></pre></td></tr>
+<tr> <td class="numLine"> 95</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * handling and logging, but also available for implementation-specific needs.</span></pre></td></tr>
+<tr> <td class="numLine"> 96</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 97</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> HttpContext createHttpContext(String path, HttpHandler handler);</pre></td></tr>
+<tr> <td class="numLine"> 98</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 99</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> Session getUserSession(HttpExchange ex, <span class="keyword">boolean</span> create);</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine"> 100</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Get the session for the user communicating via {@code ex}. If a session</span></pre></td></tr>
+<tr> <td class="numLine"> 101</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * does not already exist, then {@code create} determines if one should be</span></pre></td></tr>
+<tr> <td class="numLine"> 102</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * created.</span></pre></td></tr>
+<tr> <td class="numLine"> 103</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 104</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param ex exchange which user issued request</span></pre></td></tr>
+<tr> <td class="numLine"> 105</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param create whether a new session should be created if one does not</span></pre></td></tr>
+<tr> <td class="numLine"> 106</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * already exist for this user</span></pre></td></tr>
+<tr> <td class="numLine"> 107</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return user's session, or {@code null} if session did not already exist</span></pre></td></tr>
+<tr> <td class="numLine"> 108</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * and {@code create = false}</span></pre></td></tr>
+<tr> <td class="numLine"> 109</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 110</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> Session getUserSession(HttpExchange ex, <span class="keyword">boolean</span> create);</pre></td></tr>
+<tr> <td class="numLine"> 111</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
</table>
diff --git a/coverage/com.google.enterprise.adaptor.CircularBufferHandler.html b/coverage/com.google.enterprise.adaptor.CircularBufferHandler.html
index 508c4bd..077bff4 100644
--- a/coverage/com.google.enterprise.adaptor.CircularBufferHandler.html
+++ b/coverage/com.google.enterprise.adaptor.CircularBufferHandler.html
@@ -103,17 +103,17 @@
<td class="src"><pre class="src"> @Override</pre></td></tr>
<tr> <td class="numLine"> 47</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">synchronized</span> <span class="keyword">void</span> publish(LogRecord record) {</pre></td></tr>
-<tr> <td class="numLineCover"> 48</td> <td class="nbHitsUncovered"><a title="Line 48: Conditional coverage 50% (1/2)."> 79</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 48: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (!isLoggable(record)) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 48</td> <td class="nbHitsUncovered"><a title="Line 48: Conditional coverage 50% (1/2)."> 69</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 48: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (!isLoggable(record)) {</a></span></pre></td></tr>
<tr> <td class="numLineCover"> 49</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span>;</span></pre></td></tr>
<tr> <td class="numLine"> 50</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 51</td> <td class="nbHitsCovered"> 79</td> <td class="src"><pre class="src"> buffer[tail] = record;</pre></td></tr>
-<tr> <td class="numLineCover"> 52</td> <td class="nbHitsCovered"> 79</td> <td class="src"><pre class="src"> tail = (tail + 1) % buffer.length;</pre></td></tr>
-<tr> <td class="numLineCover"> 53</td> <td class="nbHitsUncovered"><a title="Line 53: Conditional coverage 50% (1/2)."> 79</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 53: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (head == tail) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 51</td> <td class="nbHitsCovered"> 69</td> <td class="src"><pre class="src"> buffer[tail] = record;</pre></td></tr>
+<tr> <td class="numLineCover"> 52</td> <td class="nbHitsCovered"> 69</td> <td class="src"><pre class="src"> tail = (tail + 1) % buffer.length;</pre></td></tr>
+<tr> <td class="numLineCover"> 53</td> <td class="nbHitsUncovered"><a title="Line 53: Conditional coverage 50% (1/2)."> 69</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 53: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (head == tail) {</a></span></pre></td></tr>
<tr> <td class="numLineCover"> 54</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> head = (head + 1) % buffer.length;</span></pre></td></tr>
<tr> <td class="numLine"> 55</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 56</td> <td class="nbHitsCovered"> 79</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 56</td> <td class="nbHitsCovered"> 69</td> <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 57</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 58</td> <td class="nbHits"> </td>
diff --git a/coverage/com.google.enterprise.adaptor.Dashboard.html b/coverage/com.google.enterprise.adaptor.Dashboard.html
index 61a859e..dda15b2 100644
--- a/coverage/com.google.enterprise.adaptor.Dashboard.html
+++ b/coverage/com.google.enterprise.adaptor.Dashboard.html
@@ -499,7 +499,7 @@
<td class="src"><pre class="src"> @Override</pre></td></tr>
<tr> <td class="numLine"> 294</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">public</span> Status retrieveStatus() {</pre></td></tr>
-<tr> <td class="numLineCover"> 295</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">switch</span> (journal.getLastPushStatus()) {</pre></td></tr>
+<tr> <td class="numLineCover"> 295</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">switch</span> (journal.getLastFullPushStatus()) {</pre></td></tr>
<tr> <td class="numLine"> 296</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">case</span> SUCCESS:</pre></td></tr>
<tr> <td class="numLineCover"> 297</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">new</span> TranslationStatus(Status.Code.NORMAL);</pre></td></tr>
diff --git a/coverage/com.google.enterprise.adaptor.DefaultGetDocIdsErrorHandler.html b/coverage/com.google.enterprise.adaptor.DefaultGetDocIdsErrorHandler.html
index 4fc8309..cbe1457 100644
--- a/coverage/com.google.enterprise.adaptor.DefaultGetDocIdsErrorHandler.html
+++ b/coverage/com.google.enterprise.adaptor.DefaultGetDocIdsErrorHandler.html
@@ -77,8 +77,8 @@
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine"> 30</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">public</span> DefaultGetDocIdsErrorHandler() {</pre></td></tr>
-<tr> <td class="numLineCover"> 31</td> <td class="nbHitsCovered"> 26</td> <td class="src"><pre class="src"> <span class="keyword">this</span>(12, 5000);</pre></td></tr>
-<tr> <td class="numLineCover"> 32</td> <td class="nbHitsCovered"> 26</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 31</td> <td class="nbHitsCovered"> 27</td> <td class="src"><pre class="src"> <span class="keyword">this</span>(12, 5000);</pre></td></tr>
+<tr> <td class="numLineCover"> 32</td> <td class="nbHitsCovered"> 27</td> <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 33</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 34</td> <td class="nbHits"> </td>
@@ -89,10 +89,10 @@
<td class="src"><pre class="src"> <span class="comment"> * sleeps {@code sleepTimeMillis * numberOfTries} before retrying.</span></pre></td></tr>
<tr> <td class="numLine"> 37</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLineCover"> 38</td> <td class="nbHitsCovered"> 26</td> <td class="src"><pre class="src"> <span class="keyword">public</span> DefaultGetDocIdsErrorHandler(<span class="keyword">int</span> maximumTries, <span class="keyword">long</span> sleepTimeMillis) {</pre></td></tr>
-<tr> <td class="numLineCover"> 39</td> <td class="nbHitsCovered"> 26</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.maximumTries = maximumTries;</pre></td></tr>
-<tr> <td class="numLineCover"> 40</td> <td class="nbHitsCovered"> 26</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.sleepTimeMillis = sleepTimeMillis;</pre></td></tr>
-<tr> <td class="numLineCover"> 41</td> <td class="nbHitsCovered"> 26</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 38</td> <td class="nbHitsCovered"> 27</td> <td class="src"><pre class="src"> <span class="keyword">public</span> DefaultGetDocIdsErrorHandler(<span class="keyword">int</span> maximumTries, <span class="keyword">long</span> sleepTimeMillis) {</pre></td></tr>
+<tr> <td class="numLineCover"> 39</td> <td class="nbHitsCovered"> 27</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.maximumTries = maximumTries;</pre></td></tr>
+<tr> <td class="numLineCover"> 40</td> <td class="nbHitsCovered"> 27</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.sleepTimeMillis = sleepTimeMillis;</pre></td></tr>
+<tr> <td class="numLineCover"> 41</td> <td class="nbHitsCovered"> 27</td> <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 42</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 43</td> <td class="nbHits"> </td>
diff --git a/coverage/com.google.enterprise.adaptor.DocIdSender.html b/coverage/com.google.enterprise.adaptor.DocIdSender.html
index 60b197e..9ec0299 100644
--- a/coverage/com.google.enterprise.adaptor.DocIdSender.html
+++ b/coverage/com.google.enterprise.adaptor.DocIdSender.html
@@ -12,9 +12,9 @@
<div class="separator"> </div>
<table class="report">
<thead><tr> <td class="heading">Classes in this File</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
- <tr><td><a href="com.google.enterprise.adaptor.DocIdSender.html">DocIdSender</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">86/86</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">28/28</span></div></div></td></tr></table></td><td class="value"><span class="hidden">4.0;</span>4</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.DocIdSender.html">DocIdSender$AclItem</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">8/8</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">4/4</span></div></div></td></tr></table></td><td class="value"><span class="hidden">4.0;</span>4</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.DocIdSender.html">DocIdSender$Item</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">4.0;</span>4</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.DocIdSender.html">DocIdSender</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">13</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:88px"><span class="text">96/109</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">3</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:90px"><span class="text">29/32</span></div></div></td></tr></table></td><td class="value"><span class="hidden">4.5;</span>4.5</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.DocIdSender.html">DocIdSender$AclItem</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">8/8</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">4/4</span></div></div></td></tr></table></td><td class="value"><span class="hidden">4.5;</span>4.5</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.DocIdSender.html">DocIdSender$Item</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">4.5;</span>4.5</td></tr>
</table>
<div class="separator"> </div>
@@ -105,7 +105,7 @@
<tr> <td class="numLine"> 47</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine"> 48</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> pushDocIdsFromAdaptor(GetDocIdsErrorHandler handler)</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> pushFullDocIdsFromAdaptor(GetDocIdsErrorHandler handler)</pre></td></tr>
<tr> <td class="numLine"> 49</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">throws</span> InterruptedException {</pre></td></tr>
<tr> <td class="numLineCover"> 50</td> <td class="nbHitsCovered"><a title="Line 50: Conditional coverage 100% (2/2)."> 4</a></td> <td class="src"><pre class="src"> <a title="Line 50: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (handler == <span class="keyword">null</span>) {</a></pre></td></tr>
@@ -150,186 +150,237 @@
<tr> <td class="numLine"> 81</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine"> 82</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Makes and sends metadata-and-url feed files to GSA. Generally, you should</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * Calls {@link Adaptor#getModifiedDocIds}. This method blocks until all</span></pre></td></tr>
<tr> <td class="numLine"> 83</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * use {@link #pushDocIds()} instead of this method. However, if you want to</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * DocIds are sent or retrying failed.</span></pre></td></tr>
<tr> <td class="numLine"> 84</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * push just a few DocIds to the GSA manually, this is the method to use.</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine"> 85</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * This method blocks until all DocIds are sent or retrying failed.</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> pushIncrementalDocIdsFromAdaptor(GetDocIdsErrorHandler handler)</pre></td></tr>
<tr> <td class="numLine"> 86</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLine"> 87</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 88</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> Record pushRecords(Iterable<Record> items, PushErrorHandler handler)</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">throws</span> InterruptedException {</pre></td></tr>
+<tr> <td class="numLineCover"> 87</td> <td class="nbHitsUncovered"><a title="Line 87: Conditional coverage 50% (1/2)."> 1</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 87: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (handler == <span class="keyword">null</span>) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 88</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> NullPointerException();</span></pre></td></tr>
<tr> <td class="numLine"> 89</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">throws</span> InterruptedException {</pre></td></tr>
-<tr> <td class="numLineCover"> 90</td> <td class="nbHitsCovered"><a title="Line 90: Conditional coverage 100% (2/2)."> 6</a></td> <td class="src"><pre class="src"> <a title="Line 90: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (handler == <span class="keyword">null</span>) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 91</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> handler = defaultErrorHandler;</pre></td></tr>
-<tr> <td class="numLine"> 92</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 93</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">return</span> pushItems(items.iterator(), handler);</pre></td></tr>
+<tr> <td class="numLineCover"> 90</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> log.info(<span class="string">"Beginning incremental push of DocIds"</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 91</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> journal.recordIncrementalPushStarted();</pre></td></tr>
+<tr> <td class="numLineCover"> 92</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">for</span> (<span class="keyword">int</span> ntries = 1;; ntries++) {</pre></td></tr>
+<tr> <td class="numLineCover"> 93</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">boolean</span> keepGoing = <span class="keyword">true</span>;</pre></td></tr>
<tr> <td class="numLine"> 94</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 95</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 96</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 97</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> DocId pushNamedResources(Map<DocId, Acl> resources,</pre></td></tr>
-<tr> <td class="numLine"> 98</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> PushErrorHandler handler)</pre></td></tr>
-<tr> <td class="numLine"> 99</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">throws</span> InterruptedException {</pre></td></tr>
-<tr> <td class="numLineCover"> 100</td> <td class="nbHitsCovered"><a title="Line 100: Conditional coverage 100% (2/2)."> 4</a></td> <td class="src"><pre class="src"> <a title="Line 100: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (handler == <span class="keyword">null</span>) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 101</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> handler = defaultErrorHandler;</pre></td></tr>
-<tr> <td class="numLine"> 102</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 103</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> List<AclItem> acls = <span class="keyword">new</span> ArrayList<AclItem>(resources.size());</pre></td></tr>
-<tr> <td class="numLineCover"> 104</td> <td class="nbHitsCovered"><a title="Line 104: Conditional coverage 100% (2/2)."> 4</a></td> <td class="src"><pre class="src"> <a title="Line 104: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (Map.Entry<DocId, Acl> me : resources.entrySet()) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 105</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> acls.add(<span class="keyword">new</span> AclItem(me.getKey(), me.getValue()));</pre></td></tr>
-<tr> <td class="numLine"> 106</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 107</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> AclItem acl = pushItems(acls.iterator(), handler);</pre></td></tr>
-<tr> <td class="numLineCover"> 108</td> <td class="nbHitsCovered"><a title="Line 108: Conditional coverage 100% (2/2)."> 2</a></td> <td class="src"><pre class="src"> <a title="Line 108: Conditional coverage 100% (2/2)."> <span class="keyword">return</span> acl == <span class="keyword">null</span> ? <span class="keyword">null</span> : acl.getDocId();</a></pre></td></tr>
-<tr> <td class="numLine"> 109</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 110</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 111</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> <T <span class="keyword">extends</span> Item> T pushItems(Iterator<T> items,</pre></td></tr>
-<tr> <td class="numLine"> 112</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> PushErrorHandler handler) <span class="keyword">throws</span> InterruptedException {</pre></td></tr>
-<tr> <td class="numLineCover"> 113</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> log.log(Level.INFO, <span class="string">"Pushing DocIds"</span>);</pre></td></tr>
-<tr> <td class="numLineCover"> 114</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> <span class="keyword">final</span> <span class="keyword">int</span> max = config.getFeedMaxUrls();</pre></td></tr>
-<tr> <td class="numLineCover"> 115</td> <td class="nbHitsCovered"><a title="Line 115: Conditional coverage 100% (2/2)."> 13</a></td> <td class="src"><pre class="src"> <a title="Line 115: Conditional coverage 100% (2/2)."> <span class="keyword">while</span> (items.hasNext()) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 116</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> List<T> batch = <span class="keyword">new</span> ArrayList<T>();</pre></td></tr>
-<tr> <td class="numLineCover"> 117</td> <td class="nbHitsCovered"><a title="Line 117: Conditional coverage 100% (2/2)."> 23</a></td> <td class="src"><pre class="src"> <a title="Line 117: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (<span class="keyword">int</span> j = 0; j < max; j++) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 118</td> <td class="nbHitsCovered"><a title="Line 118: Conditional coverage 100% (2/2)."> 21</a></td> <td class="src"><pre class="src"> <a title="Line 118: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (!items.hasNext()) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 119</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
-<tr> <td class="numLine"> 120</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 121</td> <td class="nbHitsCovered"> 13</td> <td class="src"><pre class="src"> batch.add(items.next());</pre></td></tr>
-<tr> <td class="numLine"> 122</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 123</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> log.log(Level.INFO, <span class="string">"Pushing group of {0} DocIds"</span>, batch.size());</pre></td></tr>
-<tr> <td class="numLineCover"> 124</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> T failedId = pushSizedBatchOfRecords(batch, handler);</pre></td></tr>
-<tr> <td class="numLineCover"> 125</td> <td class="nbHitsCovered"><a title="Line 125: Conditional coverage 100% (2/2)."> 10</a></td> <td class="src"><pre class="src"> <a title="Line 125: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (failedId != <span class="keyword">null</span>) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 126</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> log.info(<span class="string">"Failed to push all ids. Failed on docId: "</span> + failedId);</pre></td></tr>
-<tr> <td class="numLineCover"> 127</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> <span class="keyword">return</span> failedId;</pre></td></tr>
-<tr> <td class="numLine"> 128</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 129</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> journal.recordDocIdPush(batch);</pre></td></tr>
-<tr> <td class="numLineCover"> 130</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 131</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> log.info(<span class="string">"Pushed DocIds"</span>);</pre></td></tr>
-<tr> <td class="numLineCover"> 132</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">null</span>;</pre></td></tr>
-<tr> <td class="numLine"> 133</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 134</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 135</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> <T <span class="keyword">extends</span> Item> T pushSizedBatchOfRecords(List<T> items,</pre></td></tr>
-<tr> <td class="numLine"> 136</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> PushErrorHandler handler)</pre></td></tr>
-<tr> <td class="numLine"> 137</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">throws</span> InterruptedException {</pre></td></tr>
-<tr> <td class="numLineCover"> 138</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> String feedSourceName = config.getFeedName();</pre></td></tr>
-<tr> <td class="numLineCover"> 139</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> String xmlFeedFile = fileMaker.makeMetadataAndUrlXml(feedSourceName, items);</pre></td></tr>
-<tr> <td class="numLineCover"> 140</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> <span class="keyword">boolean</span> keepGoing = <span class="keyword">true</span>;</pre></td></tr>
-<tr> <td class="numLineCover"> 141</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> <span class="keyword">boolean</span> success = <span class="keyword">false</span>;</pre></td></tr>
-<tr> <td class="numLineCover"> 142</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> log.log(Level.INFO, <span class="string">"Pushing batch of {0} DocIds to GSA"</span>, items.size());</pre></td></tr>
-<tr> <td class="numLineCover"> 143</td> <td class="nbHitsCovered"><a title="Line 143: Conditional coverage 100% (2/2)."> 21</a></td> <td class="src"><pre class="src"> <a title="Line 143: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (<span class="keyword">int</span> ntries = 1; keepGoing; ntries++) {</a></pre></td></tr>
-<tr> <td class="numLine"> 144</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 145</td> <td class="nbHitsCovered"> 11</td> <td class="src"><pre class="src"> log.info(<span class="string">"Sending feed to GSA host name: "</span> + config.getGsaHostname());</pre></td></tr>
-<tr> <td class="numLineCover"> 146</td> <td class="nbHitsCovered"> 11</td> <td class="src"><pre class="src"> fileSender.sendMetadataAndUrl(config.getGsaHostname(), feedSourceName,</pre></td></tr>
-<tr> <td class="numLine"> 147</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> xmlFeedFile,</pre></td></tr>
-<tr> <td class="numLine"> 148</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> config.isServerToUseCompression());</pre></td></tr>
-<tr> <td class="numLineCover"> 149</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> keepGoing = <span class="keyword">false</span>; <span class="comment">// Sent.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 150</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> success = <span class="keyword">true</span>;</pre></td></tr>
-<tr> <td class="numLineCover"> 151</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> } <span class="keyword">catch</span> (GsaFeedFileSender.FailedToConnect ftc) {</pre></td></tr>
-<tr> <td class="numLineCover"> 152</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> log.log(Level.WARNING, <span class="string">"Unable to connect to the GSA"</span>, ftc);</pre></td></tr>
-<tr> <td class="numLineCover"> 153</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> keepGoing = handler.handleFailedToConnect(</pre></td></tr>
-<tr> <td class="numLine"> 154</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> (Exception) ftc.getCause(), ntries);</pre></td></tr>
-<tr> <td class="numLineCover"> 155</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> } <span class="keyword">catch</span> (GsaFeedFileSender.FailedWriting fw) {</pre></td></tr>
-<tr> <td class="numLineCover"> 156</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> log.log(Level.WARNING, <span class="string">"Unable to write request to the GSA"</span>, fw);</pre></td></tr>
-<tr> <td class="numLineCover"> 157</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> keepGoing = handler.handleFailedWriting(</pre></td></tr>
-<tr> <td class="numLine"> 158</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> (Exception) fw.getCause(), ntries);</pre></td></tr>
-<tr> <td class="numLineCover"> 159</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> } <span class="keyword">catch</span> (GsaFeedFileSender.FailedReadingReply fr) {</pre></td></tr>
-<tr> <td class="numLineCover"> 160</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> log.log(Level.WARNING, <span class="string">"Unable to read reply from GSA"</span>, fr);</pre></td></tr>
-<tr> <td class="numLineCover"> 161</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> keepGoing = handler.handleFailedReadingReply(</pre></td></tr>
-<tr> <td class="numLine"> 162</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> (Exception) fr.getCause(), ntries);</pre></td></tr>
-<tr> <td class="numLineCover"> 163</td> <td class="nbHitsCovered"> 9</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 164</td> <td class="nbHitsCovered"><a title="Line 164: Conditional coverage 100% (2/2)."> 11</a></td> <td class="src"><pre class="src"> <a title="Line 164: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (keepGoing) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 165</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> log.log(Level.INFO, <span class="string">"Trying again... Number of attemps: {0}"</span>, ntries);</pre></td></tr>
-<tr> <td class="numLine"> 166</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 95</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> ((PollingIncrementalAdaptor) adaptor).getModifiedDocIds(<span class="keyword">this</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 96</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">break</span>; <span class="comment">// Success</span></pre></td></tr>
+<tr> <td class="numLineCover"> 97</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (InterruptedException ex) {</span></pre></td></tr>
+<tr> <td class="numLine"> 98</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Stop early.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 99</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> journal.recordIncrementalPushInterrupted();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 100</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.info(<span class="string">"Interrupted. Aborted incremental push of DocIds"</span>);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 101</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> ex;</span></pre></td></tr>
+<tr> <td class="numLineCover"> 102</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (Exception ex) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 103</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.log(Level.WARNING, <span class="string">"Unable to retrieve DocIds from adaptor"</span>, ex);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 104</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> keepGoing = handler.handleFailedToGetDocIds(ex, ntries);</span></pre></td></tr>
+<tr> <td class="numLine"> 105</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 167</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 106</td> <td class="nbHitsUncovered"><a title="Line 106: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 106: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (keepGoing) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 107</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.log(Level.INFO, <span class="string">"Trying again... Number of attemps: {0}"</span>, ntries);</span></pre></td></tr>
+<tr> <td class="numLine"> 108</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 109</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> journal.recordIncrementalPushFailed();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 110</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.warning(<span class="string">"Gave up. Failed full push of DocIds"</span>);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 111</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span>; <span class="comment">// Bail</span></span></pre></td></tr>
+<tr> <td class="numLine"> 112</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 113</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 168</td> <td class="nbHitsCovered"><a title="Line 168: Conditional coverage 100% (2/2)."> 10</a></td> <td class="src"><pre class="src"> <a title="Line 168: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (success) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 169</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> log.info(<span class="string">"Pushing batch succeeded"</span>);</pre></td></tr>
-<tr> <td class="numLine"> 170</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 171</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> log.log(Level.WARNING, <span class="string">"Gave up. First item in list: {0}"</span>, items.get(0));</pre></td></tr>
-<tr> <td class="numLine"> 172</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 173</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> log.info(<span class="string">"Finished pushing batch"</span>);</pre></td></tr>
-<tr> <td class="numLineCover"> 174</td> <td class="nbHitsCovered"><a title="Line 174: Conditional coverage 100% (2/2)."> 10</a></td> <td class="src"><pre class="src"> <a title="Line 174: Conditional coverage 100% (2/2)."> <span class="keyword">return</span> success ? <span class="keyword">null</span> : items.get(0);</a></pre></td></tr>
-<tr> <td class="numLine"> 175</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 176</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 114</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> journal.recordIncrementalPushSuccessful();</pre></td></tr>
+<tr> <td class="numLineCover"> 115</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> log.info(<span class="string">"Completed incremental pushing DocIds"</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 116</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 117</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 177</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/** Marker interface for an item that can exist in a feed. */</span></pre></td></tr>
-<tr> <td class="numLine"> 178</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">interface</span> Item {}</pre></td></tr>
-<tr> <td class="numLine"> 179</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 180</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 118</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 181</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Represents the ACL tag sent in feeds.</span></pre></td></tr>
-<tr> <td class="numLine"> 182</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 119</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Makes and sends metadata-and-url feed files to GSA. Generally, you should</span></pre></td></tr>
+<tr> <td class="numLine"> 120</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * use {@link #pushDocIds()} instead of this method. However, if you want to</span></pre></td></tr>
+<tr> <td class="numLine"> 121</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * push just a few DocIds to the GSA manually, this is the method to use.</span></pre></td></tr>
+<tr> <td class="numLine"> 122</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * This method blocks until all DocIds are sent or retrying failed.</span></pre></td></tr>
+<tr> <td class="numLine"> 123</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLine"> 183</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">static</span> <span class="keyword">final</span> <span class="keyword">class</span> AclItem <span class="keyword">implements</span> Item {</pre></td></tr>
-<tr> <td class="numLine"> 184</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> DocId id;</pre></td></tr>
-<tr> <td class="numLine"> 185</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> Acl acl;</pre></td></tr>
-<tr> <td class="numLine"> 186</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 187</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> <span class="keyword">public</span> AclItem(DocId id, Acl acl) {</pre></td></tr>
-<tr> <td class="numLineCover"> 188</td> <td class="nbHitsCovered"><a title="Line 188: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> 8</a></td> <td class="src"><pre class="src"> <a title="Line 188: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> <span class="keyword">if</span> (id == <span class="keyword">null</span> || acl == <span class="keyword">null</span>) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 189</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> NullPointerException(<span class="string">"DocId and Acl must not be null"</span>);</pre></td></tr>
-<tr> <td class="numLine"> 190</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 191</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.id = id;</pre></td></tr>
-<tr> <td class="numLineCover"> 192</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.acl = acl;</pre></td></tr>
-<tr> <td class="numLineCover"> 193</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 194</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 195</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> DocId getDocId() {</pre></td></tr>
-<tr> <td class="numLineCover"> 196</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> <span class="keyword">return</span> id;</pre></td></tr>
-<tr> <td class="numLine"> 197</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 124</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 125</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> Record pushRecords(Iterable<Record> items, PushErrorHandler handler)</pre></td></tr>
+<tr> <td class="numLine"> 126</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">throws</span> InterruptedException {</pre></td></tr>
+<tr> <td class="numLineCover"> 127</td> <td class="nbHitsCovered"><a title="Line 127: Conditional coverage 100% (2/2)."> 6</a></td> <td class="src"><pre class="src"> <a title="Line 127: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (handler == <span class="keyword">null</span>) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 128</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> handler = defaultErrorHandler;</pre></td></tr>
+<tr> <td class="numLine"> 129</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 198</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 199</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> Acl getAcl() {</pre></td></tr>
-<tr> <td class="numLineCover"> 200</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> <span class="keyword">return</span> acl;</pre></td></tr>
-<tr> <td class="numLine"> 201</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 202</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 130</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">return</span> pushItems(items.iterator(), handler);</pre></td></tr>
+<tr> <td class="numLine"> 131</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 132</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 133</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 134</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> DocId pushNamedResources(Map<DocId, Acl> resources,</pre></td></tr>
+<tr> <td class="numLine"> 135</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> PushErrorHandler handler)</pre></td></tr>
+<tr> <td class="numLine"> 136</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">throws</span> InterruptedException {</pre></td></tr>
+<tr> <td class="numLineCover"> 137</td> <td class="nbHitsCovered"><a title="Line 137: Conditional coverage 100% (2/2)."> 4</a></td> <td class="src"><pre class="src"> <a title="Line 137: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (handler == <span class="keyword">null</span>) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 138</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> handler = defaultErrorHandler;</pre></td></tr>
+<tr> <td class="numLine"> 139</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 140</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> List<AclItem> acls = <span class="keyword">new</span> ArrayList<AclItem>(resources.size());</pre></td></tr>
+<tr> <td class="numLineCover"> 141</td> <td class="nbHitsCovered"><a title="Line 141: Conditional coverage 100% (2/2)."> 4</a></td> <td class="src"><pre class="src"> <a title="Line 141: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (Map.Entry<DocId, Acl> me : resources.entrySet()) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 142</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> acls.add(<span class="keyword">new</span> AclItem(me.getKey(), me.getValue()));</pre></td></tr>
+<tr> <td class="numLine"> 143</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 144</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> AclItem acl = pushItems(acls.iterator(), handler);</pre></td></tr>
+<tr> <td class="numLineCover"> 145</td> <td class="nbHitsCovered"><a title="Line 145: Conditional coverage 100% (2/2)."> 2</a></td> <td class="src"><pre class="src"> <a title="Line 145: Conditional coverage 100% (2/2)."> <span class="keyword">return</span> acl == <span class="keyword">null</span> ? <span class="keyword">null</span> : acl.getDocId();</a></pre></td></tr>
+<tr> <td class="numLine"> 146</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 147</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 148</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <T <span class="keyword">extends</span> Item> T pushItems(Iterator<T> items,</pre></td></tr>
+<tr> <td class="numLine"> 149</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> PushErrorHandler handler) <span class="keyword">throws</span> InterruptedException {</pre></td></tr>
+<tr> <td class="numLineCover"> 150</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> log.log(Level.INFO, <span class="string">"Pushing DocIds"</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 151</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> <span class="keyword">final</span> <span class="keyword">int</span> max = config.getFeedMaxUrls();</pre></td></tr>
+<tr> <td class="numLineCover"> 152</td> <td class="nbHitsCovered"><a title="Line 152: Conditional coverage 100% (2/2)."> 13</a></td> <td class="src"><pre class="src"> <a title="Line 152: Conditional coverage 100% (2/2)."> <span class="keyword">while</span> (items.hasNext()) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 153</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> List<T> batch = <span class="keyword">new</span> ArrayList<T>();</pre></td></tr>
+<tr> <td class="numLineCover"> 154</td> <td class="nbHitsCovered"><a title="Line 154: Conditional coverage 100% (2/2)."> 23</a></td> <td class="src"><pre class="src"> <a title="Line 154: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (<span class="keyword">int</span> j = 0; j < max; j++) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 155</td> <td class="nbHitsCovered"><a title="Line 155: Conditional coverage 100% (2/2)."> 21</a></td> <td class="src"><pre class="src"> <a title="Line 155: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (!items.hasNext()) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 156</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
+<tr> <td class="numLine"> 157</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 158</td> <td class="nbHitsCovered"> 13</td> <td class="src"><pre class="src"> batch.add(items.next());</pre></td></tr>
+<tr> <td class="numLine"> 159</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 160</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> log.log(Level.INFO, <span class="string">"Pushing group of {0} DocIds"</span>, batch.size());</pre></td></tr>
+<tr> <td class="numLineCover"> 161</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> T failedId = pushSizedBatchOfRecords(batch, handler);</pre></td></tr>
+<tr> <td class="numLineCover"> 162</td> <td class="nbHitsCovered"><a title="Line 162: Conditional coverage 100% (2/2)."> 10</a></td> <td class="src"><pre class="src"> <a title="Line 162: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (failedId != <span class="keyword">null</span>) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 163</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> log.info(<span class="string">"Failed to push all ids. Failed on docId: "</span> + failedId);</pre></td></tr>
+<tr> <td class="numLineCover"> 164</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> <span class="keyword">return</span> failedId;</pre></td></tr>
+<tr> <td class="numLine"> 165</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 166</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> journal.recordDocIdPush(batch);</pre></td></tr>
+<tr> <td class="numLineCover"> 167</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 168</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> log.info(<span class="string">"Pushed DocIds"</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 169</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">null</span>;</pre></td></tr>
+<tr> <td class="numLine"> 170</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 171</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 172</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <T <span class="keyword">extends</span> Item> T pushSizedBatchOfRecords(List<T> items,</pre></td></tr>
+<tr> <td class="numLine"> 173</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> PushErrorHandler handler)</pre></td></tr>
+<tr> <td class="numLine"> 174</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">throws</span> InterruptedException {</pre></td></tr>
+<tr> <td class="numLineCover"> 175</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> String feedSourceName = config.getFeedName();</pre></td></tr>
+<tr> <td class="numLineCover"> 176</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> String xmlFeedFile = fileMaker.makeMetadataAndUrlXml(feedSourceName, items);</pre></td></tr>
+<tr> <td class="numLineCover"> 177</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> <span class="keyword">boolean</span> keepGoing = <span class="keyword">true</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 178</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> <span class="keyword">boolean</span> success = <span class="keyword">false</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 179</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> log.log(Level.INFO, <span class="string">"Pushing batch of {0} DocIds to GSA"</span>, items.size());</pre></td></tr>
+<tr> <td class="numLineCover"> 180</td> <td class="nbHitsCovered"><a title="Line 180: Conditional coverage 100% (2/2)."> 21</a></td> <td class="src"><pre class="src"> <a title="Line 180: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (<span class="keyword">int</span> ntries = 1; keepGoing; ntries++) {</a></pre></td></tr>
+<tr> <td class="numLine"> 181</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 182</td> <td class="nbHitsCovered"> 11</td> <td class="src"><pre class="src"> log.info(<span class="string">"Sending feed to GSA host name: "</span> + config.getGsaHostname());</pre></td></tr>
+<tr> <td class="numLineCover"> 183</td> <td class="nbHitsCovered"> 11</td> <td class="src"><pre class="src"> fileSender.sendMetadataAndUrl(config.getGsaHostname(), feedSourceName,</pre></td></tr>
+<tr> <td class="numLine"> 184</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> xmlFeedFile,</pre></td></tr>
+<tr> <td class="numLine"> 185</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> config.isServerToUseCompression());</pre></td></tr>
+<tr> <td class="numLineCover"> 186</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> keepGoing = <span class="keyword">false</span>; <span class="comment">// Sent.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 187</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> success = <span class="keyword">true</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 188</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> } <span class="keyword">catch</span> (GsaFeedFileSender.FailedToConnect ftc) {</pre></td></tr>
+<tr> <td class="numLineCover"> 189</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> log.log(Level.WARNING, <span class="string">"Unable to connect to the GSA"</span>, ftc);</pre></td></tr>
+<tr> <td class="numLineCover"> 190</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> keepGoing = handler.handleFailedToConnect(</pre></td></tr>
+<tr> <td class="numLine"> 191</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> (Exception) ftc.getCause(), ntries);</pre></td></tr>
+<tr> <td class="numLineCover"> 192</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> } <span class="keyword">catch</span> (GsaFeedFileSender.FailedWriting fw) {</pre></td></tr>
+<tr> <td class="numLineCover"> 193</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> log.log(Level.WARNING, <span class="string">"Unable to write request to the GSA"</span>, fw);</pre></td></tr>
+<tr> <td class="numLineCover"> 194</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> keepGoing = handler.handleFailedWriting(</pre></td></tr>
+<tr> <td class="numLine"> 195</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> (Exception) fw.getCause(), ntries);</pre></td></tr>
+<tr> <td class="numLineCover"> 196</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> } <span class="keyword">catch</span> (GsaFeedFileSender.FailedReadingReply fr) {</pre></td></tr>
+<tr> <td class="numLineCover"> 197</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> log.log(Level.WARNING, <span class="string">"Unable to read reply from GSA"</span>, fr);</pre></td></tr>
+<tr> <td class="numLineCover"> 198</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> keepGoing = handler.handleFailedReadingReply(</pre></td></tr>
+<tr> <td class="numLine"> 199</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> (Exception) fr.getCause(), ntries);</pre></td></tr>
+<tr> <td class="numLineCover"> 200</td> <td class="nbHitsCovered"> 9</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 201</td> <td class="nbHitsCovered"><a title="Line 201: Conditional coverage 100% (2/2)."> 11</a></td> <td class="src"><pre class="src"> <a title="Line 201: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (keepGoing) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 202</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> log.log(Level.INFO, <span class="string">"Trying again... Number of attemps: {0}"</span>, ntries);</pre></td></tr>
<tr> <td class="numLine"> 203</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 204</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 205</td> <td class="nbHitsCovered"><a title="Line 205: Conditional coverage 100% (2/2)."> 10</a></td> <td class="src"><pre class="src"> <a title="Line 205: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (success) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 206</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> log.info(<span class="string">"Pushing batch succeeded"</span>);</pre></td></tr>
+<tr> <td class="numLine"> 207</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 208</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> log.log(Level.WARNING, <span class="string">"Gave up. First item in list: {0}"</span>, items.get(0));</pre></td></tr>
+<tr> <td class="numLine"> 209</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 210</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> log.info(<span class="string">"Finished pushing batch"</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 211</td> <td class="nbHitsCovered"><a title="Line 211: Conditional coverage 100% (2/2)."> 10</a></td> <td class="src"><pre class="src"> <a title="Line 211: Conditional coverage 100% (2/2)."> <span class="keyword">return</span> success ? <span class="keyword">null</span> : items.get(0);</a></pre></td></tr>
+<tr> <td class="numLine"> 212</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 213</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 214</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/** Marker interface for an item that can exist in a feed. */</span></pre></td></tr>
+<tr> <td class="numLine"> 215</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">interface</span> Item {}</pre></td></tr>
+<tr> <td class="numLine"> 216</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 217</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 218</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Represents the ACL tag sent in feeds.</span></pre></td></tr>
+<tr> <td class="numLine"> 219</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 220</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">static</span> <span class="keyword">final</span> <span class="keyword">class</span> AclItem <span class="keyword">implements</span> Item {</pre></td></tr>
+<tr> <td class="numLine"> 221</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> DocId id;</pre></td></tr>
+<tr> <td class="numLine"> 222</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> Acl acl;</pre></td></tr>
+<tr> <td class="numLine"> 223</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 224</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> <span class="keyword">public</span> AclItem(DocId id, Acl acl) {</pre></td></tr>
+<tr> <td class="numLineCover"> 225</td> <td class="nbHitsCovered"><a title="Line 225: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> 8</a></td> <td class="src"><pre class="src"> <a title="Line 225: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> <span class="keyword">if</span> (id == <span class="keyword">null</span> || acl == <span class="keyword">null</span>) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 226</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> NullPointerException(<span class="string">"DocId and Acl must not be null"</span>);</pre></td></tr>
+<tr> <td class="numLine"> 227</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 228</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.id = id;</pre></td></tr>
+<tr> <td class="numLineCover"> 229</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.acl = acl;</pre></td></tr>
+<tr> <td class="numLineCover"> 230</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 231</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 232</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> DocId getDocId() {</pre></td></tr>
+<tr> <td class="numLineCover"> 233</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> <span class="keyword">return</span> id;</pre></td></tr>
+<tr> <td class="numLine"> 234</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 235</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 236</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> Acl getAcl() {</pre></td></tr>
+<tr> <td class="numLineCover"> 237</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> <span class="keyword">return</span> acl;</pre></td></tr>
+<tr> <td class="numLine"> 238</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 239</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 240</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
</table>
diff --git a/coverage/com.google.enterprise.adaptor.GsaCommunicationHandler.html b/coverage/com.google.enterprise.adaptor.GsaCommunicationHandler.html
index 39550a1..ae99442 100644
--- a/coverage/com.google.enterprise.adaptor.GsaCommunicationHandler.html
+++ b/coverage/com.google.enterprise.adaptor.GsaCommunicationHandler.html
@@ -12,16 +12,16 @@
<div class="separator"> </div>
<table class="report">
<thead><tr> <td class="heading">Classes in this File</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
- <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">41</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:82px"><span class="text">192/233</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">17</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:70px"><span class="text">41/58</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.4166666666666665;</span>3.417</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$1</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">5/5</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.4166666666666665;</span>3.417</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$2</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">7/7</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.4166666666666665;</span>3.417</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$AdaptorContextImpl</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">12</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:50px"><span class="text">12/24</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">4</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/4</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.4166666666666665;</span>3.417</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$AlreadyRunningRunnable</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">2</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:33px"><span class="text">1/3</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.4166666666666665;</span>3.417</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$GsaConfigModListener</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">21</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:4px"><span class="text">1/22</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">6</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/6</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.4166666666666665;</span>3.417</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$IncrementalPushRunnable</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">4</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:63px"><span class="text">7/11</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.4166666666666665;</span>3.417</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$PushRunnable</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">6</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:50px"><span class="text">6/12</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">1</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:50px"><span class="text">1/2</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.4166666666666665;</span>3.417</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$ShutdownHook</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">2</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:33px"><span class="text">1/3</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.4166666666666665;</span>3.417</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$SuggestHandlerAbortPolicy</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">5</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:44px"><span class="text">4/9</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.4166666666666665;</span>3.417</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">41</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:82px"><span class="text">192/233</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">17</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:70px"><span class="text">41/58</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.225;</span>3.225</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$1</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">5/5</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.225;</span>3.225</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$2</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">7/7</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.225;</span>3.225</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$AdaptorContextImpl</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">15</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:44px"><span class="text">12/27</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">4</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/4</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.225;</span>3.225</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$AlreadyRunningRunnable</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">2</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:33px"><span class="text">1/3</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.225;</span>3.225</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$GsaConfigModListener</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">21</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:4px"><span class="text">1/22</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">6</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/6</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.225;</span>3.225</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$IncrementalPushRunnable</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">9</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:43px"><span class="text">7/16</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">2</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/2</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.225;</span>3.225</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$PushRunnable</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">6</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:50px"><span class="text">6/12</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">1</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:50px"><span class="text">1/2</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.225;</span>3.225</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$ShutdownHook</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">2</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:33px"><span class="text">1/3</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.225;</span>3.225</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$SuggestHandlerAbortPolicy</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">5</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:44px"><span class="text">4/9</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.225;</span>3.225</td></tr>
</table>
<div class="separator"> </div>
@@ -122,7 +122,7 @@
<td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 48</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">/** This class handles the communications with GSA. */</span></pre></td></tr>
-<tr> <td class="numLineCover"> 49</td> <td class="nbHitsCovered"> 25</td> <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">class</span> GsaCommunicationHandler {</pre></td></tr>
+<tr> <td class="numLineCover"> 49</td> <td class="nbHitsCovered"> 24</td> <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">class</span> GsaCommunicationHandler {</pre></td></tr>
<tr> <td class="numLine"> 50</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> String SLEEP_PATH = <span class="string">"/sleep"</span>;</pre></td></tr>
<tr> <td class="numLine"> 51</td> <td class="nbHits"> </td>
@@ -962,7 +962,7 @@
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> run() {</pre></td></tr>
<tr> <td class="numLine"> 591</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 592</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> docIdSender.pushDocIdsFromAdaptor(handler);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 592</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> docIdSender.pushFullDocIdsFromAdaptor(handler);</span></pre></td></tr>
<tr> <td class="numLineCover"> 593</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (InterruptedException ex) {</span></pre></td></tr>
<tr> <td class="numLineCover"> 594</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Thread.currentThread().interrupt();</span></pre></td></tr>
<tr> <td class="numLineCover"> 595</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
@@ -996,275 +996,317 @@
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine"> 613</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">class</span> IncrementalPushRunnable <span class="keyword">implements</span> Runnable {</pre></td></tr>
-<tr> <td class="numLine"> 614</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> PollingIncrementalAdaptor adaptor;</pre></td></tr>
+<tr> <td class="numLineCover"> 614</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">volatile</span> GetDocIdsErrorHandler handler</pre></td></tr>
<tr> <td class="numLine"> 615</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> = <span class="keyword">new</span> DefaultGetDocIdsErrorHandler();</pre></td></tr>
+<tr> <td class="numLine"> 616</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> PollingIncrementalAdaptor adaptor;</pre></td></tr>
+<tr> <td class="numLine"> 617</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 616</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">public</span> IncrementalPushRunnable(PollingIncrementalAdaptor adaptor) {</pre></td></tr>
-<tr> <td class="numLineCover"> 617</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.adaptor = adaptor;</pre></td></tr>
-<tr> <td class="numLineCover"> 618</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 619</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 620</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLineCover"> 618</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">public</span> IncrementalPushRunnable(PollingIncrementalAdaptor adaptor) {</pre></td></tr>
+<tr> <td class="numLineCover"> 619</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.adaptor = adaptor;</pre></td></tr>
+<tr> <td class="numLineCover"> 620</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 621</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> run() {</pre></td></tr>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 622</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 623</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> run() {</pre></td></tr>
+<tr> <td class="numLine"> 624</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 623</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> log.info(<span class="string">"Incremental feed push has been initiated"</span>);</pre></td></tr>
-<tr> <td class="numLineCover"> 624</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> adaptor.getModifiedDocIds(docIdSender);</pre></td></tr>
-<tr> <td class="numLineCover"> 625</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (InterruptedException ex) {</span></pre></td></tr>
-<tr> <td class="numLineCover"> 626</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Thread.currentThread().interrupt();</span></pre></td></tr>
-<tr> <td class="numLineCover"> 627</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (Exception ex) {</span></pre></td></tr>
-<tr> <td class="numLineCover"> 628</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.log(Level.WARNING, <span class="string">"Exception during incremental polling"</span>, ex);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 629</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 630</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 631</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 625</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> docIdSender.pushIncrementalDocIdsFromAdaptor(handler);</pre></td></tr>
+<tr> <td class="numLineCover"> 626</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (InterruptedException ex) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 627</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Thread.currentThread().interrupt();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 628</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (Exception ex) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 629</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.log(Level.WARNING, <span class="string">"Exception during incremental polling"</span>, ex);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 630</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 631</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 632</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 633</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 634</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Runnable that logs an error that {@link PushRunnable} is already executing.</span></pre></td></tr>
-<tr> <td class="numLine"> 635</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLineCover"> 636</td> <td class="nbHitsCovered"> 52</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">class</span> AlreadyRunningRunnable <span class="keyword">implements</span> Runnable {</pre></td></tr>
-<tr> <td class="numLine"> 637</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 638</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> run() {</pre></td></tr>
-<tr> <td class="numLineCover"> 639</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.warning(<span class="string">"Skipping scheduled push of docIds. The previous invocation "</span></span></pre></td></tr>
-<tr> <td class="numLine"> 640</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> + <span class="string">"is still running."</span>);</pre></td></tr>
-<tr> <td class="numLineCover"> 641</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
-<tr> <td class="numLine"> 642</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 643</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 644</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">class</span> ShutdownHook <span class="keyword">implements</span> Runnable {</pre></td></tr>
-<tr> <td class="numLine"> 645</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 646</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> run() {</pre></td></tr>
-<tr> <td class="numLine"> 647</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// Allow three seconds for things to stop.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 648</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> stop(3);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 649</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
-<tr> <td class="numLine"> 650</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 651</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 652</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">class</span> GsaConfigModListener <span class="keyword">implements</span> ConfigModificationListener {</pre></td></tr>
-<tr> <td class="numLine"> 653</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 654</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> configModified(ConfigModificationEvent ev) {</pre></td></tr>
-<tr> <td class="numLineCover"> 655</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Set<String> modifiedKeys = ev.getModifiedKeys();</span></pre></td></tr>
-<tr> <td class="numLineCover"> 656</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">synchronized</span> (GsaCommunicationHandler.<span class="keyword">this</span>) {</span></pre></td></tr>
-<tr> <td class="numLineCover"> 657</td> <td class="nbHitsUncovered"><a title="Line 657: Conditional coverage 0% (0/4) [each condition: 0%, 0%]."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 657: Conditional coverage 0% (0/4) [each condition: 0%, 0%]."> <span class="keyword">if</span> (modifiedKeys.contains(<span class="string">"adaptor.fullListingSchedule"</span>)</a></span></pre></td></tr>
-<tr> <td class="numLine"> 658</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> && sendDocIdsSchedId != <span class="keyword">null</span>) {</pre></td></tr>
-<tr> <td class="numLineCover"> 659</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> String schedule = ev.getNewConfig().getAdaptorFullListingSchedule();</span></pre></td></tr>
-<tr> <td class="numLine"> 660</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 661</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> scheduler.reschedule(sendDocIdsSchedId, schedule);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 662</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (InvalidPatternException ex) {</span></pre></td></tr>
-<tr> <td class="numLineCover"> 663</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.log(Level.WARNING, <span class="string">"Invalid schedule pattern"</span>, ex);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 664</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
-<tr> <td class="numLine"> 665</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 666</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
-<tr> <td class="numLine"> 667</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 668</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// List of "safe" keys that can be updated without a restart.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 669</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> List<String> safeKeys = Arrays.asList(<span class="string">"adaptor.fullListingSchedule"</span>);</span></pre></td></tr>
-<tr> <td class="numLine"> 670</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// Set of "unsafe" keys that have been modified.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 671</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Set<String> modifiedKeysRequiringRestart</span></pre></td></tr>
-<tr> <td class="numLine"> 672</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> = <span class="keyword">new</span> HashSet<String>(modifiedKeys);</pre></td></tr>
-<tr> <td class="numLineCover"> 673</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> modifiedKeysRequiringRestart.removeAll(safeKeys);</span></pre></td></tr>
-<tr> <td class="numLine"> 674</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// If there are modified "unsafe" keys, then we restart things to make</span></pre></td></tr>
-<tr> <td class="numLine"> 675</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// sure all the code is up-to-date with the new values.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 676</td> <td class="nbHitsUncovered"><a title="Line 676: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 676: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (!modifiedKeysRequiringRestart.isEmpty()) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 677</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.warning(<span class="string">"Unsafe configuration keys modified. To ensure a sane "</span></span></pre></td></tr>
-<tr> <td class="numLine"> 678</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> + <span class="string">"state, the adaptor is restarting."</span>);</pre></td></tr>
-<tr> <td class="numLineCover"> 679</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> stop(3);</span></pre></td></tr>
-<tr> <td class="numLine"> 680</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 681</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> start();</span></pre></td></tr>
-<tr> <td class="numLineCover"> 682</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (Exception ex) {</span></pre></td></tr>
-<tr> <td class="numLineCover"> 683</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.log(Level.SEVERE, <span class="string">"Automatic restart failed"</span>, ex);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 684</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> RuntimeException(ex);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 685</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
-<tr> <td class="numLine"> 686</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 687</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
-<tr> <td class="numLine"> 688</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 689</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 690</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 691</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * This class is thread-safe.</span></pre></td></tr>
-<tr> <td class="numLine"> 692</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLineCover"> 693</td> <td class="nbHitsCovered"> 18</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">class</span> AdaptorContextImpl <span class="keyword">implements</span> AdaptorContext {</pre></td></tr>
-<tr> <td class="numLine"> 694</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 695</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> Config getConfig() {</pre></td></tr>
-<tr> <td class="numLineCover"> 696</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> config;</pre></td></tr>
-<tr> <td class="numLine"> 697</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 698</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 699</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 700</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> DocIdPusher getDocIdPusher() {</pre></td></tr>
-<tr> <td class="numLineCover"> 701</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> docIdSender;</pre></td></tr>
-<tr> <td class="numLine"> 702</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 703</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 704</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 705</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> DocIdEncoder getDocIdEncoder() {</pre></td></tr>
-<tr> <td class="numLineCover"> 706</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> docIdCodec;</pre></td></tr>
-<tr> <td class="numLine"> 707</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 708</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 709</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 710</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> addStatusSource(StatusSource source) {</pre></td></tr>
-<tr> <td class="numLineCover"> 711</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> dashboard.addStatusSource(source);</pre></td></tr>
-<tr> <td class="numLineCover"> 712</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 713</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 714</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 715</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> removeStatusSource(StatusSource source) {</pre></td></tr>
-<tr> <td class="numLineCover"> 716</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> dashboard.removeStatusSource(source);</pre></td></tr>
-<tr> <td class="numLineCover"> 717</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 718</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 719</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 720</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> setGetDocIdsErrorHandler(GetDocIdsErrorHandler handler) {</pre></td></tr>
-<tr> <td class="numLineCover"> 721</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> ((PushRunnable) docIdFullPusher.getRunnable())</pre></td></tr>
-<tr> <td class="numLine"> 722</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> .setGetDocIdsErrorHandler(handler);</pre></td></tr>
-<tr> <td class="numLineCover"> 723</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 724</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 634</td> <td class="nbHitsUncovered"><a title="Line 634: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 634: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (handler == <span class="keyword">null</span>) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 635</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> NullPointerException();</span></pre></td></tr>
+<tr> <td class="numLine"> 636</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 637</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">this</span>.handler = handler;</span></pre></td></tr>
+<tr> <td class="numLineCover"> 638</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 639</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 725</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 726</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 640</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">public</span> GetDocIdsErrorHandler getGetDocIdsErrorHandler() {</pre></td></tr>
-<tr> <td class="numLineCover"> 727</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">return</span> ((PushRunnable) docIdFullPusher.getRunnable())</pre></td></tr>
-<tr> <td class="numLine"> 728</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> .getGetDocIdsErrorHandler();</pre></td></tr>
-<tr> <td class="numLine"> 729</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 641</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> handler;</span></pre></td></tr>
+<tr> <td class="numLine"> 642</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 643</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 644</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 645</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 646</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Runnable that logs an error that {@link PushRunnable} is already executing.</span></pre></td></tr>
+<tr> <td class="numLine"> 647</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLineCover"> 648</td> <td class="nbHitsCovered"> 52</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">class</span> AlreadyRunningRunnable <span class="keyword">implements</span> Runnable {</pre></td></tr>
+<tr> <td class="numLine"> 649</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 650</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> run() {</pre></td></tr>
+<tr> <td class="numLineCover"> 651</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.warning(<span class="string">"Skipping scheduled push of docIds. The previous invocation "</span></span></pre></td></tr>
+<tr> <td class="numLine"> 652</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> + <span class="string">"is still running."</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 653</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 654</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 655</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 656</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">class</span> ShutdownHook <span class="keyword">implements</span> Runnable {</pre></td></tr>
+<tr> <td class="numLine"> 657</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 658</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> run() {</pre></td></tr>
+<tr> <td class="numLine"> 659</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Allow three seconds for things to stop.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 660</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> stop(3);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 661</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 662</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 663</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 664</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">class</span> GsaConfigModListener <span class="keyword">implements</span> ConfigModificationListener {</pre></td></tr>
+<tr> <td class="numLine"> 665</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 666</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> configModified(ConfigModificationEvent ev) {</pre></td></tr>
+<tr> <td class="numLineCover"> 667</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Set<String> modifiedKeys = ev.getModifiedKeys();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 668</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">synchronized</span> (GsaCommunicationHandler.<span class="keyword">this</span>) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 669</td> <td class="nbHitsUncovered"><a title="Line 669: Conditional coverage 0% (0/4) [each condition: 0%, 0%]."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 669: Conditional coverage 0% (0/4) [each condition: 0%, 0%]."> <span class="keyword">if</span> (modifiedKeys.contains(<span class="string">"adaptor.fullListingSchedule"</span>)</a></span></pre></td></tr>
+<tr> <td class="numLine"> 670</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> && sendDocIdsSchedId != <span class="keyword">null</span>) {</pre></td></tr>
+<tr> <td class="numLineCover"> 671</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> String schedule = ev.getNewConfig().getAdaptorFullListingSchedule();</span></pre></td></tr>
+<tr> <td class="numLine"> 672</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 673</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> scheduler.reschedule(sendDocIdsSchedId, schedule);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 674</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (InvalidPatternException ex) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 675</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.log(Level.WARNING, <span class="string">"Invalid schedule pattern"</span>, ex);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 676</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 677</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 678</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 679</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 680</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// List of "safe" keys that can be updated without a restart.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 681</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> List<String> safeKeys = Arrays.asList(<span class="string">"adaptor.fullListingSchedule"</span>);</span></pre></td></tr>
+<tr> <td class="numLine"> 682</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Set of "unsafe" keys that have been modified.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 683</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Set<String> modifiedKeysRequiringRestart</span></pre></td></tr>
+<tr> <td class="numLine"> 684</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> = <span class="keyword">new</span> HashSet<String>(modifiedKeys);</pre></td></tr>
+<tr> <td class="numLineCover"> 685</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> modifiedKeysRequiringRestart.removeAll(safeKeys);</span></pre></td></tr>
+<tr> <td class="numLine"> 686</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// If there are modified "unsafe" keys, then we restart things to make</span></pre></td></tr>
+<tr> <td class="numLine"> 687</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// sure all the code is up-to-date with the new values.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 688</td> <td class="nbHitsUncovered"><a title="Line 688: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 688: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (!modifiedKeysRequiringRestart.isEmpty()) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 689</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.warning(<span class="string">"Unsafe configuration keys modified. To ensure a sane "</span></span></pre></td></tr>
+<tr> <td class="numLine"> 690</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> + <span class="string">"state, the adaptor is restarting."</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 691</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> stop(3);</span></pre></td></tr>
+<tr> <td class="numLine"> 692</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 693</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> start();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 694</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (Exception ex) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 695</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.log(Level.SEVERE, <span class="string">"Automatic restart failed"</span>, ex);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 696</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> RuntimeException(ex);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 697</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 698</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 699</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 700</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 701</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 702</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 703</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * This class is thread-safe.</span></pre></td></tr>
+<tr> <td class="numLine"> 704</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLineCover"> 705</td> <td class="nbHitsCovered"> 18</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">class</span> AdaptorContextImpl <span class="keyword">implements</span> AdaptorContext {</pre></td></tr>
+<tr> <td class="numLine"> 706</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 707</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> Config getConfig() {</pre></td></tr>
+<tr> <td class="numLineCover"> 708</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> config;</pre></td></tr>
+<tr> <td class="numLine"> 709</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 710</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 711</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 712</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> DocIdPusher getDocIdPusher() {</pre></td></tr>
+<tr> <td class="numLineCover"> 713</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> docIdSender;</pre></td></tr>
+<tr> <td class="numLine"> 714</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 715</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 716</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 717</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> DocIdEncoder getDocIdEncoder() {</pre></td></tr>
+<tr> <td class="numLineCover"> 718</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> docIdCodec;</pre></td></tr>
+<tr> <td class="numLine"> 719</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 720</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 721</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 722</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> addStatusSource(StatusSource source) {</pre></td></tr>
+<tr> <td class="numLineCover"> 723</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> dashboard.addStatusSource(source);</pre></td></tr>
+<tr> <td class="numLineCover"> 724</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 725</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 726</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 727</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> removeStatusSource(StatusSource source) {</pre></td></tr>
+<tr> <td class="numLineCover"> 728</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> dashboard.removeStatusSource(source);</pre></td></tr>
+<tr> <td class="numLineCover"> 729</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 730</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 731</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> @Override</pre></td></tr>
<tr> <td class="numLine"> 732</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> SensitiveValueDecoder getSensitiveValueDecoder() {</pre></td></tr>
-<tr> <td class="numLineCover"> 733</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> secureValueCodec;</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> setGetDocIdsFullErrorHandler(GetDocIdsErrorHandler handler) {</pre></td></tr>
+<tr> <td class="numLineCover"> 733</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> ((PushRunnable) docIdFullPusher.getRunnable())</pre></td></tr>
<tr> <td class="numLine"> 734</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 735</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
+ <td class="src"><pre class="src"> .setGetDocIdsErrorHandler(handler);</pre></td></tr>
+<tr> <td class="numLineCover"> 735</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 736</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> @Override</pre></td></tr>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 737</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> HttpContext createHttpContext(String path, HttpHandler handler) {</pre></td></tr>
-<tr> <td class="numLineCover"> 738</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> addFilters(server.createContext(path, handler));</span></pre></td></tr>
-<tr> <td class="numLine"> 739</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 738</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> GetDocIdsErrorHandler getGetDocIdsFullErrorHandler() {</pre></td></tr>
+<tr> <td class="numLineCover"> 739</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">return</span> ((PushRunnable) docIdFullPusher.getRunnable())</pre></td></tr>
<tr> <td class="numLine"> 740</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
+ <td class="src"><pre class="src"> .getGetDocIdsErrorHandler();</pre></td></tr>
<tr> <td class="numLine"> 741</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 742</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> Session getUserSession(HttpExchange ex, <span class="keyword">boolean</span> create) {</pre></td></tr>
-<tr> <td class="numLineCover"> 743</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Session session = sessionManager.getSession(ex, create);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 744</td> <td class="nbHitsUncovered"><a title="Line 744: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 744: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (session == <span class="keyword">null</span>) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 745</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">null</span>;</span></pre></td></tr>
-<tr> <td class="numLine"> 746</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 747</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">final</span> String wrappedSessionName = <span class="string">"wrapped-session"</span>;</span></pre></td></tr>
-<tr> <td class="numLine"> 748</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> Session nsSession;</pre></td></tr>
-<tr> <td class="numLineCover"> 749</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">synchronized</span> (session) {</span></pre></td></tr>
-<tr> <td class="numLineCover"> 750</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> nsSession = (Session) session.getAttribute(wrappedSessionName);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 751</td> <td class="nbHitsUncovered"><a title="Line 751: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 751: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (nsSession == <span class="keyword">null</span>) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 752</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> nsSession = <span class="keyword">new</span> NamespacedSession(session, <span class="string">"adaptor-impl-"</span>);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 753</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> session.setAttribute(wrappedSessionName, nsSession);</span></pre></td></tr>
-<tr> <td class="numLine"> 754</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 755</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
-<tr> <td class="numLineCover"> 756</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> nsSession;</span></pre></td></tr>
-<tr> <td class="numLine"> 757</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 758</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 759</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 742</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 760</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 761</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Executes Runnable in current thread, but only after setting a thread-local</span></pre></td></tr>
-<tr> <td class="numLine"> 762</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * object. The code that will be run, is expected to take notice of the set</span></pre></td></tr>
-<tr> <td class="numLine"> 763</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * variable and abort immediately. This is a hack.</span></pre></td></tr>
-<tr> <td class="numLine"> 764</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLine"> 765</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">class</span> SuggestHandlerAbortPolicy</pre></td></tr>
-<tr> <td class="numLine"> 766</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">implements</span> RejectedExecutionHandler {</pre></td></tr>
-<tr> <td class="numLine"> 767</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> ThreadLocal<Object> abortImmediately;</pre></td></tr>
-<tr> <td class="numLineCover"> 768</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> Object signal = <span class="keyword">new</span> Object();</pre></td></tr>
-<tr> <td class="numLine"> 769</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 770</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> <span class="keyword">public</span> SuggestHandlerAbortPolicy(ThreadLocal<Object> abortImmediately) {</pre></td></tr>
-<tr> <td class="numLineCover"> 771</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.abortImmediately = abortImmediately;</pre></td></tr>
-<tr> <td class="numLineCover"> 772</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 773</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 774</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 743</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 775</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> rejectedExecution(Runnable r, ThreadPoolExecutor executor) {</pre></td></tr>
-<tr> <td class="numLineCover"> 776</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> abortImmediately.set(signal);</span></pre></td></tr>
-<tr> <td class="numLine"> 777</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 778</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> r.run();</span></pre></td></tr>
+<tr> <td class="numLine"> 744</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> setGetDocIdsIncrementalErrorHandler(</pre></td></tr>
+<tr> <td class="numLine"> 745</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> GetDocIdsErrorHandler handler) {</pre></td></tr>
+<tr> <td class="numLineCover"> 746</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> ((PushRunnable) docIdFullPusher.getRunnable())</span></pre></td></tr>
+<tr> <td class="numLine"> 747</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> .setGetDocIdsErrorHandler(handler);</pre></td></tr>
+<tr> <td class="numLineCover"> 748</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 749</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 750</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 751</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> GetDocIdsErrorHandler getGetDocIdsIncrementalErrorHandler() {</pre></td></tr>
+<tr> <td class="numLineCover"> 752</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> ((PushRunnable) docIdFullPusher.getRunnable())</span></pre></td></tr>
+<tr> <td class="numLine"> 753</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> .getGetDocIdsErrorHandler();</pre></td></tr>
+<tr> <td class="numLine"> 754</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 755</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 756</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 757</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> SensitiveValueDecoder getSensitiveValueDecoder() {</pre></td></tr>
+<tr> <td class="numLineCover"> 758</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> secureValueCodec;</pre></td></tr>
+<tr> <td class="numLine"> 759</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 760</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 761</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 762</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> HttpContext createHttpContext(String path, HttpHandler handler) {</pre></td></tr>
+<tr> <td class="numLineCover"> 763</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> addFilters(server.createContext(path, handler));</span></pre></td></tr>
+<tr> <td class="numLine"> 764</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 765</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 766</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 767</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> Session getUserSession(HttpExchange ex, <span class="keyword">boolean</span> create) {</pre></td></tr>
+<tr> <td class="numLineCover"> 768</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Session session = sessionManager.getSession(ex, create);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 769</td> <td class="nbHitsUncovered"><a title="Line 769: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 769: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (session == <span class="keyword">null</span>) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 770</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">null</span>;</span></pre></td></tr>
+<tr> <td class="numLine"> 771</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 772</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">final</span> String wrappedSessionName = <span class="string">"wrapped-session"</span>;</span></pre></td></tr>
+<tr> <td class="numLine"> 773</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> Session nsSession;</pre></td></tr>
+<tr> <td class="numLineCover"> 774</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">synchronized</span> (session) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 775</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> nsSession = (Session) session.getAttribute(wrappedSessionName);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 776</td> <td class="nbHitsUncovered"><a title="Line 776: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 776: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (nsSession == <span class="keyword">null</span>) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 777</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> nsSession = <span class="keyword">new</span> NamespacedSession(session, <span class="string">"adaptor-impl-"</span>);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 778</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> session.setAttribute(wrappedSessionName, nsSession);</span></pre></td></tr>
<tr> <td class="numLine"> 779</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> } <span class="keyword">finally</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 780</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> abortImmediately.set(<span class="keyword">null</span>);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 781</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
-<tr> <td class="numLineCover"> 782</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 780</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLineCover"> 781</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> nsSession;</span></pre></td></tr>
+<tr> <td class="numLine"> 782</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 783</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 784</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 785</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 786</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Executes Runnable in current thread, but only after setting a thread-local</span></pre></td></tr>
+<tr> <td class="numLine"> 787</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * object. The code that will be run, is expected to take notice of the set</span></pre></td></tr>
+<tr> <td class="numLine"> 788</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * variable and abort immediately. This is a hack.</span></pre></td></tr>
+<tr> <td class="numLine"> 789</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 790</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">class</span> SuggestHandlerAbortPolicy</pre></td></tr>
+<tr> <td class="numLine"> 791</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">implements</span> RejectedExecutionHandler {</pre></td></tr>
+<tr> <td class="numLine"> 792</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> ThreadLocal<Object> abortImmediately;</pre></td></tr>
+<tr> <td class="numLineCover"> 793</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> Object signal = <span class="keyword">new</span> Object();</pre></td></tr>
+<tr> <td class="numLine"> 794</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 795</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> <span class="keyword">public</span> SuggestHandlerAbortPolicy(ThreadLocal<Object> abortImmediately) {</pre></td></tr>
+<tr> <td class="numLineCover"> 796</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.abortImmediately = abortImmediately;</pre></td></tr>
+<tr> <td class="numLineCover"> 797</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 798</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 799</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 800</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> rejectedExecution(Runnable r, ThreadPoolExecutor executor) {</pre></td></tr>
+<tr> <td class="numLineCover"> 801</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> abortImmediately.set(signal);</span></pre></td></tr>
+<tr> <td class="numLine"> 802</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 803</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> r.run();</span></pre></td></tr>
+<tr> <td class="numLine"> 804</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> } <span class="keyword">finally</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 805</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> abortImmediately.set(<span class="keyword">null</span>);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 806</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLineCover"> 807</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 808</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 809</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
</table>
diff --git a/coverage/com.google.enterprise.adaptor.IOHelper.html b/coverage/com.google.enterprise.adaptor.IOHelper.html
index f0aa5ec..4b8e089 100644
--- a/coverage/com.google.enterprise.adaptor.IOHelper.html
+++ b/coverage/com.google.enterprise.adaptor.IOHelper.html
@@ -83,8 +83,8 @@
<tr> <td class="numLineCover"> 33</td> <td class="nbHitsCovered"> 74</td> <td class="src"><pre class="src"> <span class="keyword">byte</span>[] buffer = <span class="keyword">new</span> <span class="keyword">byte</span>[1024];</pre></td></tr>
<tr> <td class="numLine"> 34</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">int</span> read;</pre></td></tr>
-<tr> <td class="numLineCover"> 35</td> <td class="nbHitsCovered"><a title="Line 35: Conditional coverage 100% (2/2)."> 223</a></td> <td class="src"><pre class="src"> <a title="Line 35: Conditional coverage 100% (2/2)."> <span class="keyword">while</span> ((read = in.read(buffer)) != -1) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 36</td> <td class="nbHitsCovered"> 150</td> <td class="src"><pre class="src"> out.write(buffer, 0, read);</pre></td></tr>
+<tr> <td class="numLineCover"> 35</td> <td class="nbHitsCovered"><a title="Line 35: Conditional coverage 100% (2/2)."> 200</a></td> <td class="src"><pre class="src"> <a title="Line 35: Conditional coverage 100% (2/2)."> <span class="keyword">while</span> ((read = in.read(buffer)) != -1) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 36</td> <td class="nbHitsCovered"> 127</td> <td class="src"><pre class="src"> out.write(buffer, 0, read);</pre></td></tr>
<tr> <td class="numLine"> 37</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLineCover"> 38</td> <td class="nbHitsCovered"> 72</td> <td class="src"><pre class="src"> out.flush();</pre></td></tr>
diff --git a/coverage/com.google.enterprise.adaptor.Journal.html b/coverage/com.google.enterprise.adaptor.Journal.html
index 4a44bb9..9d2db4b 100644
--- a/coverage/com.google.enterprise.adaptor.Journal.html
+++ b/coverage/com.google.enterprise.adaptor.Journal.html
@@ -12,13 +12,13 @@
<div class="separator"> </div>
<table class="report">
<thead><tr> <td class="heading">Classes in this File</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
- <tr><td><a href="com.google.enterprise.adaptor.Journal.html">Journal</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">137/137</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">40/40</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.2666666666666666;</span>2.267</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.Journal.html">Journal$1</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.2666666666666666;</span>2.267</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.Journal.html">Journal$CompletionStatus</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">4/4</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.2666666666666666;</span>2.267</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.Journal.html">Journal$JournalSnapshot</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">15/15</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.2666666666666666;</span>2.267</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.Journal.html">Journal$NegSizeFakeMap</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">2/2</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.2666666666666666;</span>2.267</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.Journal.html">Journal$Stat</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">2</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:85px"><span class="text">12/14</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.2666666666666666;</span>2.267</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.Journal.html">Journal$Stats</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">3</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:90px"><span class="text">27/30</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">12/12</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.2666666666666666;</span>2.267</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.Journal.html">Journal</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">162/162</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">46/46</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.257142857142857;</span>2.257</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.Journal.html">Journal$1</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.257142857142857;</span>2.257</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.Journal.html">Journal$CompletionStatus</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">4/4</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.257142857142857;</span>2.257</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.Journal.html">Journal$JournalSnapshot</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">18/18</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.257142857142857;</span>2.257</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.Journal.html">Journal$NegSizeFakeMap</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">2/2</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.257142857142857;</span>2.257</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.Journal.html">Journal$Stat</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">2</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:85px"><span class="text">12/14</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.257142857142857;</span>2.257</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.Journal.html">Journal$Stats</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">3</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:90px"><span class="text">27/30</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">12/12</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.257142857142857;</span>2.257</td></tr>
</table>
<div class="separator"> </div>
@@ -65,7 +65,7 @@
<td class="src"><pre class="src"> <span class="comment"> * Contains registers and stats regarding runtime.</span></pre></td></tr>
<tr> <td class="numLine"> 21</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLineCover"> 22</td> <td class="nbHitsCovered"> 231</td> <td class="src"><pre class="src"> <span class="keyword">class</span> Journal {</pre></td></tr>
+<tr> <td class="numLineCover"> 22</td> <td class="nbHitsCovered"> 350</td> <td class="src"><pre class="src"> <span class="keyword">class</span> Journal {</pre></td></tr>
<tr> <td class="numLine"> 23</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">private</span> Map<DocId, Integer> timesPushed;</pre></td></tr>
<tr> <td class="numLine"> 24</td> <td class="nbHits"> </td>
@@ -114,7 +114,7 @@
<td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 46</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">/** Request processing start time storage until processing completion. */</span></pre></td></tr>
-<tr> <td class="numLineCover"> 47</td> <td class="nbHitsCovered"> 159</td> <td class="src"><pre class="src"> <span class="keyword">private</span> ThreadLocal<Long> requestProcessingStart = <span class="keyword">new</span> ThreadLocal<Long>();</pre></td></tr>
+<tr> <td class="numLineCover"> 47</td> <td class="nbHitsCovered"> 164</td> <td class="src"><pre class="src"> <span class="keyword">private</span> ThreadLocal<Long> requestProcessingStart = <span class="keyword">new</span> ThreadLocal<Long>();</pre></td></tr>
<tr> <td class="numLine"> 48</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 49</td> <td class="nbHits"> </td>
@@ -126,720 +126,814 @@
<tr> <td class="numLine"> 52</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine"> 53</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">long</span> currentPushStart;</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">long</span> currentFullPushStart;</pre></td></tr>
<tr> <td class="numLine"> 54</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">/** Date in milliseconds. */</span></pre></td></tr>
<tr> <td class="numLine"> 55</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">long</span> lastSuccessfulPushStart;</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">long</span> lastSuccessfulFullPushStart;</pre></td></tr>
<tr> <td class="numLine"> 56</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">/** Date in milliseconds. */</span></pre></td></tr>
<tr> <td class="numLine"> 57</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">long</span> lastSuccessfulPushEnd;</pre></td></tr>
-<tr> <td class="numLineCover"> 58</td> <td class="nbHitsCovered"> 159</td> <td class="src"><pre class="src"> <span class="keyword">private</span> CompletionStatus lastPushStatus = CompletionStatus.SUCCESS;</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">long</span> lastSuccessfulFullPushEnd;</pre></td></tr>
+<tr> <td class="numLineCover"> 58</td> <td class="nbHitsCovered"> 164</td> <td class="src"><pre class="src"> <span class="keyword">private</span> CompletionStatus lastFullPushStatus = CompletionStatus.SUCCESS;</pre></td></tr>
<tr> <td class="numLine"> 59</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 60</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> enum CompletionStatus {</pre></td></tr>
-<tr> <td class="numLineCover"> 61</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> SUCCESS,</pre></td></tr>
-<tr> <td class="numLineCover"> 62</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> INTERRUPTION,</pre></td></tr>
-<tr> <td class="numLineCover"> 63</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> FAILURE,</pre></td></tr>
+<tr> <td class="numLine"> 60</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">long</span> currentIncrementalPushStart;</pre></td></tr>
+<tr> <td class="numLine"> 61</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">long</span> lastSuccessfulIncrementalPushStart;</pre></td></tr>
+<tr> <td class="numLine"> 62</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">long</span> lastSuccessfulIncrementalPushEnd;</pre></td></tr>
+<tr> <td class="numLineCover"> 63</td> <td class="nbHitsCovered"> 164</td> <td class="src"><pre class="src"> <span class="keyword">private</span> CompletionStatus lastIncrementalPushStatus = CompletionStatus.SUCCESS;</pre></td></tr>
<tr> <td class="numLine"> 64</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 65</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 66</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 67</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * @param reducedMem whether to use a fixed amount of memory, at the expense</span></pre></td></tr>
-<tr> <td class="numLine"> 68</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * of some statistics being disabled</span></pre></td></tr>
+<tr> <td class="numLineCover"> 65</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> enum CompletionStatus {</pre></td></tr>
+<tr> <td class="numLineCover"> 66</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> SUCCESS,</pre></td></tr>
+<tr> <td class="numLineCover"> 67</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> INTERRUPTION,</pre></td></tr>
+<tr> <td class="numLineCover"> 68</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> FAILURE,</pre></td></tr>
<tr> <td class="numLine"> 69</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+ <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 70</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> Journal(<span class="keyword">boolean</span> reducedMem) {</pre></td></tr>
-<tr> <td class="numLineCover"> 71</td> <td class="nbHitsCovered"> 26</td> <td class="src"><pre class="src"> <span class="keyword">this</span>(reducedMem, <span class="keyword">new</span> SystemTimeProvider());</pre></td></tr>
-<tr> <td class="numLineCover"> 72</td> <td class="nbHitsCovered"> 26</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 73</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 74</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 71</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 75</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Same as {@code Journal(false, timeProvider)}.</span></pre></td></tr>
-<tr> <td class="numLine"> 76</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 72</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param reducedMem whether to use a fixed amount of memory, at the expense</span></pre></td></tr>
+<tr> <td class="numLine"> 73</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * of some statistics being disabled</span></pre></td></tr>
+<tr> <td class="numLine"> 74</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLine"> 77</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">protected</span> Journal(TimeProvider timeProvider) {</pre></td></tr>
-<tr> <td class="numLineCover"> 78</td> <td class="nbHitsCovered"> 131</td> <td class="src"><pre class="src"> <span class="keyword">this</span>(<span class="keyword">false</span>, timeProvider);</pre></td></tr>
-<tr> <td class="numLineCover"> 79</td> <td class="nbHitsCovered"> 131</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 75</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> Journal(<span class="keyword">boolean</span> reducedMem) {</pre></td></tr>
+<tr> <td class="numLineCover"> 76</td> <td class="nbHitsCovered"> 26</td> <td class="src"><pre class="src"> <span class="keyword">this</span>(reducedMem, <span class="keyword">new</span> SystemTimeProvider());</pre></td></tr>
+<tr> <td class="numLineCover"> 77</td> <td class="nbHitsCovered"> 26</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 78</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 79</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine"> 80</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 81</td> <td class="nbHitsCovered"> 159</td> <td class="src"><pre class="src"> <span class="keyword">protected</span> Journal(<span class="keyword">boolean</span> reducedMem, TimeProvider timeProvider) {</pre></td></tr>
-<tr> <td class="numLineCover"> 82</td> <td class="nbHitsCovered"> 159</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.timeProvider = timeProvider;</pre></td></tr>
-<tr> <td class="numLineCover"> 83</td> <td class="nbHitsCovered"> 159</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.startedAt = timeProvider.currentTimeMillis();</pre></td></tr>
-<tr> <td class="numLineCover"> 84</td> <td class="nbHitsCovered"> 159</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.timeResolution = determineTimeResolution();</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * Same as {@code Journal(false, timeProvider)}.</span></pre></td></tr>
+<tr> <td class="numLine"> 81</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 82</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">protected</span> Journal(TimeProvider timeProvider) {</pre></td></tr>
+<tr> <td class="numLineCover"> 83</td> <td class="nbHitsCovered"> 136</td> <td class="src"><pre class="src"> <span class="keyword">this</span>(<span class="keyword">false</span>, timeProvider);</pre></td></tr>
+<tr> <td class="numLineCover"> 84</td> <td class="nbHitsCovered"> 136</td> <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 85</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// We want data within the Stats to agree with each other, so we provide the</span></pre></td></tr>
-<tr> <td class="numLine"> 86</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// same time to each of them.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 87</td> <td class="nbHitsCovered"> 159</td> <td class="src"><pre class="src"> <span class="keyword">long</span> time = startedAt;</pre></td></tr>
-<tr> <td class="numLineCover"> 88</td> <td class="nbHitsCovered"> 159</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.timeStats = <span class="keyword">new</span> Stats[] {</pre></td></tr>
-<tr> <td class="numLine"> 89</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">new</span> Stats(60, 1000, time), <span class="comment">/* one minute, second granularity */</span></pre></td></tr>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 86</td> <td class="nbHitsCovered"> 164</td> <td class="src"><pre class="src"> <span class="keyword">protected</span> Journal(<span class="keyword">boolean</span> reducedMem, TimeProvider timeProvider) {</pre></td></tr>
+<tr> <td class="numLineCover"> 87</td> <td class="nbHitsCovered"> 164</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.timeProvider = timeProvider;</pre></td></tr>
+<tr> <td class="numLineCover"> 88</td> <td class="nbHitsCovered"> 164</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.startedAt = timeProvider.currentTimeMillis();</pre></td></tr>
+<tr> <td class="numLineCover"> 89</td> <td class="nbHitsCovered"> 164</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.timeResolution = determineTimeResolution();</pre></td></tr>
<tr> <td class="numLine"> 90</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">new</span> Stats(60, 1000 * 60, time), <span class="comment">/* one hour, minute granularity */</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment">// We want data within the Stats to agree with each other, so we provide the</span></pre></td></tr>
<tr> <td class="numLine"> 91</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// same time to each of them.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 92</td> <td class="nbHitsCovered"> 164</td> <td class="src"><pre class="src"> <span class="keyword">long</span> time = startedAt;</pre></td></tr>
+<tr> <td class="numLineCover"> 93</td> <td class="nbHitsCovered"> 164</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.timeStats = <span class="keyword">new</span> Stats[] {</pre></td></tr>
+<tr> <td class="numLine"> 94</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">new</span> Stats(60, 1000, time), <span class="comment">/* one minute, second granularity */</span></pre></td></tr>
+<tr> <td class="numLine"> 95</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">new</span> Stats(60, 1000 * 60, time), <span class="comment">/* one hour, minute granularity */</span></pre></td></tr>
+<tr> <td class="numLine"> 96</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">new</span> Stats(48, 1000 * 60 * 30, time), <span class="comment">/* one day, half-hour granularity */</span></pre></td></tr>
-<tr> <td class="numLine"> 92</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 97</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> };</pre></td></tr>
-<tr> <td class="numLineCover"> 93</td> <td class="nbHitsCovered"> 159</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.dayStatsByHalfHour = <span class="keyword">this</span>.timeStats[<span class="keyword">this</span>.timeStats.length - 1];</pre></td></tr>
-<tr> <td class="numLineCover"> 94</td> <td class="nbHitsCovered"><a title="Line 94: Conditional coverage 100% (2/2)."> 159</a></td> <td class="src"><pre class="src"> <a title="Line 94: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (reducedMem) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 95</td> <td class="nbHitsCovered"> 27</td> <td class="src"><pre class="src"> timesPushed = <span class="keyword">new</span> NegSizeFakeMap<DocId, Integer>();</pre></td></tr>
-<tr> <td class="numLineCover"> 96</td> <td class="nbHitsCovered"> 27</td> <td class="src"><pre class="src"> timesGsaRequested = <span class="keyword">new</span> NegSizeFakeMap<DocId, Integer>();</pre></td></tr>
-<tr> <td class="numLineCover"> 97</td> <td class="nbHitsCovered"> 27</td> <td class="src"><pre class="src"> timesNonGsaRequested = <span class="keyword">new</span> NegSizeFakeMap<DocId, Integer>();</pre></td></tr>
-<tr> <td class="numLine"> 98</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 98</td> <td class="nbHitsCovered"> 164</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.dayStatsByHalfHour = <span class="keyword">this</span>.timeStats[<span class="keyword">this</span>.timeStats.length - 1];</pre></td></tr>
+<tr> <td class="numLineCover"> 99</td> <td class="nbHitsCovered"><a title="Line 99: Conditional coverage 100% (2/2)."> 164</a></td> <td class="src"><pre class="src"> <a title="Line 99: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (reducedMem) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 100</td> <td class="nbHitsCovered"> 27</td> <td class="src"><pre class="src"> timesPushed = <span class="keyword">new</span> NegSizeFakeMap<DocId, Integer>();</pre></td></tr>
+<tr> <td class="numLineCover"> 101</td> <td class="nbHitsCovered"> 27</td> <td class="src"><pre class="src"> timesGsaRequested = <span class="keyword">new</span> NegSizeFakeMap<DocId, Integer>();</pre></td></tr>
+<tr> <td class="numLineCover"> 102</td> <td class="nbHitsCovered"> 27</td> <td class="src"><pre class="src"> timesNonGsaRequested = <span class="keyword">new</span> NegSizeFakeMap<DocId, Integer>();</pre></td></tr>
+<tr> <td class="numLine"> 103</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 99</td> <td class="nbHitsCovered"> 132</td> <td class="src"><pre class="src"> timesPushed = <span class="keyword">new</span> HashMap<DocId, Integer>();</pre></td></tr>
-<tr> <td class="numLineCover"> 100</td> <td class="nbHitsCovered"> 132</td> <td class="src"><pre class="src"> timesGsaRequested = <span class="keyword">new</span> HashMap<DocId, Integer>();</pre></td></tr>
-<tr> <td class="numLineCover"> 101</td> <td class="nbHitsCovered"> 132</td> <td class="src"><pre class="src"> timesNonGsaRequested = <span class="keyword">new</span> HashMap<DocId, Integer>();</pre></td></tr>
-<tr> <td class="numLine"> 102</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 104</td> <td class="nbHitsCovered"> 137</td> <td class="src"><pre class="src"> timesPushed = <span class="keyword">new</span> HashMap<DocId, Integer>();</pre></td></tr>
+<tr> <td class="numLineCover"> 105</td> <td class="nbHitsCovered"> 137</td> <td class="src"><pre class="src"> timesGsaRequested = <span class="keyword">new</span> HashMap<DocId, Integer>();</pre></td></tr>
+<tr> <td class="numLineCover"> 106</td> <td class="nbHitsCovered"> 137</td> <td class="src"><pre class="src"> timesNonGsaRequested = <span class="keyword">new</span> HashMap<DocId, Integer>();</pre></td></tr>
+<tr> <td class="numLine"> 107</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 103</td> <td class="nbHitsCovered"> 159</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 104</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 108</td> <td class="nbHitsCovered"> 164</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 109</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 105</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 110</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">synchronized</span> <span class="keyword">void</span> recordDocIdPush(List<? <span class="keyword">extends</span> DocIdSender.Item> pushed) {</pre></td></tr>
-<tr> <td class="numLineCover"> 106</td> <td class="nbHitsCovered"><a title="Line 106: Conditional coverage 100% (2/2)."> 10</a></td> <td class="src"><pre class="src"> <a title="Line 106: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (Object item : pushed) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 107</td> <td class="nbHitsCovered"><a title="Line 107: Conditional coverage 100% (2/2)."> 19</a></td> <td class="src"><pre class="src"> <a title="Line 107: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (item <span class="keyword">instanceof</span> DocIdPusher.Record) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 108</td> <td class="nbHitsCovered"> 17</td> <td class="src"><pre class="src"> DocIdPusher.Record record = (DocIdPusher.Record) item;</pre></td></tr>
-<tr> <td class="numLineCover"> 109</td> <td class="nbHitsCovered"> 17</td> <td class="src"><pre class="src"> increment(timesPushed, record.getDocId());</pre></td></tr>
-<tr> <td class="numLineCover"> 110</td> <td class="nbHitsCovered"><a title="Line 110: Conditional coverage 100% (2/2)."> 17</a></td> <td class="src"><pre class="src"> <a title="Line 110: Conditional coverage 100% (2/2)."> } <span class="keyword">else</span> <span class="keyword">if</span> (item <span class="keyword">instanceof</span> DocIdSender.AclItem) {</a></pre></td></tr>
-<tr> <td class="numLine"> 111</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// Don't record any information.</span></pre></td></tr>
-<tr> <td class="numLine"> 112</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 113</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> IllegalArgumentException(<span class="string">"Unsupported class: "</span></pre></td></tr>
-<tr> <td class="numLine"> 114</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> + item.getClass().getName());</pre></td></tr>
-<tr> <td class="numLine"> 115</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 111</td> <td class="nbHitsCovered"><a title="Line 111: Conditional coverage 100% (2/2)."> 10</a></td> <td class="src"><pre class="src"> <a title="Line 111: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (Object item : pushed) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 112</td> <td class="nbHitsCovered"><a title="Line 112: Conditional coverage 100% (2/2)."> 19</a></td> <td class="src"><pre class="src"> <a title="Line 112: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (item <span class="keyword">instanceof</span> DocIdPusher.Record) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 113</td> <td class="nbHitsCovered"> 17</td> <td class="src"><pre class="src"> DocIdPusher.Record record = (DocIdPusher.Record) item;</pre></td></tr>
+<tr> <td class="numLineCover"> 114</td> <td class="nbHitsCovered"> 17</td> <td class="src"><pre class="src"> increment(timesPushed, record.getDocId());</pre></td></tr>
+<tr> <td class="numLineCover"> 115</td> <td class="nbHitsCovered"><a title="Line 115: Conditional coverage 100% (2/2)."> 17</a></td> <td class="src"><pre class="src"> <a title="Line 115: Conditional coverage 100% (2/2)."> } <span class="keyword">else</span> <span class="keyword">if</span> (item <span class="keyword">instanceof</span> DocIdSender.AclItem) {</a></pre></td></tr>
<tr> <td class="numLine"> 116</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 117</td> <td class="nbHitsCovered"> 9</td> <td class="src"><pre class="src"> totalPushes += pushed.size();</pre></td></tr>
-<tr> <td class="numLineCover"> 118</td> <td class="nbHitsCovered"> 9</td> <td class="src"><pre class="src"> }</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment">// Don't record any information.</span></pre></td></tr>
+<tr> <td class="numLine"> 117</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 118</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> IllegalArgumentException(<span class="string">"Unsupported class: "</span></pre></td></tr>
<tr> <td class="numLine"> 119</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
+ <td class="src"><pre class="src"> + item.getClass().getName());</pre></td></tr>
<tr> <td class="numLine"> 120</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">void</span> recordGsaContentRequest(DocId docId) {</pre></td></tr>
-<tr> <td class="numLineCover"> 121</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> <span class="keyword">long</span> time = timeProvider.currentTimeMillis();</pre></td></tr>
-<tr> <td class="numLineCover"> 122</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> <span class="keyword">synchronized</span> (<span class="keyword">this</span>) {</pre></td></tr>
-<tr> <td class="numLineCover"> 123</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> increment(timesGsaRequested, docId);</pre></td></tr>
-<tr> <td class="numLineCover"> 124</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> totalGsaRequests++;</pre></td></tr>
-<tr> <td class="numLineCover"> 125</td> <td class="nbHitsCovered"><a title="Line 125: Conditional coverage 100% (2/2)."> 48</a></td> <td class="src"><pre class="src"> <a title="Line 125: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (Stats stats : timeStats) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 126</td> <td class="nbHitsCovered"> 36</td> <td class="src"><pre class="src"> Stat stat = stats.getCurrentStat(time);</pre></td></tr>
-<tr> <td class="numLineCover"> 127</td> <td class="nbHitsCovered"> 36</td> <td class="src"><pre class="src"> stat.gsaRetrievedDocument = <span class="keyword">true</span>;</pre></td></tr>
-<tr> <td class="numLine"> 128</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 129</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 130</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 131</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 121</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 122</td> <td class="nbHitsCovered"> 9</td> <td class="src"><pre class="src"> totalPushes += pushed.size();</pre></td></tr>
+<tr> <td class="numLineCover"> 123</td> <td class="nbHitsCovered"> 9</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 124</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 132</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">synchronized</span> <span class="keyword">void</span> recordNonGsaContentRequest(DocId requested) {</pre></td></tr>
-<tr> <td class="numLineCover"> 133</td> <td class="nbHitsCovered"> 41</td> <td class="src"><pre class="src"> increment(timesNonGsaRequested, requested); </pre></td></tr>
-<tr> <td class="numLineCover"> 134</td> <td class="nbHitsCovered"> 41</td> <td class="src"><pre class="src"> totalNonGsaRequests++;</pre></td></tr>
-<tr> <td class="numLineCover"> 135</td> <td class="nbHitsCovered"> 41</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 125</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">void</span> recordGsaContentRequest(DocId docId) {</pre></td></tr>
+<tr> <td class="numLineCover"> 126</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> <span class="keyword">long</span> time = timeProvider.currentTimeMillis();</pre></td></tr>
+<tr> <td class="numLineCover"> 127</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> <span class="keyword">synchronized</span> (<span class="keyword">this</span>) {</pre></td></tr>
+<tr> <td class="numLineCover"> 128</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> increment(timesGsaRequested, docId);</pre></td></tr>
+<tr> <td class="numLineCover"> 129</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> totalGsaRequests++;</pre></td></tr>
+<tr> <td class="numLineCover"> 130</td> <td class="nbHitsCovered"><a title="Line 130: Conditional coverage 100% (2/2)."> 48</a></td> <td class="src"><pre class="src"> <a title="Line 130: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (Stats stats : timeStats) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 131</td> <td class="nbHitsCovered"> 36</td> <td class="src"><pre class="src"> Stat stat = stats.getCurrentStat(time);</pre></td></tr>
+<tr> <td class="numLineCover"> 132</td> <td class="nbHitsCovered"> 36</td> <td class="src"><pre class="src"> stat.gsaRetrievedDocument = <span class="keyword">true</span>;</pre></td></tr>
+<tr> <td class="numLine"> 133</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 134</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 135</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 136</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 137</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 138</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Record that the processing of a request has been started on this thread.</span></pre></td></tr>
-<tr> <td class="numLine"> 139</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * This relates to internal computation required to satisfy the request.</span></pre></td></tr>
-<tr> <td class="numLine"> 140</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">synchronized</span> <span class="keyword">void</span> recordNonGsaContentRequest(DocId requested) {</pre></td></tr>
+<tr> <td class="numLineCover"> 138</td> <td class="nbHitsCovered"> 41</td> <td class="src"><pre class="src"> increment(timesNonGsaRequested, requested); </pre></td></tr>
+<tr> <td class="numLineCover"> 139</td> <td class="nbHitsCovered"> 41</td> <td class="src"><pre class="src"> totalNonGsaRequests++;</pre></td></tr>
+<tr> <td class="numLineCover"> 140</td> <td class="nbHitsCovered"> 41</td> <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 141</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">void</span> recordRequestProcessingStart() {</pre></td></tr>
-<tr> <td class="numLineCover"> 142</td> <td class="nbHitsCovered"> 64</td> <td class="src"><pre class="src"> requestProcessingStart.set(timeProvider.currentTimeMillis());</pre></td></tr>
-<tr> <td class="numLineCover"> 143</td> <td class="nbHitsCovered"> 64</td> <td class="src"><pre class="src"> }</pre></td></tr>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 142</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 143</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Record that the processing of a request has been started on this thread.</span></pre></td></tr>
<tr> <td class="numLine"> 144</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * This relates to internal computation required to satisfy the request.</span></pre></td></tr>
<tr> <td class="numLine"> 145</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine"> 146</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Record that the processing this thread was performing to satisfy the</span></pre></td></tr>
-<tr> <td class="numLine"> 147</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * request has completed.</span></pre></td></tr>
-<tr> <td class="numLine"> 148</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">void</span> recordRequestProcessingStart() {</pre></td></tr>
+<tr> <td class="numLineCover"> 147</td> <td class="nbHitsCovered"> 64</td> <td class="src"><pre class="src"> requestProcessingStart.set(timeProvider.currentTimeMillis());</pre></td></tr>
+<tr> <td class="numLineCover"> 148</td> <td class="nbHitsCovered"> 64</td> <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 149</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">void</span> recordRequestProcessingEnd(<span class="keyword">long</span> responseSize) {</pre></td></tr>
-<tr> <td class="numLineCover"> 150</td> <td class="nbHitsCovered"> 42</td> <td class="src"><pre class="src"> recordRequestProcessingEnd(responseSize, timeProvider.currentTimeMillis());</pre></td></tr>
-<tr> <td class="numLineCover"> 151</td> <td class="nbHitsCovered"> 41</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 152</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 153</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">void</span> recordRequestProcessingEnd(<span class="keyword">long</span> responseSize, <span class="keyword">long</span> time) {</pre></td></tr>
-<tr> <td class="numLineCover"> 154</td> <td class="nbHitsCovered"> 65</td> <td class="src"><pre class="src"> <span class="keyword">long</span> duration = endDuration(requestProcessingStart, time);</pre></td></tr>
-<tr> <td class="numLineCover"> 155</td> <td class="nbHitsCovered"> 64</td> <td class="src"><pre class="src"> <span class="keyword">synchronized</span> (<span class="keyword">this</span>) {</pre></td></tr>
-<tr> <td class="numLineCover"> 156</td> <td class="nbHitsCovered"><a title="Line 156: Conditional coverage 100% (2/2)."> 256</a></td> <td class="src"><pre class="src"> <a title="Line 156: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (Stats stats : timeStats) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 157</td> <td class="nbHitsCovered"> 192</td> <td class="src"><pre class="src"> Stat stat = stats.getCurrentStat(time);</pre></td></tr>
-<tr> <td class="numLineCover"> 158</td> <td class="nbHitsCovered"> 192</td> <td class="src"><pre class="src"> stat.requestProcessingsCount++;</pre></td></tr>
-<tr> <td class="numLineCover"> 159</td> <td class="nbHitsCovered"> 192</td> <td class="src"><pre class="src"> stat.requestProcessingsDurationSum += duration;</pre></td></tr>
-<tr> <td class="numLineCover"> 160</td> <td class="nbHitsCovered"> 192</td> <td class="src"><pre class="src"> stat.requestProcessingsMaxDuration = Math.max(</pre></td></tr>
-<tr> <td class="numLine"> 161</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> stat.requestProcessingsMaxDuration, duration);</pre></td></tr>
-<tr> <td class="numLineCover"> 162</td> <td class="nbHitsCovered"> 192</td> <td class="src"><pre class="src"> stat.requestProcessingsThroughput += responseSize;</pre></td></tr>
-<tr> <td class="numLine"> 163</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 164</td> <td class="nbHitsCovered"> 64</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 165</td> <td class="nbHitsCovered"> 64</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 166</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 167</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 150</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 168</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 151</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> * Record that the processing this thread was performing to satisfy the</span></pre></td></tr>
-<tr> <td class="numLine"> 169</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * request has completed, but with an error.</span></pre></td></tr>
-<tr> <td class="numLine"> 170</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 152</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * request has completed.</span></pre></td></tr>
+<tr> <td class="numLine"> 153</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLine"> 171</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">void</span> recordRequestProcessingFailure() {</pre></td></tr>
-<tr> <td class="numLineCover"> 172</td> <td class="nbHitsCovered"> 23</td> <td class="src"><pre class="src"> <span class="keyword">long</span> time = timeProvider.currentTimeMillis();</pre></td></tr>
-<tr> <td class="numLineCover"> 173</td> <td class="nbHitsCovered"> 23</td> <td class="src"><pre class="src"> <span class="keyword">synchronized</span> (<span class="keyword">this</span>) {</pre></td></tr>
-<tr> <td class="numLineCover"> 174</td> <td class="nbHitsCovered"> 23</td> <td class="src"><pre class="src"> recordRequestProcessingEnd(0, time);</pre></td></tr>
-<tr> <td class="numLineCover"> 175</td> <td class="nbHitsCovered"><a title="Line 175: Conditional coverage 100% (2/2)."> 92</a></td> <td class="src"><pre class="src"> <a title="Line 175: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (Stats stats : timeStats) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 176</td> <td class="nbHitsCovered"> 69</td> <td class="src"><pre class="src"> Stat stat = stats.getCurrentStat(time);</pre></td></tr>
-<tr> <td class="numLineCover"> 177</td> <td class="nbHitsCovered"> 69</td> <td class="src"><pre class="src"> stat.requestProcessingsFailureCount++;</pre></td></tr>
-<tr> <td class="numLine"> 178</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 154</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">void</span> recordRequestProcessingEnd(<span class="keyword">long</span> responseSize) {</pre></td></tr>
+<tr> <td class="numLineCover"> 155</td> <td class="nbHitsCovered"> 42</td> <td class="src"><pre class="src"> recordRequestProcessingEnd(responseSize, timeProvider.currentTimeMillis());</pre></td></tr>
+<tr> <td class="numLineCover"> 156</td> <td class="nbHitsCovered"> 41</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 157</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 158</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">void</span> recordRequestProcessingEnd(<span class="keyword">long</span> responseSize, <span class="keyword">long</span> time) {</pre></td></tr>
+<tr> <td class="numLineCover"> 159</td> <td class="nbHitsCovered"> 65</td> <td class="src"><pre class="src"> <span class="keyword">long</span> duration = endDuration(requestProcessingStart, time);</pre></td></tr>
+<tr> <td class="numLineCover"> 160</td> <td class="nbHitsCovered"> 64</td> <td class="src"><pre class="src"> <span class="keyword">synchronized</span> (<span class="keyword">this</span>) {</pre></td></tr>
+<tr> <td class="numLineCover"> 161</td> <td class="nbHitsCovered"><a title="Line 161: Conditional coverage 100% (2/2)."> 256</a></td> <td class="src"><pre class="src"> <a title="Line 161: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (Stats stats : timeStats) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 162</td> <td class="nbHitsCovered"> 192</td> <td class="src"><pre class="src"> Stat stat = stats.getCurrentStat(time);</pre></td></tr>
+<tr> <td class="numLineCover"> 163</td> <td class="nbHitsCovered"> 192</td> <td class="src"><pre class="src"> stat.requestProcessingsCount++;</pre></td></tr>
+<tr> <td class="numLineCover"> 164</td> <td class="nbHitsCovered"> 192</td> <td class="src"><pre class="src"> stat.requestProcessingsDurationSum += duration;</pre></td></tr>
+<tr> <td class="numLineCover"> 165</td> <td class="nbHitsCovered"> 192</td> <td class="src"><pre class="src"> stat.requestProcessingsMaxDuration = Math.max(</pre></td></tr>
+<tr> <td class="numLine"> 166</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> stat.requestProcessingsMaxDuration, duration);</pre></td></tr>
+<tr> <td class="numLineCover"> 167</td> <td class="nbHitsCovered"> 192</td> <td class="src"><pre class="src"> stat.requestProcessingsThroughput += responseSize;</pre></td></tr>
+<tr> <td class="numLine"> 168</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 179</td> <td class="nbHitsCovered"> 23</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 180</td> <td class="nbHitsCovered"> 23</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 181</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 169</td> <td class="nbHitsCovered"> 64</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 170</td> <td class="nbHitsCovered"> 64</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 171</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 182</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">long</span> endDuration(ThreadLocal<Long> localStartTime, <span class="keyword">long</span> endTime) {</pre></td></tr>
-<tr> <td class="numLineCover"> 183</td> <td class="nbHitsCovered"> 65</td> <td class="src"><pre class="src"> Long startTime = localStartTime.get();</pre></td></tr>
-<tr> <td class="numLineCover"> 184</td> <td class="nbHitsCovered"> 65</td> <td class="src"><pre class="src"> localStartTime.remove();</pre></td></tr>
-<tr> <td class="numLineCover"> 185</td> <td class="nbHitsCovered"><a title="Line 185: Conditional coverage 100% (2/2)."> 65</a></td> <td class="src"><pre class="src"> <a title="Line 185: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (startTime == <span class="keyword">null</span>) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 186</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> IllegalStateException(<span class="string">"Record start must be called before "</span></pre></td></tr>
+<tr> <td class="numLine"> 172</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 173</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Record that the processing this thread was performing to satisfy the</span></pre></td></tr>
+<tr> <td class="numLine"> 174</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * request has completed, but with an error.</span></pre></td></tr>
+<tr> <td class="numLine"> 175</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 176</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">void</span> recordRequestProcessingFailure() {</pre></td></tr>
+<tr> <td class="numLineCover"> 177</td> <td class="nbHitsCovered"> 23</td> <td class="src"><pre class="src"> <span class="keyword">long</span> time = timeProvider.currentTimeMillis();</pre></td></tr>
+<tr> <td class="numLineCover"> 178</td> <td class="nbHitsCovered"> 23</td> <td class="src"><pre class="src"> <span class="keyword">synchronized</span> (<span class="keyword">this</span>) {</pre></td></tr>
+<tr> <td class="numLineCover"> 179</td> <td class="nbHitsCovered"> 23</td> <td class="src"><pre class="src"> recordRequestProcessingEnd(0, time);</pre></td></tr>
+<tr> <td class="numLineCover"> 180</td> <td class="nbHitsCovered"><a title="Line 180: Conditional coverage 100% (2/2)."> 92</a></td> <td class="src"><pre class="src"> <a title="Line 180: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (Stats stats : timeStats) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 181</td> <td class="nbHitsCovered"> 69</td> <td class="src"><pre class="src"> Stat stat = stats.getCurrentStat(time);</pre></td></tr>
+<tr> <td class="numLineCover"> 182</td> <td class="nbHitsCovered"> 69</td> <td class="src"><pre class="src"> stat.requestProcessingsFailureCount++;</pre></td></tr>
+<tr> <td class="numLine"> 183</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 184</td> <td class="nbHitsCovered"> 23</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 185</td> <td class="nbHitsCovered"> 23</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 186</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 187</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> + <span class="string">"record end"</span>);</pre></td></tr>
-<tr> <td class="numLine"> 188</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 189</td> <td class="nbHitsCovered"> 64</td> <td class="src"><pre class="src"> <span class="keyword">return</span> endTime - startTime;</pre></td></tr>
-<tr> <td class="numLine"> 190</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 191</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">long</span> endDuration(ThreadLocal<Long> localStartTime, <span class="keyword">long</span> endTime) {</pre></td></tr>
+<tr> <td class="numLineCover"> 188</td> <td class="nbHitsCovered"> 65</td> <td class="src"><pre class="src"> Long startTime = localStartTime.get();</pre></td></tr>
+<tr> <td class="numLineCover"> 189</td> <td class="nbHitsCovered"> 65</td> <td class="src"><pre class="src"> localStartTime.remove();</pre></td></tr>
+<tr> <td class="numLineCover"> 190</td> <td class="nbHitsCovered"><a title="Line 190: Conditional coverage 100% (2/2)."> 65</a></td> <td class="src"><pre class="src"> <a title="Line 190: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (startTime == <span class="keyword">null</span>) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 191</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> IllegalStateException(<span class="string">"Record start must be called before "</span></pre></td></tr>
<tr> <td class="numLine"> 192</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+ <td class="src"><pre class="src"> + <span class="string">"record end"</span>);</pre></td></tr>
<tr> <td class="numLine"> 193</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Determine the resolution that {@link System#currentTimeMillis} supports, in</span></pre></td></tr>
-<tr> <td class="numLine"> 194</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * milliseconds.</span></pre></td></tr>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 194</td> <td class="nbHitsCovered"> 64</td> <td class="src"><pre class="src"> <span class="keyword">return</span> endTime - startTime;</pre></td></tr>
<tr> <td class="numLine"> 195</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+ <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 196</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">long</span> determineTimeResolution() {</pre></td></tr>
-<tr> <td class="numLineCover"> 197</td> <td class="nbHitsCovered"> 159</td> <td class="src"><pre class="src"> <span class="keyword">long</span> resolution = Long.MAX_VALUE;</pre></td></tr>
-<tr> <td class="numLineCover"> 198</td> <td class="nbHitsCovered"><a title="Line 198: Conditional coverage 100% (2/2)."> 954</a></td> <td class="src"><pre class="src"> <a title="Line 198: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (<span class="keyword">int</span> i = 0; i < 5; i++) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 199</td> <td class="nbHitsCovered"> 795</td> <td class="src"><pre class="src"> resolution = Math.min(resolution, determineTimeResolutionOnce());</pre></td></tr>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 197</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 198</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Determine the resolution that {@link System#currentTimeMillis} supports, in</span></pre></td></tr>
+<tr> <td class="numLine"> 199</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * milliseconds.</span></pre></td></tr>
<tr> <td class="numLine"> 200</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 201</td> <td class="nbHitsCovered"> 159</td> <td class="src"><pre class="src"> <span class="keyword">return</span> resolution;</pre></td></tr>
-<tr> <td class="numLine"> 202</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 203</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 204</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 201</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">long</span> determineTimeResolution() {</pre></td></tr>
+<tr> <td class="numLineCover"> 202</td> <td class="nbHitsCovered"> 164</td> <td class="src"><pre class="src"> <span class="keyword">long</span> resolution = Long.MAX_VALUE;</pre></td></tr>
+<tr> <td class="numLineCover"> 203</td> <td class="nbHitsCovered"><a title="Line 203: Conditional coverage 100% (2/2)."> 984</a></td> <td class="src"><pre class="src"> <a title="Line 203: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (<span class="keyword">int</span> i = 0; i < 5; i++) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 204</td> <td class="nbHitsCovered"> 820</td> <td class="src"><pre class="src"> resolution = Math.min(resolution, determineTimeResolutionOnce());</pre></td></tr>
<tr> <td class="numLine"> 205</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * One trial of determining the resolution that {@link</span></pre></td></tr>
-<tr> <td class="numLine"> 206</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * System#currentTimeMillis} supports, in milliseconds.</span></pre></td></tr>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 206</td> <td class="nbHitsCovered"> 164</td> <td class="src"><pre class="src"> <span class="keyword">return</span> resolution;</pre></td></tr>
<tr> <td class="numLine"> 207</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+ <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 208</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">long</span> determineTimeResolutionOnce() {</pre></td></tr>
-<tr> <td class="numLineCover"> 209</td> <td class="nbHitsCovered"> 795</td> <td class="src"><pre class="src"> <span class="keyword">long</span> time = timeProvider.currentTimeMillis();</pre></td></tr>
-<tr> <td class="numLineCover"> 210</td> <td class="nbHitsCovered"> 795</td> <td class="src"><pre class="src"> <span class="keyword">long</span> startTime = time;</pre></td></tr>
-<tr> <td class="numLineCover"> 211</td> <td class="nbHitsCovered"><a title="Line 211: Conditional coverage 100% (2/2)."> 335998</a></td> <td class="src"><pre class="src"> <a title="Line 211: Conditional coverage 100% (2/2)."> <span class="keyword">while</span> (startTime == time) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 212</td> <td class="nbHitsCovered"> 335203</td> <td class="src"><pre class="src"> time = timeProvider.currentTimeMillis();</pre></td></tr>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 209</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 210</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * One trial of determining the resolution that {@link</span></pre></td></tr>
+<tr> <td class="numLine"> 211</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * System#currentTimeMillis} supports, in milliseconds.</span></pre></td></tr>
+<tr> <td class="numLine"> 212</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine"> 213</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">long</span> determineTimeResolutionOnce() {</pre></td></tr>
+<tr> <td class="numLineCover"> 214</td> <td class="nbHitsCovered"> 820</td> <td class="src"><pre class="src"> <span class="keyword">long</span> time = timeProvider.currentTimeMillis();</pre></td></tr>
+<tr> <td class="numLineCover"> 215</td> <td class="nbHitsCovered"> 820</td> <td class="src"><pre class="src"> <span class="keyword">long</span> startTime = time;</pre></td></tr>
+<tr> <td class="numLineCover"> 216</td> <td class="nbHitsCovered"><a title="Line 216: Conditional coverage 100% (2/2)."> 330259</a></td> <td class="src"><pre class="src"> <a title="Line 216: Conditional coverage 100% (2/2)."> <span class="keyword">while</span> (startTime == time) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 217</td> <td class="nbHitsCovered"> 329439</td> <td class="src"><pre class="src"> time = timeProvider.currentTimeMillis();</pre></td></tr>
+<tr> <td class="numLine"> 218</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 214</td> <td class="nbHitsCovered"> 795</td> <td class="src"><pre class="src"> <span class="keyword">return</span> time - startTime;</pre></td></tr>
-<tr> <td class="numLine"> 215</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 216</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 217</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">void</span> increment(Map<DocId, Integer> counts, DocId id) {</pre></td></tr>
-<tr> <td class="numLineCover"> 218</td> <td class="nbHitsCovered"><a title="Line 218: Conditional coverage 100% (2/2)."> 70</a></td> <td class="src"><pre class="src"> <a title="Line 218: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (!counts.containsKey(id)) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 219</td> <td class="nbHitsCovered"> 60</td> <td class="src"><pre class="src"> counts.put(id, 1);</pre></td></tr>
+<tr> <td class="numLineCover"> 219</td> <td class="nbHitsCovered"> 820</td> <td class="src"><pre class="src"> <span class="keyword">return</span> time - startTime;</pre></td></tr>
<tr> <td class="numLine"> 220</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 221</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> counts.put(id, 1 + counts.get(id));</pre></td></tr>
-<tr> <td class="numLine"> 222</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 223</td> <td class="nbHitsCovered"> 70</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 224</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 225</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 226</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Record that a full push has started. Only one is tracked at a time.</span></pre></td></tr>
-<tr> <td class="numLine"> 227</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLine"> 228</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">synchronized</span> <span class="keyword">void</span> recordFullPushStarted() {</pre></td></tr>
-<tr> <td class="numLineCover"> 229</td> <td class="nbHitsCovered"><a title="Line 229: Conditional coverage 100% (2/2)."> 12</a></td> <td class="src"><pre class="src"> <a title="Line 229: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (currentPushStart != 0) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 230</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> IllegalStateException(<span class="string">"Full push already started"</span>);</pre></td></tr>
-<tr> <td class="numLine"> 231</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 232</td> <td class="nbHitsCovered"> 11</td> <td class="src"><pre class="src"> currentPushStart = timeProvider.currentTimeMillis();</pre></td></tr>
-<tr> <td class="numLineCover"> 233</td> <td class="nbHitsCovered"> 11</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 234</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 235</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 236</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Record that the full push completed successfully.</span></pre></td></tr>
-<tr> <td class="numLine"> 237</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLine"> 238</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">void</span> recordFullPushSuccessful() {</pre></td></tr>
-<tr> <td class="numLineCover"> 239</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> <span class="keyword">long</span> endTime = timeProvider.currentTimeMillis();</pre></td></tr>
-<tr> <td class="numLineCover"> 240</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> <span class="keyword">synchronized</span> (<span class="keyword">this</span>) {</pre></td></tr>
-<tr> <td class="numLineCover"> 241</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> <span class="keyword">long</span> startTime = currentPushStart;</pre></td></tr>
-<tr> <td class="numLineCover"> 242</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> currentPushStart = 0;</pre></td></tr>
-<tr> <td class="numLineCover"> 243</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.lastSuccessfulPushStart = startTime;</pre></td></tr>
-<tr> <td class="numLineCover"> 244</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.lastSuccessfulPushEnd = endTime;</pre></td></tr>
-<tr> <td class="numLineCover"> 245</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> lastPushStatus = CompletionStatus.SUCCESS;</pre></td></tr>
-<tr> <td class="numLineCover"> 246</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 247</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 248</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 249</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 250</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Record that the full push was interrupted prematurely.</span></pre></td></tr>
-<tr> <td class="numLine"> 251</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLine"> 252</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">synchronized</span> <span class="keyword">void</span> recordFullPushInterrupted() {</pre></td></tr>
-<tr> <td class="numLineCover"> 253</td> <td class="nbHitsCovered"><a title="Line 253: Conditional coverage 100% (2/2)."> 4</a></td> <td class="src"><pre class="src"> <a title="Line 253: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (currentPushStart == 0) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 254</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> IllegalStateException(<span class="string">"Full push not already started"</span>);</pre></td></tr>
-<tr> <td class="numLine"> 255</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 256</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> currentPushStart = 0;</pre></td></tr>
-<tr> <td class="numLineCover"> 257</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> lastPushStatus = CompletionStatus.INTERRUPTION;</pre></td></tr>
-<tr> <td class="numLineCover"> 258</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 259</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 260</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 261</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Record that the full push was interrupted prematurely.</span></pre></td></tr>
-<tr> <td class="numLine"> 262</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLine"> 263</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">synchronized</span> <span class="keyword">void</span> recordFullPushFailed() {</pre></td></tr>
-<tr> <td class="numLineCover"> 264</td> <td class="nbHitsCovered"><a title="Line 264: Conditional coverage 100% (2/2)."> 4</a></td> <td class="src"><pre class="src"> <a title="Line 264: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (currentPushStart == 0) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 265</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> IllegalStateException(<span class="string">"Full push not already started"</span>);</pre></td></tr>
-<tr> <td class="numLine"> 266</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 267</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> currentPushStart = 0;</pre></td></tr>
-<tr> <td class="numLineCover"> 268</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> lastPushStatus = CompletionStatus.FAILURE;</pre></td></tr>
-<tr> <td class="numLineCover"> 269</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 270</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 271</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">synchronized</span> CompletionStatus getLastPushStatus() {</pre></td></tr>
-<tr> <td class="numLineCover"> 272</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> <span class="keyword">return</span> lastPushStatus;</pre></td></tr>
-<tr> <td class="numLine"> 273</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 274</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 221</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 222</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">void</span> increment(Map<DocId, Integer> counts, DocId id) {</pre></td></tr>
+<tr> <td class="numLineCover"> 223</td> <td class="nbHitsCovered"><a title="Line 223: Conditional coverage 100% (2/2)."> 70</a></td> <td class="src"><pre class="src"> <a title="Line 223: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (!counts.containsKey(id)) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 224</td> <td class="nbHitsCovered"> 60</td> <td class="src"><pre class="src"> counts.put(id, 1);</pre></td></tr>
+<tr> <td class="numLine"> 225</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 226</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> counts.put(id, 1 + counts.get(id));</pre></td></tr>
+<tr> <td class="numLine"> 227</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 228</td> <td class="nbHitsCovered"> 70</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 229</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 230</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 231</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Record that a full push has started. Only one is tracked at a time.</span></pre></td></tr>
+<tr> <td class="numLine"> 232</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 233</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">synchronized</span> <span class="keyword">void</span> recordFullPushStarted() {</pre></td></tr>
+<tr> <td class="numLineCover"> 234</td> <td class="nbHitsCovered"><a title="Line 234: Conditional coverage 100% (2/2)."> 12</a></td> <td class="src"><pre class="src"> <a title="Line 234: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (currentFullPushStart != 0) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 235</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> IllegalStateException(<span class="string">"Full push already started"</span>);</pre></td></tr>
+<tr> <td class="numLine"> 236</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 237</td> <td class="nbHitsCovered"> 11</td> <td class="src"><pre class="src"> currentFullPushStart = timeProvider.currentTimeMillis();</pre></td></tr>
+<tr> <td class="numLineCover"> 238</td> <td class="nbHitsCovered"> 11</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 239</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 240</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 241</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Record that the full push completed successfully.</span></pre></td></tr>
+<tr> <td class="numLine"> 242</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 243</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">void</span> recordFullPushSuccessful() {</pre></td></tr>
+<tr> <td class="numLineCover"> 244</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> <span class="keyword">long</span> endTime = timeProvider.currentTimeMillis();</pre></td></tr>
+<tr> <td class="numLineCover"> 245</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> <span class="keyword">synchronized</span> (<span class="keyword">this</span>) {</pre></td></tr>
+<tr> <td class="numLineCover"> 246</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> <span class="keyword">long</span> startTime = currentFullPushStart;</pre></td></tr>
+<tr> <td class="numLineCover"> 247</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> currentFullPushStart = 0;</pre></td></tr>
+<tr> <td class="numLineCover"> 248</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.lastSuccessfulFullPushStart = startTime;</pre></td></tr>
+<tr> <td class="numLineCover"> 249</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.lastSuccessfulFullPushEnd = endTime;</pre></td></tr>
+<tr> <td class="numLineCover"> 250</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> lastFullPushStatus = CompletionStatus.SUCCESS;</pre></td></tr>
+<tr> <td class="numLineCover"> 251</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 252</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 253</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 254</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 255</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Record that the full push was interrupted prematurely.</span></pre></td></tr>
+<tr> <td class="numLine"> 256</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 257</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">synchronized</span> <span class="keyword">void</span> recordFullPushInterrupted() {</pre></td></tr>
+<tr> <td class="numLineCover"> 258</td> <td class="nbHitsCovered"><a title="Line 258: Conditional coverage 100% (2/2)."> 4</a></td> <td class="src"><pre class="src"> <a title="Line 258: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (currentFullPushStart == 0) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 259</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> IllegalStateException(<span class="string">"Full push not already started"</span>);</pre></td></tr>
+<tr> <td class="numLine"> 260</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 261</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> currentFullPushStart = 0;</pre></td></tr>
+<tr> <td class="numLineCover"> 262</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> lastFullPushStatus = CompletionStatus.INTERRUPTION;</pre></td></tr>
+<tr> <td class="numLineCover"> 263</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 264</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 265</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 266</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Record that the full push was interrupted prematurely.</span></pre></td></tr>
+<tr> <td class="numLine"> 267</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 268</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">synchronized</span> <span class="keyword">void</span> recordFullPushFailed() {</pre></td></tr>
+<tr> <td class="numLineCover"> 269</td> <td class="nbHitsCovered"><a title="Line 269: Conditional coverage 100% (2/2)."> 4</a></td> <td class="src"><pre class="src"> <a title="Line 269: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (currentFullPushStart == 0) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 270</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> IllegalStateException(<span class="string">"Full push not already started"</span>);</pre></td></tr>
+<tr> <td class="numLine"> 271</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 272</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> currentFullPushStart = 0;</pre></td></tr>
+<tr> <td class="numLineCover"> 273</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> lastFullPushStatus = CompletionStatus.FAILURE;</pre></td></tr>
+<tr> <td class="numLineCover"> 274</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 275</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">double</span> getRetrieverErrorRate(<span class="keyword">long</span> maxCount) {</pre></td></tr>
-<tr> <td class="numLineCover"> 276</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">long</span> currentTime = timeProvider.currentTimeMillis();</pre></td></tr>
-<tr> <td class="numLineCover"> 277</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">long</span> count = 0;</pre></td></tr>
-<tr> <td class="numLineCover"> 278</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">long</span> failures = 0;</pre></td></tr>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 276</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">synchronized</span> CompletionStatus getLastFullPushStatus() {</pre></td></tr>
+<tr> <td class="numLineCover"> 277</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> <span class="keyword">return</span> lastFullPushStatus;</pre></td></tr>
+<tr> <td class="numLine"> 278</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 279</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 280</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">synchronized</span> (Journal.<span class="keyword">this</span>) {</pre></td></tr>
-<tr> <td class="numLineCover"> 281</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> Stats stats = dayStatsByHalfHour;</pre></td></tr>
-<tr> <td class="numLine"> 282</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// Update bookkeeping.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 283</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> stats.getCurrentStat(currentTime);</pre></td></tr>
-<tr> <td class="numLine"> 284</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 285</td> <td class="nbHitsCovered"><a title="Line 285: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> 155</a></td> <td class="src"><pre class="src"> <a title="Line 285: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> <span class="keyword">for</span> (<span class="keyword">int</span> i = 0; i < stats.stats.length && count < maxCount; i++) {</a></pre></td></tr>
-<tr> <td class="numLine"> 286</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// Walk through indexes in reverse order, starting with most current.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 287</td> <td class="nbHitsCovered"> 149</td> <td class="src"><pre class="src"> <span class="keyword">int</span> index = (stats.currentStat - i + stats.stats.length)</pre></td></tr>
-<tr> <td class="numLine"> 288</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> % stats.stats.length;</pre></td></tr>
-<tr> <td class="numLineCover"> 289</td> <td class="nbHitsCovered"> 149</td> <td class="src"><pre class="src"> Stat stat = stats.stats[index];</pre></td></tr>
-<tr> <td class="numLineCover"> 290</td> <td class="nbHitsCovered"> 149</td> <td class="src"><pre class="src"> count += stat.requestProcessingsCount;</pre></td></tr>
-<tr> <td class="numLineCover"> 291</td> <td class="nbHitsCovered"> 149</td> <td class="src"><pre class="src"> failures += stat.requestProcessingsFailureCount;</pre></td></tr>
-<tr> <td class="numLine"> 292</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 293</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 294</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 295</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">double</span> rate = 0;</pre></td></tr>
-<tr> <td class="numLineCover"> 296</td> <td class="nbHitsCovered"><a title="Line 296: Conditional coverage 100% (2/2)."> 6</a></td> <td class="src"><pre class="src"> <a title="Line 296: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (count > 0) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 297</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> rate = failures / (<span class="keyword">double</span>) count;</pre></td></tr>
-<tr> <td class="numLine"> 298</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 299</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">return</span> rate;</pre></td></tr>
-<tr> <td class="numLine"> 300</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 301</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 302</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">boolean</span> hasGsaCrawledWithinLastDay() {</pre></td></tr>
-<tr> <td class="numLineCover"> 303</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> <span class="keyword">long</span> currentTime = timeProvider.currentTimeMillis();</pre></td></tr>
-<tr> <td class="numLineCover"> 304</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> <span class="keyword">synchronized</span> (Journal.<span class="keyword">this</span>) {</pre></td></tr>
-<tr> <td class="numLineCover"> 305</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> Stats stats = dayStatsByHalfHour;</pre></td></tr>
-<tr> <td class="numLine"> 306</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// Update bookkeeping.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 307</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> stats.getCurrentStat(currentTime);</pre></td></tr>
-<tr> <td class="numLine"> 308</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 309</td> <td class="nbHitsCovered"><a title="Line 309: Conditional coverage 100% (2/2)."> 99</a></td> <td class="src"><pre class="src"> <a title="Line 309: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (Stat stat : stats.stats) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 310</td> <td class="nbHitsCovered"><a title="Line 310: Conditional coverage 100% (2/2)."> 97</a></td> <td class="src"><pre class="src"> <a title="Line 310: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (stat.gsaRetrievedDocument) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 311</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">true</span>;</pre></td></tr>
-<tr> <td class="numLine"> 312</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 313</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 314</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 315</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">false</span>;</pre></td></tr>
-<tr> <td class="numLine"> 316</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 317</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 318</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 280</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 319</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Access to the timeStats for use in {@link DashboardHandler} only.</span></pre></td></tr>
-<tr> <td class="numLine"> 320</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 281</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Record that an incremental push has started.</span></pre></td></tr>
+<tr> <td class="numLine"> 282</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLine"> 321</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">synchronized</span> JournalSnapshot getSnapshot() {</pre></td></tr>
-<tr> <td class="numLineCover"> 322</td> <td class="nbHitsCovered"> 20</td> <td class="src"><pre class="src"> <span class="keyword">long</span> currentTime = timeProvider.currentTimeMillis();</pre></td></tr>
-<tr> <td class="numLineCover"> 323</td> <td class="nbHitsCovered"> 20</td> <td class="src"><pre class="src"> Stats[] timeStatsClone = <span class="keyword">new</span> Stats[timeStats.length];</pre></td></tr>
-<tr> <td class="numLineCover"> 324</td> <td class="nbHitsCovered"><a title="Line 324: Conditional coverage 100% (2/2)."> 80</a></td> <td class="src"><pre class="src"> <a title="Line 324: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (<span class="keyword">int</span> i = 0; i < timeStats.length; i++) {</a></pre></td></tr>
-<tr> <td class="numLine"> 325</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// Cause stats to update its internal structures</span></pre></td></tr>
-<tr> <td class="numLineCover"> 326</td> <td class="nbHitsCovered"> 60</td> <td class="src"><pre class="src"> timeStats[i].getCurrentStat(currentTime);</pre></td></tr>
-<tr> <td class="numLineCover"> 327</td> <td class="nbHitsCovered"> 60</td> <td class="src"><pre class="src"> timeStatsClone[i] = timeStats[i].clone();</pre></td></tr>
-<tr> <td class="numLine"> 328</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 283</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">synchronized</span> <span class="keyword">void</span> recordIncrementalPushStarted() {</pre></td></tr>
+<tr> <td class="numLineCover"> 284</td> <td class="nbHitsCovered"><a title="Line 284: Conditional coverage 100% (2/2)."> 10</a></td> <td class="src"><pre class="src"> <a title="Line 284: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (currentIncrementalPushStart != 0) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 285</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> IllegalStateException(<span class="string">"Incremental push already started"</span>);</pre></td></tr>
+<tr> <td class="numLine"> 286</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 287</td> <td class="nbHitsCovered"> 9</td> <td class="src"><pre class="src"> currentIncrementalPushStart = timeProvider.currentTimeMillis();</pre></td></tr>
+<tr> <td class="numLineCover"> 288</td> <td class="nbHitsCovered"> 9</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 289</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 290</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 291</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Record that the incremental push completed successfully.</span></pre></td></tr>
+<tr> <td class="numLine"> 292</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 293</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">void</span> recordIncrementalPushSuccessful() {</pre></td></tr>
+<tr> <td class="numLineCover"> 294</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> <span class="keyword">long</span> endTime = timeProvider.currentTimeMillis();</pre></td></tr>
+<tr> <td class="numLineCover"> 295</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> <span class="keyword">synchronized</span> (<span class="keyword">this</span>) {</pre></td></tr>
+<tr> <td class="numLineCover"> 296</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> <span class="keyword">long</span> startTime = currentIncrementalPushStart;</pre></td></tr>
+<tr> <td class="numLineCover"> 297</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> currentIncrementalPushStart = 0;</pre></td></tr>
+<tr> <td class="numLineCover"> 298</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.lastSuccessfulIncrementalPushStart = startTime;</pre></td></tr>
+<tr> <td class="numLineCover"> 299</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.lastSuccessfulIncrementalPushEnd = endTime;</pre></td></tr>
+<tr> <td class="numLineCover"> 300</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> lastIncrementalPushStatus = CompletionStatus.SUCCESS;</pre></td></tr>
+<tr> <td class="numLineCover"> 301</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 302</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 303</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 304</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 305</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Record that the incremental push was interrupted prematurely.</span></pre></td></tr>
+<tr> <td class="numLine"> 306</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 307</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">synchronized</span> <span class="keyword">void</span> recordIncrementalPushInterrupted() {</pre></td></tr>
+<tr> <td class="numLineCover"> 308</td> <td class="nbHitsCovered"><a title="Line 308: Conditional coverage 100% (2/2)."> 3</a></td> <td class="src"><pre class="src"> <a title="Line 308: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (currentIncrementalPushStart == 0) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 309</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> IllegalStateException(<span class="string">"Incremental push not already started"</span>);</pre></td></tr>
+<tr> <td class="numLine"> 310</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 311</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> currentIncrementalPushStart = 0;</pre></td></tr>
+<tr> <td class="numLineCover"> 312</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> lastIncrementalPushStatus = CompletionStatus.INTERRUPTION;</pre></td></tr>
+<tr> <td class="numLineCover"> 313</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 314</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 315</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 316</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Record that the incremental push was interrupted prematurely.</span></pre></td></tr>
+<tr> <td class="numLine"> 317</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 318</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">synchronized</span> <span class="keyword">void</span> recordIncrementalPushFailed() {</pre></td></tr>
+<tr> <td class="numLineCover"> 319</td> <td class="nbHitsCovered"><a title="Line 319: Conditional coverage 100% (2/2)."> 3</a></td> <td class="src"><pre class="src"> <a title="Line 319: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (currentIncrementalPushStart == 0) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 320</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> IllegalStateException(<span class="string">"Full push not already started"</span>);</pre></td></tr>
+<tr> <td class="numLine"> 321</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 322</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> currentIncrementalPushStart = 0;</pre></td></tr>
+<tr> <td class="numLineCover"> 323</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> lastIncrementalPushStatus = CompletionStatus.FAILURE;</pre></td></tr>
+<tr> <td class="numLineCover"> 324</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 325</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 326</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">synchronized</span> CompletionStatus getLastIncrementalPushStatus() {</pre></td></tr>
+<tr> <td class="numLineCover"> 327</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> <span class="keyword">return</span> lastIncrementalPushStatus;</pre></td></tr>
+<tr> <td class="numLine"> 328</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 329</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 330</td> <td class="nbHitsCovered"> 20</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">new</span> JournalSnapshot(<span class="keyword">this</span>, currentTime, timeStatsClone);</pre></td></tr>
-<tr> <td class="numLine"> 331</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 332</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 333</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">static</span> <span class="keyword">class</span> JournalSnapshot {</pre></td></tr>
+<tr> <td class="numLine"> 330</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">double</span> getRetrieverErrorRate(<span class="keyword">long</span> maxCount) {</pre></td></tr>
+<tr> <td class="numLineCover"> 331</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">long</span> currentTime = timeProvider.currentTimeMillis();</pre></td></tr>
+<tr> <td class="numLineCover"> 332</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">long</span> count = 0;</pre></td></tr>
+<tr> <td class="numLineCover"> 333</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">long</span> failures = 0;</pre></td></tr>
<tr> <td class="numLine"> 334</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">final</span> <span class="keyword">long</span> numUniqueDocIdsPushed;</pre></td></tr>
-<tr> <td class="numLine"> 335</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">final</span> <span class="keyword">long</span> numTotalDocIdsPushed;</pre></td></tr>
-<tr> <td class="numLine"> 336</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">final</span> <span class="keyword">long</span> numUniqueGsaRequests;</pre></td></tr>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 335</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">synchronized</span> (Journal.<span class="keyword">this</span>) {</pre></td></tr>
+<tr> <td class="numLineCover"> 336</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> Stats stats = dayStatsByHalfHour;</pre></td></tr>
<tr> <td class="numLine"> 337</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">final</span> <span class="keyword">long</span> numTotalGsaRequests;</pre></td></tr>
-<tr> <td class="numLine"> 338</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">final</span> <span class="keyword">long</span> numUniqueNonGsaRequests;</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment">// Update bookkeeping.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 338</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> stats.getCurrentStat(currentTime);</pre></td></tr>
<tr> <td class="numLine"> 339</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">final</span> <span class="keyword">long</span> numTotalNonGsaRequests;</pre></td></tr>
-<tr> <td class="numLine"> 340</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">final</span> <span class="keyword">long</span> whenStarted;</pre></td></tr>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 340</td> <td class="nbHitsCovered"><a title="Line 340: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> 155</a></td> <td class="src"><pre class="src"> <a title="Line 340: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> <span class="keyword">for</span> (<span class="keyword">int</span> i = 0; i < stats.stats.length && count < maxCount; i++) {</a></pre></td></tr>
<tr> <td class="numLine"> 341</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">final</span> <span class="keyword">long</span> currentTime;</pre></td></tr>
-<tr> <td class="numLine"> 342</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">final</span> <span class="keyword">long</span> timeResolution;</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment">// Walk through indexes in reverse order, starting with most current.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 342</td> <td class="nbHitsCovered"> 149</td> <td class="src"><pre class="src"> <span class="keyword">int</span> index = (stats.currentStat - i + stats.stats.length)</pre></td></tr>
<tr> <td class="numLine"> 343</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">final</span> <span class="keyword">long</span> lastSuccessfulPushStart;</pre></td></tr>
-<tr> <td class="numLine"> 344</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">final</span> <span class="keyword">long</span> lastSuccessfulPushEnd;</pre></td></tr>
-<tr> <td class="numLine"> 345</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">final</span> <span class="keyword">long</span> currentPushStart;</pre></td></tr>
-<tr> <td class="numLine"> 346</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">final</span> Stats[] timeStats;</pre></td></tr>
+ <td class="src"><pre class="src"> % stats.stats.length;</pre></td></tr>
+<tr> <td class="numLineCover"> 344</td> <td class="nbHitsCovered"> 149</td> <td class="src"><pre class="src"> Stat stat = stats.stats[index];</pre></td></tr>
+<tr> <td class="numLineCover"> 345</td> <td class="nbHitsCovered"> 149</td> <td class="src"><pre class="src"> count += stat.requestProcessingsCount;</pre></td></tr>
+<tr> <td class="numLineCover"> 346</td> <td class="nbHitsCovered"> 149</td> <td class="src"><pre class="src"> failures += stat.requestProcessingsFailureCount;</pre></td></tr>
<tr> <td class="numLine"> 347</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 348</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 349</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 348</td> <td class="nbHitsCovered"> 21</td> <td class="src"><pre class="src"> JournalSnapshot(Journal journal, <span class="keyword">long</span> currentTime, Stats[] timeStatsClone) {</pre></td></tr>
-<tr> <td class="numLineCover"> 349</td> <td class="nbHitsCovered"> 21</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.numUniqueDocIdsPushed = journal.timesPushed.size();</pre></td></tr>
-<tr> <td class="numLineCover"> 350</td> <td class="nbHitsCovered"> 21</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.numTotalDocIdsPushed = journal.totalPushes;</pre></td></tr>
-<tr> <td class="numLineCover"> 351</td> <td class="nbHitsCovered"> 21</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.numUniqueGsaRequests = journal.timesGsaRequested.size();</pre></td></tr>
-<tr> <td class="numLineCover"> 352</td> <td class="nbHitsCovered"> 21</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.numTotalGsaRequests = journal.totalGsaRequests;</pre></td></tr>
-<tr> <td class="numLineCover"> 353</td> <td class="nbHitsCovered"> 21</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.numUniqueNonGsaRequests = journal.timesNonGsaRequested.size();</pre></td></tr>
-<tr> <td class="numLineCover"> 354</td> <td class="nbHitsCovered"> 21</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.numTotalNonGsaRequests = journal.totalNonGsaRequests;</pre></td></tr>
-<tr> <td class="numLineCover"> 355</td> <td class="nbHitsCovered"> 21</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.timeResolution = journal.timeResolution;</pre></td></tr>
-<tr> <td class="numLineCover"> 356</td> <td class="nbHitsCovered"> 21</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.lastSuccessfulPushStart = journal.lastSuccessfulPushStart;</pre></td></tr>
-<tr> <td class="numLineCover"> 357</td> <td class="nbHitsCovered"> 21</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.lastSuccessfulPushEnd = journal.lastSuccessfulPushEnd;</pre></td></tr>
-<tr> <td class="numLineCover"> 358</td> <td class="nbHitsCovered"> 21</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.currentPushStart = journal.currentPushStart;</pre></td></tr>
-<tr> <td class="numLineCover"> 359</td> <td class="nbHitsCovered"> 21</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.whenStarted = journal.startedAt;</pre></td></tr>
-<tr> <td class="numLineCover"> 360</td> <td class="nbHitsCovered"> 21</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.currentTime = currentTime;</pre></td></tr>
-<tr> <td class="numLineCover"> 361</td> <td class="nbHitsCovered"> 21</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.timeStats = timeStatsClone;</pre></td></tr>
-<tr> <td class="numLineCover"> 362</td> <td class="nbHitsCovered"> 21</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 363</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 350</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">double</span> rate = 0;</pre></td></tr>
+<tr> <td class="numLineCover"> 351</td> <td class="nbHitsCovered"><a title="Line 351: Conditional coverage 100% (2/2)."> 6</a></td> <td class="src"><pre class="src"> <a title="Line 351: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (count > 0) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 352</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> rate = failures / (<span class="keyword">double</span>) count;</pre></td></tr>
+<tr> <td class="numLine"> 353</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 354</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">return</span> rate;</pre></td></tr>
+<tr> <td class="numLine"> 355</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 364</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 356</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 365</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">static</span> <span class="keyword">class</span> Stats <span class="keyword">implements</span> Cloneable {</span></pre></td></tr>
-<tr> <td class="numLine"> 366</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 357</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">boolean</span> hasGsaCrawledWithinLastDay() {</pre></td></tr>
+<tr> <td class="numLineCover"> 358</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> <span class="keyword">long</span> currentTime = timeProvider.currentTimeMillis();</pre></td></tr>
+<tr> <td class="numLineCover"> 359</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> <span class="keyword">synchronized</span> (Journal.<span class="keyword">this</span>) {</pre></td></tr>
+<tr> <td class="numLineCover"> 360</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> Stats stats = dayStatsByHalfHour;</pre></td></tr>
+<tr> <td class="numLine"> 361</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Update bookkeeping.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 362</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> stats.getCurrentStat(currentTime);</pre></td></tr>
+<tr> <td class="numLine"> 363</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 364</td> <td class="nbHitsCovered"><a title="Line 364: Conditional coverage 100% (2/2)."> 99</a></td> <td class="src"><pre class="src"> <a title="Line 364: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (Stat stat : stats.stats) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 365</td> <td class="nbHitsCovered"><a title="Line 365: Conditional coverage 100% (2/2)."> 97</a></td> <td class="src"><pre class="src"> <a title="Line 365: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (stat.gsaRetrievedDocument) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 366</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">true</span>;</pre></td></tr>
<tr> <td class="numLine"> 367</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Circular buffer containing all the statistics this object contains. When</span></pre></td></tr>
+ <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 368</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * the current {@link Stat} "expires", {@link #currentStat} is incremented</span></pre></td></tr>
-<tr> <td class="numLine"> 369</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * (floor {@code stats.length}) and the new current {@code Stat} object is</span></pre></td></tr>
-<tr> <td class="numLine"> 370</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * reset.</span></pre></td></tr>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 369</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 370</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">false</span>;</pre></td></tr>
<tr> <td class="numLine"> 371</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+ <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 372</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> Stat[] stats;</pre></td></tr>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 373</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine"> 374</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * The amount of time each {@link Stat} object's statistics were measured.</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * Access to the timeStats for use in {@link DashboardHandler} only.</span></pre></td></tr>
<tr> <td class="numLine"> 375</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine"> 376</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">long</span> snapshotDurationMs;</pre></td></tr>
-<tr> <td class="numLine"> 377</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 378</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Current {@link Stat} object within {@link #stats}. All incoming</span></pre></td></tr>
-<tr> <td class="numLine"> 379</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * statistics should update the current {@code Stat} object.</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">synchronized</span> JournalSnapshot getSnapshot() {</pre></td></tr>
+<tr> <td class="numLineCover"> 377</td> <td class="nbHitsCovered"> 24</td> <td class="src"><pre class="src"> <span class="keyword">long</span> currentTime = timeProvider.currentTimeMillis();</pre></td></tr>
+<tr> <td class="numLineCover"> 378</td> <td class="nbHitsCovered"> 24</td> <td class="src"><pre class="src"> Stats[] timeStatsClone = <span class="keyword">new</span> Stats[timeStats.length];</pre></td></tr>
+<tr> <td class="numLineCover"> 379</td> <td class="nbHitsCovered"><a title="Line 379: Conditional coverage 100% (2/2)."> 96</a></td> <td class="src"><pre class="src"> <a title="Line 379: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (<span class="keyword">int</span> i = 0; i < timeStats.length; i++) {</a></pre></td></tr>
<tr> <td class="numLine"> 380</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLine"> 381</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">int</span> currentStat;</pre></td></tr>
-<tr> <td class="numLine"> 382</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment">// Cause stats to update its internal structures</span></pre></td></tr>
+<tr> <td class="numLineCover"> 381</td> <td class="nbHitsCovered"> 72</td> <td class="src"><pre class="src"> timeStats[i].getCurrentStat(currentTime);</pre></td></tr>
+<tr> <td class="numLineCover"> 382</td> <td class="nbHitsCovered"> 72</td> <td class="src"><pre class="src"> timeStatsClone[i] = timeStats[i].clone();</pre></td></tr>
<tr> <td class="numLine"> 383</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Time that the current {@link Stat} object will expire and {@link</span></pre></td></tr>
+ <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 384</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * #currentStat} will be incremented.</span></pre></td></tr>
-<tr> <td class="numLine"> 385</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 385</td> <td class="nbHitsCovered"> 24</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">new</span> JournalSnapshot(<span class="keyword">this</span>, currentTime, timeStatsClone);</pre></td></tr>
<tr> <td class="numLine"> 386</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">long</span> pendingStatPeriodEnd;</pre></td></tr>
+ <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 387</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 388</td> <td class="nbHitsCovered"> 478</td> <td class="src"><pre class="src"> <span class="keyword">public</span> Stats(<span class="keyword">int</span> statCount, <span class="keyword">long</span> snapshotDuration, <span class="keyword">long</span> currentTime) {</pre></td></tr>
-<tr> <td class="numLineCover"> 389</td> <td class="nbHitsCovered"> 478</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.snapshotDurationMs = snapshotDuration;</pre></td></tr>
+<tr> <td class="numLine"> 388</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">static</span> <span class="keyword">class</span> JournalSnapshot {</pre></td></tr>
+<tr> <td class="numLine"> 389</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">final</span> <span class="keyword">long</span> numUniqueDocIdsPushed;</pre></td></tr>
<tr> <td class="numLine"> 390</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 391</td> <td class="nbHitsCovered"> 478</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.stats = <span class="keyword">new</span> Stat[statCount];</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">final</span> <span class="keyword">long</span> numTotalDocIdsPushed;</pre></td></tr>
+<tr> <td class="numLine"> 391</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">final</span> <span class="keyword">long</span> numUniqueGsaRequests;</pre></td></tr>
<tr> <td class="numLine"> 392</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// Pre-allocate all Stat objects</span></pre></td></tr>
-<tr> <td class="numLineCover"> 393</td> <td class="nbHitsCovered"><a title="Line 393: Conditional coverage 100% (2/2)."> 27192</a></td> <td class="src"><pre class="src"> <a title="Line 393: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (<span class="keyword">int</span> i = 0; i < <span class="keyword">this</span>.stats.length; i++) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 394</td> <td class="nbHitsCovered"> 26714</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.stats[i] = <span class="keyword">new</span> Stat();</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">final</span> <span class="keyword">long</span> numTotalGsaRequests;</pre></td></tr>
+<tr> <td class="numLine"> 393</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">final</span> <span class="keyword">long</span> numUniqueNonGsaRequests;</pre></td></tr>
+<tr> <td class="numLine"> 394</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">final</span> <span class="keyword">long</span> numTotalNonGsaRequests;</pre></td></tr>
<tr> <td class="numLine"> 395</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">final</span> <span class="keyword">long</span> whenStarted;</pre></td></tr>
<tr> <td class="numLine"> 396</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">final</span> <span class="keyword">long</span> currentTime;</pre></td></tr>
<tr> <td class="numLine"> 397</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// Initialize expiration times for pendingStat objects</span></pre></td></tr>
-<tr> <td class="numLineCover"> 398</td> <td class="nbHitsCovered"> 478</td> <td class="src"><pre class="src"> <span class="keyword">long</span> duration = <span class="keyword">this</span>.snapshotDurationMs;</pre></td></tr>
-<tr> <td class="numLineCover"> 399</td> <td class="nbHitsCovered"> 478</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.pendingStatPeriodEnd = ((currentTime / duration) * duration)</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">final</span> <span class="keyword">long</span> timeResolution;</pre></td></tr>
+<tr> <td class="numLine"> 398</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">final</span> <span class="keyword">long</span> lastSuccessfulFullPushStart;</pre></td></tr>
+<tr> <td class="numLine"> 399</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">final</span> <span class="keyword">long</span> lastSuccessfulFullPushEnd;</pre></td></tr>
<tr> <td class="numLine"> 400</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> + duration;</pre></td></tr>
-<tr> <td class="numLineCover"> 401</td> <td class="nbHitsCovered"> 478</td> <td class="src"><pre class="src"> }</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">final</span> <span class="keyword">long</span> currentFullPushStart;</pre></td></tr>
+<tr> <td class="numLine"> 401</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">final</span> <span class="keyword">long</span> lastSuccessfulIncrementalPushStart;</pre></td></tr>
<tr> <td class="numLine"> 402</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">final</span> <span class="keyword">long</span> lastSuccessfulIncrementalPushEnd;</pre></td></tr>
<tr> <td class="numLine"> 403</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">final</span> <span class="keyword">long</span> currentIncrementalPushStart;</pre></td></tr>
<tr> <td class="numLine"> 404</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Retrive the current {@code Stat} object that applies to {@code</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">final</span> Stats[] timeStats;</pre></td></tr>
<tr> <td class="numLine"> 405</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * currentTime}. {@code currentTime} is expected to be an actual point in</span></pre></td></tr>
-<tr> <td class="numLine"> 406</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * time while the caller was holding the lock on {@link Journal}. It may</span></pre></td></tr>
-<tr> <td class="numLine"> 407</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * never be less than the previous call.</span></pre></td></tr>
-<tr> <td class="numLine"> 408</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLine"> 409</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> Stat getCurrentStat(<span class="keyword">long</span> currentTime) {</pre></td></tr>
-<tr> <td class="numLine"> 410</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// Check if the current Stat object is still valid to write to</span></pre></td></tr>
-<tr> <td class="numLineCover"> 411</td> <td class="nbHitsCovered"><a title="Line 411: Conditional coverage 100% (2/2)."> 366</a></td> <td class="src"><pre class="src"> <a title="Line 411: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (pendingStatPeriodEnd > currentTime) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 412</td> <td class="nbHitsCovered"> 351</td> <td class="src"><pre class="src"> <span class="keyword">return</span> stats[currentStat];</pre></td></tr>
-<tr> <td class="numLine"> 413</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 414</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// Check if all the Stat objects are invalid. This occurs when the last</span></pre></td></tr>
-<tr> <td class="numLine"> 415</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// request was a long time ago.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 416</td> <td class="nbHitsCovered"><a title="Line 416: Conditional coverage 100% (2/2)."> 15</a></td> <td class="src"><pre class="src"> <a title="Line 416: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (currentTime - pendingStatPeriodEnd</a></pre></td></tr>
-<tr> <td class="numLine"> 417</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> > snapshotDurationMs * stats.length) {</pre></td></tr>
-<tr> <td class="numLineCover"> 418</td> <td class="nbHitsCovered"><a title="Line 418: Conditional coverage 100% (2/2)."> 403</a></td> <td class="src"><pre class="src"> <a title="Line 418: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (<span class="keyword">int</span> i = 0; i < stats.length; i++) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 419</td> <td class="nbHitsCovered"> 396</td> <td class="src"><pre class="src"> stats[i].reset();</pre></td></tr>
-<tr> <td class="numLine"> 420</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 421</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> <span class="keyword">long</span> duration = snapshotDurationMs;</pre></td></tr>
-<tr> <td class="numLineCover"> 422</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> pendingStatPeriodEnd = ((currentTime / duration) * duration) + duration;</pre></td></tr>
-<tr> <td class="numLine"> 423</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 424</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// Walk through time to get the current Stat object</span></pre></td></tr>
-<tr> <td class="numLineCover"> 425</td> <td class="nbHitsCovered"><a title="Line 425: Conditional coverage 100% (2/2)."> 203</a></td> <td class="src"><pre class="src"> <a title="Line 425: Conditional coverage 100% (2/2)."> <span class="keyword">while</span> (pendingStatPeriodEnd <= currentTime) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 426</td> <td class="nbHitsCovered"> 188</td> <td class="src"><pre class="src"> currentStat++;</pre></td></tr>
-<tr> <td class="numLineCover"> 427</td> <td class="nbHitsCovered"> 188</td> <td class="src"><pre class="src"> currentStat %= stats.length;</pre></td></tr>
-<tr> <td class="numLineCover"> 428</td> <td class="nbHitsCovered"> 188</td> <td class="src"><pre class="src"> stats[currentStat].reset();</pre></td></tr>
-<tr> <td class="numLineCover"> 429</td> <td class="nbHitsCovered"> 188</td> <td class="src"><pre class="src"> pendingStatPeriodEnd += snapshotDurationMs;</pre></td></tr>
-<tr> <td class="numLine"> 430</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 431</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> <span class="keyword">return</span> stats[currentStat];</pre></td></tr>
-<tr> <td class="numLine"> 432</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 433</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 434</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> Stats clone() {</pre></td></tr>
-<tr> <td class="numLine"> 435</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> Stats statsClone;</pre></td></tr>
-<tr> <td class="numLine"> 436</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 437</td> <td class="nbHitsCovered"> 60</td> <td class="src"><pre class="src"> statsClone = (Stats) <span class="keyword">super</span>.clone();</pre></td></tr>
-<tr> <td class="numLineCover"> 438</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (CloneNotSupportedException ex) {</span></pre></td></tr>
-<tr> <td class="numLineCover"> 439</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> AssertionError();</span></pre></td></tr>
-<tr> <td class="numLineCover"> 440</td> <td class="nbHitsCovered"> 60</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 441</td> <td class="nbHitsCovered"> 60</td> <td class="src"><pre class="src"> statsClone.stats = <span class="keyword">new</span> Stat[stats.length];</pre></td></tr>
-<tr> <td class="numLineCover"> 442</td> <td class="nbHitsCovered"><a title="Line 442: Conditional coverage 100% (2/2)."> 3420</a></td> <td class="src"><pre class="src"> <a title="Line 442: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (<span class="keyword">int</span> i = 0; i < stats.length; i++) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 443</td> <td class="nbHitsCovered"> 3360</td> <td class="src"><pre class="src"> statsClone.stats[i] = stats[i].clone();</pre></td></tr>
-<tr> <td class="numLine"> 444</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 445</td> <td class="nbHitsCovered"> 60</td> <td class="src"><pre class="src"> <span class="keyword">return</span> statsClone;</pre></td></tr>
-<tr> <td class="numLine"> 446</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 447</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 406</td> <td class="nbHitsCovered"> 25</td> <td class="src"><pre class="src"> JournalSnapshot(Journal journal, <span class="keyword">long</span> currentTime, Stats[] timeStatsClone) {</pre></td></tr>
+<tr> <td class="numLineCover"> 407</td> <td class="nbHitsCovered"> 25</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.numUniqueDocIdsPushed = journal.timesPushed.size();</pre></td></tr>
+<tr> <td class="numLineCover"> 408</td> <td class="nbHitsCovered"> 25</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.numTotalDocIdsPushed = journal.totalPushes;</pre></td></tr>
+<tr> <td class="numLineCover"> 409</td> <td class="nbHitsCovered"> 25</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.numUniqueGsaRequests = journal.timesGsaRequested.size();</pre></td></tr>
+<tr> <td class="numLineCover"> 410</td> <td class="nbHitsCovered"> 25</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.numTotalGsaRequests = journal.totalGsaRequests;</pre></td></tr>
+<tr> <td class="numLineCover"> 411</td> <td class="nbHitsCovered"> 25</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.numUniqueNonGsaRequests = journal.timesNonGsaRequested.size();</pre></td></tr>
+<tr> <td class="numLineCover"> 412</td> <td class="nbHitsCovered"> 25</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.numTotalNonGsaRequests = journal.totalNonGsaRequests;</pre></td></tr>
+<tr> <td class="numLineCover"> 413</td> <td class="nbHitsCovered"> 25</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.timeResolution = journal.timeResolution;</pre></td></tr>
+<tr> <td class="numLineCover"> 414</td> <td class="nbHitsCovered"> 25</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.lastSuccessfulFullPushStart = journal.lastSuccessfulFullPushStart;</pre></td></tr>
+<tr> <td class="numLineCover"> 415</td> <td class="nbHitsCovered"> 25</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.lastSuccessfulFullPushEnd = journal.lastSuccessfulFullPushEnd;</pre></td></tr>
+<tr> <td class="numLineCover"> 416</td> <td class="nbHitsCovered"> 25</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.currentFullPushStart = journal.currentFullPushStart;</pre></td></tr>
+<tr> <td class="numLineCover"> 417</td> <td class="nbHitsCovered"> 25</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.lastSuccessfulIncrementalPushStart = journal.lastSuccessfulIncrementalPushStart;</pre></td></tr>
+<tr> <td class="numLineCover"> 418</td> <td class="nbHitsCovered"> 25</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.lastSuccessfulIncrementalPushEnd = journal.lastSuccessfulIncrementalPushEnd;</pre></td></tr>
+<tr> <td class="numLineCover"> 419</td> <td class="nbHitsCovered"> 25</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.currentIncrementalPushStart = journal.currentIncrementalPushStart;</pre></td></tr>
+<tr> <td class="numLineCover"> 420</td> <td class="nbHitsCovered"> 25</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.whenStarted = journal.startedAt;</pre></td></tr>
+<tr> <td class="numLineCover"> 421</td> <td class="nbHitsCovered"> 25</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.currentTime = currentTime;</pre></td></tr>
+<tr> <td class="numLineCover"> 422</td> <td class="nbHitsCovered"> 25</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.timeStats = timeStatsClone;</pre></td></tr>
+<tr> <td class="numLineCover"> 423</td> <td class="nbHitsCovered"> 25</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 424</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 425</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 426</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">static</span> <span class="keyword">class</span> Stats <span class="keyword">implements</span> Cloneable {</span></pre></td></tr>
+<tr> <td class="numLine"> 427</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 428</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Circular buffer containing all the statistics this object contains. When</span></pre></td></tr>
+<tr> <td class="numLine"> 429</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * the current {@link Stat} "expires", {@link #currentStat} is incremented</span></pre></td></tr>
+<tr> <td class="numLine"> 430</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * (floor {@code stats.length}) and the new current {@code Stat} object is</span></pre></td></tr>
+<tr> <td class="numLine"> 431</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * reset.</span></pre></td></tr>
+<tr> <td class="numLine"> 432</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 433</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> Stat[] stats;</pre></td></tr>
+<tr> <td class="numLine"> 434</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 435</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * The amount of time each {@link Stat} object's statistics were measured.</span></pre></td></tr>
+<tr> <td class="numLine"> 436</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 437</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">long</span> snapshotDurationMs;</pre></td></tr>
+<tr> <td class="numLine"> 438</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 439</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Current {@link Stat} object within {@link #stats}. All incoming</span></pre></td></tr>
+<tr> <td class="numLine"> 440</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * statistics should update the current {@code Stat} object.</span></pre></td></tr>
+<tr> <td class="numLine"> 441</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 442</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">int</span> currentStat;</pre></td></tr>
+<tr> <td class="numLine"> 443</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 444</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Time that the current {@link Stat} object will expire and {@link</span></pre></td></tr>
+<tr> <td class="numLine"> 445</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * #currentStat} will be incremented.</span></pre></td></tr>
+<tr> <td class="numLine"> 446</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 447</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">long</span> pendingStatPeriodEnd;</pre></td></tr>
<tr> <td class="numLine"> 448</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 449</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 450</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Structure for holding statistics data. Data applies to a time period only,</span></pre></td></tr>
+<tr> <td class="numLineCover"> 449</td> <td class="nbHitsCovered"> 493</td> <td class="src"><pre class="src"> <span class="keyword">public</span> Stats(<span class="keyword">int</span> statCount, <span class="keyword">long</span> snapshotDuration, <span class="keyword">long</span> currentTime) {</pre></td></tr>
+<tr> <td class="numLineCover"> 450</td> <td class="nbHitsCovered"> 493</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.snapshotDurationMs = snapshotDuration;</pre></td></tr>
<tr> <td class="numLine"> 451</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * as controlled by {@link Stats}.</span></pre></td></tr>
-<tr> <td class="numLine"> 452</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLineCover"> 453</td> <td class="nbHitsCovered"> 584</td> <td class="src"><pre class="src"> <span class="keyword">static</span> <span class="keyword">class</span> Stat <span class="keyword">implements</span> Cloneable {</pre></td></tr>
-<tr> <td class="numLine"> 454</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 455</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * The number of requests processed.</span></pre></td></tr>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 452</td> <td class="nbHitsCovered"> 493</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.stats = <span class="keyword">new</span> Stat[statCount];</pre></td></tr>
+<tr> <td class="numLine"> 453</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Pre-allocate all Stat objects</span></pre></td></tr>
+<tr> <td class="numLineCover"> 454</td> <td class="nbHitsCovered"><a title="Line 454: Conditional coverage 100% (2/2)."> 28047</a></td> <td class="src"><pre class="src"> <a title="Line 454: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (<span class="keyword">int</span> i = 0; i < <span class="keyword">this</span>.stats.length; i++) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 455</td> <td class="nbHitsCovered"> 27554</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.stats[i] = <span class="keyword">new</span> Stat();</pre></td></tr>
<tr> <td class="numLine"> 456</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+ <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 457</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">long</span> requestProcessingsCount;</pre></td></tr>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 458</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 459</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * The number of request processings that errored.</span></pre></td></tr>
-<tr> <td class="numLine"> 460</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment">// Initialize expiration times for pendingStat objects</span></pre></td></tr>
+<tr> <td class="numLineCover"> 459</td> <td class="nbHitsCovered"> 493</td> <td class="src"><pre class="src"> <span class="keyword">long</span> duration = <span class="keyword">this</span>.snapshotDurationMs;</pre></td></tr>
+<tr> <td class="numLineCover"> 460</td> <td class="nbHitsCovered"> 493</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.pendingStatPeriodEnd = ((currentTime / duration) * duration)</pre></td></tr>
<tr> <td class="numLine"> 461</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">long</span> requestProcessingsFailureCount;</pre></td></tr>
-<tr> <td class="numLine"> 462</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+ <td class="src"><pre class="src"> + duration;</pre></td></tr>
+<tr> <td class="numLineCover"> 462</td> <td class="nbHitsCovered"> 493</td> <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 463</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * The total duration of response processings.</span></pre></td></tr>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 464</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine"> 465</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">long</span> requestProcessingsDurationSum;</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * Retrive the current {@code Stat} object that applies to {@code</span></pre></td></tr>
<tr> <td class="numLine"> 466</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * currentTime}. {@code currentTime} is expected to be an actual point in</span></pre></td></tr>
<tr> <td class="numLine"> 467</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * The maximal duration of any one response processing.</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * time while the caller was holding the lock on {@link Journal}. It may</span></pre></td></tr>
<tr> <td class="numLine"> 468</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * never be less than the previous call.</span></pre></td></tr>
<tr> <td class="numLine"> 469</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">long</span> requestProcessingsMaxDuration;</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine"> 470</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> Stat getCurrentStat(<span class="keyword">long</span> currentTime) {</pre></td></tr>
<tr> <td class="numLine"> 471</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Number of bytes generated by the adaptor.</span></pre></td></tr>
-<tr> <td class="numLine"> 472</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLine"> 473</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">long</span> requestProcessingsThroughput;</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment">// Check if the current Stat object is still valid to write to</span></pre></td></tr>
+<tr> <td class="numLineCover"> 472</td> <td class="nbHitsCovered"><a title="Line 472: Conditional coverage 100% (2/2)."> 378</a></td> <td class="src"><pre class="src"> <a title="Line 472: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (pendingStatPeriodEnd > currentTime) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 473</td> <td class="nbHitsCovered"> 362</td> <td class="src"><pre class="src"> <span class="keyword">return</span> stats[currentStat];</pre></td></tr>
<tr> <td class="numLine"> 474</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+ <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 475</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * True if the GSA requested a document.</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment">// Check if all the Stat objects are invalid. This occurs when the last</span></pre></td></tr>
<tr> <td class="numLine"> 476</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLine"> 477</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">boolean</span> gsaRetrievedDocument;</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment">// request was a long time ago.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 477</td> <td class="nbHitsCovered"><a title="Line 477: Conditional coverage 100% (2/2)."> 16</a></td> <td class="src"><pre class="src"> <a title="Line 477: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (currentTime - pendingStatPeriodEnd</a></pre></td></tr>
<tr> <td class="numLine"> 478</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 479</td> <td class="nbHitsCovered"> 26714</td> <td class="src"><pre class="src"> <span class="keyword">public</span> Stat() {</pre></td></tr>
-<tr> <td class="numLineCover"> 480</td> <td class="nbHitsCovered"> 26714</td> <td class="src"><pre class="src"> reset();</pre></td></tr>
-<tr> <td class="numLineCover"> 481</td> <td class="nbHitsCovered"> 26714</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 482</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 483</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+ <td class="src"><pre class="src"> > snapshotDurationMs * stats.length) {</pre></td></tr>
+<tr> <td class="numLineCover"> 479</td> <td class="nbHitsCovered"><a title="Line 479: Conditional coverage 100% (2/2)."> 403</a></td> <td class="src"><pre class="src"> <a title="Line 479: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (<span class="keyword">int</span> i = 0; i < stats.length; i++) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 480</td> <td class="nbHitsCovered"> 396</td> <td class="src"><pre class="src"> stats[i].reset();</pre></td></tr>
+<tr> <td class="numLine"> 481</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 482</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> <span class="keyword">long</span> duration = snapshotDurationMs;</pre></td></tr>
+<tr> <td class="numLineCover"> 483</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> pendingStatPeriodEnd = ((currentTime / duration) * duration) + duration;</pre></td></tr>
<tr> <td class="numLine"> 484</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Reset object for reuse.</span></pre></td></tr>
+ <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 485</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLine"> 486</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">void</span> reset() {</pre></td></tr>
-<tr> <td class="numLineCover"> 487</td> <td class="nbHitsCovered"> 27298</td> <td class="src"><pre class="src"> requestProcessingsCount = 0;</pre></td></tr>
-<tr> <td class="numLineCover"> 488</td> <td class="nbHitsCovered"> 27298</td> <td class="src"><pre class="src"> requestProcessingsFailureCount = 0;</pre></td></tr>
-<tr> <td class="numLineCover"> 489</td> <td class="nbHitsCovered"> 27298</td> <td class="src"><pre class="src"> requestProcessingsDurationSum = 0;</pre></td></tr>
-<tr> <td class="numLineCover"> 490</td> <td class="nbHitsCovered"> 27298</td> <td class="src"><pre class="src"> requestProcessingsMaxDuration = 0;</pre></td></tr>
-<tr> <td class="numLineCover"> 491</td> <td class="nbHitsCovered"> 27298</td> <td class="src"><pre class="src"> requestProcessingsThroughput = 0;</pre></td></tr>
-<tr> <td class="numLineCover"> 492</td> <td class="nbHitsCovered"> 27298</td> <td class="src"><pre class="src"> gsaRetrievedDocument = <span class="keyword">false</span>;</pre></td></tr>
-<tr> <td class="numLineCover"> 493</td> <td class="nbHitsCovered"> 27298</td> <td class="src"><pre class="src"> }</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment">// Walk through time to get the current Stat object</span></pre></td></tr>
+<tr> <td class="numLineCover"> 486</td> <td class="nbHitsCovered"><a title="Line 486: Conditional coverage 100% (2/2)."> 205</a></td> <td class="src"><pre class="src"> <a title="Line 486: Conditional coverage 100% (2/2)."> <span class="keyword">while</span> (pendingStatPeriodEnd <= currentTime) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 487</td> <td class="nbHitsCovered"> 189</td> <td class="src"><pre class="src"> currentStat++;</pre></td></tr>
+<tr> <td class="numLineCover"> 488</td> <td class="nbHitsCovered"> 189</td> <td class="src"><pre class="src"> currentStat %= stats.length;</pre></td></tr>
+<tr> <td class="numLineCover"> 489</td> <td class="nbHitsCovered"> 189</td> <td class="src"><pre class="src"> stats[currentStat].reset();</pre></td></tr>
+<tr> <td class="numLineCover"> 490</td> <td class="nbHitsCovered"> 189</td> <td class="src"><pre class="src"> pendingStatPeriodEnd += snapshotDurationMs;</pre></td></tr>
+<tr> <td class="numLine"> 491</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 492</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> <span class="keyword">return</span> stats[currentStat];</pre></td></tr>
+<tr> <td class="numLine"> 493</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 494</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 495</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> Stat clone() {</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> Stats clone() {</pre></td></tr>
<tr> <td class="numLine"> 496</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> Stats statsClone;</pre></td></tr>
+<tr> <td class="numLine"> 497</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 497</td> <td class="nbHitsCovered"> 3360</td> <td class="src"><pre class="src"> <span class="keyword">return</span> (Stat) <span class="keyword">super</span>.clone();</pre></td></tr>
-<tr> <td class="numLineCover"> 498</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (CloneNotSupportedException ex) {</span></pre></td></tr>
-<tr> <td class="numLineCover"> 499</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> AssertionError();</span></pre></td></tr>
-<tr> <td class="numLine"> 500</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 501</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 502</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 503</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 504</td> <td class="nbHitsCovered"> 162</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">class</span> NegSizeFakeMap<K, V> <span class="keyword">extends</span> FakeMap<K, V> {</pre></td></tr>
+<tr> <td class="numLineCover"> 498</td> <td class="nbHitsCovered"> 72</td> <td class="src"><pre class="src"> statsClone = (Stats) <span class="keyword">super</span>.clone();</pre></td></tr>
+<tr> <td class="numLineCover"> 499</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (CloneNotSupportedException ex) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 500</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> AssertionError();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 501</td> <td class="nbHitsCovered"> 72</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 502</td> <td class="nbHitsCovered"> 72</td> <td class="src"><pre class="src"> statsClone.stats = <span class="keyword">new</span> Stat[stats.length];</pre></td></tr>
+<tr> <td class="numLineCover"> 503</td> <td class="nbHitsCovered"><a title="Line 503: Conditional coverage 100% (2/2)."> 4104</a></td> <td class="src"><pre class="src"> <a title="Line 503: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (<span class="keyword">int</span> i = 0; i < stats.length; i++) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 504</td> <td class="nbHitsCovered"> 4032</td> <td class="src"><pre class="src"> statsClone.stats[i] = stats[i].clone();</pre></td></tr>
<tr> <td class="numLine"> 505</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 506</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">int</span> size() {</pre></td></tr>
-<tr> <td class="numLineCover"> 507</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> <span class="keyword">return</span> -1;</pre></td></tr>
-<tr> <td class="numLine"> 508</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 506</td> <td class="nbHitsCovered"> 72</td> <td class="src"><pre class="src"> <span class="keyword">return</span> statsClone;</pre></td></tr>
+<tr> <td class="numLine"> 507</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 509</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 508</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 509</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 510</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 511</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Structure for holding statistics data. Data applies to a time period only,</span></pre></td></tr>
+<tr> <td class="numLine"> 512</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * as controlled by {@link Stats}.</span></pre></td></tr>
+<tr> <td class="numLine"> 513</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLineCover"> 514</td> <td class="nbHitsCovered"> 585</td> <td class="src"><pre class="src"> <span class="keyword">static</span> <span class="keyword">class</span> Stat <span class="keyword">implements</span> Cloneable {</pre></td></tr>
+<tr> <td class="numLine"> 515</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 516</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * The number of requests processed.</span></pre></td></tr>
+<tr> <td class="numLine"> 517</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 518</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">long</span> requestProcessingsCount;</pre></td></tr>
+<tr> <td class="numLine"> 519</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 520</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * The number of request processings that errored.</span></pre></td></tr>
+<tr> <td class="numLine"> 521</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 522</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">long</span> requestProcessingsFailureCount;</pre></td></tr>
+<tr> <td class="numLine"> 523</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 524</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * The total duration of response processings.</span></pre></td></tr>
+<tr> <td class="numLine"> 525</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 526</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">long</span> requestProcessingsDurationSum;</pre></td></tr>
+<tr> <td class="numLine"> 527</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 528</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * The maximal duration of any one response processing.</span></pre></td></tr>
+<tr> <td class="numLine"> 529</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 530</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">long</span> requestProcessingsMaxDuration;</pre></td></tr>
+<tr> <td class="numLine"> 531</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 532</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Number of bytes generated by the adaptor.</span></pre></td></tr>
+<tr> <td class="numLine"> 533</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 534</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">long</span> requestProcessingsThroughput;</pre></td></tr>
+<tr> <td class="numLine"> 535</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 536</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * True if the GSA requested a document.</span></pre></td></tr>
+<tr> <td class="numLine"> 537</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 538</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">boolean</span> gsaRetrievedDocument;</pre></td></tr>
+<tr> <td class="numLine"> 539</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 540</td> <td class="nbHitsCovered"> 27554</td> <td class="src"><pre class="src"> <span class="keyword">public</span> Stat() {</pre></td></tr>
+<tr> <td class="numLineCover"> 541</td> <td class="nbHitsCovered"> 27554</td> <td class="src"><pre class="src"> reset();</pre></td></tr>
+<tr> <td class="numLineCover"> 542</td> <td class="nbHitsCovered"> 27554</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 543</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 544</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 545</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Reset object for reuse.</span></pre></td></tr>
+<tr> <td class="numLine"> 546</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 547</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">void</span> reset() {</pre></td></tr>
+<tr> <td class="numLineCover"> 548</td> <td class="nbHitsCovered"> 28139</td> <td class="src"><pre class="src"> requestProcessingsCount = 0;</pre></td></tr>
+<tr> <td class="numLineCover"> 549</td> <td class="nbHitsCovered"> 28139</td> <td class="src"><pre class="src"> requestProcessingsFailureCount = 0;</pre></td></tr>
+<tr> <td class="numLineCover"> 550</td> <td class="nbHitsCovered"> 28139</td> <td class="src"><pre class="src"> requestProcessingsDurationSum = 0;</pre></td></tr>
+<tr> <td class="numLineCover"> 551</td> <td class="nbHitsCovered"> 28139</td> <td class="src"><pre class="src"> requestProcessingsMaxDuration = 0;</pre></td></tr>
+<tr> <td class="numLineCover"> 552</td> <td class="nbHitsCovered"> 28139</td> <td class="src"><pre class="src"> requestProcessingsThroughput = 0;</pre></td></tr>
+<tr> <td class="numLineCover"> 553</td> <td class="nbHitsCovered"> 28139</td> <td class="src"><pre class="src"> gsaRetrievedDocument = <span class="keyword">false</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 554</td> <td class="nbHitsCovered"> 28139</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 555</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 556</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> Stat clone() {</pre></td></tr>
+<tr> <td class="numLine"> 557</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 558</td> <td class="nbHitsCovered"> 4032</td> <td class="src"><pre class="src"> <span class="keyword">return</span> (Stat) <span class="keyword">super</span>.clone();</pre></td></tr>
+<tr> <td class="numLineCover"> 559</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (CloneNotSupportedException ex) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 560</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> AssertionError();</span></pre></td></tr>
+<tr> <td class="numLine"> 561</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 562</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 563</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 564</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 565</td> <td class="nbHitsCovered"> 162</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">class</span> NegSizeFakeMap<K, V> <span class="keyword">extends</span> FakeMap<K, V> {</pre></td></tr>
+<tr> <td class="numLine"> 566</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 567</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">int</span> size() {</pre></td></tr>
+<tr> <td class="numLineCover"> 568</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> <span class="keyword">return</span> -1;</pre></td></tr>
+<tr> <td class="numLine"> 569</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 570</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 571</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
</table>
diff --git a/coverage/com.google.enterprise.adaptor.StatRpcMethod.html b/coverage/com.google.enterprise.adaptor.StatRpcMethod.html
index 6f227be..a3071d6 100644
--- a/coverage/com.google.enterprise.adaptor.StatRpcMethod.html
+++ b/coverage/com.google.enterprise.adaptor.StatRpcMethod.html
@@ -12,7 +12,7 @@
<div class="separator"> </div>
<table class="report">
<thead><tr> <td class="heading">Classes in this File</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
- <tr><td><a href="com.google.enterprise.adaptor.StatRpcMethod.html">StatRpcMethod</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">59/59</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">3</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:75px"><span class="text">9/12</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.2;</span>2.2</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.StatRpcMethod.html">StatRpcMethod</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">62/62</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">3</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:75px"><span class="text">9/12</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.2;</span>2.2</td></tr>
</table>
<div class="separator"> </div>
@@ -119,112 +119,123 @@
<tr> <td class="numLine"> 60</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> journalSnap.numUniqueNonGsaRequests);</pre></td></tr>
<tr> <td class="numLineCover"> 61</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> simple.put(<span class="string">"timeResolution"</span>, journalSnap.timeResolution);</pre></td></tr>
-<tr> <td class="numLineCover"> 62</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> simple.put(<span class="string">"lastSuccessfulPushStart"</span>,</pre></td></tr>
+<tr> <td class="numLineCover"> 62</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> simple.put(<span class="string">"lastSuccessfulFullPushStart"</span>,</pre></td></tr>
<tr> <td class="numLine"> 63</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> journalSnap.lastSuccessfulPushStart);</pre></td></tr>
-<tr> <td class="numLineCover"> 64</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> simple.put(<span class="string">"lastSuccessfulPushEnd"</span>, journalSnap.lastSuccessfulPushEnd);</pre></td></tr>
-<tr> <td class="numLineCover"> 65</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> simple.put(<span class="string">"currentPushStart"</span>, journalSnap.currentPushStart);</pre></td></tr>
-<tr> <td class="numLineCover"> 66</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> simple.put(<span class="string">"whenStarted"</span>, journalSnap.whenStarted);</pre></td></tr>
-<tr> <td class="numLineCover"> 67</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> map.put(<span class="string">"simpleStats"</span>, simple);</pre></td></tr>
+ <td class="src"><pre class="src"> journalSnap.lastSuccessfulFullPushStart);</pre></td></tr>
+<tr> <td class="numLineCover"> 64</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> simple.put(<span class="string">"lastSuccessfulFullPushEnd"</span>,</pre></td></tr>
+<tr> <td class="numLine"> 65</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> journalSnap.lastSuccessfulFullPushEnd);</pre></td></tr>
+<tr> <td class="numLineCover"> 66</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> simple.put(<span class="string">"currentFullPushStart"</span>, journalSnap.currentFullPushStart);</pre></td></tr>
+<tr> <td class="numLineCover"> 67</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> simple.put(<span class="string">"lastSuccessfulIncrementalPushStart"</span>,</pre></td></tr>
<tr> <td class="numLine"> 68</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 69</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
+ <td class="src"><pre class="src"> journalSnap.lastSuccessfulIncrementalPushStart);</pre></td></tr>
+<tr> <td class="numLineCover"> 69</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> simple.put(<span class="string">"lastSuccessfulIncrementalPushEnd"</span>,</pre></td></tr>
<tr> <td class="numLine"> 70</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> {</pre></td></tr>
-<tr> <td class="numLineCover"> 71</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> Map<String, Object> versionMap = <span class="keyword">new</span> TreeMap<String, Object>();</pre></td></tr>
+ <td class="src"><pre class="src"> journalSnap.lastSuccessfulIncrementalPushEnd);</pre></td></tr>
+<tr> <td class="numLineCover"> 71</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> simple.put(<span class="string">"currentIncrementalPushStart"</span>,</pre></td></tr>
<tr> <td class="numLine"> 72</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 73</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> versionMap.put(<span class="string">"versionJvm"</span>, System.getProperty(<span class="string">"java.version"</span>));</pre></td></tr>
-<tr> <td class="numLineCover"> 74</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> versionMap.put(<span class="string">"versionAdaptorLibrary"</span>,</pre></td></tr>
+ <td class="src"><pre class="src"> journalSnap.currentIncrementalPushStart);</pre></td></tr>
+<tr> <td class="numLineCover"> 73</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> simple.put(<span class="string">"whenStarted"</span>, journalSnap.whenStarted);</pre></td></tr>
+<tr> <td class="numLineCover"> 74</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> map.put(<span class="string">"simpleStats"</span>, simple);</pre></td></tr>
<tr> <td class="numLine"> 75</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> getAdaptorLibraryVersion(locale));</pre></td></tr>
-<tr> <td class="numLineCover"> 76</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> versionMap.put(<span class="string">"versionAdaptor"</span>,</pre></td></tr>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 76</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 77</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> getAdaptorVersion(locale));</pre></td></tr>
-<tr> <td class="numLine"> 78</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 79</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> map.put(<span class="string">"versionStats"</span>, versionMap);</pre></td></tr>
-<tr> <td class="numLine"> 80</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 81</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 82</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> {</pre></td></tr>
-<tr> <td class="numLineCover"> 83</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> List<Object> statsList = <span class="keyword">new</span> ArrayList<Object>();</pre></td></tr>
-<tr> <td class="numLineCover"> 84</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">long</span> currentTime = journalSnap.currentTime;</pre></td></tr>
-<tr> <td class="numLineCover"> 85</td> <td class="nbHitsCovered"><a title="Line 85: Conditional coverage 100% (2/2)."> 2</a></td> <td class="src"><pre class="src"> <a title="Line 85: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (Journal.Stats stats : journalSnap.timeStats) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 86</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> Map<String, Object> stat = <span class="keyword">new</span> TreeMap<String, Object>();</pre></td></tr>
-<tr> <td class="numLineCover"> 87</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> stat.put(<span class="string">"snapshotDuration"</span>, stats.snapshotDurationMs);</pre></td></tr>
-<tr> <td class="numLineCover"> 88</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> stat.put(<span class="string">"currentTime"</span>, currentTime);</pre></td></tr>
-<tr> <td class="numLineCover"> 89</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> List<Map<String, Object>> statData</pre></td></tr>
-<tr> <td class="numLine"> 90</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> = <span class="keyword">new</span> ArrayList<Map<String, Object>>(stats.stats.length);</pre></td></tr>
-<tr> <td class="numLineCover"> 91</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">long</span> time = stats.pendingStatPeriodEnd;</pre></td></tr>
-<tr> <td class="numLine"> 92</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// Rewind to beginning</span></pre></td></tr>
-<tr> <td class="numLineCover"> 93</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> time -= stats.stats.length * stats.snapshotDurationMs;</pre></td></tr>
-<tr> <td class="numLineCover"> 94</td> <td class="nbHitsCovered"><a title="Line 94: Conditional coverage 100% (2/2)."> 2</a></td> <td class="src"><pre class="src"> <a title="Line 94: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (<span class="keyword">int</span> i = stats.currentStat + 1; i < stats.stats.length; i++) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 95</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> statData.add(getStat(stats.stats[i], time));</pre></td></tr>
-<tr> <td class="numLineCover"> 96</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> time += stats.snapshotDurationMs;</pre></td></tr>
-<tr> <td class="numLine"> 97</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 98</td> <td class="nbHitsCovered"><a title="Line 98: Conditional coverage 100% (2/2)."> 2</a></td> <td class="src"><pre class="src"> <a title="Line 98: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (<span class="keyword">int</span> i = 0; i <= stats.currentStat; i++) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 99</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> statData.add(getStat(stats.stats[i], time));</pre></td></tr>
-<tr> <td class="numLineCover"> 100</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> time += stats.snapshotDurationMs;</pre></td></tr>
-<tr> <td class="numLine"> 101</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 102</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> stat.put(<span class="string">"statData"</span>, statData);</pre></td></tr>
-<tr> <td class="numLineCover"> 103</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> statsList.add(stat);</pre></td></tr>
-<tr> <td class="numLine"> 104</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 105</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> map.put(<span class="string">"stats"</span>, statsList);</pre></td></tr>
-<tr> <td class="numLine"> 106</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 78</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> Map<String, Object> versionMap = <span class="keyword">new</span> TreeMap<String, Object>();</pre></td></tr>
+<tr> <td class="numLine"> 79</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 80</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> versionMap.put(<span class="string">"versionJvm"</span>, System.getProperty(<span class="string">"java.version"</span>));</pre></td></tr>
+<tr> <td class="numLineCover"> 81</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> versionMap.put(<span class="string">"versionAdaptorLibrary"</span>,</pre></td></tr>
+<tr> <td class="numLine"> 82</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> getAdaptorLibraryVersion(locale));</pre></td></tr>
+<tr> <td class="numLineCover"> 83</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> versionMap.put(<span class="string">"versionAdaptor"</span>,</pre></td></tr>
+<tr> <td class="numLine"> 84</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> getAdaptorVersion(locale));</pre></td></tr>
+<tr> <td class="numLine"> 85</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 86</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> map.put(<span class="string">"versionStats"</span>, versionMap);</pre></td></tr>
+<tr> <td class="numLine"> 87</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 107</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 88</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 108</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> map;</pre></td></tr>
-<tr> <td class="numLine"> 109</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 110</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 89</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> {</pre></td></tr>
+<tr> <td class="numLineCover"> 90</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> List<Object> statsList = <span class="keyword">new</span> ArrayList<Object>();</pre></td></tr>
+<tr> <td class="numLineCover"> 91</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">long</span> currentTime = journalSnap.currentTime;</pre></td></tr>
+<tr> <td class="numLineCover"> 92</td> <td class="nbHitsCovered"><a title="Line 92: Conditional coverage 100% (2/2)."> 2</a></td> <td class="src"><pre class="src"> <a title="Line 92: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (Journal.Stats stats : journalSnap.timeStats) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 93</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> Map<String, Object> stat = <span class="keyword">new</span> TreeMap<String, Object>();</pre></td></tr>
+<tr> <td class="numLineCover"> 94</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> stat.put(<span class="string">"snapshotDuration"</span>, stats.snapshotDurationMs);</pre></td></tr>
+<tr> <td class="numLineCover"> 95</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> stat.put(<span class="string">"currentTime"</span>, currentTime);</pre></td></tr>
+<tr> <td class="numLineCover"> 96</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> List<Map<String, Object>> statData</pre></td></tr>
+<tr> <td class="numLine"> 97</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> = <span class="keyword">new</span> ArrayList<Map<String, Object>>(stats.stats.length);</pre></td></tr>
+<tr> <td class="numLineCover"> 98</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">long</span> time = stats.pendingStatPeriodEnd;</pre></td></tr>
+<tr> <td class="numLine"> 99</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Rewind to beginning</span></pre></td></tr>
+<tr> <td class="numLineCover"> 100</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> time -= stats.stats.length * stats.snapshotDurationMs;</pre></td></tr>
+<tr> <td class="numLineCover"> 101</td> <td class="nbHitsCovered"><a title="Line 101: Conditional coverage 100% (2/2)."> 2</a></td> <td class="src"><pre class="src"> <a title="Line 101: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (<span class="keyword">int</span> i = stats.currentStat + 1; i < stats.stats.length; i++) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 102</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> statData.add(getStat(stats.stats[i], time));</pre></td></tr>
+<tr> <td class="numLineCover"> 103</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> time += stats.snapshotDurationMs;</pre></td></tr>
+<tr> <td class="numLine"> 104</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 105</td> <td class="nbHitsCovered"><a title="Line 105: Conditional coverage 100% (2/2)."> 2</a></td> <td class="src"><pre class="src"> <a title="Line 105: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (<span class="keyword">int</span> i = 0; i <= stats.currentStat; i++) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 106</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> statData.add(getStat(stats.stats[i], time));</pre></td></tr>
+<tr> <td class="numLineCover"> 107</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> time += stats.snapshotDurationMs;</pre></td></tr>
+<tr> <td class="numLine"> 108</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 109</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> stat.put(<span class="string">"statData"</span>, statData);</pre></td></tr>
+<tr> <td class="numLineCover"> 110</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> statsList.add(stat);</pre></td></tr>
<tr> <td class="numLine"> 111</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> Map<String, Object> getStat(Journal.Stat stat, <span class="keyword">long</span> time) {</pre></td></tr>
-<tr> <td class="numLineCover"> 112</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> Map<String, Object> statMap = <span class="keyword">new</span> TreeMap<String, Object>();</pre></td></tr>
-<tr> <td class="numLineCover"> 113</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> statMap.put(<span class="string">"time"</span>, time);</pre></td></tr>
-<tr> <td class="numLineCover"> 114</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> statMap.put(<span class="string">"requestProcessingsCount"</span>, stat.requestProcessingsCount);</pre></td></tr>
-<tr> <td class="numLineCover"> 115</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> statMap.put(<span class="string">"requestProcessingsDurationSum"</span>,</pre></td></tr>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 112</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> map.put(<span class="string">"stats"</span>, statsList);</pre></td></tr>
+<tr> <td class="numLine"> 113</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 114</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 115</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> map;</pre></td></tr>
<tr> <td class="numLine"> 116</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> stat.requestProcessingsDurationSum);</pre></td></tr>
-<tr> <td class="numLineCover"> 117</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> statMap.put(<span class="string">"requestProcessingsMaxDuration"</span>,</pre></td></tr>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 117</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 118</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> stat.requestProcessingsMaxDuration);</pre></td></tr>
-<tr> <td class="numLineCover"> 119</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> statMap.put(<span class="string">"requestProcessingsThroughput"</span>,</pre></td></tr>
-<tr> <td class="numLine"> 120</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> stat.requestProcessingsThroughput);</pre></td></tr>
-<tr> <td class="numLineCover"> 121</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">return</span> statMap;</pre></td></tr>
-<tr> <td class="numLine"> 122</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> Map<String, Object> getStat(Journal.Stat stat, <span class="keyword">long</span> time) {</pre></td></tr>
+<tr> <td class="numLineCover"> 119</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> Map<String, Object> statMap = <span class="keyword">new</span> TreeMap<String, Object>();</pre></td></tr>
+<tr> <td class="numLineCover"> 120</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> statMap.put(<span class="string">"time"</span>, time);</pre></td></tr>
+<tr> <td class="numLineCover"> 121</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> statMap.put(<span class="string">"requestProcessingsCount"</span>, stat.requestProcessingsCount);</pre></td></tr>
+<tr> <td class="numLineCover"> 122</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> statMap.put(<span class="string">"requestProcessingsDurationSum"</span>,</pre></td></tr>
<tr> <td class="numLine"> 123</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 124</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> String getAdaptorLibraryVersion(Locale locale) {</pre></td></tr>
-<tr> <td class="numLineCover"> 125</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> String version = <span class="keyword">this</span>.getClass().getPackage().getImplementationVersion();</pre></td></tr>
-<tr> <td class="numLineCover"> 126</td> <td class="nbHitsUncovered"><a title="Line 126: Conditional coverage 50% (1/2)."> 1</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 126: Conditional coverage 50% (1/2)."> <span class="keyword">return</span> version == <span class="keyword">null</span> ?</a></span></pre></td></tr>
+ <td class="src"><pre class="src"> stat.requestProcessingsDurationSum);</pre></td></tr>
+<tr> <td class="numLineCover"> 124</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> statMap.put(<span class="string">"requestProcessingsMaxDuration"</span>,</pre></td></tr>
+<tr> <td class="numLine"> 125</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> stat.requestProcessingsMaxDuration);</pre></td></tr>
+<tr> <td class="numLineCover"> 126</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> statMap.put(<span class="string">"requestProcessingsThroughput"</span>,</pre></td></tr>
<tr> <td class="numLine"> 127</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> Translation.STATS_VERSION_UNKNOWN.toString(locale) : version;</pre></td></tr>
-<tr> <td class="numLine"> 128</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
+ <td class="src"><pre class="src"> stat.requestProcessingsThroughput);</pre></td></tr>
+<tr> <td class="numLineCover"> 128</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">return</span> statMap;</pre></td></tr>
<tr> <td class="numLine"> 129</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 130</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> String getAdaptorVersion(Locale locale) {</pre></td></tr>
-<tr> <td class="numLineCover"> 131</td> <td class="nbHitsUncovered"><a title="Line 131: Conditional coverage 50% (1/2)."> 1</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 131: Conditional coverage 50% (1/2)."> <span class="keyword">return</span> adaptorVersion == <span class="keyword">null</span> ?</a></span></pre></td></tr>
-<tr> <td class="numLine"> 132</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> Translation.STATS_VERSION_UNKNOWN.toString(locale) : adaptorVersion;</pre></td></tr>
-<tr> <td class="numLine"> 133</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 130</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 131</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> String getAdaptorLibraryVersion(Locale locale) {</pre></td></tr>
+<tr> <td class="numLineCover"> 132</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> String version = <span class="keyword">this</span>.getClass().getPackage().getImplementationVersion();</pre></td></tr>
+<tr> <td class="numLineCover"> 133</td> <td class="nbHitsUncovered"><a title="Line 133: Conditional coverage 50% (1/2)."> 1</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 133: Conditional coverage 50% (1/2)."> <span class="keyword">return</span> version == <span class="keyword">null</span> ?</a></span></pre></td></tr>
<tr> <td class="numLine"> 134</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> Translation.STATS_VERSION_UNKNOWN.toString(locale) : version;</pre></td></tr>
+<tr> <td class="numLine"> 135</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 136</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 137</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> String getAdaptorVersion(Locale locale) {</pre></td></tr>
+<tr> <td class="numLineCover"> 138</td> <td class="nbHitsUncovered"><a title="Line 138: Conditional coverage 50% (1/2)."> 1</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 138: Conditional coverage 50% (1/2)."> <span class="keyword">return</span> adaptorVersion == <span class="keyword">null</span> ?</a></span></pre></td></tr>
+<tr> <td class="numLine"> 139</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> Translation.STATS_VERSION_UNKNOWN.toString(locale) : adaptorVersion;</pre></td></tr>
+<tr> <td class="numLine"> 140</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 141</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
</table>
diff --git a/coverage/com.google.enterprise.adaptor.SystemTimeProvider.html b/coverage/com.google.enterprise.adaptor.SystemTimeProvider.html
index 4a1ba0e..30c39d3 100644
--- a/coverage/com.google.enterprise.adaptor.SystemTimeProvider.html
+++ b/coverage/com.google.enterprise.adaptor.SystemTimeProvider.html
@@ -58,7 +58,7 @@
<tr> <td class="numLineCover"> 20</td> <td class="nbHitsCovered"> 92</td> <td class="src"><pre class="src"> <span class="keyword">class</span> SystemTimeProvider <span class="keyword">implements</span> TimeProvider {</pre></td></tr>
<tr> <td class="numLine"> 21</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">long</span> currentTimeMillis() {</pre></td></tr>
-<tr> <td class="numLineCover"> 22</td> <td class="nbHitsCovered"> 334713</td> <td class="src"><pre class="src"> <span class="keyword">return</span> System.currentTimeMillis();</pre></td></tr>
+<tr> <td class="numLineCover"> 22</td> <td class="nbHitsCovered"> 328926</td> <td class="src"><pre class="src"> <span class="keyword">return</span> System.currentTimeMillis();</pre></td></tr>
<tr> <td class="numLine"> 23</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 24</td> <td class="nbHits"> </td>
diff --git a/coverage/com.google.enterprise.adaptor.WrapperAdaptor.html b/coverage/com.google.enterprise.adaptor.WrapperAdaptor.html
index 999ba26..d0e170f 100644
--- a/coverage/com.google.enterprise.adaptor.WrapperAdaptor.html
+++ b/coverage/com.google.enterprise.adaptor.WrapperAdaptor.html
@@ -15,7 +15,7 @@
<tr><td><a href="com.google.enterprise.adaptor.WrapperAdaptor.html">WrapperAdaptor</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">3</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:78px"><span class="text">11/14</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
<tr><td><a href="com.google.enterprise.adaptor.WrapperAdaptor.html">WrapperAdaptor$GetContentsRequest</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">2</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:66px"><span class="text">4/6</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
<tr><td><a href="com.google.enterprise.adaptor.WrapperAdaptor.html">WrapperAdaptor$GetContentsResponse</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">26</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:35px"><span class="text">14/40</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.WrapperAdaptor.html">WrapperAdaptor$WrapperAdaptorContext</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">13</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:18px"><span class="text">3/16</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.WrapperAdaptor.html">WrapperAdaptor$WrapperAdaptorContext</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">16</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:15px"><span class="text">3/19</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
<tr><td><a href="com.google.enterprise.adaptor.WrapperAdaptor.html">WrapperAdaptor$WrapperDocIdPusher</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">6</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/6</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
<tr><td><a href="com.google.enterprise.adaptor.WrapperAdaptor.html">WrapperAdaptor$WrapperRequest</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">3</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:50px"><span class="text">3/6</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
<tr><td><a href="com.google.enterprise.adaptor.WrapperAdaptor.html">WrapperAdaptor$WrapperResponse</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">23</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:11px"><span class="text">3/26</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
@@ -672,16 +672,16 @@
<tr> <td class="numLine"> 378</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> @Override</pre></td></tr>
<tr> <td class="numLine"> 379</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> setGetDocIdsErrorHandler(GetDocIdsErrorHandler handler) {</pre></td></tr>
-<tr> <td class="numLineCover"> 380</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> context.setGetDocIdsErrorHandler(handler);</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> setGetDocIdsFullErrorHandler(GetDocIdsErrorHandler handler) {</pre></td></tr>
+<tr> <td class="numLineCover"> 380</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> context.setGetDocIdsFullErrorHandler(handler);</span></pre></td></tr>
<tr> <td class="numLineCover"> 381</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
<tr> <td class="numLine"> 382</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 383</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> @Override</pre></td></tr>
<tr> <td class="numLine"> 384</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> GetDocIdsErrorHandler getGetDocIdsErrorHandler() {</pre></td></tr>
-<tr> <td class="numLineCover"> 385</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> context.getGetDocIdsErrorHandler();</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> GetDocIdsErrorHandler getGetDocIdsFullErrorHandler() {</pre></td></tr>
+<tr> <td class="numLineCover"> 385</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> context.getGetDocIdsFullErrorHandler();</span></pre></td></tr>
<tr> <td class="numLine"> 386</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 387</td> <td class="nbHits"> </td>
@@ -689,31 +689,50 @@
<tr> <td class="numLine"> 388</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> @Override</pre></td></tr>
<tr> <td class="numLine"> 389</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> SensitiveValueDecoder getSensitiveValueDecoder() {</pre></td></tr>
-<tr> <td class="numLineCover"> 390</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> context.getSensitiveValueDecoder();</span></pre></td></tr>
-<tr> <td class="numLine"> 391</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 392</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> setGetDocIdsIncrementalErrorHandler(</pre></td></tr>
+<tr> <td class="numLine"> 390</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> GetDocIdsErrorHandler handler) {</pre></td></tr>
+<tr> <td class="numLineCover"> 391</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> context.setGetDocIdsIncrementalErrorHandler(handler);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 392</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
<tr> <td class="numLine"> 393</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 394</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> HttpContext createHttpContext(String path, HttpHandler handler) {</pre></td></tr>
-<tr> <td class="numLineCover"> 395</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> context.createHttpContext(path, handler);</span></pre></td></tr>
-<tr> <td class="numLine"> 396</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 397</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 398</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 394</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 399</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> Session getUserSession(HttpExchange ex, <span class="keyword">boolean</span> create) {</pre></td></tr>
-<tr> <td class="numLineCover"> 400</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> context.getUserSession(ex, create);</span></pre></td></tr>
-<tr> <td class="numLine"> 401</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 395</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> GetDocIdsErrorHandler getGetDocIdsIncrementalErrorHandler() {</pre></td></tr>
+<tr> <td class="numLineCover"> 396</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> context.getGetDocIdsIncrementalErrorHandler();</span></pre></td></tr>
+<tr> <td class="numLine"> 397</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 398</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 399</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 400</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> SensitiveValueDecoder getSensitiveValueDecoder() {</pre></td></tr>
+<tr> <td class="numLineCover"> 401</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> context.getSensitiveValueDecoder();</span></pre></td></tr>
<tr> <td class="numLine"> 402</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
+ <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 403</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 404</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 405</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> HttpContext createHttpContext(String path, HttpHandler handler) {</pre></td></tr>
+<tr> <td class="numLineCover"> 406</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> context.createHttpContext(path, handler);</span></pre></td></tr>
+<tr> <td class="numLine"> 407</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 408</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 409</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 410</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> Session getUserSession(HttpExchange ex, <span class="keyword">boolean</span> create) {</pre></td></tr>
+<tr> <td class="numLineCover"> 411</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> context.getUserSession(ex, create);</span></pre></td></tr>
+<tr> <td class="numLine"> 412</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 413</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 414</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
</table>
diff --git a/coverage/frame-sourcefiles-com.google.enterprise.adaptor.html b/coverage/frame-sourcefiles-com.google.enterprise.adaptor.html
index 419db98..cca336a 100644
--- a/coverage/frame-sourcefiles-com.google.enterprise.adaptor.html
+++ b/coverage/frame-sourcefiles-com.google.enterprise.adaptor.html
@@ -108,7 +108,7 @@
<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.DocIdPusher.html">DocIdPusher</a> <i>(100%)</i></td>
</tr>
<tr>
-<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.DocIdSender.html">DocIdSender</a> <i>(100%)</i></td>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.DocIdSender.html">DocIdSender</a> <i>(88%)</i></td>
</tr>
<tr>
<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.DocumentHandler.html">DocumentHandler</a> <i>(94%)</i></td>
@@ -126,7 +126,7 @@
<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.GetDocIdsErrorHandler.html">GetDocIdsErrorHandler</a> <i>(N/A)</i></td>
</tr>
<tr>
-<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler</a> <i>(71%)</i></td>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler</a> <i>(70%)</i></td>
</tr>
<tr>
<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.GsaFeedFileMaker.html">GsaFeedFileMaker</a> <i>(94%)</i></td>
@@ -252,7 +252,7 @@
<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.Watchdog.html">Watchdog</a> <i>(100%)</i></td>
</tr>
<tr>
-<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.WrapperAdaptor.html">WrapperAdaptor</a> <i>(33%)</i></td>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.WrapperAdaptor.html">WrapperAdaptor</a> <i>(32%)</i></td>
</tr>
</tbody>
</table>
diff --git a/coverage/frame-sourcefiles.html b/coverage/frame-sourcefiles.html
index 88e45ad..8a42488 100644
--- a/coverage/frame-sourcefiles.html
+++ b/coverage/frame-sourcefiles.html
@@ -129,7 +129,7 @@
<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.DocIdPusher.html">DocIdPusher</a> <i>(100%)</i></td>
</tr>
<tr>
-<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.DocIdSender.html">DocIdSender</a> <i>(100%)</i></td>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.DocIdSender.html">DocIdSender</a> <i>(88%)</i></td>
</tr>
<tr>
<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.DocumentHandler.html">DocumentHandler</a> <i>(94%)</i></td>
@@ -153,7 +153,7 @@
<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.GetDocIdsErrorHandler.html">GetDocIdsErrorHandler</a> <i>(N/A)</i></td>
</tr>
<tr>
-<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler</a> <i>(71%)</i></td>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler</a> <i>(70%)</i></td>
</tr>
<tr>
<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.GsaFeedFileMaker.html">GsaFeedFileMaker</a> <i>(94%)</i></td>
@@ -291,7 +291,7 @@
<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.Watchdog.html">Watchdog</a> <i>(100%)</i></td>
</tr>
<tr>
-<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.WrapperAdaptor.html">WrapperAdaptor</a> <i>(33%)</i></td>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.WrapperAdaptor.html">WrapperAdaptor</a> <i>(32%)</i></td>
</tr>
</tbody>
</table>
diff --git a/coverage/frame-summary-com.google.enterprise.adaptor.html b/coverage/frame-summary-com.google.enterprise.adaptor.html
index a0457df..d32ebac 100644
--- a/coverage/frame-summary-com.google.enterprise.adaptor.html
+++ b/coverage/frame-summary-com.google.enterprise.adaptor.html
@@ -16,7 +16,7 @@
<table class="report" id="packageResults">
<thead><tr> <td class="heading">Package</td> <td class="heading"># Classes</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
<tbody>
- <tr><td><a href="frame-summary-com.google.enterprise.adaptor.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.html"'>com.google.enterprise.adaptor</a></td><td class="value">187</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">650</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:84px"><span class="text">3463/4113</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">232</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:82px"><span class="text">1076/1308</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.3863912515188335;</span>2.386</td></tr>
+ <tr><td><a href="frame-summary-com.google.enterprise.adaptor.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.html"'>com.google.enterprise.adaptor</a></td><td class="value">187</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">674</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:83px"><span class="text">3504/4178</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">237</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:82px"><span class="text">1083/1320</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.3823178016726403;</span>2.382</td></tr>
<tr><td><a href="frame-summary-com.google.enterprise.adaptor.examples.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.examples.html"'>com.google.enterprise.adaptor.examples</a></td><td class="value">12</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">253</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:22px"><span class="text">72/325</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">52</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:33px"><span class="text">26/78</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.311111111111111;</span>2.311</td></tr>
<tr><td><a href="frame-summary-com.google.enterprise.adaptor.prebuilt.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.prebuilt.html"'>com.google.enterprise.adaptor.prebuilt</a></td><td class="value">18</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">145</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:63px"><span class="text">251/396</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">52</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:51px"><span class="text">56/108</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.4305555555555554;</span>2.431</td></tr>
</tbody>
@@ -137,9 +137,9 @@
<tr><td><a href="com.google.enterprise.adaptor.DocIdPusher.html">DocIdPusher$Record</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">31/31</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">26/26</span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.5714285714285714;</span>1.571</td></tr>
<tr><td><a href="com.google.enterprise.adaptor.DocIdPusher.html">DocIdPusher$Record$Builder</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">38/38</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">4/4</span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.5714285714285714;</span>1.571</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.DocIdSender.html">DocIdSender</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">86/86</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">28/28</span></div></div></td></tr></table></td><td class="value"><span class="hidden">4.0;</span>4</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.DocIdSender.html">DocIdSender$AclItem</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">8/8</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">4/4</span></div></div></td></tr></table></td><td class="value"><span class="hidden">4.0;</span>4</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.DocIdSender.html">DocIdSender$Item</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">4.0;</span>4</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.DocIdSender.html">DocIdSender</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">13</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:88px"><span class="text">96/109</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">3</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:90px"><span class="text">29/32</span></div></div></td></tr></table></td><td class="value"><span class="hidden">4.5;</span>4.5</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.DocIdSender.html">DocIdSender$AclItem</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">8/8</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">4/4</span></div></div></td></tr></table></td><td class="value"><span class="hidden">4.5;</span>4.5</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.DocIdSender.html">DocIdSender$Item</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">4.5;</span>4.5</td></tr>
<tr><td><a href="com.google.enterprise.adaptor.DocumentHandler.html">DocumentHandler</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">4</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:97px"><span class="text">169/173</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">2</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:98px"><span class="text">112/114</span></div></div></td></tr></table></td><td class="value"><span class="hidden">4.239130434782608;</span>4.239</td></tr>
<tr><td><a href="com.google.enterprise.adaptor.DocumentHandler.html">DocumentHandler$1</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">1/1</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">4.239130434782608;</span>4.239</td></tr>
@@ -161,16 +161,16 @@
<tr><td><a href="com.google.enterprise.adaptor.GetDocIdsErrorHandler.html">GetDocIdsErrorHandler</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">41</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:82px"><span class="text">192/233</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">17</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:70px"><span class="text">41/58</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.4166666666666665;</span>3.417</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$1</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">5/5</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.4166666666666665;</span>3.417</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$2</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">7/7</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.4166666666666665;</span>3.417</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$AdaptorContextImpl</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">12</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:50px"><span class="text">12/24</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">4</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/4</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.4166666666666665;</span>3.417</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$AlreadyRunningRunnable</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">2</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:33px"><span class="text">1/3</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.4166666666666665;</span>3.417</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$GsaConfigModListener</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">21</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:4px"><span class="text">1/22</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">6</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/6</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.4166666666666665;</span>3.417</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$IncrementalPushRunnable</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">4</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:63px"><span class="text">7/11</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.4166666666666665;</span>3.417</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$PushRunnable</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">6</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:50px"><span class="text">6/12</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">1</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:50px"><span class="text">1/2</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.4166666666666665;</span>3.417</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$ShutdownHook</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">2</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:33px"><span class="text">1/3</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.4166666666666665;</span>3.417</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$SuggestHandlerAbortPolicy</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">5</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:44px"><span class="text">4/9</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.4166666666666665;</span>3.417</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">41</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:82px"><span class="text">192/233</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">17</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:70px"><span class="text">41/58</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.225;</span>3.225</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$1</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">5/5</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.225;</span>3.225</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$2</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">7/7</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.225;</span>3.225</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$AdaptorContextImpl</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">15</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:44px"><span class="text">12/27</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">4</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/4</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.225;</span>3.225</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$AlreadyRunningRunnable</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">2</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:33px"><span class="text">1/3</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.225;</span>3.225</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$GsaConfigModListener</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">21</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:4px"><span class="text">1/22</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">6</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/6</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.225;</span>3.225</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$IncrementalPushRunnable</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">9</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:43px"><span class="text">7/16</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">2</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/2</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.225;</span>3.225</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$PushRunnable</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">6</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:50px"><span class="text">6/12</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">1</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:50px"><span class="text">1/2</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.225;</span>3.225</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$ShutdownHook</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">2</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:33px"><span class="text">1/3</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.225;</span>3.225</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$SuggestHandlerAbortPolicy</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">5</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:44px"><span class="text">4/9</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.225;</span>3.225</td></tr>
<tr><td><a href="com.google.enterprise.adaptor.GsaFeedFileMaker.html">GsaFeedFileMaker</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">6</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:94px"><span class="text">101/107</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">34/34</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.272727272727273;</span>3.273</td></tr>
<tr><td><a href="com.google.enterprise.adaptor.GsaFeedFileMaker.html">GsaFeedFileMaker$1</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">4/4</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.272727272727273;</span>3.273</td></tr>
@@ -198,13 +198,13 @@
<tr><td><a href="com.google.enterprise.adaptor.InternalErrorFilter.html">InternalErrorFilter</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">13/13</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">4/4</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.5;</span>3.5</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.Journal.html">Journal</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">137/137</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">40/40</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.2666666666666666;</span>2.267</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.Journal.html">Journal$1</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.2666666666666666;</span>2.267</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.Journal.html">Journal$CompletionStatus</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">4/4</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.2666666666666666;</span>2.267</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.Journal.html">Journal$JournalSnapshot</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">15/15</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.2666666666666666;</span>2.267</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.Journal.html">Journal$NegSizeFakeMap</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">2/2</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.2666666666666666;</span>2.267</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.Journal.html">Journal$Stat</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">2</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:85px"><span class="text">12/14</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.2666666666666666;</span>2.267</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.Journal.html">Journal$Stats</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">3</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:90px"><span class="text">27/30</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">12/12</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.2666666666666666;</span>2.267</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.Journal.html">Journal</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">162/162</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">46/46</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.257142857142857;</span>2.257</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.Journal.html">Journal$1</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.257142857142857;</span>2.257</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.Journal.html">Journal$CompletionStatus</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">4/4</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.257142857142857;</span>2.257</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.Journal.html">Journal$JournalSnapshot</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">18/18</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.257142857142857;</span>2.257</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.Journal.html">Journal$NegSizeFakeMap</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">2/2</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.257142857142857;</span>2.257</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.Journal.html">Journal$Stat</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">2</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:85px"><span class="text">12/14</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.257142857142857;</span>2.257</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.Journal.html">Journal$Stats</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">3</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:90px"><span class="text">27/30</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">12/12</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.257142857142857;</span>2.257</td></tr>
<tr><td><a href="com.google.enterprise.adaptor.LoggingFilter.html">LoggingFilter</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">2</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:93px"><span class="text">29/31</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">2</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:75px"><span class="text">6/8</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.6;</span>2.6</td></tr>
@@ -263,7 +263,7 @@
<tr><td><a href="com.google.enterprise.adaptor.SleepHandler.html">SleepHandler</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">19/19</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">4/4</span></div></div></td></tr></table></td><td class="value"><span class="hidden">4.0;</span>4</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.StatRpcMethod.html">StatRpcMethod</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">59/59</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">3</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:75px"><span class="text">9/12</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.2;</span>2.2</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.StatRpcMethod.html">StatRpcMethod</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">62/62</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">3</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:75px"><span class="text">9/12</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.2;</span>2.2</td></tr>
<tr><td><a href="com.google.enterprise.adaptor.Status.html">Status</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
<tr><td><a href="com.google.enterprise.adaptor.Status.html">Status$Code</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">6/6</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
@@ -292,7 +292,7 @@
<tr><td><a href="com.google.enterprise.adaptor.WrapperAdaptor.html">WrapperAdaptor</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">3</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:78px"><span class="text">11/14</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
<tr><td><a href="com.google.enterprise.adaptor.WrapperAdaptor.html">WrapperAdaptor$GetContentsRequest</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">2</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:66px"><span class="text">4/6</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
<tr><td><a href="com.google.enterprise.adaptor.WrapperAdaptor.html">WrapperAdaptor$GetContentsResponse</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">26</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:35px"><span class="text">14/40</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.WrapperAdaptor.html">WrapperAdaptor$WrapperAdaptorContext</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">13</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:18px"><span class="text">3/16</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.WrapperAdaptor.html">WrapperAdaptor$WrapperAdaptorContext</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">16</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:15px"><span class="text">3/19</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
<tr><td><a href="com.google.enterprise.adaptor.WrapperAdaptor.html">WrapperAdaptor$WrapperDocIdPusher</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">6</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/6</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
<tr><td><a href="com.google.enterprise.adaptor.WrapperAdaptor.html">WrapperAdaptor$WrapperRequest</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">3</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:50px"><span class="text">3/6</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
<tr><td><a href="com.google.enterprise.adaptor.WrapperAdaptor.html">WrapperAdaptor$WrapperResponse</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">23</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:11px"><span class="text">3/26</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
diff --git a/coverage/frame-summary.html b/coverage/frame-summary.html
index b3bd502..85a451f 100644
--- a/coverage/frame-summary.html
+++ b/coverage/frame-summary.html
@@ -16,8 +16,8 @@
<table class="report" id="packageResults">
<thead><tr> <td class="heading">Package</td> <td class="heading"># Classes</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
<tbody>
- <tr><td><b>All Packages</b></td><td class="value">217</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">1048</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:78px"><span class="text">3786/4834</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">336</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:77px"><span class="text">1158/1494</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.3861702127659576;</span>2.386</td></tr>
- <tr><td><a href="frame-summary-com.google.enterprise.adaptor.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.html"'>com.google.enterprise.adaptor</a></td><td class="value">187</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">650</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:84px"><span class="text">3463/4113</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">232</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:82px"><span class="text">1076/1308</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.3863912515188335;</span>2.386</td></tr>
+ <tr><td><b>All Packages</b></td><td class="value">217</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">1072</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:78px"><span class="text">3827/4899</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">341</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:77px"><span class="text">1165/1506</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.3825995807127884;</span>2.383</td></tr>
+ <tr><td><a href="frame-summary-com.google.enterprise.adaptor.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.html"'>com.google.enterprise.adaptor</a></td><td class="value">187</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">674</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:83px"><span class="text">3504/4178</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">237</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:82px"><span class="text">1083/1320</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.3823178016726403;</span>2.382</td></tr>
<tr><td><a href="frame-summary-com.google.enterprise.adaptor.examples.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.examples.html"'>com.google.enterprise.adaptor.examples</a></td><td class="value">12</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">253</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:22px"><span class="text">72/325</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">52</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:33px"><span class="text">26/78</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.311111111111111;</span>2.311</td></tr>
<tr><td><a href="frame-summary-com.google.enterprise.adaptor.prebuilt.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.prebuilt.html"'>com.google.enterprise.adaptor.prebuilt</a></td><td class="value">18</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">145</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:63px"><span class="text">251/396</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">52</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:51px"><span class="text">56/108</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.4305555555555554;</span>2.431</td></tr>
</tbody>
diff --git a/javadoc/com/google/enterprise/adaptor/AdaptorContext.html b/javadoc/com/google/enterprise/adaptor/AdaptorContext.html
index b0fd9ba..9dd445c 100644
--- a/javadoc/com/google/enterprise/adaptor/AdaptorContext.html
+++ b/javadoc/com/google/enterprise/adaptor/AdaptorContext.html
@@ -156,10 +156,18 @@
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE> <A HREF="../../../../com/google/enterprise/adaptor/GetDocIdsErrorHandler.html" title="interface in com.google.enterprise.adaptor">GetDocIdsErrorHandler</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/enterprise/adaptor/AdaptorContext.html#getGetDocIdsErrorHandler()">getGetDocIdsErrorHandler</A></B>()</CODE>
+<TD><CODE><B><A HREF="../../../../com/google/enterprise/adaptor/AdaptorContext.html#getGetDocIdsFullErrorHandler()">getGetDocIdsFullErrorHandler</A></B>()</CODE>
<BR>
- Retrieve the current <A HREF="../../../../com/google/enterprise/adaptor/GetDocIdsErrorHandler.html" title="interface in com.google.enterprise.adaptor"><CODE>GetDocIdsErrorHandler</CODE></A>.</TD>
+ Retrieve the current <A HREF="../../../../com/google/enterprise/adaptor/GetDocIdsErrorHandler.html" title="interface in com.google.enterprise.adaptor"><CODE>GetDocIdsErrorHandler</CODE></A> for full push.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> <A HREF="../../../../com/google/enterprise/adaptor/GetDocIdsErrorHandler.html" title="interface in com.google.enterprise.adaptor">GetDocIdsErrorHandler</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/enterprise/adaptor/AdaptorContext.html#getGetDocIdsIncrementalErrorHandler()">getGetDocIdsIncrementalErrorHandler</A></B>()</CODE>
+
+<BR>
+ Retrieve the current <A HREF="../../../../com/google/enterprise/adaptor/GetDocIdsErrorHandler.html" title="interface in com.google.enterprise.adaptor"><CODE>GetDocIdsErrorHandler</CODE></A> for incremental push.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -189,10 +197,18 @@
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE> void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/enterprise/adaptor/AdaptorContext.html#setGetDocIdsErrorHandler(com.google.enterprise.adaptor.GetDocIdsErrorHandler)">setGetDocIdsErrorHandler</A></B>(<A HREF="../../../../com/google/enterprise/adaptor/GetDocIdsErrorHandler.html" title="interface in com.google.enterprise.adaptor">GetDocIdsErrorHandler</A> handler)</CODE>
+<TD><CODE><B><A HREF="../../../../com/google/enterprise/adaptor/AdaptorContext.html#setGetDocIdsFullErrorHandler(com.google.enterprise.adaptor.GetDocIdsErrorHandler)">setGetDocIdsFullErrorHandler</A></B>(<A HREF="../../../../com/google/enterprise/adaptor/GetDocIdsErrorHandler.html" title="interface in com.google.enterprise.adaptor">GetDocIdsErrorHandler</A> handler)</CODE>
<BR>
- Override the default <A HREF="../../../../com/google/enterprise/adaptor/GetDocIdsErrorHandler.html" title="interface in com.google.enterprise.adaptor"><CODE>GetDocIdsErrorHandler</CODE></A>.</TD>
+ Override the default <A HREF="../../../../com/google/enterprise/adaptor/GetDocIdsErrorHandler.html" title="interface in com.google.enterprise.adaptor"><CODE>GetDocIdsErrorHandler</CODE></A> for full push.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/enterprise/adaptor/AdaptorContext.html#setGetDocIdsIncrementalErrorHandler(com.google.enterprise.adaptor.GetDocIdsErrorHandler)">setGetDocIdsIncrementalErrorHandler</A></B>(<A HREF="../../../../com/google/enterprise/adaptor/GetDocIdsErrorHandler.html" title="interface in com.google.enterprise.adaptor">GetDocIdsErrorHandler</A> handler)</CODE>
+
+<BR>
+ Override the default <A HREF="../../../../com/google/enterprise/adaptor/GetDocIdsErrorHandler.html" title="interface in com.google.enterprise.adaptor"><CODE>GetDocIdsErrorHandler</CODE></A> for incremental push.</TD>
</TR>
</TABLE>
@@ -274,12 +290,12 @@
</DL>
<HR>
-<A NAME="setGetDocIdsErrorHandler(com.google.enterprise.adaptor.GetDocIdsErrorHandler)"><!-- --></A><H3>
-setGetDocIdsErrorHandler</H3>
+<A NAME="setGetDocIdsFullErrorHandler(com.google.enterprise.adaptor.GetDocIdsErrorHandler)"><!-- --></A><H3>
+setGetDocIdsFullErrorHandler</H3>
<PRE>
-void <B>setGetDocIdsErrorHandler</B>(<A HREF="../../../../com/google/enterprise/adaptor/GetDocIdsErrorHandler.html" title="interface in com.google.enterprise.adaptor">GetDocIdsErrorHandler</A> handler)</PRE>
+void <B>setGetDocIdsFullErrorHandler</B>(<A HREF="../../../../com/google/enterprise/adaptor/GetDocIdsErrorHandler.html" title="interface in com.google.enterprise.adaptor">GetDocIdsErrorHandler</A> handler)</PRE>
<DL>
-<DD>Override the default <A HREF="../../../../com/google/enterprise/adaptor/GetDocIdsErrorHandler.html" title="interface in com.google.enterprise.adaptor"><CODE>GetDocIdsErrorHandler</CODE></A>.
+<DD>Override the default <A HREF="../../../../com/google/enterprise/adaptor/GetDocIdsErrorHandler.html" title="interface in com.google.enterprise.adaptor"><CODE>GetDocIdsErrorHandler</CODE></A> for full push.
<P>
<DD><DL>
</DL>
@@ -287,12 +303,38 @@
</DL>
<HR>
-<A NAME="getGetDocIdsErrorHandler()"><!-- --></A><H3>
-getGetDocIdsErrorHandler</H3>
+<A NAME="getGetDocIdsFullErrorHandler()"><!-- --></A><H3>
+getGetDocIdsFullErrorHandler</H3>
<PRE>
-<A HREF="../../../../com/google/enterprise/adaptor/GetDocIdsErrorHandler.html" title="interface in com.google.enterprise.adaptor">GetDocIdsErrorHandler</A> <B>getGetDocIdsErrorHandler</B>()</PRE>
+<A HREF="../../../../com/google/enterprise/adaptor/GetDocIdsErrorHandler.html" title="interface in com.google.enterprise.adaptor">GetDocIdsErrorHandler</A> <B>getGetDocIdsFullErrorHandler</B>()</PRE>
<DL>
-<DD>Retrieve the current <A HREF="../../../../com/google/enterprise/adaptor/GetDocIdsErrorHandler.html" title="interface in com.google.enterprise.adaptor"><CODE>GetDocIdsErrorHandler</CODE></A>.
+<DD>Retrieve the current <A HREF="../../../../com/google/enterprise/adaptor/GetDocIdsErrorHandler.html" title="interface in com.google.enterprise.adaptor"><CODE>GetDocIdsErrorHandler</CODE></A> for full push.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setGetDocIdsIncrementalErrorHandler(com.google.enterprise.adaptor.GetDocIdsErrorHandler)"><!-- --></A><H3>
+setGetDocIdsIncrementalErrorHandler</H3>
+<PRE>
+void <B>setGetDocIdsIncrementalErrorHandler</B>(<A HREF="../../../../com/google/enterprise/adaptor/GetDocIdsErrorHandler.html" title="interface in com.google.enterprise.adaptor">GetDocIdsErrorHandler</A> handler)</PRE>
+<DL>
+<DD>Override the default <A HREF="../../../../com/google/enterprise/adaptor/GetDocIdsErrorHandler.html" title="interface in com.google.enterprise.adaptor"><CODE>GetDocIdsErrorHandler</CODE></A> for incremental push.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getGetDocIdsIncrementalErrorHandler()"><!-- --></A><H3>
+getGetDocIdsIncrementalErrorHandler</H3>
+<PRE>
+<A HREF="../../../../com/google/enterprise/adaptor/GetDocIdsErrorHandler.html" title="interface in com.google.enterprise.adaptor">GetDocIdsErrorHandler</A> <B>getGetDocIdsIncrementalErrorHandler</B>()</PRE>
+<DL>
+<DD>Retrieve the current <A HREF="../../../../com/google/enterprise/adaptor/GetDocIdsErrorHandler.html" title="interface in com.google.enterprise.adaptor"><CODE>GetDocIdsErrorHandler</CODE></A> for incremental push.
<P>
<DD><DL>
</DL>
diff --git a/javadoc/index-all.html b/javadoc/index-all.html
index 1d3f9b6..daed471 100644
--- a/javadoc/index-all.html
+++ b/javadoc/index-all.html
@@ -418,9 +418,12 @@
<DT><A HREF="./com/google/enterprise/adaptor/Config.html#getFeedName()"><B>getFeedName()</B></A> -
Method in class com.google.enterprise.adaptor.<A HREF="./com/google/enterprise/adaptor/Config.html" title="class in com.google.enterprise.adaptor">Config</A>
<DD>
-<DT><A HREF="./com/google/enterprise/adaptor/AdaptorContext.html#getGetDocIdsErrorHandler()"><B>getGetDocIdsErrorHandler()</B></A> -
+<DT><A HREF="./com/google/enterprise/adaptor/AdaptorContext.html#getGetDocIdsFullErrorHandler()"><B>getGetDocIdsFullErrorHandler()</B></A> -
Method in interface com.google.enterprise.adaptor.<A HREF="./com/google/enterprise/adaptor/AdaptorContext.html" title="interface in com.google.enterprise.adaptor">AdaptorContext</A>
-<DD>Retrieve the current <A HREF="./com/google/enterprise/adaptor/GetDocIdsErrorHandler.html" title="interface in com.google.enterprise.adaptor"><CODE>GetDocIdsErrorHandler</CODE></A>.
+<DD>Retrieve the current <A HREF="./com/google/enterprise/adaptor/GetDocIdsErrorHandler.html" title="interface in com.google.enterprise.adaptor"><CODE>GetDocIdsErrorHandler</CODE></A> for full push.
+<DT><A HREF="./com/google/enterprise/adaptor/AdaptorContext.html#getGetDocIdsIncrementalErrorHandler()"><B>getGetDocIdsIncrementalErrorHandler()</B></A> -
+Method in interface com.google.enterprise.adaptor.<A HREF="./com/google/enterprise/adaptor/AdaptorContext.html" title="interface in com.google.enterprise.adaptor">AdaptorContext</A>
+<DD>Retrieve the current <A HREF="./com/google/enterprise/adaptor/GetDocIdsErrorHandler.html" title="interface in com.google.enterprise.adaptor"><CODE>GetDocIdsErrorHandler</CODE></A> for incremental push.
<DT><A HREF="./com/google/enterprise/adaptor/AuthnIdentity.html#getGroups()"><B>getGroups()</B></A> -
Method in interface com.google.enterprise.adaptor.<A HREF="./com/google/enterprise/adaptor/AuthnIdentity.html" title="interface in com.google.enterprise.adaptor">AuthnIdentity</A>
<DD>Gets all the groups a user belongs to in an immutable set.
@@ -1001,9 +1004,12 @@
Method in class com.google.enterprise.adaptor.<A HREF="./com/google/enterprise/adaptor/DocIdPusher.Record.Builder.html" title="class in com.google.enterprise.adaptor">DocIdPusher.Record.Builder</A>
<DD>Set the identifier for the document this record is providing
information for.
-<DT><A HREF="./com/google/enterprise/adaptor/AdaptorContext.html#setGetDocIdsErrorHandler(com.google.enterprise.adaptor.GetDocIdsErrorHandler)"><B>setGetDocIdsErrorHandler(GetDocIdsErrorHandler)</B></A> -
+<DT><A HREF="./com/google/enterprise/adaptor/AdaptorContext.html#setGetDocIdsFullErrorHandler(com.google.enterprise.adaptor.GetDocIdsErrorHandler)"><B>setGetDocIdsFullErrorHandler(GetDocIdsErrorHandler)</B></A> -
Method in interface com.google.enterprise.adaptor.<A HREF="./com/google/enterprise/adaptor/AdaptorContext.html" title="interface in com.google.enterprise.adaptor">AdaptorContext</A>
-<DD>Override the default <A HREF="./com/google/enterprise/adaptor/GetDocIdsErrorHandler.html" title="interface in com.google.enterprise.adaptor"><CODE>GetDocIdsErrorHandler</CODE></A>.
+<DD>Override the default <A HREF="./com/google/enterprise/adaptor/GetDocIdsErrorHandler.html" title="interface in com.google.enterprise.adaptor"><CODE>GetDocIdsErrorHandler</CODE></A> for full push.
+<DT><A HREF="./com/google/enterprise/adaptor/AdaptorContext.html#setGetDocIdsIncrementalErrorHandler(com.google.enterprise.adaptor.GetDocIdsErrorHandler)"><B>setGetDocIdsIncrementalErrorHandler(GetDocIdsErrorHandler)</B></A> -
+Method in interface com.google.enterprise.adaptor.<A HREF="./com/google/enterprise/adaptor/AdaptorContext.html" title="interface in com.google.enterprise.adaptor">AdaptorContext</A>
+<DD>Override the default <A HREF="./com/google/enterprise/adaptor/GetDocIdsErrorHandler.html" title="interface in com.google.enterprise.adaptor"><CODE>GetDocIdsErrorHandler</CODE></A> for incremental push.
<DT><A HREF="./com/google/enterprise/adaptor/Acl.Builder.html#setInheritanceType(com.google.enterprise.adaptor.Acl.InheritanceType)"><B>setInheritanceType(Acl.InheritanceType)</B></A> -
Method in class com.google.enterprise.adaptor.<A HREF="./com/google/enterprise/adaptor/Acl.Builder.html" title="class in com.google.enterprise.adaptor">Acl.Builder</A>
<DD>Set the type of inheritance of ACL information used to combine authz