This commit is contained in:
carlhua
2020-09-22 22:46:01 +00:00
parent 2682e5845e
commit b7f5072ca1
1456 changed files with 44778 additions and 38168 deletions

View File

@@ -446,240 +446,244 @@ $(function() {
<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; <span class="comment">// sleeps.</span></div>
<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span>&amp; url{<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#ab84c25aafda27b95933b5c1cbc68f0dd">archives_</a>.begin()-&gt;second};</div>
<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <span class="keyword">auto</span> wrapper = <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a7a73b2116e2f13962a7f5527a998c618">jobCounter_</a>.<a class="code" href="classripple_1_1ClosureCounter.html#abf5545804f1efba38a45e356c36ad997">wrap</a>([<span class="keyword">this</span>, url, dstDir](<a class="code" href="classripple_1_1Job.html">Job</a>&amp;) {</div>
<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a854a548b77c0fd9589bff1727b53b8ec">downloader_</a>-&gt;download(</div>
<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; url.domain,</div>
<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/string/basic_string/to_string.html">std::to_string</a>(url.port.get_value_or(443)),</div>
<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; url.path,</div>
<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; 11,</div>
<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; dstDir / <span class="stringliteral">&quot;archive.tar.lz4&quot;</span>,</div>
<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; [<span class="keyword">this</span>](path dstPath) { complete(dstPath); }))</div>
<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; {</div>
<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; std::lock_guard&lt;std::mutex&gt; l(m_);</div>
<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; removeAndProceed(l);</div>
<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; }</div>
<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; });</div>
<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; </div>
<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; <span class="keywordflow">if</span> (!wrapper)</div>
<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#accc0befbd62fead5da3a51dce1993990">onClosureFailed</a>(</div>
<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; <span class="stringliteral">&quot;failed to wrap closure for starting download&quot;</span>, l);</div>
<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span> ssl = (url.scheme == <span class="stringliteral">&quot;https&quot;</span>);</div>
<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span> defaultPort = ssl ? 443 : 80;</div>
<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; </div>
<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a854a548b77c0fd9589bff1727b53b8ec">downloader_</a>-&gt;download(</div>
<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; url.domain,</div>
<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/string/basic_string/to_string.html">std::to_string</a>(url.port.get_value_or(defaultPort)),</div>
<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; url.path,</div>
<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; 11,</div>
<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; dstDir / <span class="stringliteral">&quot;archive.tar.lz4&quot;</span>,</div>
<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; [<span class="keyword">this</span>](path dstPath) { complete(dstPath); },</div>
<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; ssl))</div>
<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; {</div>
<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/thread/lock_guard.html">std::lock_guard&lt;std::mutex&gt;</a> l(<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a236fb42ce35edfad5e0f61f1405bb40a">m_</a>);</div>
<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a29c53e2203380b6def0818dc887964e2">removeAndProceed</a>(l);</div>
<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; }</div>
<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; });</div>
<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; </div>
<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#ad3c425217141170c27ce54597febe7f5">app_</a>.<a class="code" href="classripple_1_1Application.html#a860be08979e27d8c6f37f722f996ba6c">getJobQueue</a>().<a class="code" href="classripple_1_1JobQueue.html#af5e34187d55aa58e551dc196aaf1ec25">addJob</a>(<a class="code" href="namespaceripple.html#ae0f54f8ce649d639bf3e2b295347e17aad3afa64002a7625b44814318856804e9">jtCLIENT</a>, <span class="stringliteral">&quot;ShardArchiveHandler&quot;</span>, *wrapper);</div>
<div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; </div>
<div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160;}</div>
<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; </div>
<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160;<span class="keywordtype">void</span></div>
<div class="line"><a name="l00401"></a><span class="lineno"><a class="line" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#aa49e1c3f0afd83dea8b99ad37e785f04"> 401</a></span>&#160;<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#aa49e1c3f0afd83dea8b99ad37e785f04">ShardArchiveHandler::complete</a>(path dstPath)</div>
<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160;{</div>
<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classripple_1_1Stoppable.html#a836b8737444ef1133c3596e61010fa80">isStopping</a>())</div>
<div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; </div>
<div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; {</div>
<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/thread/lock_guard.html">std::lock_guard</a> lock(<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a236fb42ce35edfad5e0f61f1405bb40a">m_</a>);</div>
<div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; <span class="keywordflow">try</span></div>
<div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; {</div>
<div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <span class="keywordflow">if</span> (!is_regular_file(dstPath))</div>
<div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; {</div>
<div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; <span class="keyword">auto</span> ar{<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#ab84c25aafda27b95933b5c1cbc68f0dd">archives_</a>.begin()};</div>
<div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; JLOG(<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a0cd1a67c3837025faf68bc5540c98294">j_</a>.<a class="code" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>())</div>
<div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; &lt;&lt; <span class="stringliteral">&quot;Downloading shard id &quot;</span> &lt;&lt; ar-&gt;first &lt;&lt; <span class="stringliteral">&quot; from URL &quot;</span></div>
<div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; &lt;&lt; ar-&gt;second.domain &lt;&lt; ar-&gt;second.path;</div>
<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a29c53e2203380b6def0818dc887964e2">removeAndProceed</a>(lock);</div>
<div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; }</div>
<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; }</div>
<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; <span class="keywordflow">catch</span> (<a class="codeRef" href="http://en.cppreference.com/w/cpp/error/exception.html">std::exception</a> <span class="keyword">const</span>&amp; e)</div>
<div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; {</div>
<div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; JLOG(<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a0cd1a67c3837025faf68bc5540c98294">j_</a>.<a class="code" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>()) &lt;&lt; <span class="stringliteral">&quot;exception: &quot;</span> &lt;&lt; e.<a class="codeRef" href="http://en.cppreference.com/w/cpp/error/exception/what.html">what</a>();</div>
<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a29c53e2203380b6def0818dc887964e2">removeAndProceed</a>(lock);</div>
<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; }</div>
<div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; }</div>
<div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; </div>
<div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; <span class="comment">// Make lambdas mutable captured vars can be moved from</span></div>
<div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; <span class="keyword">auto</span> wrapper =</div>
<div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a7a73b2116e2f13962a7f5527a998c618">jobCounter_</a>.<a class="code" href="classripple_1_1ClosureCounter.html#abf5545804f1efba38a45e356c36ad997">wrap</a>([=, dstPath = std::move(dstPath)](<a class="code" href="classripple_1_1Job.html">Job</a>&amp;) <span class="keyword">mutable</span> {</div>
<div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classripple_1_1Stoppable.html#a836b8737444ef1133c3596e61010fa80">isStopping</a>())</div>
<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; </div>
<div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; <span class="comment">// If not synced then defer and retry</span></div>
<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span> mode{<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#ad3c425217141170c27ce54597febe7f5">app_</a>.<a class="code" href="classripple_1_1Application.html#a7c963aa5c47180b24897ff6b5622e5bc">getOPs</a>().getOperatingMode()};</div>
<div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="keywordflow">if</span> (mode != <a class="code" href="namespaceripple.html#a597325d7385ff9c19686e14e5bead510aba7de5bc6888294e5884b024a4c894f1">OperatingMode::FULL</a>)</div>
<div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; {</div>
<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/thread/lock_guard.html">std::lock_guard</a> lock(<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a236fb42ce35edfad5e0f61f1405bb40a">m_</a>);</div>
<div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#af7644eb39d61a4ce3ad5c26fa8fa34a4">timer_</a>.expires_from_now(<span class="keyword">static_cast&lt;</span><a class="codeRef" href="http://en.cppreference.com/w/cpp/chrono/duration.html">std::chrono::seconds</a><span class="keyword">&gt;</span>(</div>
<div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; (<span class="keyword">static_cast&lt;</span><a class="codeRef" href="http://en.cppreference.com/w/cpp/types/size_t.html">std::size_t</a><span class="keyword">&gt;</span>(<a class="code" href="namespaceripple.html#a597325d7385ff9c19686e14e5bead510aba7de5bc6888294e5884b024a4c894f1">OperatingMode::FULL</a>) -</div>
<div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; <span class="keyword">static_cast&lt;</span><a class="codeRef" href="http://en.cppreference.com/w/cpp/types/size_t.html">std::size_t</a><span class="keyword">&gt;</span>(mode)) *</div>
<div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; 10));</div>
<div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; </div>
<div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <span class="keyword">auto</span> wrapper = <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a22d8c0f551d59bfff5fe3463da5cb247">timerCounter_</a>.<a class="code" href="classripple_1_1ClosureCounter.html#abf5545804f1efba38a45e356c36ad997">wrap</a>(</div>
<div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; [=, dstPath = std::move(dstPath)](</div>
<div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; boost::system::error_code <span class="keyword">const</span>&amp; ec) <span class="keyword">mutable</span> {</div>
<div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; <span class="keywordflow">if</span> (ec != boost::asio::error::operation_aborted)</div>
<div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#aa49e1c3f0afd83dea8b99ad37e785f04">complete</a>(std::move(dstPath));</div>
<div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; });</div>
<div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; </div>
<div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; <span class="keywordflow">if</span> (!wrapper)</div>
<div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#accc0befbd62fead5da3a51dce1993990">onClosureFailed</a>(</div>
<div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; <span class="stringliteral">&quot;failed to wrap closure for operating mode timer&quot;</span>,</div>
<div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; lock);</div>
<div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#af7644eb39d61a4ce3ad5c26fa8fa34a4">timer_</a>.async_wait(*wrapper);</div>
<div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; }</div>
<div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; {</div>
<div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a0962cbf9e2d4b7a067a85676ad317c1f">process</a>(dstPath);</div>
<div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/thread/lock_guard.html">std::lock_guard</a> lock(<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a236fb42ce35edfad5e0f61f1405bb40a">m_</a>);</div>
<div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a29c53e2203380b6def0818dc887964e2">removeAndProceed</a>(lock);</div>
<div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; }</div>
<div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; });</div>
<div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; </div>
<div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; <span class="keywordflow">if</span> (!wrapper)</div>
<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; {</div>
<div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classripple_1_1Stoppable.html#a836b8737444ef1133c3596e61010fa80">isStopping</a>())</div>
<div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; </div>
<div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; JLOG(<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a0cd1a67c3837025faf68bc5540c98294">j_</a>.<a class="code" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>()) &lt;&lt; <span class="stringliteral">&quot;failed to wrap closure for process()&quot;</span>;</div>
<div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; </div>
<div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/thread/lock_guard.html">std::lock_guard</a> lock(<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a236fb42ce35edfad5e0f61f1405bb40a">m_</a>);</div>
<div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a29c53e2203380b6def0818dc887964e2">removeAndProceed</a>(lock);</div>
<div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; }</div>
<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <span class="keywordflow">if</span> (!wrapper)</div>
<div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#accc0befbd62fead5da3a51dce1993990">onClosureFailed</a>(</div>
<div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; <span class="stringliteral">&quot;failed to wrap closure for starting download&quot;</span>, l);</div>
<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; </div>
<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#ad3c425217141170c27ce54597febe7f5">app_</a>.<a class="code" href="classripple_1_1Application.html#a860be08979e27d8c6f37f722f996ba6c">getJobQueue</a>().<a class="code" href="classripple_1_1JobQueue.html#af5e34187d55aa58e551dc196aaf1ec25">addJob</a>(<a class="code" href="namespaceripple.html#ae0f54f8ce649d639bf3e2b295347e17aad3afa64002a7625b44814318856804e9">jtCLIENT</a>, <span class="stringliteral">&quot;ShardArchiveHandler&quot;</span>, *wrapper);</div>
<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; </div>
<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160;}</div>
<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; </div>
<div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160;<span class="keywordtype">void</span></div>
<div class="line"><a name="l00405"></a><span class="lineno"><a class="line" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#aa49e1c3f0afd83dea8b99ad37e785f04"> 405</a></span>&#160;<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#aa49e1c3f0afd83dea8b99ad37e785f04">ShardArchiveHandler::complete</a>(path dstPath)</div>
<div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160;{</div>
<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classripple_1_1Stoppable.html#a836b8737444ef1133c3596e61010fa80">isStopping</a>())</div>
<div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; </div>
<div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; {</div>
<div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/thread/lock_guard.html">std::lock_guard</a> lock(<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a236fb42ce35edfad5e0f61f1405bb40a">m_</a>);</div>
<div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; <span class="keywordflow">try</span></div>
<div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; {</div>
<div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; <span class="keywordflow">if</span> (!is_regular_file(dstPath))</div>
<div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; {</div>
<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <span class="keyword">auto</span> ar{<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#ab84c25aafda27b95933b5c1cbc68f0dd">archives_</a>.begin()};</div>
<div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; JLOG(<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a0cd1a67c3837025faf68bc5540c98294">j_</a>.<a class="code" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>())</div>
<div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; &lt;&lt; <span class="stringliteral">&quot;Downloading shard id &quot;</span> &lt;&lt; ar-&gt;first &lt;&lt; <span class="stringliteral">&quot; from URL &quot;</span></div>
<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; &lt;&lt; ar-&gt;second.domain &lt;&lt; ar-&gt;second.path;</div>
<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a29c53e2203380b6def0818dc887964e2">removeAndProceed</a>(lock);</div>
<div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; }</div>
<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; }</div>
<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <span class="keywordflow">catch</span> (<a class="codeRef" href="http://en.cppreference.com/w/cpp/error/exception.html">std::exception</a> <span class="keyword">const</span>&amp; e)</div>
<div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; {</div>
<div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; JLOG(<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a0cd1a67c3837025faf68bc5540c98294">j_</a>.<a class="code" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>()) &lt;&lt; <span class="stringliteral">&quot;exception: &quot;</span> &lt;&lt; e.<a class="codeRef" href="http://en.cppreference.com/w/cpp/error/exception/what.html">what</a>();</div>
<div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a29c53e2203380b6def0818dc887964e2">removeAndProceed</a>(lock);</div>
<div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; }</div>
<div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; }</div>
<div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; </div>
<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <span class="comment">// Make lambdas mutable captured vars can be moved from</span></div>
<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; <span class="keyword">auto</span> wrapper =</div>
<div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a7a73b2116e2f13962a7f5527a998c618">jobCounter_</a>.<a class="code" href="classripple_1_1ClosureCounter.html#abf5545804f1efba38a45e356c36ad997">wrap</a>([=, dstPath = std::move(dstPath)](<a class="code" href="classripple_1_1Job.html">Job</a>&amp;) <span class="keyword">mutable</span> {</div>
<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classripple_1_1Stoppable.html#a836b8737444ef1133c3596e61010fa80">isStopping</a>())</div>
<div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; </div>
<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="comment">// If not synced then defer and retry</span></div>
<div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span> mode{<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#ad3c425217141170c27ce54597febe7f5">app_</a>.<a class="code" href="classripple_1_1Application.html#a7c963aa5c47180b24897ff6b5622e5bc">getOPs</a>().getOperatingMode()};</div>
<div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; <span class="keywordflow">if</span> (mode != <a class="code" href="namespaceripple.html#a597325d7385ff9c19686e14e5bead510aba7de5bc6888294e5884b024a4c894f1">OperatingMode::FULL</a>)</div>
<div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; {</div>
<div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/thread/lock_guard.html">std::lock_guard</a> lock(<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a236fb42ce35edfad5e0f61f1405bb40a">m_</a>);</div>
<div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#af7644eb39d61a4ce3ad5c26fa8fa34a4">timer_</a>.expires_from_now(<span class="keyword">static_cast&lt;</span><a class="codeRef" href="http://en.cppreference.com/w/cpp/chrono/duration.html">std::chrono::seconds</a><span class="keyword">&gt;</span>(</div>
<div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; (<span class="keyword">static_cast&lt;</span><a class="codeRef" href="http://en.cppreference.com/w/cpp/types/size_t.html">std::size_t</a><span class="keyword">&gt;</span>(<a class="code" href="namespaceripple.html#a597325d7385ff9c19686e14e5bead510aba7de5bc6888294e5884b024a4c894f1">OperatingMode::FULL</a>) -</div>
<div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; <span class="keyword">static_cast&lt;</span><a class="codeRef" href="http://en.cppreference.com/w/cpp/types/size_t.html">std::size_t</a><span class="keyword">&gt;</span>(mode)) *</div>
<div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; 10));</div>
<div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; </div>
<div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; <span class="keyword">auto</span> wrapper = <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a22d8c0f551d59bfff5fe3463da5cb247">timerCounter_</a>.<a class="code" href="classripple_1_1ClosureCounter.html#abf5545804f1efba38a45e356c36ad997">wrap</a>(</div>
<div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; [=, dstPath = std::move(dstPath)](</div>
<div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; boost::system::error_code <span class="keyword">const</span>&amp; ec) <span class="keyword">mutable</span> {</div>
<div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; <span class="keywordflow">if</span> (ec != boost::asio::error::operation_aborted)</div>
<div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#aa49e1c3f0afd83dea8b99ad37e785f04">complete</a>(std::move(dstPath));</div>
<div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; });</div>
<div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; </div>
<div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; <span class="keywordflow">if</span> (!wrapper)</div>
<div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#accc0befbd62fead5da3a51dce1993990">onClosureFailed</a>(</div>
<div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; <span class="stringliteral">&quot;failed to wrap closure for operating mode timer&quot;</span>,</div>
<div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; lock);</div>
<div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#af7644eb39d61a4ce3ad5c26fa8fa34a4">timer_</a>.async_wait(*wrapper);</div>
<div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; }</div>
<div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; {</div>
<div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a0962cbf9e2d4b7a067a85676ad317c1f">process</a>(dstPath);</div>
<div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/thread/lock_guard.html">std::lock_guard</a> lock(<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a236fb42ce35edfad5e0f61f1405bb40a">m_</a>);</div>
<div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a29c53e2203380b6def0818dc887964e2">removeAndProceed</a>(lock);</div>
<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; }</div>
<div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; });</div>
<div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; </div>
<div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; <span class="keywordflow">if</span> (!wrapper)</div>
<div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; {</div>
<div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classripple_1_1Stoppable.html#a836b8737444ef1133c3596e61010fa80">isStopping</a>())</div>
<div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; </div>
<div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; JLOG(<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a0cd1a67c3837025faf68bc5540c98294">j_</a>.<a class="code" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>()) &lt;&lt; <span class="stringliteral">&quot;failed to wrap closure for process()&quot;</span>;</div>
<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; </div>
<div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; <span class="comment">// Process in another thread to not hold up the IO service</span></div>
<div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#ad3c425217141170c27ce54597febe7f5">app_</a>.<a class="code" href="classripple_1_1Application.html#a860be08979e27d8c6f37f722f996ba6c">getJobQueue</a>().<a class="code" href="classripple_1_1JobQueue.html#af5e34187d55aa58e551dc196aaf1ec25">addJob</a>(<a class="code" href="namespaceripple.html#ae0f54f8ce649d639bf3e2b295347e17aad3afa64002a7625b44814318856804e9">jtCLIENT</a>, <span class="stringliteral">&quot;ShardArchiveHandler&quot;</span>, *wrapper);</div>
<div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160;}</div>
<div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/thread/lock_guard.html">std::lock_guard</a> lock(<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a236fb42ce35edfad5e0f61f1405bb40a">m_</a>);</div>
<div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a29c53e2203380b6def0818dc887964e2">removeAndProceed</a>(lock);</div>
<div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; }</div>
<div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; </div>
<div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160;<span class="keywordtype">void</span></div>
<div class="line"><a name="l00482"></a><span class="lineno"><a class="line" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a0962cbf9e2d4b7a067a85676ad317c1f"> 482</a></span>&#160;<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a0962cbf9e2d4b7a067a85676ad317c1f">ShardArchiveHandler::process</a>(path <span class="keyword">const</span>&amp; dstPath)</div>
<div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160;{</div>
<div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a> shardIndex;</div>
<div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; {</div>
<div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/thread/lock_guard.html">std::lock_guard</a> lock(<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a236fb42ce35edfad5e0f61f1405bb40a">m_</a>);</div>
<div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; shardIndex = <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#ab84c25aafda27b95933b5c1cbc68f0dd">archives_</a>.begin()-&gt;first;</div>
<div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; }</div>
<div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; </div>
<div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span> shardDir{dstPath.parent_path() / <a class="codeRef" href="http://en.cppreference.com/w/cpp/string/basic_string/to_string.html">std::to_string</a>(shardIndex)};</div>
<div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; <span class="keywordflow">try</span></div>
<div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; {</div>
<div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; <span class="comment">// Extract the downloaded archive</span></div>
<div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; <a class="code" href="namespaceripple.html#a7f1e5ab90444ff67cddc760563d127b1">extractTarLz4</a>(dstPath, dstPath.parent_path());</div>
<div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; </div>
<div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; <span class="comment">// The extracted root directory name must match the shard index</span></div>
<div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; <span class="keywordflow">if</span> (!is_directory(shardDir))</div>
<div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; {</div>
<div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; JLOG(<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a0cd1a67c3837025faf68bc5540c98294">j_</a>.<a class="code" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>()) &lt;&lt; <span class="stringliteral">&quot;Shard &quot;</span> &lt;&lt; shardIndex</div>
<div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; &lt;&lt; <span class="stringliteral">&quot; mismatches archive shard directory&quot;</span>;</div>
<div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; }</div>
<div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; }</div>
<div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; <span class="keywordflow">catch</span> (<a class="codeRef" href="http://en.cppreference.com/w/cpp/error/exception.html">std::exception</a> <span class="keyword">const</span>&amp; e)</div>
<div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; {</div>
<div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; JLOG(<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a0cd1a67c3837025faf68bc5540c98294">j_</a>.<a class="code" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>()) &lt;&lt; <span class="stringliteral">&quot;exception: &quot;</span> &lt;&lt; e.<a class="codeRef" href="http://en.cppreference.com/w/cpp/error/exception/what.html">what</a>();</div>
<div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; }</div>
<div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; </div>
<div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; <span class="comment">// Import the shard into the shard store</span></div>
<div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#ad3c425217141170c27ce54597febe7f5">app_</a>.<a class="code" href="classripple_1_1Application.html#a5ea4991eb9c4d29e8de734016293ba33">getShardStore</a>()-&gt;<a class="code" href="classripple_1_1NodeStore_1_1DatabaseShard.html#ae86f08a36583502b9050a087c95ba1b6">importShard</a>(shardIndex, shardDir))</div>
<div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; {</div>
<div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; JLOG(<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a0cd1a67c3837025faf68bc5540c98294">j_</a>.<a class="code" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>()) &lt;&lt; <span class="stringliteral">&quot;Importing shard &quot;</span> &lt;&lt; shardIndex;</div>
<div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; }</div>
<div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; </div>
<div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; JLOG(<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a0cd1a67c3837025faf68bc5540c98294">j_</a>.<a class="code" href="classbeast_1_1Journal.html#a556228cb60bcf405c225d3f64b7b01ae">debug</a>()) &lt;&lt; <span class="stringliteral">&quot;Shard &quot;</span> &lt;&lt; shardIndex &lt;&lt; <span class="stringliteral">&quot; downloaded and imported&quot;</span>;</div>
<div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160;}</div>
<div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; </div>
<div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160;<span class="keywordtype">void</span></div>
<div class="line"><a name="l00521"></a><span class="lineno"><a class="line" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a96be731243ad4013480bcc9e56502924"> 521</a></span>&#160;<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a96be731243ad4013480bcc9e56502924">ShardArchiveHandler::remove</a>(<a class="codeRef" href="http://en.cppreference.com/w/cpp/thread/lock_guard.html">std::lock_guard&lt;std::mutex&gt;</a> <span class="keyword">const</span>&amp;)</div>
<div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160;{</div>
<div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#ae753e220dc179447da97185d3d1fc97a">verificationScheduler_</a>.<a class="code" href="classripple_1_1RPC_1_1ShardVerificationScheduler.html#a33b34d5ee1010717b41810e3413323f1">reset</a>();</div>
<div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; </div>
<div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span> shardIndex{<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#ab84c25aafda27b95933b5c1cbc68f0dd">archives_</a>.begin()-&gt;first};</div>
<div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#ad3c425217141170c27ce54597febe7f5">app_</a>.<a class="code" href="classripple_1_1Application.html#a5ea4991eb9c4d29e8de734016293ba33">getShardStore</a>()-&gt;<a class="code" href="classripple_1_1NodeStore_1_1DatabaseShard.html#a435483044cad610e25db707999b4544a">removePreShard</a>(shardIndex);</div>
<div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#ab84c25aafda27b95933b5c1cbc68f0dd">archives_</a>.erase(shardIndex);</div>
<div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; <span class="comment">// Process in another thread to not hold up the IO service</span></div>
<div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#ad3c425217141170c27ce54597febe7f5">app_</a>.<a class="code" href="classripple_1_1Application.html#a860be08979e27d8c6f37f722f996ba6c">getJobQueue</a>().<a class="code" href="classripple_1_1JobQueue.html#af5e34187d55aa58e551dc196aaf1ec25">addJob</a>(<a class="code" href="namespaceripple.html#ae0f54f8ce649d639bf3e2b295347e17aad3afa64002a7625b44814318856804e9">jtCLIENT</a>, <span class="stringliteral">&quot;ShardArchiveHandler&quot;</span>, *wrapper);</div>
<div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160;}</div>
<div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; </div>
<div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160;<span class="keywordtype">void</span></div>
<div class="line"><a name="l00486"></a><span class="lineno"><a class="line" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a0962cbf9e2d4b7a067a85676ad317c1f"> 486</a></span>&#160;<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a0962cbf9e2d4b7a067a85676ad317c1f">ShardArchiveHandler::process</a>(path <span class="keyword">const</span>&amp; dstPath)</div>
<div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160;{</div>
<div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a> shardIndex;</div>
<div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; {</div>
<div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/thread/lock_guard.html">std::lock_guard</a> lock(<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a236fb42ce35edfad5e0f61f1405bb40a">m_</a>);</div>
<div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; shardIndex = <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#ab84c25aafda27b95933b5c1cbc68f0dd">archives_</a>.begin()-&gt;first;</div>
<div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; }</div>
<div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; </div>
<div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span> shardDir{dstPath.parent_path() / <a class="codeRef" href="http://en.cppreference.com/w/cpp/string/basic_string/to_string.html">std::to_string</a>(shardIndex)};</div>
<div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; <span class="keywordflow">try</span></div>
<div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; {</div>
<div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; <span class="comment">// Extract the downloaded archive</span></div>
<div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; <a class="code" href="namespaceripple.html#a7f1e5ab90444ff67cddc760563d127b1">extractTarLz4</a>(dstPath, dstPath.parent_path());</div>
<div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; </div>
<div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; <span class="comment">// The extracted root directory name must match the shard index</span></div>
<div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; <span class="keywordflow">if</span> (!is_directory(shardDir))</div>
<div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; {</div>
<div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; JLOG(<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a0cd1a67c3837025faf68bc5540c98294">j_</a>.<a class="code" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>()) &lt;&lt; <span class="stringliteral">&quot;Shard &quot;</span> &lt;&lt; shardIndex</div>
<div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; &lt;&lt; <span class="stringliteral">&quot; mismatches archive shard directory&quot;</span>;</div>
<div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; }</div>
<div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; }</div>
<div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; <span class="keywordflow">catch</span> (<a class="codeRef" href="http://en.cppreference.com/w/cpp/error/exception.html">std::exception</a> <span class="keyword">const</span>&amp; e)</div>
<div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; {</div>
<div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; JLOG(<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a0cd1a67c3837025faf68bc5540c98294">j_</a>.<a class="code" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>()) &lt;&lt; <span class="stringliteral">&quot;exception: &quot;</span> &lt;&lt; e.<a class="codeRef" href="http://en.cppreference.com/w/cpp/error/exception/what.html">what</a>();</div>
<div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; }</div>
<div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; </div>
<div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; <span class="comment">// Import the shard into the shard store</span></div>
<div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#ad3c425217141170c27ce54597febe7f5">app_</a>.<a class="code" href="classripple_1_1Application.html#a5ea4991eb9c4d29e8de734016293ba33">getShardStore</a>()-&gt;<a class="code" href="classripple_1_1NodeStore_1_1DatabaseShard.html#ae86f08a36583502b9050a087c95ba1b6">importShard</a>(shardIndex, shardDir))</div>
<div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; {</div>
<div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; JLOG(<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a0cd1a67c3837025faf68bc5540c98294">j_</a>.<a class="code" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>()) &lt;&lt; <span class="stringliteral">&quot;Importing shard &quot;</span> &lt;&lt; shardIndex;</div>
<div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; }</div>
<div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; </div>
<div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; JLOG(<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a0cd1a67c3837025faf68bc5540c98294">j_</a>.<a class="code" href="classbeast_1_1Journal.html#a556228cb60bcf405c225d3f64b7b01ae">debug</a>()) &lt;&lt; <span class="stringliteral">&quot;Shard &quot;</span> &lt;&lt; shardIndex &lt;&lt; <span class="stringliteral">&quot; downloaded and imported&quot;</span>;</div>
<div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160;}</div>
<div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; </div>
<div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160;<span class="keywordtype">void</span></div>
<div class="line"><a name="l00525"></a><span class="lineno"><a class="line" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a96be731243ad4013480bcc9e56502924"> 525</a></span>&#160;<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a96be731243ad4013480bcc9e56502924">ShardArchiveHandler::remove</a>(<a class="codeRef" href="http://en.cppreference.com/w/cpp/thread/lock_guard.html">std::lock_guard&lt;std::mutex&gt;</a> <span class="keyword">const</span>&amp;)</div>
<div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160;{</div>
<div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#ae753e220dc179447da97185d3d1fc97a">verificationScheduler_</a>.<a class="code" href="classripple_1_1RPC_1_1ShardVerificationScheduler.html#a33b34d5ee1010717b41810e3413323f1">reset</a>();</div>
<div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; </div>
<div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; <span class="keyword">auto</span>&amp; session{<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#aaa1e762706873f97b00a57f8b793c740">sqliteDB_</a>-&gt;getSession()};</div>
<div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; </div>
<div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; session &lt;&lt; <span class="stringliteral">&quot;DELETE FROM State WHERE ShardIndex = :index;&quot;</span>,</div>
<div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; soci::use(shardIndex);</div>
<div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; </div>
<div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span> dstDir{<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a3ff9ae0459edf9d27608ecce2dbf7e66">downloadDir_</a> / <a class="codeRef" href="http://en.cppreference.com/w/cpp/string/basic_string/to_string.html">std::to_string</a>(shardIndex)};</div>
<div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; <span class="keywordflow">try</span></div>
<div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; {</div>
<div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; remove_all(dstDir);</div>
<div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; }</div>
<div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; <span class="keywordflow">catch</span> (<a class="codeRef" href="http://en.cppreference.com/w/cpp/error/exception.html">std::exception</a> <span class="keyword">const</span>&amp; e)</div>
<div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span> shardIndex{<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#ab84c25aafda27b95933b5c1cbc68f0dd">archives_</a>.begin()-&gt;first};</div>
<div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#ad3c425217141170c27ce54597febe7f5">app_</a>.<a class="code" href="classripple_1_1Application.html#a5ea4991eb9c4d29e8de734016293ba33">getShardStore</a>()-&gt;<a class="code" href="classripple_1_1NodeStore_1_1DatabaseShard.html#a435483044cad610e25db707999b4544a">removePreShard</a>(shardIndex);</div>
<div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#ab84c25aafda27b95933b5c1cbc68f0dd">archives_</a>.erase(shardIndex);</div>
<div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; </div>
<div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; <span class="keyword">auto</span>&amp; session{<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#aaa1e762706873f97b00a57f8b793c740">sqliteDB_</a>-&gt;getSession()};</div>
<div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; </div>
<div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; session &lt;&lt; <span class="stringliteral">&quot;DELETE FROM State WHERE ShardIndex = :index;&quot;</span>,</div>
<div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; soci::use(shardIndex);</div>
<div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; </div>
<div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span> dstDir{<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a3ff9ae0459edf9d27608ecce2dbf7e66">downloadDir_</a> / <a class="codeRef" href="http://en.cppreference.com/w/cpp/string/basic_string/to_string.html">std::to_string</a>(shardIndex)};</div>
<div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; <span class="keywordflow">try</span></div>
<div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; {</div>
<div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; JLOG(<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a0cd1a67c3837025faf68bc5540c98294">j_</a>.<a class="code" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>()) &lt;&lt; <span class="stringliteral">&quot;exception: &quot;</span> &lt;&lt; e.<a class="codeRef" href="http://en.cppreference.com/w/cpp/error/exception/what.html">what</a>();</div>
<div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; remove_all(dstDir);</div>
<div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; }</div>
<div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160;}</div>
<div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; </div>
<div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160;<span class="keywordtype">void</span></div>
<div class="line"><a name="l00546"></a><span class="lineno"><a class="line" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a7d5cfda0a96ee124cdf366b2018c5d33"> 546</a></span>&#160;<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a7d5cfda0a96ee124cdf366b2018c5d33">ShardArchiveHandler::doRelease</a>(<a class="codeRef" href="http://en.cppreference.com/w/cpp/thread/lock_guard.html">std::lock_guard&lt;std::mutex&gt;</a> <span class="keyword">const</span>&amp;)</div>
<div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160;{</div>
<div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#af7644eb39d61a4ce3ad5c26fa8fa34a4">timer_</a>.cancel();</div>
<div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> <span class="keyword">const</span>&amp; ar : <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#ab84c25aafda27b95933b5c1cbc68f0dd">archives_</a>)</div>
<div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#ad3c425217141170c27ce54597febe7f5">app_</a>.<a class="code" href="classripple_1_1Application.html#a5ea4991eb9c4d29e8de734016293ba33">getShardStore</a>()-&gt;<a class="code" href="classripple_1_1NodeStore_1_1DatabaseShard.html#a435483044cad610e25db707999b4544a">removePreShard</a>(ar.first);</div>
<div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#ab84c25aafda27b95933b5c1cbc68f0dd">archives_</a>.clear();</div>
<div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; </div>
<div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; {</div>
<div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; <span class="keyword">auto</span>&amp; session{<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#aaa1e762706873f97b00a57f8b793c740">sqliteDB_</a>-&gt;getSession()};</div>
<div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; </div>
<div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; session &lt;&lt; <span class="stringliteral">&quot;DROP TABLE State;&quot;</span>;</div>
<div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; }</div>
<div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; </div>
<div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#aaa1e762706873f97b00a57f8b793c740">sqliteDB_</a>.reset();</div>
<div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; </div>
<div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; <span class="comment">// Remove temp root download directory</span></div>
<div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; <span class="keywordflow">try</span></div>
<div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; {</div>
<div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; remove_all(<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a3ff9ae0459edf9d27608ecce2dbf7e66">downloadDir_</a>);</div>
<div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; }</div>
<div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; <span class="keywordflow">catch</span> (<a class="codeRef" href="http://en.cppreference.com/w/cpp/error/exception.html">std::exception</a> <span class="keyword">const</span>&amp; e)</div>
<div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; <span class="keywordflow">catch</span> (<a class="codeRef" href="http://en.cppreference.com/w/cpp/error/exception.html">std::exception</a> <span class="keyword">const</span>&amp; e)</div>
<div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; {</div>
<div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; JLOG(<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a0cd1a67c3837025faf68bc5540c98294">j_</a>.<a class="code" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>()) &lt;&lt; <span class="stringliteral">&quot;exception: &quot;</span> &lt;&lt; e.<a class="codeRef" href="http://en.cppreference.com/w/cpp/error/exception/what.html">what</a>();</div>
<div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; }</div>
<div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160;}</div>
<div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; </div>
<div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160;<span class="keywordtype">void</span></div>
<div class="line"><a name="l00550"></a><span class="lineno"><a class="line" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a7d5cfda0a96ee124cdf366b2018c5d33"> 550</a></span>&#160;<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a7d5cfda0a96ee124cdf366b2018c5d33">ShardArchiveHandler::doRelease</a>(<a class="codeRef" href="http://en.cppreference.com/w/cpp/thread/lock_guard.html">std::lock_guard&lt;std::mutex&gt;</a> <span class="keyword">const</span>&amp;)</div>
<div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160;{</div>
<div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#af7644eb39d61a4ce3ad5c26fa8fa34a4">timer_</a>.cancel();</div>
<div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> <span class="keyword">const</span>&amp; ar : <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#ab84c25aafda27b95933b5c1cbc68f0dd">archives_</a>)</div>
<div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#ad3c425217141170c27ce54597febe7f5">app_</a>.<a class="code" href="classripple_1_1Application.html#a5ea4991eb9c4d29e8de734016293ba33">getShardStore</a>()-&gt;<a class="code" href="classripple_1_1NodeStore_1_1DatabaseShard.html#a435483044cad610e25db707999b4544a">removePreShard</a>(ar.first);</div>
<div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#ab84c25aafda27b95933b5c1cbc68f0dd">archives_</a>.clear();</div>
<div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; </div>
<div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; {</div>
<div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; <span class="keyword">auto</span>&amp; session{<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#aaa1e762706873f97b00a57f8b793c740">sqliteDB_</a>-&gt;getSession()};</div>
<div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; </div>
<div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; session &lt;&lt; <span class="stringliteral">&quot;DROP TABLE State;&quot;</span>;</div>
<div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; }</div>
<div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; </div>
<div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#aaa1e762706873f97b00a57f8b793c740">sqliteDB_</a>.reset();</div>
<div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; </div>
<div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; <span class="comment">// Remove temp root download directory</span></div>
<div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; <span class="keywordflow">try</span></div>
<div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; {</div>
<div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; JLOG(<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a0cd1a67c3837025faf68bc5540c98294">j_</a>.<a class="code" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>()) &lt;&lt; <span class="stringliteral">&quot;exception: &quot;</span> &lt;&lt; e.<a class="codeRef" href="http://en.cppreference.com/w/cpp/error/exception/what.html">what</a>()</div>
<div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; &lt;&lt; <span class="stringliteral">&quot; in function: &quot;</span> &lt;&lt; __func__;</div>
<div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; }</div>
<div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; </div>
<div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a854a548b77c0fd9589bff1727b53b8ec">downloader_</a>.reset();</div>
<div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a050e467324d568c212779f599613a0a7">process_</a> = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160;}</div>
<div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; remove_all(<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a3ff9ae0459edf9d27608ecce2dbf7e66">downloadDir_</a>);</div>
<div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; }</div>
<div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; <span class="keywordflow">catch</span> (<a class="codeRef" href="http://en.cppreference.com/w/cpp/error/exception.html">std::exception</a> <span class="keyword">const</span>&amp; e)</div>
<div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; {</div>
<div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; JLOG(<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a0cd1a67c3837025faf68bc5540c98294">j_</a>.<a class="code" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>()) &lt;&lt; <span class="stringliteral">&quot;exception: &quot;</span> &lt;&lt; e.<a class="codeRef" href="http://en.cppreference.com/w/cpp/error/exception/what.html">what</a>()</div>
<div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; &lt;&lt; <span class="stringliteral">&quot; in function: &quot;</span> &lt;&lt; __func__;</div>
<div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; }</div>
<div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; </div>
<div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160;<span class="keywordtype">bool</span></div>
<div class="line"><a name="l00577"></a><span class="lineno"><a class="line" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#accc0befbd62fead5da3a51dce1993990"> 577</a></span>&#160;<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#accc0befbd62fead5da3a51dce1993990">ShardArchiveHandler::onClosureFailed</a>(</div>
<div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> <span class="keyword">const</span>&amp; errorMsg,</div>
<div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/thread/lock_guard.html">std::lock_guard&lt;std::mutex&gt;</a> <span class="keyword">const</span>&amp; lock)</div>
<div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160;{</div>
<div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classripple_1_1Stoppable.html#a836b8737444ef1133c3596e61010fa80">isStopping</a>())</div>
<div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; </div>
<div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; JLOG(<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a0cd1a67c3837025faf68bc5540c98294">j_</a>.<a class="code" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>()) &lt;&lt; errorMsg;</div>
<div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; </div>
<div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a29c53e2203380b6def0818dc887964e2">removeAndProceed</a>(lock);</div>
<div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160;}</div>
<div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; </div>
<div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160;<span class="keywordtype">bool</span></div>
<div class="line"><a name="l00590"></a><span class="lineno"><a class="line" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a29c53e2203380b6def0818dc887964e2"> 590</a></span>&#160;<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a29c53e2203380b6def0818dc887964e2">ShardArchiveHandler::removeAndProceed</a>(<a class="codeRef" href="http://en.cppreference.com/w/cpp/thread/lock_guard.html">std::lock_guard&lt;std::mutex&gt;</a> <span class="keyword">const</span>&amp; lock)</div>
<div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160;{</div>
<div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a96be731243ad4013480bcc9e56502924">remove</a>(lock);</div>
<div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#aa245784a9b0380252756a6f44b07eda0">next</a>(lock);</div>
<div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160;}</div>
<div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; </div>
<div class="line"><a name="l00596"></a><span class="lineno"><a class="line" href="classripple_1_1RPC_1_1RecoveryHandler.html#a9e48b3c1ed71ab5a63be33c1ba8b7abd"> 596</a></span>&#160;<a class="code" href="classripple_1_1RPC_1_1RecoveryHandler.html#a9e48b3c1ed71ab5a63be33c1ba8b7abd">RecoveryHandler::RecoveryHandler</a>(<a class="code" href="classripple_1_1Application.html">Application</a>&amp; app, <a class="code" href="classripple_1_1Stoppable.html">Stoppable</a>&amp; parent)</div>
<div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; : <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html">ShardArchiveHandler</a>(app, parent)</div>
<div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160;{</div>
<div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160;}</div>
<div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; </div>
<div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160;} <span class="comment">// namespace RPC</span></div>
<div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160;} <span class="comment">// namespace ripple</span></div>
<div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a854a548b77c0fd9589bff1727b53b8ec">downloader_</a>.reset();</div>
<div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a050e467324d568c212779f599613a0a7">process_</a> = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160;}</div>
<div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; </div>
<div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160;<span class="keywordtype">bool</span></div>
<div class="line"><a name="l00581"></a><span class="lineno"><a class="line" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#accc0befbd62fead5da3a51dce1993990"> 581</a></span>&#160;<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#accc0befbd62fead5da3a51dce1993990">ShardArchiveHandler::onClosureFailed</a>(</div>
<div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> <span class="keyword">const</span>&amp; errorMsg,</div>
<div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/thread/lock_guard.html">std::lock_guard&lt;std::mutex&gt;</a> <span class="keyword">const</span>&amp; lock)</div>
<div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160;{</div>
<div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classripple_1_1Stoppable.html#a836b8737444ef1133c3596e61010fa80">isStopping</a>())</div>
<div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; </div>
<div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; JLOG(<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a0cd1a67c3837025faf68bc5540c98294">j_</a>.<a class="code" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>()) &lt;&lt; errorMsg;</div>
<div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; </div>
<div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a29c53e2203380b6def0818dc887964e2">removeAndProceed</a>(lock);</div>
<div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160;}</div>
<div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; </div>
<div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160;<span class="keywordtype">bool</span></div>
<div class="line"><a name="l00594"></a><span class="lineno"><a class="line" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a29c53e2203380b6def0818dc887964e2"> 594</a></span>&#160;<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a29c53e2203380b6def0818dc887964e2">ShardArchiveHandler::removeAndProceed</a>(<a class="codeRef" href="http://en.cppreference.com/w/cpp/thread/lock_guard.html">std::lock_guard&lt;std::mutex&gt;</a> <span class="keyword">const</span>&amp; lock)</div>
<div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160;{</div>
<div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a96be731243ad4013480bcc9e56502924">remove</a>(lock);</div>
<div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#aa245784a9b0380252756a6f44b07eda0">next</a>(lock);</div>
<div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160;}</div>
<div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; </div>
<div class="line"><a name="l00600"></a><span class="lineno"><a class="line" href="classripple_1_1RPC_1_1RecoveryHandler.html#a9e48b3c1ed71ab5a63be33c1ba8b7abd"> 600</a></span>&#160;<a class="code" href="classripple_1_1RPC_1_1RecoveryHandler.html#a9e48b3c1ed71ab5a63be33c1ba8b7abd">RecoveryHandler::RecoveryHandler</a>(<a class="code" href="classripple_1_1Application.html">Application</a>&amp; app, <a class="code" href="classripple_1_1Stoppable.html">Stoppable</a>&amp; parent)</div>
<div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; : <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html">ShardArchiveHandler</a>(app, parent)</div>
<div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160;{</div>
<div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160;}</div>
<div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; </div>
<div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160;} <span class="comment">// namespace RPC</span></div>
<div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160;} <span class="comment">// namespace ripple</span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="aclassripple_1_1Application_html"><div class="ttname"><a href="classripple_1_1Application.html">ripple::Application</a></div><div class="ttdef"><b>Definition:</b> <a href="Application_8h_source.html#l00097">Application.h:97</a></div></div>
<div class="ttc" id="aclassripple_1_1RPC_1_1ShardArchiveHandler_html_a3f71f8f6a470ef8f35d20f308eb73ac3"><div class="ttname"><a href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a3f71f8f6a470ef8f35d20f308eb73ac3">ripple::RPC::ShardArchiveHandler::getDownloadDirectory</a></div><div class="ttdeci">static boost::filesystem::path getDownloadDirectory(Config const &amp;config)</div><div class="ttdef"><b>Definition:</b> <a href="ShardArchiveHandler_8cpp_source.html#l00037">ShardArchiveHandler.cpp:37</a></div></div>
<div class="ttc" id="aclassripple_1_1RPC_1_1ShardArchiveHandler_html_a3ff9ae0459edf9d27608ecce2dbf7e66"><div class="ttname"><a href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a3ff9ae0459edf9d27608ecce2dbf7e66">ripple::RPC::ShardArchiveHandler::downloadDir_</a></div><div class="ttdeci">const boost::filesystem::path downloadDir_</div><div class="ttdef"><b>Definition:</b> <a href="ShardArchiveHandler_8h_source.html#l00141">ShardArchiveHandler.h:141</a></div></div>
<div class="ttc" id="aclassripple_1_1RPC_1_1ShardArchiveHandler_html_a96be731243ad4013480bcc9e56502924"><div class="ttname"><a href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a96be731243ad4013480bcc9e56502924">ripple::RPC::ShardArchiveHandler::remove</a></div><div class="ttdeci">void remove(std::lock_guard&lt; std::mutex &gt; const &amp;)</div><div class="ttdef"><b>Definition:</b> <a href="ShardArchiveHandler_8cpp_source.html#l00521">ShardArchiveHandler.cpp:521</a></div></div>
<div class="ttc" id="aclassripple_1_1RPC_1_1ShardArchiveHandler_html_a96be731243ad4013480bcc9e56502924"><div class="ttname"><a href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a96be731243ad4013480bcc9e56502924">ripple::RPC::ShardArchiveHandler::remove</a></div><div class="ttdeci">void remove(std::lock_guard&lt; std::mutex &gt; const &amp;)</div><div class="ttdef"><b>Definition:</b> <a href="ShardArchiveHandler_8cpp_source.html#l00525">ShardArchiveHandler.cpp:525</a></div></div>
<div class="ttc" id="aclassripple_1_1RPC_1_1ShardArchiveHandler_html_a22d8c0f551d59bfff5fe3463da5cb247"><div class="ttname"><a href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a22d8c0f551d59bfff5fe3463da5cb247">ripple::RPC::ShardArchiveHandler::timerCounter_</a></div><div class="ttdeci">TimerOpCounter timerCounter_</div><div class="ttdef"><b>Definition:</b> <a href="ShardArchiveHandler_8h_source.html#l00144">ShardArchiveHandler.h:144</a></div></div>
<div class="ttc" id="aclassripple_1_1RPC_1_1ShardArchiveHandler_html_ae753e220dc179447da97185d3d1fc97a"><div class="ttname"><a href="classripple_1_1RPC_1_1ShardArchiveHandler.html#ae753e220dc179447da97185d3d1fc97a">ripple::RPC::ShardArchiveHandler::verificationScheduler_</a></div><div class="ttdeci">ShardVerificationScheduler verificationScheduler_</div><div class="ttdef"><b>Definition:</b> <a href="ShardArchiveHandler_8h_source.html#l00145">ShardArchiveHandler.h:145</a></div></div>
<div class="ttc" id="abasic_string_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a></div><div class="ttdoc">STL class.</div></div>
<div class="ttc" id="aclassripple_1_1RPC_1_1ShardArchiveHandler_html_a29c53e2203380b6def0818dc887964e2"><div class="ttname"><a href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a29c53e2203380b6def0818dc887964e2">ripple::RPC::ShardArchiveHandler::removeAndProceed</a></div><div class="ttdeci">bool removeAndProceed(std::lock_guard&lt; std::mutex &gt; const &amp;lock)</div><div class="ttdef"><b>Definition:</b> <a href="ShardArchiveHandler_8cpp_source.html#l00590">ShardArchiveHandler.cpp:590</a></div></div>
<div class="ttc" id="aclassripple_1_1RPC_1_1ShardArchiveHandler_html_a29c53e2203380b6def0818dc887964e2"><div class="ttname"><a href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a29c53e2203380b6def0818dc887964e2">ripple::RPC::ShardArchiveHandler::removeAndProceed</a></div><div class="ttdeci">bool removeAndProceed(std::lock_guard&lt; std::mutex &gt; const &amp;lock)</div><div class="ttdef"><b>Definition:</b> <a href="ShardArchiveHandler_8cpp_source.html#l00594">ShardArchiveHandler.cpp:594</a></div></div>
<div class="ttc" id="aclassripple_1_1RPC_1_1ShardArchiveHandler_html_a1d5fcb70e734bc8c0df786b826bdcab0"><div class="ttname"><a href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a1d5fcb70e734bc8c0df786b826bdcab0">ripple::RPC::ShardArchiveHandler::start</a></div><div class="ttdeci">bool start()</div><div class="ttdoc">Starts downloading and importing archives.</div><div class="ttdef"><b>Definition:</b> <a href="ShardArchiveHandler_8cpp_source.html#l00259">ShardArchiveHandler.cpp:259</a></div></div>
<div class="ttc" id="anamespaceripple_html_ae0f54f8ce649d639bf3e2b295347e17aad3afa64002a7625b44814318856804e9"><div class="ttname"><a href="namespaceripple.html#ae0f54f8ce649d639bf3e2b295347e17aad3afa64002a7625b44814318856804e9">ripple::jtCLIENT</a></div><div class="ttdeci">@ jtCLIENT</div><div class="ttdef"><b>Definition:</b> <a href="Job_8h_source.html#l00048">Job.h:48</a></div></div>
<div class="ttc" id="aexception_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/error/exception.html">std::exception</a></div><div class="ttdoc">STL class.</div></div>
@@ -695,21 +699,21 @@ $(function() {
<div class="ttc" id="aduration_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/chrono/duration.html">std::chrono::milliseconds</a></div></div>
<div class="ttc" id="aclassbeast_1_1Journal_html_ad8fefe3e8ad583e1ed1bf02094ac3d8f"><div class="ttname"><a href="classbeast_1_1Journal.html#ad8fefe3e8ad583e1ed1bf02094ac3d8f">beast::Journal::warn</a></div><div class="ttdeci">Stream warn() const</div><div class="ttdef"><b>Definition:</b> <a href="Journal_8h_source.html#l00327">Journal.h:327</a></div></div>
<div class="ttc" id="aclassripple_1_1NodeStore_1_1DatabaseShard_html_a376e9e9081ea89d50cc5a15c4ce91cc0"><div class="ttname"><a href="classripple_1_1NodeStore_1_1DatabaseShard.html#a376e9e9081ea89d50cc5a15c4ce91cc0">ripple::NodeStore::DatabaseShard::lastLedgerSeq</a></div><div class="ttdeci">virtual std::uint32_t lastLedgerSeq(std::uint32_t shardIndex) const =0</div><div class="ttdoc">Calculates the last ledger sequence for a given shard index.</div></div>
<div class="ttc" id="aclassripple_1_1RPC_1_1ShardArchiveHandler_html_a7d5cfda0a96ee124cdf366b2018c5d33"><div class="ttname"><a href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a7d5cfda0a96ee124cdf366b2018c5d33">ripple::RPC::ShardArchiveHandler::doRelease</a></div><div class="ttdeci">void doRelease(std::lock_guard&lt; std::mutex &gt; const &amp;)</div><div class="ttdef"><b>Definition:</b> <a href="ShardArchiveHandler_8cpp_source.html#l00546">ShardArchiveHandler.cpp:546</a></div></div>
<div class="ttc" id="aclassripple_1_1RPC_1_1ShardArchiveHandler_html_a7d5cfda0a96ee124cdf366b2018c5d33"><div class="ttname"><a href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a7d5cfda0a96ee124cdf366b2018c5d33">ripple::RPC::ShardArchiveHandler::doRelease</a></div><div class="ttdeci">void doRelease(std::lock_guard&lt; std::mutex &gt; const &amp;)</div><div class="ttdef"><b>Definition:</b> <a href="ShardArchiveHandler_8cpp_source.html#l00550">ShardArchiveHandler.cpp:550</a></div></div>
<div class="ttc" id="alock_guard_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/thread/lock_guard.html">std::lock_guard</a></div><div class="ttdoc">STL class.</div></div>
<div class="ttc" id="aclassripple_1_1Application_html_a5ea4991eb9c4d29e8de734016293ba33"><div class="ttname"><a href="classripple_1_1Application.html#a5ea4991eb9c4d29e8de734016293ba33">ripple::Application::getShardStore</a></div><div class="ttdeci">virtual NodeStore::DatabaseShard * getShardStore()=0</div></div>
<div class="ttc" id="aclassripple_1_1LedgerMaster_html_aafea042d43c45f6ea02be2489c019f62"><div class="ttname"><a href="classripple_1_1LedgerMaster.html#aafea042d43c45f6ea02be2489c019f62">ripple::LedgerMaster::walkHashBySeq</a></div><div class="ttdeci">boost::optional&lt; LedgerHash &gt; walkHashBySeq(std::uint32_t index, InboundLedger::Reason reason)</div><div class="ttdoc">Walk to a ledger's hash using the skip list.</div><div class="ttdef"><b>Definition:</b> <a href="LedgerMaster_8cpp_source.html#l01603">LedgerMaster.cpp:1603</a></div></div>
<div class="ttc" id="anamespaceripple_html_ae74c748c6ec5d234e90844ba9637ef89"><div class="ttname"><a href="namespaceripple.html#ae74c748c6ec5d234e90844ba9637ef89">ripple::ShardArchiveHandlerDBInit</a></div><div class="ttdeci">static constexpr std::array&lt; char const *, 3 &gt; ShardArchiveHandlerDBInit</div><div class="ttdef"><b>Definition:</b> <a href="DBInit_8h_source.html#l00180">DBInit.h:180</a></div></div>
<div class="ttc" id="aclassripple_1_1JobQueue_html_af5e34187d55aa58e551dc196aaf1ec25"><div class="ttname"><a href="classripple_1_1JobQueue.html#af5e34187d55aa58e551dc196aaf1ec25">ripple::JobQueue::addJob</a></div><div class="ttdeci">bool addJob(JobType type, std::string const &amp;name, JobHandler &amp;&amp;jobHandler)</div><div class="ttdoc">Adds a job to the JobQueue.</div><div class="ttdef"><b>Definition:</b> <a href="JobQueue_8h_source.html#l00166">JobQueue.h:166</a></div></div>
<div class="ttc" id="aclassripple_1_1RPC_1_1ShardArchiveHandler_html_a591ad0b890e673e40ea9c5cdd029e7c8"><div class="ttname"><a href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a591ad0b890e673e40ea9c5cdd029e7c8">ripple::RPC::ShardArchiveHandler::initFromDB</a></div><div class="ttdeci">bool initFromDB(std::lock_guard&lt; std::mutex &gt; const &amp;)</div><div class="ttdef"><b>Definition:</b> <a href="ShardArchiveHandler_8cpp_source.html#l00137">ShardArchiveHandler.cpp:137</a></div></div>
<div class="ttc" id="aclassripple_1_1RPC_1_1ShardArchiveHandler_html_accc0befbd62fead5da3a51dce1993990"><div class="ttname"><a href="classripple_1_1RPC_1_1ShardArchiveHandler.html#accc0befbd62fead5da3a51dce1993990">ripple::RPC::ShardArchiveHandler::onClosureFailed</a></div><div class="ttdeci">bool onClosureFailed(std::string const &amp;errorMsg, std::lock_guard&lt; std::mutex &gt; const &amp;lock)</div><div class="ttdef"><b>Definition:</b> <a href="ShardArchiveHandler_8cpp_source.html#l00577">ShardArchiveHandler.cpp:577</a></div></div>
<div class="ttc" id="aclassripple_1_1RPC_1_1ShardArchiveHandler_html_accc0befbd62fead5da3a51dce1993990"><div class="ttname"><a href="classripple_1_1RPC_1_1ShardArchiveHandler.html#accc0befbd62fead5da3a51dce1993990">ripple::RPC::ShardArchiveHandler::onClosureFailed</a></div><div class="ttdeci">bool onClosureFailed(std::string const &amp;errorMsg, std::lock_guard&lt; std::mutex &gt; const &amp;lock)</div><div class="ttdef"><b>Definition:</b> <a href="ShardArchiveHandler_8cpp_source.html#l00581">ShardArchiveHandler.cpp:581</a></div></div>
<div class="ttc" id="anamespaceripple_html_a7f1e5ab90444ff67cddc760563d127b1"><div class="ttname"><a href="namespaceripple.html#a7f1e5ab90444ff67cddc760563d127b1">ripple::extractTarLz4</a></div><div class="ttdeci">void extractTarLz4(boost::filesystem::path const &amp;src, boost::filesystem::path const &amp;dst)</div><div class="ttdoc">Extract a tar archive compressed with lz4.</div><div class="ttdef"><b>Definition:</b> <a href="Archive_8cpp_source.html#l00029">Archive.cpp:29</a></div></div>
<div class="ttc" id="aclassripple_1_1Application_html_a7c963aa5c47180b24897ff6b5622e5bc"><div class="ttname"><a href="classripple_1_1Application.html#a7c963aa5c47180b24897ff6b5622e5bc">ripple::Application::getOPs</a></div><div class="ttdeci">virtual NetworkOPs &amp; getOPs()=0</div></div>
<div class="ttc" id="anamespaceripple_html_a1d4293b25863d6ecf2885acc15606850"><div class="ttname"><a href="namespaceripple.html#a1d4293b25863d6ecf2885acc15606850">ripple::DownloaderDBPragma</a></div><div class="ttdeci">static constexpr std::array&lt; char const *, 2 &gt; DownloaderDBPragma</div><div class="ttdef"><b>Definition:</b> <a href="DBInit_8h_source.html#l00177">DBInit.h:177</a></div></div>
<div class="ttc" id="aclassripple_1_1RPC_1_1ShardArchiveHandler_html_af7644eb39d61a4ce3ad5c26fa8fa34a4"><div class="ttname"><a href="classripple_1_1RPC_1_1ShardArchiveHandler.html#af7644eb39d61a4ce3ad5c26fa8fa34a4">ripple::RPC::ShardArchiveHandler::timer_</a></div><div class="ttdeci">boost::asio::basic_waitable_timer&lt; std::chrono::steady_clock &gt; timer_</div><div class="ttdef"><b>Definition:</b> <a href="ShardArchiveHandler_8h_source.html#l00142">ShardArchiveHandler.h:142</a></div></div>
<div class="ttc" id="aclassripple_1_1Stoppable_html"><div class="ttname"><a href="classripple_1_1Stoppable.html">ripple::Stoppable</a></div><div class="ttdoc">Provides an interface for starting and stopping.</div><div class="ttdef"><b>Definition:</b> <a href="Stoppable_8h_source.html#l00200">Stoppable.h:200</a></div></div>
<div class="ttc" id="aclassripple_1_1Stoppable_html"><div class="ttname"><a href="classripple_1_1Stoppable.html">ripple::Stoppable</a></div><div class="ttdoc">Provides an interface for starting and stopping.</div><div class="ttdef"><b>Definition:</b> <a href="Stoppable_8h_source.html#l00201">Stoppable.h:201</a></div></div>
<div class="ttc" id="aclassripple_1_1RPC_1_1ShardArchiveHandler_html_a6677b860054025ac3f19ab5dd1b70be1"><div class="ttname"><a href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a6677b860054025ac3f19ab5dd1b70be1">ripple::RPC::ShardArchiveHandler::release</a></div><div class="ttdeci">void release()</div><div class="ttdef"><b>Definition:</b> <a href="ShardArchiveHandler_8cpp_source.html#l00301">ShardArchiveHandler.cpp:301</a></div></div>
<div class="ttc" id="aclassripple_1_1RPC_1_1ShardArchiveHandler_html_a0962cbf9e2d4b7a067a85676ad317c1f"><div class="ttname"><a href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a0962cbf9e2d4b7a067a85676ad317c1f">ripple::RPC::ShardArchiveHandler::process</a></div><div class="ttdeci">void process(boost::filesystem::path const &amp;dstPath)</div><div class="ttdef"><b>Definition:</b> <a href="ShardArchiveHandler_8cpp_source.html#l00482">ShardArchiveHandler.cpp:482</a></div></div>
<div class="ttc" id="aclassripple_1_1RPC_1_1ShardArchiveHandler_html_a0962cbf9e2d4b7a067a85676ad317c1f"><div class="ttname"><a href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a0962cbf9e2d4b7a067a85676ad317c1f">ripple::RPC::ShardArchiveHandler::process</a></div><div class="ttdeci">void process(boost::filesystem::path const &amp;dstPath)</div><div class="ttdef"><b>Definition:</b> <a href="ShardArchiveHandler_8cpp_source.html#l00486">ShardArchiveHandler.cpp:486</a></div></div>
<div class="ttc" id="aclassripple_1_1Application_html_a57929fa83c551514e364fe6981b0c104"><div class="ttname"><a href="classripple_1_1Application.html#a57929fa83c551514e364fe6981b0c104">ripple::Application::getLedgerMaster</a></div><div class="ttdeci">virtual LedgerMaster &amp; getLedgerMaster()=0</div></div>
<div class="ttc" id="aclassripple_1_1Config_html"><div class="ttname"><a href="classripple_1_1Config.html">ripple::Config</a></div><div class="ttdef"><b>Definition:</b> <a href="Config_8h_source.html#l00067">Config.h:67</a></div></div>
<div class="ttc" id="aclassripple_1_1Application_html_aca56b7c63030174e59720ab51d739422"><div class="ttname"><a href="classripple_1_1Application.html#aca56b7c63030174e59720ab51d739422">ripple::Application::config</a></div><div class="ttdeci">virtual Config &amp; config()=0</div></div>
@@ -720,7 +724,7 @@ $(function() {
<div class="ttc" id="aclassripple_1_1RPC_1_1ShardArchiveHandler_html_aaa1e762706873f97b00a57f8b793c740"><div class="ttname"><a href="classripple_1_1RPC_1_1ShardArchiveHandler.html#aaa1e762706873f97b00a57f8b793c740">ripple::RPC::ShardArchiveHandler::sqliteDB_</a></div><div class="ttdeci">std::unique_ptr&lt; DatabaseCon &gt; sqliteDB_</div><div class="ttdef"><b>Definition:</b> <a href="ShardArchiveHandler_8h_source.html#l00136">ShardArchiveHandler.h:136</a></div></div>
<div class="ttc" id="aclassripple_1_1Job_html"><div class="ttname"><a href="classripple_1_1Job.html">ripple::Job</a></div><div class="ttdef"><b>Definition:</b> <a href="Job_8h_source.html#l00082">Job.h:82</a></div></div>
<div class="ttc" id="astructripple_1_1ConfigSection_html"><div class="ttname"><a href="structripple_1_1ConfigSection.html">ripple::ConfigSection</a></div><div class="ttdef"><b>Definition:</b> <a href="ConfigSections_8h_source.html#l00028">ConfigSections.h:28</a></div></div>
<div class="ttc" id="aclassripple_1_1RPC_1_1ShardArchiveHandler_html_aa49e1c3f0afd83dea8b99ad37e785f04"><div class="ttname"><a href="classripple_1_1RPC_1_1ShardArchiveHandler.html#aa49e1c3f0afd83dea8b99ad37e785f04">ripple::RPC::ShardArchiveHandler::complete</a></div><div class="ttdeci">void complete(boost::filesystem::path dstPath)</div><div class="ttdef"><b>Definition:</b> <a href="ShardArchiveHandler_8cpp_source.html#l00401">ShardArchiveHandler.cpp:401</a></div></div>
<div class="ttc" id="aclassripple_1_1RPC_1_1ShardArchiveHandler_html_aa49e1c3f0afd83dea8b99ad37e785f04"><div class="ttname"><a href="classripple_1_1RPC_1_1ShardArchiveHandler.html#aa49e1c3f0afd83dea8b99ad37e785f04">ripple::RPC::ShardArchiveHandler::complete</a></div><div class="ttdeci">void complete(boost::filesystem::path dstPath)</div><div class="ttdef"><b>Definition:</b> <a href="ShardArchiveHandler_8cpp_source.html#l00405">ShardArchiveHandler.cpp:405</a></div></div>
<div class="ttc" id="ainteger_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a></div></div>
<div class="ttc" id="aclassripple_1_1RPC_1_1ShardVerificationScheduler_html_a399ba57d69fdfad772409c72361363fd"><div class="ttname"><a href="classripple_1_1RPC_1_1ShardVerificationScheduler.html#a399ba57d69fdfad772409c72361363fd">ripple::RPC::ShardVerificationScheduler::retry</a></div><div class="ttdeci">bool retry(Application &amp;app, bool shouldHaveHash, retryFunction f)</div><div class="ttdef"><b>Definition:</b> <a href="ShardVerificationScheduler_8cpp_source.html#l00037">ShardVerificationScheduler.cpp:37</a></div></div>
<div class="ttc" id="aclassripple_1_1RPC_1_1ShardArchiveHandler_html_a854a548b77c0fd9589bff1727b53b8ec"><div class="ttname"><a href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a854a548b77c0fd9589bff1727b53b8ec">ripple::RPC::ShardArchiveHandler::downloader_</a></div><div class="ttdeci">std::unique_ptr&lt; DatabaseDownloader &gt; downloader_</div><div class="ttdef"><b>Definition:</b> <a href="ShardArchiveHandler_8h_source.html#l00133">ShardArchiveHandler.h:133</a></div></div>
@@ -728,7 +732,7 @@ $(function() {
<div class="ttc" id="aclassripple_1_1RPC_1_1ShardArchiveHandler_html_ab4569f929cc70fa2b6425eaabe05845a"><div class="ttname"><a href="classripple_1_1RPC_1_1ShardArchiveHandler.html#ab4569f929cc70fa2b6425eaabe05845a">ripple::RPC::ShardArchiveHandler::makeShardArchiveHandler</a></div><div class="ttdeci">static std::unique_ptr&lt; ShardArchiveHandler &gt; makeShardArchiveHandler(Application &amp;app, Stoppable &amp;parent)</div><div class="ttdef"><b>Definition:</b> <a href="ShardArchiveHandler_8cpp_source.html#l00048">ShardArchiveHandler.cpp:48</a></div></div>
<div class="ttc" id="aclassripple_1_1RPC_1_1ShardArchiveHandler_html_a0cd1a67c3837025faf68bc5540c98294"><div class="ttname"><a href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a0cd1a67c3837025faf68bc5540c98294">ripple::RPC::ShardArchiveHandler::j_</a></div><div class="ttdeci">const beast::Journal j_</div><div class="ttdef"><b>Definition:</b> <a href="ShardArchiveHandler_8h_source.html#l00140">ShardArchiveHandler.h:140</a></div></div>
<div class="ttc" id="amemory_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/header/memory.html">memory</a></div></div>
<div class="ttc" id="aclassripple_1_1RPC_1_1RecoveryHandler_html_a9e48b3c1ed71ab5a63be33c1ba8b7abd"><div class="ttname"><a href="classripple_1_1RPC_1_1RecoveryHandler.html#a9e48b3c1ed71ab5a63be33c1ba8b7abd">ripple::RPC::RecoveryHandler::RecoveryHandler</a></div><div class="ttdeci">RecoveryHandler(Application &amp;app, Stoppable &amp;parent)</div><div class="ttdef"><b>Definition:</b> <a href="ShardArchiveHandler_8cpp_source.html#l00596">ShardArchiveHandler.cpp:596</a></div></div>
<div class="ttc" id="aclassripple_1_1RPC_1_1RecoveryHandler_html_a9e48b3c1ed71ab5a63be33c1ba8b7abd"><div class="ttname"><a href="classripple_1_1RPC_1_1RecoveryHandler.html#a9e48b3c1ed71ab5a63be33c1ba8b7abd">ripple::RPC::RecoveryHandler::RecoveryHandler</a></div><div class="ttdeci">RecoveryHandler(Application &amp;app, Stoppable &amp;parent)</div><div class="ttdef"><b>Definition:</b> <a href="ShardArchiveHandler_8cpp_source.html#l00600">ShardArchiveHandler.cpp:600</a></div></div>
<div class="ttc" id="aclassripple_1_1Application_html_aeb96811d5ac7f90cf0736a5874aa55e9"><div class="ttname"><a href="classripple_1_1Application.html#aeb96811d5ac7f90cf0736a5874aa55e9">ripple::Application::getIOService</a></div><div class="ttdeci">virtual boost::asio::io_service &amp; getIOService()=0</div></div>
<div class="ttc" id="aclassripple_1_1RPC_1_1ShardArchiveHandler_html_a68d9d711f9d71d55365349651bd60d3c"><div class="ttname"><a href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a68d9d711f9d71d55365349651bd60d3c">ripple::RPC::ShardArchiveHandler::tryMakeRecoveryHandler</a></div><div class="ttdeci">static std::unique_ptr&lt; ShardArchiveHandler &gt; tryMakeRecoveryHandler(Application &amp;app, Stoppable &amp;parent)</div><div class="ttdef"><b>Definition:</b> <a href="ShardArchiveHandler_8cpp_source.html#l00056">ShardArchiveHandler.cpp:56</a></div></div>
<div class="ttc" id="anamespaceripple_html_a17840097e259eb6332aca0cfffaa11e9"><div class="ttname"><a href="namespaceripple.html#a17840097e259eb6332aca0cfffaa11e9">ripple::stateDBName</a></div><div class="ttdeci">static constexpr auto stateDBName</div><div class="ttdef"><b>Definition:</b> <a href="DBInit_8h_source.html#l00174">DBInit.h:174</a></div></div>