This commit is contained in:
nbougalis
2022-08-26 20:04:15 +00:00
parent 535a1b2d41
commit 38a7cd20fe
3544 changed files with 52858 additions and 55020 deletions

View File

@@ -487,188 +487,189 @@ $(function() {
<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; }</div>
<div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; </div>
<div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; <span class="comment">// Make lambdas mutable captured vars can be moved from</span></div>
<div class="line"><a name="l00419"></a><span class="lineno"> 419</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#a5c4e424f66edeb721a59fd151fed604e">wrap</a>([=,</div>
<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; dstPath = std::move(dstPath)]() <span class="keyword">mutable</span> {</div>
<div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#aa603cda3c95e978af655f4eb4b86fe8c">stopping_</a>)</div>
<div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; <span class="keyword">auto</span> wrapper =</div>
<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a7a73b2116e2f13962a7f5527a998c618">jobCounter_</a>.<a class="code" href="classripple_1_1ClosureCounter.html#a5c4e424f66edeb721a59fd151fed604e">wrap</a>([=, <span class="keyword">this</span>, dstPath = std::move(dstPath)]() <span class="keyword">mutable</span> {</div>
<div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#aa603cda3c95e978af655f4eb4b86fe8c">stopping_</a>)</div>
<div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <span class="keywordflow">return</span>;</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="comment">// If not synced then defer and retry</span></div>
<div class="line"><a name="l00425"></a><span class="lineno"> 425</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="l00426"></a><span class="lineno"> 426</span>&#160; <span class="keywordflow">if</span> (mode != <a class="code" href="namespaceripple.html#a597325d7385ff9c19686e14e5bead510aba7de5bc6888294e5884b024a4c894f1">OperatingMode::FULL</a>)</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; <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="l00429"></a><span class="lineno"> 429</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="l00430"></a><span class="lineno"> 430</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="l00431"></a><span class="lineno"> 431</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="l00432"></a><span class="lineno"> 432</span>&#160; 10));</div>
<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <span class="comment">// If not synced then defer and retry</span></div>
<div class="line"><a name="l00425"></a><span class="lineno"> 425</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="l00426"></a><span class="lineno"> 426</span>&#160; <span class="keywordflow">if</span> (mode != <a class="code" href="namespaceripple.html#a597325d7385ff9c19686e14e5bead510aba7de5bc6888294e5884b024a4c894f1">OperatingMode::FULL</a>)</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; <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="l00429"></a><span class="lineno"> 429</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="l00430"></a><span class="lineno"> 430</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="l00431"></a><span class="lineno"> 431</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="l00432"></a><span class="lineno"> 432</span>&#160; 10));</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="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#a5c4e424f66edeb721a59fd151fed604e">wrap</a>(</div>
<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; [=, dstPath = std::move(dstPath)](</div>
<div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; boost::system::error_code <span class="keyword">const</span>&amp; ec) <span class="keyword">mutable</span> {</div>
<div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; <span class="keywordflow">if</span> (ec != boost::asio::error::operation_aborted)</div>
<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#aa49e1c3f0afd83dea8b99ad37e785f04">complete</a>(std::move(dstPath));</div>
<div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; });</div>
<div class="line"><a name="l00434"></a><span class="lineno"> 434</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#a5c4e424f66edeb721a59fd151fed604e">wrap</a>(</div>
<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; [=, <span class="keyword">this</span>, dstPath = std::move(dstPath)](</div>
<div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; boost::system::error_code <span class="keyword">const</span>&amp; ec) <span class="keyword">mutable</span> {</div>
<div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; <span class="keywordflow">if</span> (ec != boost::asio::error::operation_aborted)</div>
<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#aa49e1c3f0afd83dea8b99ad37e785f04">complete</a>(std::move(dstPath));</div>
<div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; });</div>
<div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; </div>
<div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; <span class="keywordflow">if</span> (!wrapper)</div>
<div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#accc0befbd62fead5da3a51dce1993990">onClosureFailed</a>(</div>
<div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; <span class="stringliteral">&quot;failed to wrap closure for operating mode timer&quot;</span>, lock);</div>
<div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#af7644eb39d61a4ce3ad5c26fa8fa34a4">timer_</a>.async_wait(*wrapper);</div>
<div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; }</div>
<div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; {</div>
<div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a0962cbf9e2d4b7a067a85676ad317c1f">process</a>(dstPath);</div>
<div class="line"><a name="l00450"></a><span class="lineno"> 450</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="l00451"></a><span class="lineno"> 451</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a29c53e2203380b6def0818dc887964e2">removeAndProceed</a>(lock);</div>
<div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; }</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; {</div>
<div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#aa603cda3c95e978af655f4eb4b86fe8c">stopping_</a>)</div>
<div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; <span class="keywordflow">return</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; 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="l00461"></a><span class="lineno"> 461</span>&#160; </div>
<div class="line"><a name="l00462"></a><span class="lineno"> 462</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="l00463"></a><span class="lineno"> 463</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a29c53e2203380b6def0818dc887964e2">removeAndProceed</a>(lock);</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="comment">// Process in another thread to not hold up the IO service</span></div>
<div class="line"><a name="l00467"></a><span class="lineno"> 467</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#ae0f54f8ce649d639bf3e2b295347e17aac906d2c5f143cf8a27542897f78e7ee5">jtCLIENT_SHARD</a>, <span class="stringliteral">&quot;ShardArchiveHandler&quot;</span>, *wrapper);</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="keywordtype">void</span></div>
<div class="line"><a name="l00471"></a><span class="lineno"><a class="line" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a0962cbf9e2d4b7a067a85676ad317c1f"> 471</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="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/types/integer.html">std::uint32_t</a> shardIndex;</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; <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="l00476"></a><span class="lineno"> 476</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="l00477"></a><span class="lineno"> 477</span>&#160; }</div>
<div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; </div>
<div class="line"><a name="l00479"></a><span class="lineno"> 479</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="l00480"></a><span class="lineno"> 480</span>&#160; <span class="keywordflow">try</span></div>
<div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; {</div>
<div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; <span class="comment">// Extract the downloaded archive</span></div>
<div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; <a class="code" href="namespaceripple.html#a7f1e5ab90444ff67cddc760563d127b1">extractTarLz4</a>(dstPath, dstPath.parent_path());</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="comment">// The extracted root directory name must match the shard index</span></div>
<div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; <span class="keywordflow">if</span> (!is_directory(shardDir))</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; 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="l00489"></a><span class="lineno"> 489</span>&#160; &lt;&lt; <span class="stringliteral">&quot; mismatches archive shard directory&quot;</span>;</div>
<div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; }</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="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="l00494"></a><span class="lineno"> 494</span>&#160; {</div>
<div class="line"><a name="l00495"></a><span class="lineno"> 495</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="l00496"></a><span class="lineno"> 496</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; }</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; <span class="comment">// Import the shard into the shard store</span></div>
<div class="line"><a name="l00500"></a><span class="lineno"> 500</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="l00501"></a><span class="lineno"> 501</span>&#160; {</div>
<div class="line"><a name="l00502"></a><span class="lineno"> 502</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="l00503"></a><span class="lineno"> 503</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; }</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#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="l00507"></a><span class="lineno"> 507</span>&#160;}</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;<span class="keywordtype">void</span></div>
<div class="line"><a name="l00510"></a><span class="lineno"><a class="line" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a96be731243ad4013480bcc9e56502924"> 510</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="l00511"></a><span class="lineno"> 511</span>&#160;{</div>
<div class="line"><a name="l00512"></a><span class="lineno"> 512</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="l00513"></a><span class="lineno"> 513</span>&#160; </div>
<div class="line"><a name="l00514"></a><span class="lineno"> 514</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="l00515"></a><span class="lineno"> 515</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="l00516"></a><span class="lineno"> 516</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#ab84c25aafda27b95933b5c1cbc68f0dd">archives_</a>.erase(shardIndex);</div>
<div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; </div>
<div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; <a class="code" href="namespaceripple.html#a7a3b3ad3c32efd30c4610177b011638e">deleteFromArchiveDB</a>(*<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a4c72dbc6be97c8acfd0883464d8f3bb8">sqlDB_</a>, shardIndex);</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="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="l00521"></a><span class="lineno"> 521</span>&#160; <span class="keywordflow">try</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; remove_all(dstDir);</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="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="l00526"></a><span class="lineno"> 526</span>&#160; {</div>
<div class="line"><a name="l00527"></a><span class="lineno"> 527</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="l00528"></a><span class="lineno"> 528</span>&#160; }</div>
<div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160;}</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;<span class="keywordtype">void</span></div>
<div class="line"><a name="l00532"></a><span class="lineno"><a class="line" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a7d5cfda0a96ee124cdf366b2018c5d33"> 532</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="l00533"></a><span class="lineno"> 533</span>&#160;{</div>
<div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#af7644eb39d61a4ce3ad5c26fa8fa34a4">timer_</a>.cancel();</div>
<div class="line"><a name="l00535"></a><span class="lineno"> 535</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="l00536"></a><span class="lineno"> 536</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="l00537"></a><span class="lineno"> 537</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#ab84c25aafda27b95933b5c1cbc68f0dd">archives_</a>.clear();</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; <a class="code" href="namespaceripple.html#aa75536690380592aa104ab1f9df0d1a1">dropArchiveDB</a>(*<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a4c72dbc6be97c8acfd0883464d8f3bb8">sqlDB_</a>);</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; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a4c72dbc6be97c8acfd0883464d8f3bb8">sqlDB_</a>.reset();</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; <span class="comment">// Remove temp root download directory</span></div>
<div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; <span class="keywordflow">try</span></div>
<div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; {</div>
<div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; remove_all(<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a3ff9ae0459edf9d27608ecce2dbf7e66">downloadDir_</a>);</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; <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="l00549"></a><span class="lineno"> 549</span>&#160; {</div>
<div class="line"><a name="l00550"></a><span class="lineno"> 550</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="l00551"></a><span class="lineno"> 551</span>&#160; &lt;&lt; <span class="stringliteral">&quot; in function: &quot;</span> &lt;&lt; __func__;</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; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a34d3fabb2e65c099599876069e7e7b0e">downloader_</a>.reset();</div>
<div class="line"><a name="l00555"></a><span class="lineno"> 555</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="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="keywordtype">bool</span></div>
<div class="line"><a name="l00559"></a><span class="lineno"><a class="line" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#accc0befbd62fead5da3a51dce1993990"> 559</a></span>&#160;<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#accc0befbd62fead5da3a51dce1993990">ShardArchiveHandler::onClosureFailed</a>(</div>
<div class="line"><a name="l00560"></a><span class="lineno"> 560</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="l00561"></a><span class="lineno"> 561</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="l00562"></a><span class="lineno"> 562</span>&#160;{</div>
<div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#aa603cda3c95e978af655f4eb4b86fe8c">stopping_</a>)</div>
<div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</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; 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="l00567"></a><span class="lineno"> 567</span>&#160; </div>
<div class="line"><a name="l00568"></a><span class="lineno"> 568</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="l00569"></a><span class="lineno"> 569</span>&#160;}</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;<span class="keywordtype">bool</span></div>
<div class="line"><a name="l00572"></a><span class="lineno"><a class="line" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a29c53e2203380b6def0818dc887964e2"> 572</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="l00573"></a><span class="lineno"> 573</span>&#160;{</div>
<div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a96be731243ad4013480bcc9e56502924">remove</a>(lock);</div>
<div class="line"><a name="l00575"></a><span class="lineno"> 575</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="l00576"></a><span class="lineno"> 576</span>&#160;}</div>
<div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; </div>
<div class="line"><a name="l00578"></a><span class="lineno"><a class="line" href="classripple_1_1RPC_1_1RecoveryHandler.html#a13c5f2c42cd06e623f17ea4997e7a509"> 578</a></span>&#160;<a class="code" href="classripple_1_1RPC_1_1RecoveryHandler.html#a13c5f2c42cd06e623f17ea4997e7a509">RecoveryHandler::RecoveryHandler</a>(<a class="code" href="classripple_1_1Application.html">Application</a>&amp; app) : <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html">ShardArchiveHandler</a>(app)</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;}</div>
<div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; </div>
<div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160;} <span class="comment">// namespace RPC</span></div>
<div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160;} <span class="comment">// namespace ripple</span></div>
<div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; <span class="keywordflow">if</span> (!wrapper)</div>
<div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#accc0befbd62fead5da3a51dce1993990">onClosureFailed</a>(</div>
<div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; <span class="stringliteral">&quot;failed to wrap closure for operating mode timer&quot;</span>,</div>
<div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; lock);</div>
<div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#af7644eb39d61a4ce3ad5c26fa8fa34a4">timer_</a>.async_wait(*wrapper);</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="keywordflow">else</span></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; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a0962cbf9e2d4b7a067a85676ad317c1f">process</a>(dstPath);</div>
<div class="line"><a name="l00451"></a><span class="lineno"> 451</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="l00452"></a><span class="lineno"> 452</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a29c53e2203380b6def0818dc887964e2">removeAndProceed</a>(lock);</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; </div>
<div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; <span class="keywordflow">if</span> (!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">if</span> (<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#aa603cda3c95e978af655f4eb4b86fe8c">stopping_</a>)</div>
<div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; </div>
<div class="line"><a name="l00461"></a><span class="lineno"> 461</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="l00462"></a><span class="lineno"> 462</span>&#160; </div>
<div class="line"><a name="l00463"></a><span class="lineno"> 463</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="l00464"></a><span class="lineno"> 464</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a29c53e2203380b6def0818dc887964e2">removeAndProceed</a>(lock);</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; </div>
<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; <span class="comment">// Process in another thread to not hold up the IO service</span></div>
<div class="line"><a name="l00468"></a><span class="lineno"> 468</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#ae0f54f8ce649d639bf3e2b295347e17aac906d2c5f143cf8a27542897f78e7ee5">jtCLIENT_SHARD</a>, <span class="stringliteral">&quot;ShardArchiveHandler&quot;</span>, *wrapper);</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; </div>
<div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160;<span class="keywordtype">void</span></div>
<div class="line"><a name="l00472"></a><span class="lineno"><a class="line" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a0962cbf9e2d4b7a067a85676ad317c1f"> 472</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="l00473"></a><span class="lineno"> 473</span>&#160;{</div>
<div class="line"><a name="l00474"></a><span class="lineno"> 474</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="l00475"></a><span class="lineno"> 475</span>&#160; {</div>
<div class="line"><a name="l00476"></a><span class="lineno"> 476</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="l00477"></a><span class="lineno"> 477</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="l00478"></a><span class="lineno"> 478</span>&#160; }</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; <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="l00481"></a><span class="lineno"> 481</span>&#160; <span class="keywordflow">try</span></div>
<div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; {</div>
<div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; <span class="comment">// Extract the downloaded archive</span></div>
<div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <a class="code" href="namespaceripple.html#a7f1e5ab90444ff67cddc760563d127b1">extractTarLz4</a>(dstPath, dstPath.parent_path());</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; <span class="comment">// The extracted root directory name must match the shard index</span></div>
<div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; <span class="keywordflow">if</span> (!is_directory(shardDir))</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; 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="l00490"></a><span class="lineno"> 490</span>&#160; &lt;&lt; <span class="stringliteral">&quot; mismatches archive shard directory&quot;</span>;</div>
<div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; <span class="keywordflow">return</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; }</div>
<div class="line"><a name="l00494"></a><span class="lineno"> 494</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="l00495"></a><span class="lineno"> 495</span>&#160; {</div>
<div class="line"><a name="l00496"></a><span class="lineno"> 496</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="l00497"></a><span class="lineno"> 497</span>&#160; <span class="keywordflow">return</span>;</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; </div>
<div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; <span class="comment">// Import the shard into the shard store</span></div>
<div class="line"><a name="l00501"></a><span class="lineno"> 501</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="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;Importing shard &quot;</span> &lt;&lt; shardIndex;</div>
<div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; <span class="keywordflow">return</span>;</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; </div>
<div class="line"><a name="l00507"></a><span class="lineno"> 507</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="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="keywordtype">void</span></div>
<div class="line"><a name="l00511"></a><span class="lineno"><a class="line" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a96be731243ad4013480bcc9e56502924"> 511</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="l00512"></a><span class="lineno"> 512</span>&#160;{</div>
<div class="line"><a name="l00513"></a><span class="lineno"> 513</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="l00514"></a><span class="lineno"> 514</span>&#160; </div>
<div class="line"><a name="l00515"></a><span class="lineno"> 515</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="l00516"></a><span class="lineno"> 516</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="l00517"></a><span class="lineno"> 517</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#ab84c25aafda27b95933b5c1cbc68f0dd">archives_</a>.erase(shardIndex);</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; <a class="code" href="namespaceripple.html#a7a3b3ad3c32efd30c4610177b011638e">deleteFromArchiveDB</a>(*<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a4c72dbc6be97c8acfd0883464d8f3bb8">sqlDB_</a>, shardIndex);</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; <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="l00522"></a><span class="lineno"> 522</span>&#160; <span class="keywordflow">try</span></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; remove_all(dstDir);</div>
<div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; }</div>
<div class="line"><a name="l00526"></a><span class="lineno"> 526</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="l00527"></a><span class="lineno"> 527</span>&#160; {</div>
<div class="line"><a name="l00528"></a><span class="lineno"> 528</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="l00529"></a><span class="lineno"> 529</span>&#160; }</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; </div>
<div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160;<span class="keywordtype">void</span></div>
<div class="line"><a name="l00533"></a><span class="lineno"><a class="line" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a7d5cfda0a96ee124cdf366b2018c5d33"> 533</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="l00534"></a><span class="lineno"> 534</span>&#160;{</div>
<div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#af7644eb39d61a4ce3ad5c26fa8fa34a4">timer_</a>.cancel();</div>
<div class="line"><a name="l00536"></a><span class="lineno"> 536</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="l00537"></a><span class="lineno"> 537</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="l00538"></a><span class="lineno"> 538</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#ab84c25aafda27b95933b5c1cbc68f0dd">archives_</a>.clear();</div>
<div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; </div>
<div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; <a class="code" href="namespaceripple.html#aa75536690380592aa104ab1f9df0d1a1">dropArchiveDB</a>(*<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a4c72dbc6be97c8acfd0883464d8f3bb8">sqlDB_</a>);</div>
<div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; </div>
<div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a4c72dbc6be97c8acfd0883464d8f3bb8">sqlDB_</a>.reset();</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; <span class="comment">// Remove temp root download directory</span></div>
<div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; <span class="keywordflow">try</span></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; remove_all(<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a3ff9ae0459edf9d27608ecce2dbf7e66">downloadDir_</a>);</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="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="l00550"></a><span class="lineno"> 550</span>&#160; {</div>
<div class="line"><a name="l00551"></a><span class="lineno"> 551</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="l00552"></a><span class="lineno"> 552</span>&#160; &lt;&lt; <span class="stringliteral">&quot; in function: &quot;</span> &lt;&lt; __func__;</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; </div>
<div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a34d3fabb2e65c099599876069e7e7b0e">downloader_</a>.reset();</div>
<div class="line"><a name="l00556"></a><span class="lineno"> 556</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="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;<span class="keywordtype">bool</span></div>
<div class="line"><a name="l00560"></a><span class="lineno"><a class="line" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#accc0befbd62fead5da3a51dce1993990"> 560</a></span>&#160;<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#accc0befbd62fead5da3a51dce1993990">ShardArchiveHandler::onClosureFailed</a>(</div>
<div class="line"><a name="l00561"></a><span class="lineno"> 561</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="l00562"></a><span class="lineno"> 562</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="l00563"></a><span class="lineno"> 563</span>&#160;{</div>
<div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#aa603cda3c95e978af655f4eb4b86fe8c">stopping_</a>)</div>
<div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; </div>
<div class="line"><a name="l00567"></a><span class="lineno"> 567</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="l00568"></a><span class="lineno"> 568</span>&#160; </div>
<div class="line"><a name="l00569"></a><span class="lineno"> 569</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="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;<span class="keywordtype">bool</span></div>
<div class="line"><a name="l00573"></a><span class="lineno"><a class="line" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a29c53e2203380b6def0818dc887964e2"> 573</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="l00574"></a><span class="lineno"> 574</span>&#160;{</div>
<div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a96be731243ad4013480bcc9e56502924">remove</a>(lock);</div>
<div class="line"><a name="l00576"></a><span class="lineno"> 576</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="l00577"></a><span class="lineno"> 577</span>&#160;}</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"><a class="line" href="classripple_1_1RPC_1_1RecoveryHandler.html#a13c5f2c42cd06e623f17ea4997e7a509"> 579</a></span>&#160;<a class="code" href="classripple_1_1RPC_1_1RecoveryHandler.html#a13c5f2c42cd06e623f17ea4997e7a509">RecoveryHandler::RecoveryHandler</a>(<a class="code" href="classripple_1_1Application.html">Application</a>&amp; app) : <a class="code" href="classripple_1_1RPC_1_1ShardArchiveHandler.html">ShardArchiveHandler</a>(app)</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;}</div>
<div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; </div>
<div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160;} <span class="comment">// namespace RPC</span></div>
<div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160;} <span class="comment">// namespace ripple</span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="aclassripple_1_1NodeStore_1_1Database_html_a9d32ff3a7c28f6a852155ef954f7f59c"><div class="ttname"><a href="classripple_1_1NodeStore_1_1Database.html#a9d32ff3a7c28f6a852155ef954f7f59c">ripple::NodeStore::Database::lastLedgerSeq</a></div><div class="ttdeci">std::uint32_t lastLedgerSeq(std::uint32_t shardIndex) const noexcept</div><div class="ttdoc">Calculates the last ledger sequence for a given shard index.</div><div class="ttdef"><b>Definition:</b> <a href="Database_8h_source.html#l00271">Database.h:271</a></div></div>
<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#l00115">Application.h:115</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#l00038">ShardArchiveHandler.cpp:38</a></div></div>
<div class="ttc" id="aclassripple_1_1RPC_1_1ShardArchiveHandler_html_a34d3fabb2e65c099599876069e7e7b0e"><div class="ttname"><a href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a34d3fabb2e65c099599876069e7e7b0e">ripple::RPC::ShardArchiveHandler::downloader_</a></div><div class="ttdeci">std::shared_ptr&lt; DatabaseDownloader &gt; downloader_</div><div class="ttdef"><b>Definition:</b> <a href="ShardArchiveHandler_8h_source.html#l00139">ShardArchiveHandler.h:139</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#l00147">ShardArchiveHandler.h:147</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#l00510">ShardArchiveHandler.cpp:510</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#l00511">ShardArchiveHandler.cpp:511</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#l00150">ShardArchiveHandler.h:150</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#l00151">ShardArchiveHandler.h:151</a></div></div>
<div class="ttc" id="aclassripple_1_1RPC_1_1ShardArchiveHandler_html_abfd788059fe248e08426657dbaef7f57"><div class="ttname"><a href="classripple_1_1RPC_1_1ShardArchiveHandler.html#abfd788059fe248e08426657dbaef7f57">ripple::RPC::ShardArchiveHandler::stop</a></div><div class="ttdeci">void stop()</div><div class="ttdef"><b>Definition:</b> <a href="ShardArchiveHandler_8cpp_source.html#l00176">ShardArchiveHandler.cpp:176</a></div></div>
<div class="ttc" id="aclassripple_1_1RPC_1_1ShardArchiveHandler_html_a736e1259883482445a85ba9fa1b160db"><div class="ttname"><a href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a736e1259883482445a85ba9fa1b160db">ripple::RPC::ShardArchiveHandler::makeShardArchiveHandler</a></div><div class="ttdeci">static std::unique_ptr&lt; ShardArchiveHandler &gt; makeShardArchiveHandler(Application &amp;app)</div><div class="ttdef"><b>Definition:</b> <a href="ShardArchiveHandler_8cpp_source.html#l00049">ShardArchiveHandler.cpp:49</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#l00572">ShardArchiveHandler.cpp:572</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#l00573">ShardArchiveHandler.cpp:573</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#l00235">ShardArchiveHandler.cpp:235</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>
<div class="ttc" id="aclassripple_1_1RPC_1_1ShardArchiveHandler_html_a497de5fc940b275d7903ca8c5b6fe4d2"><div class="ttname"><a href="classripple_1_1RPC_1_1ShardArchiveHandler.html#a497de5fc940b275d7903ca8c5b6fe4d2">ripple::RPC::ShardArchiveHandler::add</a></div><div class="ttdeci">bool add(std::uint32_t shardIndex, std::pair&lt; parsedURL, std::string &gt; &amp;&amp;url)</div><div class="ttdef"><b>Definition:</b> <a href="ShardArchiveHandler_8cpp_source.html#l00199">ShardArchiveHandler.cpp:199</a></div></div>
<div class="ttc" id="astructripple_1_1parsedURL_html"><div class="ttname"><a href="structripple_1_1parsedURL.html">ripple::parsedURL</a></div><div class="ttdef"><b>Definition:</b> <a href="StringUtilities_8h_source.html#l00100">StringUtilities.h:100</a></div></div>
<div class="ttc" id="astructripple_1_1parsedURL_html"><div class="ttname"><a href="structripple_1_1parsedURL.html">ripple::parsedURL</a></div><div class="ttdef"><b>Definition:</b> <a href="StringUtilities_8h_source.html#l00116">StringUtilities.h:116</a></div></div>
<div class="ttc" id="apair_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/utility/pair.html">std::pair</a></div></div>
<div class="ttc" id="aclassripple_1_1RPC_1_1ShardVerificationScheduler_html_a33b34d5ee1010717b41810e3413323f1"><div class="ttname"><a href="classripple_1_1RPC_1_1ShardVerificationScheduler.html#a33b34d5ee1010717b41810e3413323f1">ripple::RPC::ShardVerificationScheduler::reset</a></div><div class="ttdeci">void reset()</div><div class="ttdef"><b>Definition:</b> <a href="ShardVerificationScheduler_8cpp_source.html#l00062">ShardVerificationScheduler.cpp:62</a></div></div>
<div class="ttc" id="aclassripple_1_1LedgerMaster_html_af3eaa659ab184feed8b939836efeebcf"><div class="ttname"><a href="classripple_1_1LedgerMaster.html#af3eaa659ab184feed8b939836efeebcf">ripple::LedgerMaster::getValidLedgerIndex</a></div><div class="ttdeci">LedgerIndex getValidLedgerIndex()</div><div class="ttdef"><b>Definition:</b> <a href="LedgerMaster_8cpp_source.html#l00213">LedgerMaster.cpp:213</a></div></div>
@@ -677,22 +678,22 @@ $(function() {
<div class="ttc" id="astructripple_1_1ConfigSection_html_abab87cd32670610e64b43124c381775c"><div class="ttname"><a href="structripple_1_1ConfigSection.html#abab87cd32670610e64b43124c381775c">ripple::ConfigSection::shardDatabase</a></div><div class="ttdeci">static std::string shardDatabase()</div><div class="ttdef"><b>Definition:</b> <a href="ConfigSections_8h_source.html#l00038">ConfigSections.h:38</a></div></div>
<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_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#l00532">ShardArchiveHandler.cpp:532</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#l00533">ShardArchiveHandler.cpp:533</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_1RPC_1_1RecoveryHandler_html_a13c5f2c42cd06e623f17ea4997e7a509"><div class="ttname"><a href="classripple_1_1RPC_1_1RecoveryHandler.html#a13c5f2c42cd06e623f17ea4997e7a509">ripple::RPC::RecoveryHandler::RecoveryHandler</a></div><div class="ttdeci">RecoveryHandler(Application &amp;app)</div><div class="ttdef"><b>Definition:</b> <a href="ShardArchiveHandler_8cpp_source.html#l00578">ShardArchiveHandler.cpp:578</a></div></div>
<div class="ttc" id="aclassripple_1_1RPC_1_1RecoveryHandler_html_a13c5f2c42cd06e623f17ea4997e7a509"><div class="ttname"><a href="classripple_1_1RPC_1_1RecoveryHandler.html#a13c5f2c42cd06e623f17ea4997e7a509">ripple::RPC::RecoveryHandler::RecoveryHandler</a></div><div class="ttdeci">RecoveryHandler(Application &amp;app)</div><div class="ttdef"><b>Definition:</b> <a href="ShardArchiveHandler_8cpp_source.html#l00579">ShardArchiveHandler.cpp:579</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#l00131">ShardArchiveHandler.cpp:131</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#l00559">ShardArchiveHandler.cpp:559</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#l00560">ShardArchiveHandler.cpp:560</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_1LedgerMaster_html_a4c6df242c0ea3409a06e44436495235f"><div class="ttname"><a href="classripple_1_1LedgerMaster.html#a4c6df242c0ea3409a06e44436495235f">ripple::LedgerMaster::walkHashBySeq</a></div><div class="ttdeci">std::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#l01750">LedgerMaster.cpp:1750</a></div></div>
<div class="ttc" id="aclassripple_1_1RPC_1_1ShardArchiveHandler_html_aa603cda3c95e978af655f4eb4b86fe8c"><div class="ttname"><a href="classripple_1_1RPC_1_1ShardArchiveHandler.html#aa603cda3c95e978af655f4eb4b86fe8c">ripple::RPC::ShardArchiveHandler::stopping_</a></div><div class="ttdeci">std::atomic_bool stopping_</div><div class="ttdef"><b>Definition:</b> <a href="ShardArchiveHandler_8h_source.html#l00138">ShardArchiveHandler.h:138</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="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#l00148">ShardArchiveHandler.h:148</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#l00287">ShardArchiveHandler.cpp:287</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#l00471">ShardArchiveHandler.cpp:471</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#l00472">ShardArchiveHandler.cpp:472</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#l00068">Config.h:68</a></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#l00069">Config.h:69</a></div></div>
<div class="ttc" id="anamespaceripple_html_a7a3b3ad3c32efd30c4610177b011638e"><div class="ttname"><a href="namespaceripple.html#a7a3b3ad3c32efd30c4610177b011638e">ripple::deleteFromArchiveDB</a></div><div class="ttdeci">void deleteFromArchiveDB(DatabaseCon &amp;db, std::uint32_t shardIndex)</div><div class="ttdoc">deleteFromArchiveDB Deletes an entry from the shard archive database.</div><div class="ttdef"><b>Definition:</b> <a href="ShardArchive_8cpp_source.html#l00056">ShardArchive.cpp:56</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>
<div class="ttc" id="ato_string_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/string/basic_string/to_string.html">std::to_string</a></div><div class="ttdeci">T to_string(T... args)</div></div>