diff --git a/Application_8cpp_source.html b/Application_8cpp_source.html index c43125b889..44b1ff6128 100644 --- a/Application_8cpp_source.html +++ b/Application_8cpp_source.html @@ -301,2162 +301,2156 @@ $(document).ready(function() { init_codefold(0); });
203
204 boost::asio::signal_set m_signals;
205
-
206 // Once we get C++20, we could use `std::atomic_flag` for `isTimeToStop`
-
207 // and eliminate the need for the condition variable and the mutex.
-
208 std::condition_variable stoppingCondition_;
-
209 mutable std::mutex stoppingMutex_;
-
210 std::atomic<bool> isTimeToStop = false;
+
206 std::atomic_flag isTimeToStop;
+
207
+
208 std::atomic<bool> checkSigs_;
+
209
+
210 std::unique_ptr<ResolverAsio> m_resolver;
211
-
212 std::atomic<bool> checkSigs_;
+
212 io_latency_sampler m_io_latency_sampler;
213
-
214 std::unique_ptr<ResolverAsio> m_resolver;
+
214 std::unique_ptr<GRPCServer> grpcServer_;
215
-
216 io_latency_sampler m_io_latency_sampler;
+
216 //--------------------------------------------------------------------------
217
-
218 std::unique_ptr<GRPCServer> grpcServer_;
-
219
-
220 //--------------------------------------------------------------------------
-
221
-
222 static std::size_t
-
-
223 numberOfThreads(Config const& config)
-
224 {
-
225#if XRPL_SINGLE_IO_SERVICE_THREAD
-
226 return 1;
-
227#else
-
228
-
229 if (config.IO_WORKERS > 0)
-
230 return config.IO_WORKERS;
-
231
-
232 auto const cores = std::thread::hardware_concurrency();
-
233
-
234 // Use a single thread when running on under-provisioned systems
-
235 // or if we are configured to use minimal resources.
-
236 if ((cores == 1) || ((config.NODE_SIZE == 0) && (cores == 2)))
-
237 return 1;
-
238
-
239 // Otherwise, prefer six threads.
-
240 return 6;
-
241#endif
-
242 }
+
218 static std::size_t
+
+ +
220 {
+
221#if XRPL_SINGLE_IO_SERVICE_THREAD
+
222 return 1;
+
223#else
+
224
+
225 if (config.IO_WORKERS > 0)
+
226 return config.IO_WORKERS;
+
227
+
228 auto const cores = std::thread::hardware_concurrency();
+
229
+
230 // Use a single thread when running on under-provisioned systems
+
231 // or if we are configured to use minimal resources.
+
232 if ((cores == 1) || ((config.NODE_SIZE == 0) && (cores == 2)))
+
233 return 1;
+
234
+
235 // Otherwise, prefer six threads.
+
236 return 6;
+
237#endif
+
238 }
-
243
-
244 //--------------------------------------------------------------------------
-
245
-
- - - - - -
251 , config_(std::move(config))
-
252 , logs_(std::move(logs))
-
253 , timeKeeper_(std::move(timeKeeper))
- -
255 1 +
-
256 rand_int(
-
257 crypto_prng(),
-
258 std::numeric_limits<std::uint64_t>::max() - 1))
-
259 , m_journal(logs_->journal("Application"))
-
260
-
261 // PerfLog must be started before any other threads are launched.
-
262 , perfLog_(perf::make_PerfLog(
-
263 perf::setup_PerfLog(
-
264 config_->section("perf"),
-
265 config_->CONFIG_DIR),
-
266 *this,
-
267 logs_->journal("PerfLog"),
-
268 [this] { signalStop("PerfLog"); }))
-
269
-
270 , m_txMaster(*this)
+
239
+
240 //--------------------------------------------------------------------------
+
241
+
+ + + + + +
247 , config_(std::move(config))
+
248 , logs_(std::move(logs))
+
249 , timeKeeper_(std::move(timeKeeper))
+ +
251 1 +
+
252 rand_int(
+
253 crypto_prng(),
+
254 std::numeric_limits<std::uint64_t>::max() - 1))
+
255 , m_journal(logs_->journal("Application"))
+
256
+
257 // PerfLog must be started before any other threads are launched.
+
258 , perfLog_(perf::make_PerfLog(
+
259 perf::setup_PerfLog(
+
260 config_->section("perf"),
+
261 config_->CONFIG_DIR),
+
262 *this,
+
263 logs_->journal("PerfLog"),
+
264 [this] { signalStop("PerfLog"); }))
+
265
+
266 , m_txMaster(*this)
+
267
+ +
269 config_->section(SECTION_INSIGHT),
+
270 logs_->journal("Collector")))
271
- -
273 config_->section(SECTION_INSIGHT),
-
274 logs_->journal("Collector")))
-
275
- - - -
279 return 1;
-
280
-
281 if (config->WORKERS)
-
282 return config->WORKERS;
-
283
-
284 auto count =
-
285 static_cast<int>(std::thread::hardware_concurrency());
-
286
-
287 // Be more aggressive about the number of threads to use
-
288 // for the job queue if the server is configured as
-
289 // "large" or "huge" if there are enough cores.
-
290 if (config->NODE_SIZE >= 4 && count >= 16)
-
291 count = 6 + std::min(count, 8);
-
292 else if (config->NODE_SIZE >= 3 && count >= 8)
-
293 count = 4 + std::min(count, 6);
-
294 else
-
295 count = 2 + std::min(count, 4);
-
296
-
297 return count;
-
298 }(config_),
-
299 m_collectorManager->group("jobq"),
-
300 logs_->journal("JobQueue"),
-
301 *logs_,
-
302 *perfLog_))
-
303
- -
305
- -
307 *this,
- -
309 logs_->journal("SHAMapStore")))
-
310
- -
312 "NodeCache",
-
313 16384,
- -
315 stopwatch(),
-
316 logs_->journal("TaggedCache"))
-
317
-
318 , cachedSLEs_(
-
319 "Cached SLEs",
-
320 0,
- -
322 stopwatch(),
-
323 logs_->journal("CachedSLEs"))
-
324
- + + + +
275 return 1;
+
276
+
277 if (config->WORKERS)
+
278 return config->WORKERS;
+
279
+
280 auto count =
+
281 static_cast<int>(std::thread::hardware_concurrency());
+
282
+
283 // Be more aggressive about the number of threads to use
+
284 // for the job queue if the server is configured as
+
285 // "large" or "huge" if there are enough cores.
+
286 if (config->NODE_SIZE >= 4 && count >= 16)
+
287 count = 6 + std::min(count, 8);
+
288 else if (config->NODE_SIZE >= 3 && count >= 8)
+
289 count = 4 + std::min(count, 6);
+
290 else
+
291 count = 2 + std::min(count, 4);
+
292
+
293 return count;
+
294 }(config_),
+
295 m_collectorManager->group("jobq"),
+
296 logs_->journal("JobQueue"),
+
297 *logs_,
+
298 *perfLog_))
+
299
+ +
301
+ +
303 *this,
+ +
305 logs_->journal("SHAMapStore")))
+
306
+ +
308 "NodeCache",
+
309 16384,
+ +
311 stopwatch(),
+
312 logs_->journal("TaggedCache"))
+
313
+
314 , cachedSLEs_(
+
315 "Cached SLEs",
+
316 0,
+ +
318 stopwatch(),
+
319 logs_->journal("CachedSLEs"))
+
320
+ +
322
+ +
324 m_collectorManager->collector(),
+
325 logs_->journal("Resource")))
326
- -
328 m_collectorManager->collector(),
-
329 logs_->journal("Resource")))
-
330
-
331 , m_nodeStore(m_shaMapStore->makeNodeStore(
-
332 config_->PREFETCH_WORKERS > 0 ? config_->PREFETCH_WORKERS : 4))
+
327 , m_nodeStore(m_shaMapStore->makeNodeStore(
+
328 config_->PREFETCH_WORKERS > 0 ? config_->PREFETCH_WORKERS : 4))
+
329
+ +
331
+
332 , m_orderBookDB(*this)
333
- -
335
-
336 , m_orderBookDB(*this)
-
337
-
338 , m_pathRequests(std::make_unique<PathRequests>(
-
339 *this,
-
340 logs_->journal("PathRequest"),
-
341 m_collectorManager->collector()))
-
342
-
343 , m_ledgerMaster(std::make_unique<LedgerMaster>(
-
344 *this,
-
345 stopwatch(),
-
346 m_collectorManager->collector(),
-
347 logs_->journal("LedgerMaster")))
-
348
- -
350 make_LedgerCleaner(*this, logs_->journal("LedgerCleaner")))
-
351
-
352 // VFALCO NOTE must come before NetworkOPs to prevent a crash due
-
353 // to dependencies in the destructor.
-
354 //
- -
356 *this,
-
357 stopwatch(),
-
358 m_collectorManager->collector()))
-
359
- -
361 *this,
-
362 m_collectorManager->collector(),
-
363 [this](std::shared_ptr<SHAMap> const& set, bool fromAcquire) {
-
364 gotTXSet(set, fromAcquire);
-
365 }))
-
366
- -
368 *this,
- -
370 make_PeerSetBuilder(*this)))
-
371
- -
373 "AcceptedLedger",
-
374 4,
- -
376 stopwatch(),
-
377 logs_->journal("TaggedCache"))
-
378
- -
380 *this,
-
381 stopwatch(),
-
382 config_->standalone(),
-
383 config_->NETWORK_QUORUM,
-
384 config_->START_VALID,
-
385 *m_jobQueue,
- - - -
389 logs_->journal("NetworkOPs"),
-
390 m_collectorManager->collector()))
-
391
-
392 , cluster_(std::make_unique<Cluster>(logs_->journal("Overlay")))
-
393
- -
395 logs_->journal("PeerReservationTable")))
-
396
- -
398 std::make_unique<ManifestCache>(logs_->journal("ManifestCache")))
-
399
- -
401 std::make_unique<ManifestCache>(logs_->journal("ManifestCache")))
-
402
- - - - -
407 config_->legacy("database_path"),
-
408 logs_->journal("ValidatorList"),
-
409 config_->VALIDATION_QUORUM))
-
410
- -
412
- -
414 *this,
- -
416 *m_jobQueue,
- - - -
420
-
421 , mFeeTrack(
-
422 std::make_unique<LoadFeeTrack>(logs_->journal("LoadManager")))
+
334 , m_pathRequests(std::make_unique<PathRequests>(
+
335 *this,
+
336 logs_->journal("PathRequest"),
+
337 m_collectorManager->collector()))
+
338
+
339 , m_ledgerMaster(std::make_unique<LedgerMaster>(
+
340 *this,
+
341 stopwatch(),
+
342 m_collectorManager->collector(),
+
343 logs_->journal("LedgerMaster")))
+
344
+ +
346 make_LedgerCleaner(*this, logs_->journal("LedgerCleaner")))
+
347
+
348 // VFALCO NOTE must come before NetworkOPs to prevent a crash due
+
349 // to dependencies in the destructor.
+
350 //
+ +
352 *this,
+
353 stopwatch(),
+
354 m_collectorManager->collector()))
+
355
+ +
357 *this,
+
358 m_collectorManager->collector(),
+
359 [this](std::shared_ptr<SHAMap> const& set, bool fromAcquire) {
+
360 gotTXSet(set, fromAcquire);
+
361 }))
+
362
+ +
364 *this,
+ +
366 make_PeerSetBuilder(*this)))
+
367
+ +
369 "AcceptedLedger",
+
370 4,
+ +
372 stopwatch(),
+
373 logs_->journal("TaggedCache"))
+
374
+ +
376 *this,
+
377 stopwatch(),
+
378 config_->standalone(),
+
379 config_->NETWORK_QUORUM,
+
380 config_->START_VALID,
+
381 *m_jobQueue,
+ + + +
385 logs_->journal("NetworkOPs"),
+
386 m_collectorManager->collector()))
+
387
+
388 , cluster_(std::make_unique<Cluster>(logs_->journal("Overlay")))
+
389
+ +
391 logs_->journal("PeerReservationTable")))
+
392
+ +
394 std::make_unique<ManifestCache>(logs_->journal("ManifestCache")))
+
395
+ +
397 std::make_unique<ManifestCache>(logs_->journal("ManifestCache")))
+
398
+ + + + +
403 config_->legacy("database_path"),
+
404 logs_->journal("ValidatorList"),
+
405 config_->VALIDATION_QUORUM))
+
406
+ +
408
+ +
410 *this,
+ +
412 *m_jobQueue,
+ + + +
416
+
417 , mFeeTrack(
+
418 std::make_unique<LoadFeeTrack>(logs_->journal("LoadManager")))
+
419
+ + +
422 stopwatch()))
423
- - -
426 stopwatch()))
-
427
-
428 , mValidations(
-
429 ValidationParms(),
-
430 stopwatch(),
-
431 *this,
-
432 logs_->journal("Validations"))
-
433
-
434 , m_loadManager(make_LoadManager(*this, logs_->journal("LoadManager")))
-
435
-
436 , txQ_(
-
437 std::make_unique<TxQ>(setup_TxQ(*config_), logs_->journal("TxQ")))
+
424 , mValidations(
+
425 ValidationParms(),
+
426 stopwatch(),
+
427 *this,
+
428 logs_->journal("Validations"))
+
429
+
430 , m_loadManager(make_LoadManager(*this, logs_->journal("LoadManager")))
+
431
+
432 , txQ_(
+
433 std::make_unique<TxQ>(setup_TxQ(*config_), logs_->journal("TxQ")))
+
434
+ +
436
+
438
- +
440
- +
441 , checkSigs_(true)
442
- -
444
-
445 , checkSigs_(true)
-
446
-
447 , m_resolver(
-
448 ResolverAsio::New(get_io_context(), logs_->journal("Resolver")))
-
449
- -
451 m_collectorManager->collector()->make_event("ios_latency"),
-
452 logs_->journal("Application"),
- - - -
456 {
- -
458
-
459 add(m_resourceManager.get());
-
460
-
461 //
-
462 // VFALCO - READ THIS!
-
463 //
-
464 // Do not start threads, open sockets, or do any sort of "real work"
-
465 // inside the constructor. Put it in start instead. Or if you must,
-
466 // put it in setup (but everything in setup should be moved to start
-
467 // anyway.
-
468 //
-
469 // The reason is that the unit tests require an Application object to
-
470 // be created. But we don't actually start all the threads, sockets,
-
471 // and services when running the unit tests. Therefore anything which
-
472 // needs to be stopped will not get stopped correctly if it is
-
473 // started in this constructor.
-
474 //
-
475
-
476 add(ledgerCleaner_.get());
-
477 }
+
443 , m_resolver(
+
444 ResolverAsio::New(get_io_context(), logs_->journal("Resolver")))
+
445
+ +
447 m_collectorManager->collector()->make_event("ios_latency"),
+
448 logs_->journal("Application"),
+ + + +
452 {
+ +
454
+
455 add(m_resourceManager.get());
+
456
+
457 //
+
458 // VFALCO - READ THIS!
+
459 //
+
460 // Do not start threads, open sockets, or do any sort of "real work"
+
461 // inside the constructor. Put it in start instead. Or if you must,
+
462 // put it in setup (but everything in setup should be moved to start
+
463 // anyway.
+
464 //
+
465 // The reason is that the unit tests require an Application object to
+
466 // be created. But we don't actually start all the threads, sockets,
+
467 // and services when running the unit tests. Therefore anything which
+
468 // needs to be stopped will not get stopped correctly if it is
+
469 // started in this constructor.
+
470 //
+
471
+
472 add(ledgerCleaner_.get());
+
473 }
-
478
-
479 //--------------------------------------------------------------------------
-
480
-
481 bool
-
482 setup(boost::program_options::variables_map const& cmdline) override;
+
474
+
475 //--------------------------------------------------------------------------
+
476
+
477 bool
+
478 setup(boost::program_options::variables_map const& cmdline) override;
+
479 void
+
480 start(bool withTimers) override;
+
481 void
+
482 run() override;
483 void
-
484 start(bool withTimers) override;
-
485 void
-
486 run() override;
+
484 signalStop(std::string msg) override;
+
485 bool
+
486 checkSigs() const override;
487 void
-
488 signalStop(std::string msg) override;
+
488 checkSigs(bool) override;
489 bool
-
490 checkSigs() const override;
-
491 void
-
492 checkSigs(bool) override;
-
493 bool
-
494 isStopping() const override;
-
495 int
-
496 fdRequired() const override;
-
497
-
498 //--------------------------------------------------------------------------
-
499
- -
-
501 instanceID() const override
-
502 {
-
503 return instanceCookie_;
-
504 }
+
490 isStopping() const override;
+
491 int
+
492 fdRequired() const override;
+
493
+
494 //--------------------------------------------------------------------------
+
495
+ +
+
497 instanceID() const override
+
498 {
+
499 return instanceCookie_;
+
500 }
-
505
-
506 Logs&
-
-
507 logs() override
-
508 {
-
509 return *logs_;
-
510 }
+
501
+
502 Logs&
+
+
503 logs() override
+
504 {
+
505 return *logs_;
+
506 }
-
511
-
512 Config&
-
-
513 config() override
-
514 {
-
515 return *config_;
-
516 }
+
507
+
508 Config&
+
+
509 config() override
+
510 {
+
511 return *config_;
+
512 }
-
517
- -
- -
520 {
-
521 return *m_collectorManager;
-
522 }
+
513
+ +
+ +
516 {
+
517 return *m_collectorManager;
+
518 }
-
523
-
524 Family&
-
-
525 getNodeFamily() override
-
526 {
-
527 return nodeFamily_;
-
528 }
+
519
+
520 Family&
+
+
521 getNodeFamily() override
+
522 {
+
523 return nodeFamily_;
+
524 }
-
529
- -
-
531 timeKeeper() override
-
532 {
-
533 return *timeKeeper_;
-
534 }
+
525
+ +
+
527 timeKeeper() override
+
528 {
+
529 return *timeKeeper_;
+
530 }
-
535
-
536 JobQueue&
-
-
537 getJobQueue() override
-
538 {
-
539 return *m_jobQueue;
-
540 }
+
531
+
532 JobQueue&
+
+
533 getJobQueue() override
+
534 {
+
535 return *m_jobQueue;
+
536 }
+
+
537
+ +
+
539 nodeIdentity() override
+
540 {
+
541 if (nodeIdentity_)
+
542 return *nodeIdentity_;
+
543
+ +
545 "Accessing Application::nodeIdentity() before it is initialized.");
+
546 }
-
541
- -
-
543 nodeIdentity() override
-
544 {
-
545 if (nodeIdentity_)
-
546 return *nodeIdentity_;
547
- -
549 "Accessing Application::nodeIdentity() before it is initialized.");
-
550 }
+ +
+
549 getValidationPublicKey() const override
+
550 {
+
551 if (!validatorKeys_.keys)
+
552 return {};
+
553
+
554 return validatorKeys_.keys->publicKey;
+
555 }
-
551
- -
-
553 getValidationPublicKey() const override
-
554 {
-
555 if (!validatorKeys_.keys)
-
556 return {};
-
557
-
558 return validatorKeys_.keys->publicKey;
-
559 }
+
556
+ +
+
558 getOPs() override
+
559 {
+
560 return *m_networkOPs;
+
561 }
-
560
- -
-
562 getOPs() override
-
563 {
-
564 return *m_networkOPs;
-
565 }
+
562
+
563 virtual ServerHandler&
+
+ +
565 {
+
566 XRPL_ASSERT(
+ +
568 "xrpl::ApplicationImp::getServerHandler : non-null server "
+
569 "handle");
+
570 return *serverHandler_;
+
571 }
-
566
-
567 virtual ServerHandler&
-
- -
569 {
-
570 XRPL_ASSERT(
- -
572 "xrpl::ApplicationImp::getServerHandler : non-null server "
-
573 "handle");
-
574 return *serverHandler_;
-
575 }
+
572
+
573 boost::asio::io_context&
+
+
574 getIOContext() override
+
575 {
+
576 return get_io_context();
+
577 }
-
576
-
577 boost::asio::io_context&
-
-
578 getIOContext() override
-
579 {
-
580 return get_io_context();
-
581 }
+
578
+ +
+
580 getIOLatency() override
+
581 {
+
582 return m_io_latency_sampler.get();
+
583 }
-
582
- -
-
584 getIOLatency() override
-
585 {
-
586 return m_io_latency_sampler.get();
-
587 }
+
584
+ +
+ +
587 {
+
588 return *m_ledgerMaster;
+
589 }
-
588
- -
- -
591 {
-
592 return *m_ledgerMaster;
-
593 }
+
590
+ +
+ +
593 {
+
594 return *ledgerCleaner_;
+
595 }
-
594
- -
- -
597 {
-
598 return *ledgerCleaner_;
-
599 }
+
596
+ +
+ +
599 {
+
600 return *m_ledgerReplayer;
+
601 }
-
600
- -
- -
603 {
-
604 return *m_ledgerReplayer;
-
605 }
+
602
+ +
+ +
605 {
+
606 return *m_inboundLedgers;
+
607 }
-
606
- -
- -
609 {
-
610 return *m_inboundLedgers;
-
611 }
+
608
+ +
+ +
611 {
+
612 return *m_inboundTransactions;
+
613 }
-
612
- -
- -
615 {
-
616 return *m_inboundTransactions;
-
617 }
+
614
+ +
+ +
617 {
+ +
619 }
-
618
- -
- -
621 {
- -
623 }
+
620
+
621 void
+
+
622 gotTXSet(std::shared_ptr<SHAMap> const& set, bool fromAcquire)
+
623 {
+
624 if (set)
+
625 m_networkOPs->mapComplete(set, fromAcquire);
+
626 }
-
624
-
625 void
-
-
626 gotTXSet(std::shared_ptr<SHAMap> const& set, bool fromAcquire)
-
627 {
-
628 if (set)
-
629 m_networkOPs->mapComplete(set, fromAcquire);
-
630 }
+
627
+ +
+ +
630 {
+
631 return m_txMaster;
+
632 }
-
631
- -
- -
634 {
-
635 return m_txMaster;
-
636 }
+
633
+ +
+
635 getPerfLog() override
+
636 {
+
637 return *perfLog_;
+
638 }
-
637
- -
-
639 getPerfLog() override
-
640 {
-
641 return *perfLog_;
-
642 }
+
639
+
640 NodeCache&
+
+ +
642 {
+
643 return m_tempNodeCache;
+
644 }
-
643
-
644 NodeCache&
-
- -
646 {
-
647 return m_tempNodeCache;
-
648 }
+
645
+ +
+
647 getNodeStore() override
+
648 {
+
649 return *m_nodeStore;
+
650 }
-
649
- -
-
651 getNodeStore() override
-
652 {
-
653 return *m_nodeStore;
-
654 }
+
651
+ +
+
653 getMasterMutex() override
+
654 {
+
655 return m_masterMutex;
+
656 }
-
655
- -
-
657 getMasterMutex() override
-
658 {
-
659 return m_masterMutex;
-
660 }
+
657
+ +
+
659 getLoadManager() override
+
660 {
+
661 return *m_loadManager;
+
662 }
-
661
- -
-
663 getLoadManager() override
-
664 {
-
665 return *m_loadManager;
-
666 }
+
663
+ +
+ +
666 {
+
667 return *m_resourceManager;
+
668 }
-
667
- -
- -
670 {
-
671 return *m_resourceManager;
-
672 }
+
669
+ +
+
671 getOrderBookDB() override
+
672 {
+
673 return m_orderBookDB;
+
674 }
-
673
- -
-
675 getOrderBookDB() override
-
676 {
-
677 return m_orderBookDB;
-
678 }
+
675
+ +
+ +
678 {
+
679 return *m_pathRequests;
+
680 }
-
679
- -
- -
682 {
-
683 return *m_pathRequests;
-
684 }
+
681
+ +
+
683 cachedSLEs() override
+
684 {
+
685 return cachedSLEs_;
+
686 }
-
685
- -
-
687 cachedSLEs() override
-
688 {
-
689 return cachedSLEs_;
-
690 }
+
687
+ +
+ +
690 {
+
691 return *m_amendmentTable;
+
692 }
-
691
- -
- -
694 {
-
695 return *m_amendmentTable;
-
696 }
+
693
+ +
+
695 getFeeTrack() override
+
696 {
+
697 return *mFeeTrack;
+
698 }
-
697
- -
-
699 getFeeTrack() override
-
700 {
-
701 return *mFeeTrack;
-
702 }
+
699
+ +
+
701 getHashRouter() override
+
702 {
+
703 return *hashRouter_;
+
704 }
-
703
- -
-
705 getHashRouter() override
-
706 {
-
707 return *hashRouter_;
-
708 }
+
705
+ +
+
707 getValidations() override
+
708 {
+
709 return mValidations;
+
710 }
-
709
- -
-
711 getValidations() override
-
712 {
-
713 return mValidations;
-
714 }
+
711
+ +
+
713 validators() override
+
714 {
+
715 return *validators_;
+
716 }
-
715
- -
-
717 validators() override
-
718 {
-
719 return *validators_;
-
720 }
+
717
+ +
+
719 validatorSites() override
+
720 {
+
721 return *validatorSites_;
+
722 }
-
721
- -
-
723 validatorSites() override
-
724 {
-
725 return *validatorSites_;
-
726 }
+
723
+ +
+ +
726 {
+
727 return *validatorManifests_;
+
728 }
-
727
- -
- -
730 {
-
731 return *validatorManifests_;
-
732 }
+
729
+ +
+ +
732 {
+
733 return *publisherManifests_;
+
734 }
-
733
- -
- -
736 {
-
737 return *publisherManifests_;
-
738 }
+
735
+
736 Cluster&
+
+
737 cluster() override
+
738 {
+
739 return *cluster_;
+
740 }
-
739
-
740 Cluster&
-
-
741 cluster() override
-
742 {
-
743 return *cluster_;
-
744 }
+
741
+ +
+ +
744 {
+
745 return *peerReservations_;
+
746 }
-
745
- -
- -
748 {
-
749 return *peerReservations_;
-
750 }
+
747
+ +
+
749 getSHAMapStore() override
+
750 {
+
751 return *m_shaMapStore;
+
752 }
-
751
- -
-
753 getSHAMapStore() override
-
754 {
-
755 return *m_shaMapStore;
-
756 }
+
753
+ +
+
755 pendingSaves() override
+
756 {
+
757 return pendingSaves_;
+
758 }
-
757
- -
-
759 pendingSaves() override
-
760 {
-
761 return pendingSaves_;
-
762 }
+
759
+ +
+
761 openLedger() override
+
762 {
+
763 return *openLedger_;
+
764 }
-
763
- -
-
765 openLedger() override
-
766 {
-
767 return *openLedger_;
-
768 }
+
765
+
766 OpenLedger const&
+
+
767 openLedger() const override
+
768 {
+
769 return *openLedger_;
+
770 }
-
769
-
770 OpenLedger const&
-
-
771 openLedger() const override
-
772 {
-
773 return *openLedger_;
-
774 }
+
771
+
772 Overlay&
+
+
773 overlay() override
+
774 {
+
775 XRPL_ASSERT(
+
776 overlay_, "xrpl::ApplicationImp::overlay : non-null overlay");
+
777 return *overlay_;
+
778 }
-
775
-
776 Overlay&
-
-
777 overlay() override
-
778 {
-
779 XRPL_ASSERT(
-
780 overlay_, "xrpl::ApplicationImp::overlay : non-null overlay");
-
781 return *overlay_;
-
782 }
+
779
+
780 TxQ&
+
+
781 getTxQ() override
+
782 {
+
783 XRPL_ASSERT(
+
784 txQ_, "xrpl::ApplicationImp::getTxQ : non-null transaction queue");
+
785 return *txQ_;
+
786 }
-
783
-
784 TxQ&
-
-
785 getTxQ() override
-
786 {
-
787 XRPL_ASSERT(
-
788 txQ_, "xrpl::ApplicationImp::getTxQ : non-null transaction queue");
-
789 return *txQ_;
-
790 }
+
787
+ +
+ +
790 {
+
791 XRPL_ASSERT(
+ +
793 "xrpl::ApplicationImp::getRelationalDatabase : non-null "
+
794 "relational database");
+
795 return *mRelationalDatabase;
+
796 }
-
791
- -
- -
794 {
-
795 XRPL_ASSERT(
- -
797 "xrpl::ApplicationImp::getRelationalDatabase : non-null "
-
798 "relational database");
-
799 return *mRelationalDatabase;
-
800 }
+
797
+ +
+
799 getWalletDB() override
+
800 {
+
801 XRPL_ASSERT(
+
802 mWalletDB,
+
803 "xrpl::ApplicationImp::getWalletDB : non-null wallet database");
+
804 return *mWalletDB;
+
805 }
-
801
- -
-
803 getWalletDB() override
-
804 {
-
805 XRPL_ASSERT(
-
806 mWalletDB,
-
807 "xrpl::ApplicationImp::getWalletDB : non-null wallet database");
-
808 return *mWalletDB;
-
809 }
-
-
810
-
811 bool
-
812 serverOkay(std::string& reason) override;
-
813
- -
815 journal(std::string const& name) override;
-
816
-
817 //--------------------------------------------------------------------------
-
818
-
819 bool
-
- -
821 {
-
822 XRPL_ASSERT(
-
823 mWalletDB.get() == nullptr,
-
824 "xrpl::ApplicationImp::initRelationalDatabase : null wallet "
-
825 "database");
-
826
-
827 try
-
828 {
- - +
806
+
807 bool
+
808 serverOkay(std::string& reason) override;
+
809
+ +
811 journal(std::string const& name) override;
+
812
+
813 //--------------------------------------------------------------------------
+
814
+
815 bool
+
+ +
817 {
+
818 XRPL_ASSERT(
+
819 mWalletDB.get() == nullptr,
+
820 "xrpl::ApplicationImp::initRelationalDatabase : null wallet "
+
821 "database");
+
822
+
823 try
+
824 {
+ + +
827
+
828 // wallet database
+ +
830 setup.useGlobalPragma = false;
831
-
832 // wallet database
- -
834 setup.useGlobalPragma = false;
-
835
- -
837 }
-
838 catch (std::exception const& e)
-
839 {
-
840 JLOG(m_journal.fatal())
-
841 << "Failed to initialize SQL databases: " << e.what();
-
842 return false;
-
843 }
-
844
-
845 return true;
-
846 }
+ +
833 }
+
834 catch (std::exception const& e)
+
835 {
+
836 JLOG(m_journal.fatal())
+
837 << "Failed to initialize SQL databases: " << e.what();
+
838 return false;
+
839 }
+
840
+
841 return true;
+
842 }
-
847
-
848 bool
-
- -
850 {
-
851 if (config_->doImport)
-
852 {
-
853 auto j = logs_->journal("NodeObject");
-
854 NodeStore::DummyScheduler dummyScheduler;
- - -
857 megabytes(config_->getValueFor(
- -
859 dummyScheduler,
-
860 0,
- -
862 j);
-
863
-
864 JLOG(j.warn()) << "Starting node import from '" << source->getName()
-
865 << "' to '" << m_nodeStore->getName() << "'.";
-
866
-
867 using namespace std::chrono;
-
868 auto const start = steady_clock::now();
-
869
-
870 m_nodeStore->importDatabase(*source);
-
871
-
872 auto const elapsed =
-
873 duration_cast<seconds>(steady_clock::now() - start);
-
874 JLOG(j.warn()) << "Node import from '" << source->getName()
-
875 << "' took " << elapsed.count() << " seconds.";
-
876 }
-
877
-
878 return true;
-
879 }
+
843
+
844 bool
+
+ +
846 {
+
847 if (config_->doImport)
+
848 {
+
849 auto j = logs_->journal("NodeObject");
+
850 NodeStore::DummyScheduler dummyScheduler;
+ + +
853 megabytes(config_->getValueFor(
+ +
855 dummyScheduler,
+
856 0,
+ +
858 j);
+
859
+
860 JLOG(j.warn()) << "Starting node import from '" << source->getName()
+
861 << "' to '" << m_nodeStore->getName() << "'.";
+
862
+
863 using namespace std::chrono;
+
864 auto const start = steady_clock::now();
+
865
+
866 m_nodeStore->importDatabase(*source);
+
867
+
868 auto const elapsed =
+
869 duration_cast<seconds>(steady_clock::now() - start);
+
870 JLOG(j.warn()) << "Node import from '" << source->getName()
+
871 << "' took " << elapsed.count() << " seconds.";
+
872 }
+
873
+
874 return true;
+
875 }
-
880
-
881 //--------------------------------------------------------------------------
-
882 //
-
883 // PropertyStream
-
884 //
-
885
-
886 void
-
- -
888 {
-
889 }
+
876
+
877 //--------------------------------------------------------------------------
+
878 //
+
879 // PropertyStream
+
880 //
+
881
+
882 void
+
+ +
884 {
+
885 }
-
890
-
891 //--------------------------------------------------------------------------
-
892
-
893 void
-
- -
895 {
-
896 // Only start the timer if waitHandlerCounter_ is not yet joined.
-
897 if (auto optionalCountedHandler = waitHandlerCounter_.wrap(
-
898 [this](boost::system::error_code const& e) {
-
899 if (e.value() == boost::system::errc::success)
-
900 {
-
901 m_jobQueue->addJob(
-
902 jtSWEEP, "sweep", [this]() { doSweep(); });
-
903 }
-
904 // Recover as best we can if an unexpected error occurs.
-
905 if (e.value() != boost::system::errc::success &&
-
906 e.value() != boost::asio::error::operation_aborted)
-
907 {
-
908 // Try again later and hope for the best.
-
909 JLOG(m_journal.error())
-
910 << "Sweep timer got error '" << e.message()
-
911 << "'. Restarting timer.";
-
912 setSweepTimer();
-
913 }
-
914 }))
-
915 {
-
916 using namespace std::chrono;
-
917 sweepTimer_.expires_after(seconds{config_->SWEEP_INTERVAL.value_or(
-
918 config_->getValueFor(SizedItem::sweepInterval))});
-
919 sweepTimer_.async_wait(std::move(*optionalCountedHandler));
-
920 }
-
921 }
+
886
+
887 //--------------------------------------------------------------------------
+
888
+
889 void
+
+ +
891 {
+
892 // Only start the timer if waitHandlerCounter_ is not yet joined.
+
893 if (auto optionalCountedHandler = waitHandlerCounter_.wrap(
+
894 [this](boost::system::error_code const& e) {
+
895 if (e.value() == boost::system::errc::success)
+
896 {
+
897 m_jobQueue->addJob(
+
898 jtSWEEP, "sweep", [this]() { doSweep(); });
+
899 }
+
900 // Recover as best we can if an unexpected error occurs.
+
901 if (e.value() != boost::system::errc::success &&
+
902 e.value() != boost::asio::error::operation_aborted)
+
903 {
+
904 // Try again later and hope for the best.
+
905 JLOG(m_journal.error())
+
906 << "Sweep timer got error '" << e.message()
+
907 << "'. Restarting timer.";
+
908 setSweepTimer();
+
909 }
+
910 }))
+
911 {
+
912 using namespace std::chrono;
+
913 sweepTimer_.expires_after(seconds{config_->SWEEP_INTERVAL.value_or(
+
914 config_->getValueFor(SizedItem::sweepInterval))});
+
915 sweepTimer_.async_wait(std::move(*optionalCountedHandler));
+
916 }
+
917 }
-
922
-
923 void
-
- -
925 {
-
926 // Only start the timer if waitHandlerCounter_ is not yet joined.
-
927 if (auto optionalCountedHandler = waitHandlerCounter_.wrap(
-
928 [this](boost::system::error_code const& e) {
-
929 if (e.value() == boost::system::errc::success)
-
930 {
-
931 crypto_prng().mix_entropy();
-
932 setEntropyTimer();
-
933 }
-
934 // Recover as best we can if an unexpected error occurs.
-
935 if (e.value() != boost::system::errc::success &&
-
936 e.value() != boost::asio::error::operation_aborted)
-
937 {
-
938 // Try again later and hope for the best.
-
939 JLOG(m_journal.error())
-
940 << "Entropy timer got error '" << e.message()
-
941 << "'. Restarting timer.";
-
942 setEntropyTimer();
-
943 }
-
944 }))
-
945 {
-
946 using namespace std::chrono_literals;
-
947 entropyTimer_.expires_after(5min);
-
948 entropyTimer_.async_wait(std::move(*optionalCountedHandler));
-
949 }
-
950 }
+
918
+
919 void
+
+ +
921 {
+
922 // Only start the timer if waitHandlerCounter_ is not yet joined.
+
923 if (auto optionalCountedHandler = waitHandlerCounter_.wrap(
+
924 [this](boost::system::error_code const& e) {
+
925 if (e.value() == boost::system::errc::success)
+
926 {
+
927 crypto_prng().mix_entropy();
+
928 setEntropyTimer();
+
929 }
+
930 // Recover as best we can if an unexpected error occurs.
+
931 if (e.value() != boost::system::errc::success &&
+
932 e.value() != boost::asio::error::operation_aborted)
+
933 {
+
934 // Try again later and hope for the best.
+
935 JLOG(m_journal.error())
+
936 << "Entropy timer got error '" << e.message()
+
937 << "'. Restarting timer.";
+
938 setEntropyTimer();
+
939 }
+
940 }))
+
941 {
+
942 using namespace std::chrono_literals;
+
943 entropyTimer_.expires_after(5min);
+
944 entropyTimer_.async_wait(std::move(*optionalCountedHandler));
+
945 }
+
946 }
-
951
-
952 void
-
- -
954 {
-
955 if (!config_->standalone() &&
-
956 !getRelationalDatabase().transactionDbHasSpace(*config_))
-
957 {
-
958 signalStop("Out of transaction DB space");
-
959 }
+
947
+
948 void
+
+ +
950 {
+
951 if (!config_->standalone() &&
+
952 !getRelationalDatabase().transactionDbHasSpace(*config_))
+
953 {
+
954 signalStop("Out of transaction DB space");
+
955 }
+
956
+
957 // VFALCO NOTE Does the order of calls matter?
+
958 // VFALCO TODO fix the dependency inversion using an observer,
+
959 // have listeners register for "onSweep ()" notification.
960
-
961 // VFALCO NOTE Does the order of calls matter?
-
962 // VFALCO TODO fix the dependency inversion using an observer,
-
963 // have listeners register for "onSweep ()" notification.
+
961 {
+
962 std::shared_ptr<FullBelowCache const> const fullBelowCache =
+
963 nodeFamily_.getFullBelowCache();
964
-
965 {
-
966 std::shared_ptr<FullBelowCache const> const fullBelowCache =
-
967 nodeFamily_.getFullBelowCache();
-
968
-
969 std::shared_ptr<TreeNodeCache const> const treeNodeCache =
-
970 nodeFamily_.getTreeNodeCache();
-
971
-
972 std::size_t const oldFullBelowSize = fullBelowCache->size();
-
973 std::size_t const oldTreeNodeSize = treeNodeCache->size();
-
974
-
975 nodeFamily_.sweep();
-
976
-
977 JLOG(m_journal.debug())
-
978 << "NodeFamily::FullBelowCache sweep. Size before: "
-
979 << oldFullBelowSize
-
980 << "; size after: " << fullBelowCache->size();
-
981
-
982 JLOG(m_journal.debug())
-
983 << "NodeFamily::TreeNodeCache sweep. Size before: "
-
984 << oldTreeNodeSize << "; size after: " << treeNodeCache->size();
-
985 }
-
986 {
-
987 TaggedCache<uint256, Transaction> const& masterTxCache =
-
988 getMasterTransaction().getCache();
+
965 std::shared_ptr<TreeNodeCache const> const treeNodeCache =
+
966 nodeFamily_.getTreeNodeCache();
+
967
+
968 std::size_t const oldFullBelowSize = fullBelowCache->size();
+
969 std::size_t const oldTreeNodeSize = treeNodeCache->size();
+
970
+
971 nodeFamily_.sweep();
+
972
+
973 JLOG(m_journal.debug())
+
974 << "NodeFamily::FullBelowCache sweep. Size before: "
+
975 << oldFullBelowSize
+
976 << "; size after: " << fullBelowCache->size();
+
977
+
978 JLOG(m_journal.debug())
+
979 << "NodeFamily::TreeNodeCache sweep. Size before: "
+
980 << oldTreeNodeSize << "; size after: " << treeNodeCache->size();
+
981 }
+
982 {
+
983 TaggedCache<uint256, Transaction> const& masterTxCache =
+
984 getMasterTransaction().getCache();
+
985
+
986 std::size_t const oldMasterTxSize = masterTxCache.size();
+
987
+
988 getMasterTransaction().sweep();
989
-
990 std::size_t const oldMasterTxSize = masterTxCache.size();
-
991
-
992 getMasterTransaction().sweep();
-
993
-
994 JLOG(m_journal.debug())
-
995 << "MasterTransaction sweep. Size before: " << oldMasterTxSize
-
996 << "; size after: " << masterTxCache.size();
+
990 JLOG(m_journal.debug())
+
991 << "MasterTransaction sweep. Size before: " << oldMasterTxSize
+
992 << "; size after: " << masterTxCache.size();
+
993 }
+
994 {
+
995 // Does not appear to have an associated cache.
+
996 getNodeStore().sweep();
997 }
998 {
-
999 // Does not appear to have an associated cache.
-
1000 getNodeStore().sweep();
-
1001 }
-
1002 {
-
1003 std::size_t const oldLedgerMasterCacheSize =
-
1004 getLedgerMaster().getFetchPackCacheSize();
-
1005
-
1006 getLedgerMaster().sweep();
-
1007
-
1008 JLOG(m_journal.debug())
-
1009 << "LedgerMaster sweep. Size before: "
-
1010 << oldLedgerMasterCacheSize << "; size after: "
-
1011 << getLedgerMaster().getFetchPackCacheSize();
-
1012 }
-
1013 {
-
1014 // NodeCache == TaggedCache<SHAMapHash, Blob>
-
1015 std::size_t const oldTempNodeCacheSize = getTempNodeCache().size();
-
1016
-
1017 getTempNodeCache().sweep();
-
1018
-
1019 JLOG(m_journal.debug())
-
1020 << "TempNodeCache sweep. Size before: " << oldTempNodeCacheSize
-
1021 << "; size after: " << getTempNodeCache().size();
-
1022 }
-
1023 {
-
1024 std::size_t const oldCurrentCacheSize =
-
1025 getValidations().sizeOfCurrentCache();
-
1026 std::size_t const oldSizeSeqEnforcesSize =
-
1027 getValidations().sizeOfSeqEnforcersCache();
-
1028 std::size_t const oldByLedgerSize =
-
1029 getValidations().sizeOfByLedgerCache();
-
1030 std::size_t const oldBySequenceSize =
-
1031 getValidations().sizeOfBySequenceCache();
-
1032
-
1033 getValidations().expire(m_journal);
-
1034
-
1035 JLOG(m_journal.debug())
-
1036 << "Validations Current expire. Size before: "
-
1037 << oldCurrentCacheSize
-
1038 << "; size after: " << getValidations().sizeOfCurrentCache();
-
1039
-
1040 JLOG(m_journal.debug())
-
1041 << "Validations SeqEnforcer expire. Size before: "
-
1042 << oldSizeSeqEnforcesSize << "; size after: "
-
1043 << getValidations().sizeOfSeqEnforcersCache();
-
1044
-
1045 JLOG(m_journal.debug())
-
1046 << "Validations ByLedger expire. Size before: "
-
1047 << oldByLedgerSize
-
1048 << "; size after: " << getValidations().sizeOfByLedgerCache();
-
1049
-
1050 JLOG(m_journal.debug())
-
1051 << "Validations BySequence expire. Size before: "
-
1052 << oldBySequenceSize
-
1053 << "; size after: " << getValidations().sizeOfBySequenceCache();
-
1054 }
-
1055 {
-
1056 std::size_t const oldInboundLedgersSize =
-
1057 getInboundLedgers().cacheSize();
-
1058
-
1059 getInboundLedgers().sweep();
-
1060
-
1061 JLOG(m_journal.debug())
-
1062 << "InboundLedgers sweep. Size before: "
-
1063 << oldInboundLedgersSize
-
1064 << "; size after: " << getInboundLedgers().cacheSize();
-
1065 }
-
1066 {
-
1067 size_t const oldTasksSize = getLedgerReplayer().tasksSize();
-
1068 size_t const oldDeltasSize = getLedgerReplayer().deltasSize();
-
1069 size_t const oldSkipListsSize = getLedgerReplayer().skipListsSize();
-
1070
-
1071 getLedgerReplayer().sweep();
+
999 std::size_t const oldLedgerMasterCacheSize =
+
1000 getLedgerMaster().getFetchPackCacheSize();
+
1001
+
1002 getLedgerMaster().sweep();
+
1003
+
1004 JLOG(m_journal.debug())
+
1005 << "LedgerMaster sweep. Size before: "
+
1006 << oldLedgerMasterCacheSize << "; size after: "
+
1007 << getLedgerMaster().getFetchPackCacheSize();
+
1008 }
+
1009 {
+
1010 // NodeCache == TaggedCache<SHAMapHash, Blob>
+
1011 std::size_t const oldTempNodeCacheSize = getTempNodeCache().size();
+
1012
+
1013 getTempNodeCache().sweep();
+
1014
+
1015 JLOG(m_journal.debug())
+
1016 << "TempNodeCache sweep. Size before: " << oldTempNodeCacheSize
+
1017 << "; size after: " << getTempNodeCache().size();
+
1018 }
+
1019 {
+
1020 std::size_t const oldCurrentCacheSize =
+
1021 getValidations().sizeOfCurrentCache();
+
1022 std::size_t const oldSizeSeqEnforcesSize =
+
1023 getValidations().sizeOfSeqEnforcersCache();
+
1024 std::size_t const oldByLedgerSize =
+
1025 getValidations().sizeOfByLedgerCache();
+
1026 std::size_t const oldBySequenceSize =
+
1027 getValidations().sizeOfBySequenceCache();
+
1028
+
1029 getValidations().expire(m_journal);
+
1030
+
1031 JLOG(m_journal.debug())
+
1032 << "Validations Current expire. Size before: "
+
1033 << oldCurrentCacheSize
+
1034 << "; size after: " << getValidations().sizeOfCurrentCache();
+
1035
+
1036 JLOG(m_journal.debug())
+
1037 << "Validations SeqEnforcer expire. Size before: "
+
1038 << oldSizeSeqEnforcesSize << "; size after: "
+
1039 << getValidations().sizeOfSeqEnforcersCache();
+
1040
+
1041 JLOG(m_journal.debug())
+
1042 << "Validations ByLedger expire. Size before: "
+
1043 << oldByLedgerSize
+
1044 << "; size after: " << getValidations().sizeOfByLedgerCache();
+
1045
+
1046 JLOG(m_journal.debug())
+
1047 << "Validations BySequence expire. Size before: "
+
1048 << oldBySequenceSize
+
1049 << "; size after: " << getValidations().sizeOfBySequenceCache();
+
1050 }
+
1051 {
+
1052 std::size_t const oldInboundLedgersSize =
+
1053 getInboundLedgers().cacheSize();
+
1054
+
1055 getInboundLedgers().sweep();
+
1056
+
1057 JLOG(m_journal.debug())
+
1058 << "InboundLedgers sweep. Size before: "
+
1059 << oldInboundLedgersSize
+
1060 << "; size after: " << getInboundLedgers().cacheSize();
+
1061 }
+
1062 {
+
1063 size_t const oldTasksSize = getLedgerReplayer().tasksSize();
+
1064 size_t const oldDeltasSize = getLedgerReplayer().deltasSize();
+
1065 size_t const oldSkipListsSize = getLedgerReplayer().skipListsSize();
+
1066
+
1067 getLedgerReplayer().sweep();
+
1068
+
1069 JLOG(m_journal.debug())
+
1070 << "LedgerReplayer tasks sweep. Size before: " << oldTasksSize
+
1071 << "; size after: " << getLedgerReplayer().tasksSize();
1072
1073 JLOG(m_journal.debug())
-
1074 << "LedgerReplayer tasks sweep. Size before: " << oldTasksSize
-
1075 << "; size after: " << getLedgerReplayer().tasksSize();
-
1076
-
1077 JLOG(m_journal.debug())
-
1078 << "LedgerReplayer deltas sweep. Size before: "
-
1079 << oldDeltasSize
-
1080 << "; size after: " << getLedgerReplayer().deltasSize();
-
1081
-
1082 JLOG(m_journal.debug())
-
1083 << "LedgerReplayer skipLists sweep. Size before: "
-
1084 << oldSkipListsSize
-
1085 << "; size after: " << getLedgerReplayer().skipListsSize();
-
1086 }
-
1087 {
-
1088 std::size_t const oldAcceptedLedgerSize =
-
1089 m_acceptedLedgerCache.size();
-
1090
-
1091 m_acceptedLedgerCache.sweep();
-
1092
-
1093 JLOG(m_journal.debug())
-
1094 << "AcceptedLedgerCache sweep. Size before: "
-
1095 << oldAcceptedLedgerSize
-
1096 << "; size after: " << m_acceptedLedgerCache.size();
-
1097 }
-
1098 {
-
1099 std::size_t const oldCachedSLEsSize = cachedSLEs_.size();
-
1100
-
1101 cachedSLEs_.sweep();
-
1102
-
1103 JLOG(m_journal.debug())
-
1104 << "CachedSLEs sweep. Size before: " << oldCachedSLEsSize
-
1105 << "; size after: " << cachedSLEs_.size();
-
1106 }
+
1074 << "LedgerReplayer deltas sweep. Size before: "
+
1075 << oldDeltasSize
+
1076 << "; size after: " << getLedgerReplayer().deltasSize();
+
1077
+
1078 JLOG(m_journal.debug())
+
1079 << "LedgerReplayer skipLists sweep. Size before: "
+
1080 << oldSkipListsSize
+
1081 << "; size after: " << getLedgerReplayer().skipListsSize();
+
1082 }
+
1083 {
+
1084 std::size_t const oldAcceptedLedgerSize =
+
1085 m_acceptedLedgerCache.size();
+
1086
+
1087 m_acceptedLedgerCache.sweep();
+
1088
+
1089 JLOG(m_journal.debug())
+
1090 << "AcceptedLedgerCache sweep. Size before: "
+
1091 << oldAcceptedLedgerSize
+
1092 << "; size after: " << m_acceptedLedgerCache.size();
+
1093 }
+
1094 {
+
1095 std::size_t const oldCachedSLEsSize = cachedSLEs_.size();
+
1096
+
1097 cachedSLEs_.sweep();
+
1098
+
1099 JLOG(m_journal.debug())
+
1100 << "CachedSLEs sweep. Size before: " << oldCachedSLEsSize
+
1101 << "; size after: " << cachedSLEs_.size();
+
1102 }
+
1103
+
1104 // Set timer to do another sweep later.
+
1105 setSweepTimer();
+
1106 }
+
1107
-
1108 // Set timer to do another sweep later.
-
1109 setSweepTimer();
-
1110 }
+ +
+ +
1110 {
+
1111 return maxDisallowedLedger_;
+
1112 }
-
1111
- -
- -
1114 {
-
1115 return maxDisallowedLedger_;
-
1116 }
+
1113
+
1114 virtual std::optional<uint256> const&
+
+
1115 trapTxID() const override
+
1116 {
+
1117 return trapTxID_;
+
1118 }
-
1117
-
1118 virtual std::optional<uint256> const&
-
-
1119 trapTxID() const override
-
1120 {
-
1121 return trapTxID_;
-
1122 }
+
1119
+
1120private:
+
1121 // For a newly-started validator, this is the greatest persisted ledger
+
1122 // and new validations must be greater than this.
+
1123 std::atomic<LedgerIndex> maxDisallowedLedger_{0};
+
1124
+
1125 void
+
1126 startGenesisLedger();
+
1127
+ +
1129 getLastFullLedger();
+
1130
+ +
1132 loadLedgerFromFile(std::string const& ledgerID);
+
1133
+
1134 bool
+
1135 loadOldLedger(
+
1136 std::string const& ledgerID,
+
1137 bool replay,
+
1138 bool isFilename,
+
1139 std::optional<uint256> trapTxID);
+
1140
+
1141 void
+
1142 setMaxDisallowedLedger();
+
1143};
-
1123
-
1124private:
-
1125 // For a newly-started validator, this is the greatest persisted ledger
-
1126 // and new validations must be greater than this.
-
1127 std::atomic<LedgerIndex> maxDisallowedLedger_{0};
-
1128
-
1129 void
-
1130 startGenesisLedger();
-
1131
- -
1133 getLastFullLedger();
-
1134
- -
1136 loadLedgerFromFile(std::string const& ledgerID);
-
1137
-
1138 bool
-
1139 loadOldLedger(
-
1140 std::string const& ledgerID,
-
1141 bool replay,
-
1142 bool isFilename,
-
1143 std::optional<uint256> trapTxID);
1144
-
1145 void
-
1146 setMaxDisallowedLedger();
-
1147};
-
-
1148
-
1149//------------------------------------------------------------------------------
-
1150
-
1151// TODO Break this up into smaller, more digestible initialization segments.
-
1152bool
-
-
1153ApplicationImp::setup(boost::program_options::variables_map const& cmdline)
-
1154{
-
1155 // We want to intercept CTRL-C and the standard termination signal SIGTERM
-
1156 // and terminate the process. This handler will NEVER be invoked twice.
-
1157 //
-
1158 // Note that async_wait is "one-shot": for each call, the handler will be
-
1159 // invoked exactly once, either when one of the registered signals in the
-
1160 // signal set occurs or the signal set is cancelled. Subsequent signals are
-
1161 // effectively ignored (technically, they are queued up, waiting for a call
-
1162 // to async_wait).
-
1163 m_signals.add(SIGINT);
-
1164 m_signals.add(SIGTERM);
-
1165 m_signals.async_wait(
-
1166 [this](boost::system::error_code const& ec, int signum) {
-
1167 // Indicates the signal handler has been aborted; do nothing
-
1168 if (ec == boost::asio::error::operation_aborted)
-
1169 return;
-
1170
-
1171 JLOG(m_journal.info()) << "Received signal " << signum;
+
1145//------------------------------------------------------------------------------
+
1146
+
1147// TODO Break this up into smaller, more digestible initialization segments.
+
1148bool
+
+
1149ApplicationImp::setup(boost::program_options::variables_map const& cmdline)
+
1150{
+
1151 // We want to intercept CTRL-C and the standard termination signal SIGTERM
+
1152 // and terminate the process. This handler will NEVER be invoked twice.
+
1153 //
+
1154 // Note that async_wait is "one-shot": for each call, the handler will be
+
1155 // invoked exactly once, either when one of the registered signals in the
+
1156 // signal set occurs or the signal set is cancelled. Subsequent signals are
+
1157 // effectively ignored (technically, they are queued up, waiting for a call
+
1158 // to async_wait).
+
1159 m_signals.add(SIGINT);
+
1160 m_signals.add(SIGTERM);
+
1161 m_signals.async_wait(
+
1162 [this](boost::system::error_code const& ec, int signum) {
+
1163 // Indicates the signal handler has been aborted; do nothing
+
1164 if (ec == boost::asio::error::operation_aborted)
+
1165 return;
+
1166
+
1167 JLOG(m_journal.info()) << "Received signal " << signum;
+
1168
+
1169 if (signum == SIGTERM || signum == SIGINT)
+
1170 signalStop("Signal: " + to_string(signum));
+
1171 });
1172
-
1173 if (signum == SIGTERM || signum == SIGINT)
-
1174 signalStop("Signal: " + to_string(signum));
-
1175 });
-
1176
-
1177 auto debug_log = config_->getDebugLogFile();
-
1178
-
1179 if (!debug_log.empty())
-
1180 {
-
1181 // Let debug messages go to the file but only WARNING or higher to
-
1182 // regular output (unless verbose)
-
1183
-
1184 if (!logs_->open(debug_log))
-
1185 std::cerr << "Can't open log file " << debug_log << '\n';
-
1186
-
1187 using namespace beast::severities;
-
1188 if (logs_->threshold() > kDebug)
-
1189 logs_->threshold(kDebug);
-
1190 }
+
1173 auto debug_log = config_->getDebugLogFile();
+
1174
+
1175 if (!debug_log.empty())
+
1176 {
+
1177 // Let debug messages go to the file but only WARNING or higher to
+
1178 // regular output (unless verbose)
+
1179
+
1180 if (!logs_->open(debug_log))
+
1181 std::cerr << "Can't open log file " << debug_log << '\n';
+
1182
+
1183 using namespace beast::severities;
+
1184 if (logs_->threshold() > kDebug)
+
1185 logs_->threshold(kDebug);
+
1186 }
+
1187
+
1188 JLOG(m_journal.info()) << "Process starting: "
+
1189 << BuildInfo::getFullVersionString()
+
1190 << ", Instance Cookie: " << instanceCookie_;
1191
-
1192 JLOG(m_journal.info()) << "Process starting: "
-
1193 << BuildInfo::getFullVersionString()
-
1194 << ", Instance Cookie: " << instanceCookie_;
-
1195
-
1196 if (numberOfThreads(*config_) < 2)
-
1197 {
-
1198 JLOG(m_journal.warn()) << "Limited to a single I/O service thread by "
-
1199 "system configuration.";
-
1200 }
-
1201
-
1202 // Optionally turn off logging to console.
-
1203 logs_->silent(config_->silent());
-
1204
-
1205 if (!initRelationalDatabase() || !initNodeStore())
-
1206 return false;
-
1207
-
1208 if (!peerReservations_->load(getWalletDB()))
-
1209 {
-
1210 JLOG(m_journal.fatal()) << "Cannot find peer reservations!";
-
1211 return false;
-
1212 }
-
1213
-
1214 if (validatorKeys_.keys)
-
1215 setMaxDisallowedLedger();
-
1216
-
1217 // Configure the amendments the server supports
-
1218 {
-
1219 auto const supported = []() {
-
1220 auto const& amendments = detail::supportedAmendments();
- -
1222 supported.reserve(amendments.size());
-
1223 for (auto const& [a, vote] : amendments)
-
1224 {
-
1225 auto const f = xrpl::getRegisteredFeature(a);
-
1226 XRPL_ASSERT(
-
1227 f, "xrpl::ApplicationImp::setup : registered feature");
-
1228 if (f)
-
1229 supported.emplace_back(a, *f, vote);
-
1230 }
-
1231 return supported;
-
1232 }();
-
1233 Section const& downVoted = config_->section(SECTION_VETO_AMENDMENTS);
-
1234
-
1235 Section const& upVoted = config_->section(SECTION_AMENDMENTS);
-
1236
-
1237 m_amendmentTable = make_AmendmentTable(
-
1238 *this,
-
1239 config().AMENDMENT_MAJORITY_TIME,
-
1240 supported,
-
1241 upVoted,
-
1242 downVoted,
-
1243 logs_->journal("Amendments"));
-
1244 }
-
1245
-
1246 Pathfinder::initPathTable();
-
1247
-
1248 auto const startUp = config_->START_UP;
-
1249 JLOG(m_journal.debug()) << "startUp: " << startUp;
-
1250 if (startUp == Config::FRESH)
-
1251 {
-
1252 JLOG(m_journal.info()) << "Starting new Ledger";
-
1253
-
1254 startGenesisLedger();
-
1255 }
-
1256 else if (
-
1257 startUp == Config::LOAD || startUp == Config::LOAD_FILE ||
-
1258 startUp == Config::REPLAY)
-
1259 {
-
1260 JLOG(m_journal.info()) << "Loading specified Ledger";
-
1261
-
1262 if (!loadOldLedger(
-
1263 config_->START_LEDGER,
-
1264 startUp == Config::REPLAY,
-
1265 startUp == Config::LOAD_FILE,
-
1266 config_->TRAP_TX_HASH))
-
1267 {
-
1268 JLOG(m_journal.error())
-
1269 << "The specified ledger could not be loaded.";
-
1270 if (config_->FAST_LOAD)
-
1271 {
-
1272 // Fall back to syncing from the network, such as
-
1273 // when there's no existing data.
-
1274 startGenesisLedger();
+
1192 if (numberOfThreads(*config_) < 2)
+
1193 {
+
1194 JLOG(m_journal.warn()) << "Limited to a single I/O service thread by "
+
1195 "system configuration.";
+
1196 }
+
1197
+
1198 // Optionally turn off logging to console.
+
1199 logs_->silent(config_->silent());
+
1200
+
1201 if (!initRelationalDatabase() || !initNodeStore())
+
1202 return false;
+
1203
+
1204 if (!peerReservations_->load(getWalletDB()))
+
1205 {
+
1206 JLOG(m_journal.fatal()) << "Cannot find peer reservations!";
+
1207 return false;
+
1208 }
+
1209
+
1210 if (validatorKeys_.keys)
+
1211 setMaxDisallowedLedger();
+
1212
+
1213 // Configure the amendments the server supports
+
1214 {
+
1215 auto const supported = []() {
+
1216 auto const& amendments = detail::supportedAmendments();
+ +
1218 supported.reserve(amendments.size());
+
1219 for (auto const& [a, vote] : amendments)
+
1220 {
+
1221 auto const f = xrpl::getRegisteredFeature(a);
+
1222 XRPL_ASSERT(
+
1223 f, "xrpl::ApplicationImp::setup : registered feature");
+
1224 if (f)
+
1225 supported.emplace_back(a, *f, vote);
+
1226 }
+
1227 return supported;
+
1228 }();
+
1229 Section const& downVoted = config_->section(SECTION_VETO_AMENDMENTS);
+
1230
+
1231 Section const& upVoted = config_->section(SECTION_AMENDMENTS);
+
1232
+
1233 m_amendmentTable = make_AmendmentTable(
+
1234 *this,
+
1235 config().AMENDMENT_MAJORITY_TIME,
+
1236 supported,
+
1237 upVoted,
+
1238 downVoted,
+
1239 logs_->journal("Amendments"));
+
1240 }
+
1241
+
1242 Pathfinder::initPathTable();
+
1243
+
1244 auto const startUp = config_->START_UP;
+
1245 JLOG(m_journal.debug()) << "startUp: " << startUp;
+
1246 if (startUp == Config::FRESH)
+
1247 {
+
1248 JLOG(m_journal.info()) << "Starting new Ledger";
+
1249
+
1250 startGenesisLedger();
+
1251 }
+
1252 else if (
+
1253 startUp == Config::LOAD || startUp == Config::LOAD_FILE ||
+
1254 startUp == Config::REPLAY)
+
1255 {
+
1256 JLOG(m_journal.info()) << "Loading specified Ledger";
+
1257
+
1258 if (!loadOldLedger(
+
1259 config_->START_LEDGER,
+
1260 startUp == Config::REPLAY,
+
1261 startUp == Config::LOAD_FILE,
+
1262 config_->TRAP_TX_HASH))
+
1263 {
+
1264 JLOG(m_journal.error())
+
1265 << "The specified ledger could not be loaded.";
+
1266 if (config_->FAST_LOAD)
+
1267 {
+
1268 // Fall back to syncing from the network, such as
+
1269 // when there's no existing data.
+
1270 startGenesisLedger();
+
1271 }
+
1272 else
+
1273 {
+
1274 return false;
1275 }
-
1276 else
-
1277 {
-
1278 return false;
-
1279 }
-
1280 }
-
1281 }
-
1282 else if (startUp == Config::NETWORK)
-
1283 {
-
1284 // This should probably become the default once we have a stable
-
1285 // network.
-
1286 if (!config_->standalone())
-
1287 m_networkOPs->setNeedNetworkLedger();
-
1288
+
1276 }
+
1277 }
+
1278 else if (startUp == Config::NETWORK)
+
1279 {
+
1280 // This should probably become the default once we have a stable
+
1281 // network.
+
1282 if (!config_->standalone())
+
1283 m_networkOPs->setNeedNetworkLedger();
+
1284
+
1285 startGenesisLedger();
+
1286 }
+
1287 else
+
1288 {
1289 startGenesisLedger();
1290 }
-
1291 else
-
1292 {
-
1293 startGenesisLedger();
-
1294 }
-
1295
-
1296 if (auto const& forcedRange = config().FORCED_LEDGER_RANGE_PRESENT)
-
1297 {
-
1298 m_ledgerMaster->setLedgerRangePresent(
-
1299 forcedRange->first, forcedRange->second);
-
1300 }
+
1291
+
1292 if (auto const& forcedRange = config().FORCED_LEDGER_RANGE_PRESENT)
+
1293 {
+
1294 m_ledgerMaster->setLedgerRangePresent(
+
1295 forcedRange->first, forcedRange->second);
+
1296 }
+
1297
+
1298 m_orderBookDB.setup(getLedgerMaster().getCurrentLedger());
+
1299
+
1300 nodeIdentity_ = getNodeIdentity(*this, cmdline);
1301
-
1302 m_orderBookDB.setup(getLedgerMaster().getCurrentLedger());
-
1303
-
1304 nodeIdentity_ = getNodeIdentity(*this, cmdline);
-
1305
-
1306 if (!cluster_->load(config().section(SECTION_CLUSTER_NODES)))
-
1307 {
-
1308 JLOG(m_journal.fatal()) << "Invalid entry in cluster configuration.";
-
1309 return false;
-
1310 }
+
1302 if (!cluster_->load(config().section(SECTION_CLUSTER_NODES)))
+
1303 {
+
1304 JLOG(m_journal.fatal()) << "Invalid entry in cluster configuration.";
+
1305 return false;
+
1306 }
+
1307
+
1308 {
+
1309 if (validatorKeys_.configInvalid())
+
1310 return false;
1311
-
1312 {
-
1313 if (validatorKeys_.configInvalid())
-
1314 return false;
-
1315
-
1316 if (!validatorManifests_->load(
-
1317 getWalletDB(),
-
1318 "ValidatorManifests",
-
1319 validatorKeys_.manifest,
-
1320 config().section(SECTION_VALIDATOR_KEY_REVOCATION).values()))
-
1321 {
-
1322 JLOG(m_journal.fatal()) << "Invalid configured validator manifest.";
-
1323 return false;
-
1324 }
-
1325
-
1326 publisherManifests_->load(getWalletDB(), "PublisherManifests");
-
1327
-
1328 // It is possible to have a valid ValidatorKeys object without
-
1329 // setting the signingKey or masterKey. This occurs if the
-
1330 // configuration file does not have either
-
1331 // SECTION_VALIDATOR_TOKEN or SECTION_VALIDATION_SEED section.
-
1332
-
1333 // masterKey for the configuration-file specified validator keys
-
1334 std::optional<PublicKey> localSigningKey;
-
1335 if (validatorKeys_.keys)
-
1336 localSigningKey = validatorKeys_.keys->publicKey;
-
1337
-
1338 // Setup trusted validators
-
1339 if (!validators_->load(
-
1340 localSigningKey,
-
1341 config().section(SECTION_VALIDATORS).values(),
-
1342 config().section(SECTION_VALIDATOR_LIST_KEYS).values(),
-
1343 config().VALIDATOR_LIST_THRESHOLD))
-
1344 {
-
1345 JLOG(m_journal.fatal())
-
1346 << "Invalid entry in validator configuration.";
-
1347 return false;
-
1348 }
-
1349 }
-
1350
-
1351 if (!validatorSites_->load(
-
1352 config().section(SECTION_VALIDATOR_LIST_SITES).values()))
-
1353 {
-
1354 JLOG(m_journal.fatal())
-
1355 << "Invalid entry in [" << SECTION_VALIDATOR_LIST_SITES << "]";
-
1356 return false;
-
1357 }
-
1358
-
1359 // Tell the AmendmentTable who the trusted validators are.
-
1360 m_amendmentTable->trustChanged(validators_->getQuorumKeys().second);
-
1361
+
1312 if (!validatorManifests_->load(
+
1313 getWalletDB(),
+
1314 "ValidatorManifests",
+
1315 validatorKeys_.manifest,
+
1316 config().section(SECTION_VALIDATOR_KEY_REVOCATION).values()))
+
1317 {
+
1318 JLOG(m_journal.fatal()) << "Invalid configured validator manifest.";
+
1319 return false;
+
1320 }
+
1321
+
1322 publisherManifests_->load(getWalletDB(), "PublisherManifests");
+
1323
+
1324 // It is possible to have a valid ValidatorKeys object without
+
1325 // setting the signingKey or masterKey. This occurs if the
+
1326 // configuration file does not have either
+
1327 // SECTION_VALIDATOR_TOKEN or SECTION_VALIDATION_SEED section.
+
1328
+
1329 // masterKey for the configuration-file specified validator keys
+
1330 std::optional<PublicKey> localSigningKey;
+
1331 if (validatorKeys_.keys)
+
1332 localSigningKey = validatorKeys_.keys->publicKey;
+
1333
+
1334 // Setup trusted validators
+
1335 if (!validators_->load(
+
1336 localSigningKey,
+
1337 config().section(SECTION_VALIDATORS).values(),
+
1338 config().section(SECTION_VALIDATOR_LIST_KEYS).values(),
+
1339 config().VALIDATOR_LIST_THRESHOLD))
+
1340 {
+
1341 JLOG(m_journal.fatal())
+
1342 << "Invalid entry in validator configuration.";
+
1343 return false;
+
1344 }
+
1345 }
+
1346
+
1347 if (!validatorSites_->load(
+
1348 config().section(SECTION_VALIDATOR_LIST_SITES).values()))
+
1349 {
+
1350 JLOG(m_journal.fatal())
+
1351 << "Invalid entry in [" << SECTION_VALIDATOR_LIST_SITES << "]";
+
1352 return false;
+
1353 }
+
1354
+
1355 // Tell the AmendmentTable who the trusted validators are.
+
1356 m_amendmentTable->trustChanged(validators_->getQuorumKeys().second);
+
1357
+
1358 //----------------------------------------------------------------------
+
1359 //
+
1360 // Server
+
1361 //
1362 //----------------------------------------------------------------------
-
1363 //
-
1364 // Server
-
1365 //
-
1366 //----------------------------------------------------------------------
-
1367
-
1368 // VFALCO NOTE Unfortunately, in stand-alone mode some code still
-
1369 // foolishly calls overlay(). When this is fixed we can
-
1370 // move the instantiation inside a conditional:
-
1371 //
-
1372 // if (!config_.standalone())
-
1373 overlay_ = make_Overlay(
-
1374 *this,
-
1375 setup_Overlay(*config_),
-
1376 *serverHandler_,
-
1377 *m_resourceManager,
-
1378 *m_resolver,
-
1379 get_io_context(),
-
1380 *config_,
-
1381 m_collectorManager->collector());
-
1382 add(*overlay_); // add to PropertyStream
-
1383
-
1384 // start first consensus round
-
1385 if (!m_networkOPs->beginConsensus(
-
1386 m_ledgerMaster->getClosedLedger()->header().hash, {}))
-
1387 {
-
1388 JLOG(m_journal.fatal()) << "Unable to start consensus";
-
1389 return false;
-
1390 }
-
1391
-
1392 {
-
1393 try
-
1394 {
-
1395 auto setup = setup_ServerHandler(
-
1396 *config_, beast::logstream{m_journal.error()});
-
1397 setup.makeContexts();
-
1398 serverHandler_->setup(setup, m_journal);
-
1399 fixConfigPorts(*config_, serverHandler_->endpoints());
-
1400 }
-
1401 catch (std::exception const& e)
-
1402 {
-
1403 if (auto stream = m_journal.fatal())
-
1404 {
-
1405 stream << "Unable to setup server handler";
-
1406 if (std::strlen(e.what()) > 0)
-
1407 stream << ": " << e.what();
-
1408 }
-
1409 return false;
-
1410 }
-
1411 }
-
1412
-
1413 // Begin connecting to network.
-
1414 if (!config_->standalone())
-
1415 {
-
1416 // Should this message be here, conceptually? In theory this sort
-
1417 // of message, if displayed, should be displayed from PeerFinder.
-
1418 if (config_->PEER_PRIVATE && config_->IPS_FIXED.empty())
-
1419 {
-
1420 JLOG(m_journal.warn())
-
1421 << "No outbound peer connections will be made";
-
1422 }
-
1423
-
1424 // VFALCO NOTE the state timer resets the deadlock detector.
-
1425 //
-
1426 m_networkOPs->setStateTimer();
-
1427 }
-
1428 else
-
1429 {
-
1430 JLOG(m_journal.warn()) << "Running in standalone mode";
-
1431
-
1432 m_networkOPs->setStandAlone();
-
1433 }
-
1434
-
1435 if (config_->canSign())
-
1436 {
-
1437 JLOG(m_journal.warn()) << "*** The server is configured to allow the "
-
1438 "'sign' and 'sign_for'";
-
1439 JLOG(m_journal.warn()) << "*** commands. These commands have security "
-
1440 "implications and have";
-
1441 JLOG(m_journal.warn()) << "*** been deprecated. They will be removed "
-
1442 "in a future release of";
-
1443 JLOG(m_journal.warn()) << "*** rippled.";
-
1444 JLOG(m_journal.warn()) << "*** If you do not use them to sign "
-
1445 "transactions please edit your";
+
1363
+
1364 // VFALCO NOTE Unfortunately, in stand-alone mode some code still
+
1365 // foolishly calls overlay(). When this is fixed we can
+
1366 // move the instantiation inside a conditional:
+
1367 //
+
1368 // if (!config_.standalone())
+
1369 overlay_ = make_Overlay(
+
1370 *this,
+
1371 setup_Overlay(*config_),
+
1372 *serverHandler_,
+
1373 *m_resourceManager,
+
1374 *m_resolver,
+
1375 get_io_context(),
+
1376 *config_,
+
1377 m_collectorManager->collector());
+
1378 add(*overlay_); // add to PropertyStream
+
1379
+
1380 // start first consensus round
+
1381 if (!m_networkOPs->beginConsensus(
+
1382 m_ledgerMaster->getClosedLedger()->header().hash, {}))
+
1383 {
+
1384 JLOG(m_journal.fatal()) << "Unable to start consensus";
+
1385 return false;
+
1386 }
+
1387
+
1388 {
+
1389 try
+
1390 {
+
1391 auto setup = setup_ServerHandler(
+
1392 *config_, beast::logstream{m_journal.error()});
+
1393 setup.makeContexts();
+
1394 serverHandler_->setup(setup, m_journal);
+
1395 fixConfigPorts(*config_, serverHandler_->endpoints());
+
1396 }
+
1397 catch (std::exception const& e)
+
1398 {
+
1399 if (auto stream = m_journal.fatal())
+
1400 {
+
1401 stream << "Unable to setup server handler";
+
1402 if (std::strlen(e.what()) > 0)
+
1403 stream << ": " << e.what();
+
1404 }
+
1405 return false;
+
1406 }
+
1407 }
+
1408
+
1409 // Begin connecting to network.
+
1410 if (!config_->standalone())
+
1411 {
+
1412 // Should this message be here, conceptually? In theory this sort
+
1413 // of message, if displayed, should be displayed from PeerFinder.
+
1414 if (config_->PEER_PRIVATE && config_->IPS_FIXED.empty())
+
1415 {
+
1416 JLOG(m_journal.warn())
+
1417 << "No outbound peer connections will be made";
+
1418 }
+
1419
+
1420 // VFALCO NOTE the state timer resets the deadlock detector.
+
1421 //
+
1422 m_networkOPs->setStateTimer();
+
1423 }
+
1424 else
+
1425 {
+
1426 JLOG(m_journal.warn()) << "Running in standalone mode";
+
1427
+
1428 m_networkOPs->setStandAlone();
+
1429 }
+
1430
+
1431 if (config_->canSign())
+
1432 {
+
1433 JLOG(m_journal.warn()) << "*** The server is configured to allow the "
+
1434 "'sign' and 'sign_for'";
+
1435 JLOG(m_journal.warn()) << "*** commands. These commands have security "
+
1436 "implications and have";
+
1437 JLOG(m_journal.warn()) << "*** been deprecated. They will be removed "
+
1438 "in a future release of";
+
1439 JLOG(m_journal.warn()) << "*** rippled.";
+
1440 JLOG(m_journal.warn()) << "*** If you do not use them to sign "
+
1441 "transactions please edit your";
+
1442 JLOG(m_journal.warn())
+
1443 << "*** configuration file and remove the [enable_signing] stanza.";
+
1444 JLOG(m_journal.warn()) << "*** If you do use them to sign transactions "
+
1445 "please migrate to a";
1446 JLOG(m_journal.warn())
-
1447 << "*** configuration file and remove the [enable_signing] stanza.";
-
1448 JLOG(m_journal.warn()) << "*** If you do use them to sign transactions "
-
1449 "please migrate to a";
-
1450 JLOG(m_journal.warn())
-
1451 << "*** standalone signing solution as soon as possible.";
-
1452 }
-
1453
-
1454 //
-
1455 // Execute start up rpc commands.
-
1456 //
-
1457 for (auto cmd : config_->section(SECTION_RPC_STARTUP).lines())
-
1458 {
-
1459 Json::Reader jrReader;
-
1460 Json::Value jvCommand;
-
1461
-
1462 if (!jrReader.parse(cmd, jvCommand))
-
1463 {
-
1464 JLOG(m_journal.fatal()) << "Couldn't parse entry in ["
-
1465 << SECTION_RPC_STARTUP << "]: '" << cmd;
-
1466 }
-
1467
-
1468 if (!config_->quiet())
-
1469 {
-
1470 JLOG(m_journal.fatal())
-
1471 << "Startup RPC: " << jvCommand << std::endl;
-
1472 }
-
1473
-
1474 Resource::Charge loadType = Resource::feeReferenceRPC;
- -
1476 RPC::JsonContext context{
-
1477 {journal("RPCHandler"),
-
1478 *this,
-
1479 loadType,
-
1480 getOPs(),
-
1481 getLedgerMaster(),
-
1482 c,
-
1483 Role::ADMIN,
-
1484 {},
-
1485 {},
-
1486 RPC::apiMaximumSupportedVersion},
-
1487 jvCommand};
-
1488
-
1489 Json::Value jvResult;
-
1490 RPC::doCommand(context, jvResult);
-
1491
-
1492 if (!config_->quiet())
-
1493 {
-
1494 JLOG(m_journal.fatal()) << "Result: " << jvResult << std::endl;
-
1495 }
-
1496 }
-
1497
-
1498 validatorSites_->start();
-
1499
-
1500 return true;
-
1501}
+
1447 << "*** standalone signing solution as soon as possible.";
+
1448 }
+
1449
+
1450 //
+
1451 // Execute start up rpc commands.
+
1452 //
+
1453 for (auto cmd : config_->section(SECTION_RPC_STARTUP).lines())
+
1454 {
+
1455 Json::Reader jrReader;
+
1456 Json::Value jvCommand;
+
1457
+
1458 if (!jrReader.parse(cmd, jvCommand))
+
1459 {
+
1460 JLOG(m_journal.fatal()) << "Couldn't parse entry in ["
+
1461 << SECTION_RPC_STARTUP << "]: '" << cmd;
+
1462 }
+
1463
+
1464 if (!config_->quiet())
+
1465 {
+
1466 JLOG(m_journal.fatal())
+
1467 << "Startup RPC: " << jvCommand << std::endl;
+
1468 }
+
1469
+
1470 Resource::Charge loadType = Resource::feeReferenceRPC;
+ +
1472 RPC::JsonContext context{
+
1473 {journal("RPCHandler"),
+
1474 *this,
+
1475 loadType,
+
1476 getOPs(),
+
1477 getLedgerMaster(),
+
1478 c,
+
1479 Role::ADMIN,
+
1480 {},
+
1481 {},
+
1482 RPC::apiMaximumSupportedVersion},
+
1483 jvCommand};
+
1484
+
1485 Json::Value jvResult;
+
1486 RPC::doCommand(context, jvResult);
+
1487
+
1488 if (!config_->quiet())
+
1489 {
+
1490 JLOG(m_journal.fatal()) << "Result: " << jvResult << std::endl;
+
1491 }
+
1492 }
+
1493
+
1494 validatorSites_->start();
+
1495
+
1496 return true;
+
1497}
-
1502
-
1503void
-
-
1504ApplicationImp::start(bool withTimers)
-
1505{
-
1506 JLOG(m_journal.info()) << "Application starting. Version is "
-
1507 << BuildInfo::getVersionString();
-
1508
-
1509 if (withTimers)
-
1510 {
-
1511 setSweepTimer();
-
1512 setEntropyTimer();
-
1513 }
-
1514
-
1515 m_io_latency_sampler.start();
-
1516 m_resolver->start();
-
1517 m_loadManager->start();
-
1518 m_shaMapStore->start();
-
1519 if (overlay_)
-
1520 overlay_->start();
+
1498
+
1499void
+
+
1500ApplicationImp::start(bool withTimers)
+
1501{
+
1502 JLOG(m_journal.info()) << "Application starting. Version is "
+
1503 << BuildInfo::getVersionString();
+
1504
+
1505 if (withTimers)
+
1506 {
+
1507 setSweepTimer();
+
1508 setEntropyTimer();
+
1509 }
+
1510
+
1511 m_io_latency_sampler.start();
+
1512 m_resolver->start();
+
1513 m_loadManager->start();
+
1514 m_shaMapStore->start();
+
1515 if (overlay_)
+
1516 overlay_->start();
+
1517
+
1518 if (grpcServer_->start())
+ +
1520 *config_, {{SECTION_PORT_GRPC, grpcServer_->getEndpoint()}});
1521
-
1522 if (grpcServer_->start())
- -
1524 *config_, {{SECTION_PORT_GRPC, grpcServer_->getEndpoint()}});
+
1522 ledgerCleaner_->start();
+
1523 perfLog_->start();
+
1524}
+
1525
-
1526 ledgerCleaner_->start();
-
1527 perfLog_->start();
-
1528}
-
-
1529
-
1530void
-
-
1531ApplicationImp::run()
-
1532{
-
1533 if (!config_->standalone())
-
1534 {
-
1535 // VFALCO NOTE This seems unnecessary. If we properly refactor the load
-
1536 // manager then the stall detector can just always be
-
1537 // "armed"
-
1538 //
-
1539 getLoadManager().activateStallDetector();
-
1540 }
+
1526void
+
+
1527ApplicationImp::run()
+
1528{
+
1529 if (!config_->standalone())
+
1530 {
+
1531 // VFALCO NOTE This seems unnecessary. If we properly refactor the load
+
1532 // manager then the stall detector can just always be
+
1533 // "armed"
+
1534 //
+
1535 getLoadManager().activateStallDetector();
+
1536 }
+
1537
+
1538 isTimeToStop.wait(false, std::memory_order_relaxed);
+
1539
+
1540 JLOG(m_journal.debug()) << "Application stopping";
1541
-
1542 {
-
1543 std::unique_lock<std::mutex> lk{stoppingMutex_};
-
1544 stoppingCondition_.wait(lk, [this] { return isTimeToStop.load(); });
-
1545 }
-
1546
-
1547 JLOG(m_journal.debug()) << "Application stopping";
-
1548
-
1549 m_io_latency_sampler.cancel_async();
-
1550
-
1551 // VFALCO Enormous hack, we have to force the probe to cancel
-
1552 // before we stop the io_context queue or else it never
-
1553 // unblocks in its destructor. The fix is to make all
-
1554 // io_objects gracefully handle exit so that we can
-
1555 // naturally return from io_context::run() instead of
-
1556 // forcing a call to io_context::stop()
-
1557 m_io_latency_sampler.cancel();
+
1542 m_io_latency_sampler.cancel_async();
+
1543
+
1544 // VFALCO Enormous hack, we have to force the probe to cancel
+
1545 // before we stop the io_context queue or else it never
+
1546 // unblocks in its destructor. The fix is to make all
+
1547 // io_objects gracefully handle exit so that we can
+
1548 // naturally return from io_context::run() instead of
+
1549 // forcing a call to io_context::stop()
+
1550 m_io_latency_sampler.cancel();
+
1551
+
1552 m_resolver->stop_async();
+
1553
+
1554 // NIKB This is a hack - we need to wait for the resolver to
+
1555 // stop. before we stop the io_server_queue or weird
+
1556 // things will happen.
+
1557 m_resolver->stop();
1558
-
1559 m_resolver->stop_async();
-
1560
-
1561 // NIKB This is a hack - we need to wait for the resolver to
-
1562 // stop. before we stop the io_server_queue or weird
-
1563 // things will happen.
-
1564 m_resolver->stop();
-
1565
-
1566 {
-
1567 try
-
1568 {
-
1569 sweepTimer_.cancel();
-
1570 }
-
1571 catch (boost::system::system_error const& e)
-
1572 {
-
1573 JLOG(m_journal.error())
-
1574 << "Application: sweepTimer cancel error: " << e.what();
-
1575 }
-
1576
-
1577 try
-
1578 {
-
1579 entropyTimer_.cancel();
-
1580 }
-
1581 catch (boost::system::system_error const& e)
-
1582 {
-
1583 JLOG(m_journal.error())
-
1584 << "Application: entropyTimer cancel error: " << e.what();
-
1585 }
-
1586 }
-
1587
-
1588 // Make sure that any waitHandlers pending in our timers are done
-
1589 // before we declare ourselves stopped.
-
1590 using namespace std::chrono_literals;
-
1591
-
1592 waitHandlerCounter_.join("Application", 1s, m_journal);
-
1593
-
1594 mValidations.flush();
-
1595
-
1596 validatorSites_->stop();
-
1597
-
1598 // TODO Store manifests in manifests.sqlite instead of wallet.db
-
1599 validatorManifests_->save(
-
1600 getWalletDB(), "ValidatorManifests", [this](PublicKey const& pubKey) {
-
1601 return validators().listed(pubKey);
-
1602 });
-
1603
-
1604 publisherManifests_->save(
-
1605 getWalletDB(), "PublisherManifests", [this](PublicKey const& pubKey) {
-
1606 return validators().trustedPublisher(pubKey);
-
1607 });
-
1608
-
1609 // The order of these stop calls is delicate.
-
1610 // Re-ordering them risks undefined behavior.
-
1611 m_loadManager->stop();
-
1612 m_shaMapStore->stop();
-
1613 m_jobQueue->stop();
-
1614 if (overlay_)
-
1615 overlay_->stop();
-
1616 grpcServer_->stop();
-
1617 m_networkOPs->stop();
-
1618 serverHandler_->stop();
-
1619 m_ledgerReplayer->stop();
-
1620 m_inboundTransactions->stop();
-
1621 m_inboundLedgers->stop();
-
1622 ledgerCleaner_->stop();
-
1623 m_nodeStore->stop();
-
1624 perfLog_->stop();
-
1625
-
1626 JLOG(m_journal.info()) << "Done.";
-
1627}
+
1559 {
+
1560 try
+
1561 {
+
1562 sweepTimer_.cancel();
+
1563 }
+
1564 catch (boost::system::system_error const& e)
+
1565 {
+
1566 JLOG(m_journal.error())
+
1567 << "Application: sweepTimer cancel error: " << e.what();
+
1568 }
+
1569
+
1570 try
+
1571 {
+
1572 entropyTimer_.cancel();
+
1573 }
+
1574 catch (boost::system::system_error const& e)
+
1575 {
+
1576 JLOG(m_journal.error())
+
1577 << "Application: entropyTimer cancel error: " << e.what();
+
1578 }
+
1579 }
+
1580
+
1581 // Make sure that any waitHandlers pending in our timers are done
+
1582 // before we declare ourselves stopped.
+
1583 using namespace std::chrono_literals;
+
1584
+
1585 waitHandlerCounter_.join("Application", 1s, m_journal);
+
1586
+
1587 mValidations.flush();
+
1588
+
1589 validatorSites_->stop();
+
1590
+
1591 // TODO Store manifests in manifests.sqlite instead of wallet.db
+
1592 validatorManifests_->save(
+
1593 getWalletDB(), "ValidatorManifests", [this](PublicKey const& pubKey) {
+
1594 return validators().listed(pubKey);
+
1595 });
+
1596
+
1597 publisherManifests_->save(
+
1598 getWalletDB(), "PublisherManifests", [this](PublicKey const& pubKey) {
+
1599 return validators().trustedPublisher(pubKey);
+
1600 });
+
1601
+
1602 // The order of these stop calls is delicate.
+
1603 // Re-ordering them risks undefined behavior.
+
1604 m_loadManager->stop();
+
1605 m_shaMapStore->stop();
+
1606 m_jobQueue->stop();
+
1607 if (overlay_)
+
1608 overlay_->stop();
+
1609 grpcServer_->stop();
+
1610 m_networkOPs->stop();
+
1611 serverHandler_->stop();
+
1612 m_ledgerReplayer->stop();
+
1613 m_inboundTransactions->stop();
+
1614 m_inboundLedgers->stop();
+
1615 ledgerCleaner_->stop();
+
1616 m_nodeStore->stop();
+
1617 perfLog_->stop();
+
1618
+
1619 JLOG(m_journal.info()) << "Done.";
+
1620}
-
1628
-
1629void
-
-
1630ApplicationImp::signalStop(std::string msg)
-
1631{
-
1632 if (!isTimeToStop.exchange(true))
-
1633 {
-
1634 if (msg.empty())
-
1635 JLOG(m_journal.warn()) << "Server stopping";
-
1636 else
-
1637 JLOG(m_journal.warn()) << "Server stopping: " << msg;
-
1638
-
1639 stoppingCondition_.notify_all();
-
1640 }
-
1641}
+
1621
+
1622void
+
+
1623ApplicationImp::signalStop(std::string msg)
+
1624{
+
1625 if (!isTimeToStop.test_and_set(std::memory_order_acquire))
+
1626 {
+
1627 if (msg.empty())
+
1628 JLOG(m_journal.warn()) << "Server stopping";
+
1629 else
+
1630 JLOG(m_journal.warn()) << "Server stopping: " << msg;
+
1631
+
1632 isTimeToStop.notify_all();
+
1633 }
+
1634}
-
1642
-
1643bool
-
-
1644ApplicationImp::checkSigs() const
-
1645{
-
1646 return checkSigs_;
-
1647}
+
1635
+
1636bool
+
+
1637ApplicationImp::checkSigs() const
+
1638{
+
1639 return checkSigs_;
+
1640}
-
1648
-
1649void
-
-
1650ApplicationImp::checkSigs(bool check)
-
1651{
-
1652 checkSigs_ = check;
-
1653}
+
1641
+
1642void
+
+
1643ApplicationImp::checkSigs(bool check)
+
1644{
+
1645 checkSigs_ = check;
+
1646}
-
1654
-
1655bool
-
-
1656ApplicationImp::isStopping() const
-
1657{
-
1658 return isTimeToStop.load();
-
1659}
+
1647
+
1648bool
+
+
1649ApplicationImp::isStopping() const
+
1650{
+
1651 return isTimeToStop.test(std::memory_order_relaxed);
+
1652}
-
1660
-
1661int
-
-
1662ApplicationImp::fdRequired() const
-
1663{
-
1664 // Standard handles, config file, misc I/O etc:
-
1665 int needed = 128;
-
1666
-
1667 // 2x the configured peer limit for peer connections:
-
1668 if (overlay_)
-
1669 needed += 2 * overlay_->limit();
-
1670
-
1671 // the number of fds needed by the backend (internally
-
1672 // doubled if online delete is enabled).
-
1673 needed += std::max(5, m_shaMapStore->fdRequired());
-
1674
-
1675 // One fd per incoming connection a port can accept, or
-
1676 // if no limit is set, assume it'll handle 256 clients.
-
1677 for (auto const& p : serverHandler_->setup().ports)
-
1678 needed += std::max(256, p.limit);
-
1679
-
1680 // The minimum number of file descriptors we need is 1024:
-
1681 return std::max(1024, needed);
-
1682}
+
1653
+
1654int
+
+
1655ApplicationImp::fdRequired() const
+
1656{
+
1657 // Standard handles, config file, misc I/O etc:
+
1658 int needed = 128;
+
1659
+
1660 // 2x the configured peer limit for peer connections:
+
1661 if (overlay_)
+
1662 needed += 2 * overlay_->limit();
+
1663
+
1664 // the number of fds needed by the backend (internally
+
1665 // doubled if online delete is enabled).
+
1666 needed += std::max(5, m_shaMapStore->fdRequired());
+
1667
+
1668 // One fd per incoming connection a port can accept, or
+
1669 // if no limit is set, assume it'll handle 256 clients.
+
1670 for (auto const& p : serverHandler_->setup().ports)
+
1671 needed += std::max(256, p.limit);
+
1672
+
1673 // The minimum number of file descriptors we need is 1024:
+
1674 return std::max(1024, needed);
+
1675}
-
1683
-
1684//------------------------------------------------------------------------------
+
1676
+
1677//------------------------------------------------------------------------------
+
1678
+
1679void
+
+
1680ApplicationImp::startGenesisLedger()
+
1681{
+
1682 std::vector<uint256> const initialAmendments =
+
1683 (config_->START_UP == Config::FRESH) ? m_amendmentTable->getDesired()
+
1685
-
1686void
-
-
1687ApplicationImp::startGenesisLedger()
-
1688{
-
1689 std::vector<uint256> const initialAmendments =
-
1690 (config_->START_UP == Config::FRESH) ? m_amendmentTable->getDesired()
- -
1692
- -
1694 create_genesis, *config_, initialAmendments, nodeFamily_);
-
1695 m_ledgerMaster->storeLedger(genesis);
-
1696
-
1697 auto const next =
-
1698 std::make_shared<Ledger>(*genesis, timeKeeper().closeTime());
-
1699 next->updateSkipList();
-
1700 XRPL_ASSERT(
-
1701 next->header().seq < XRP_LEDGER_EARLIEST_FEES ||
-
1702 next->read(keylet::fees()),
-
1703 "xrpl::ApplicationImp::startGenesisLedger : valid ledger fees");
-
1704 next->setImmutable();
-
1705 openLedger_.emplace(next, cachedSLEs_, logs_->journal("OpenLedger"));
-
1706 m_ledgerMaster->storeLedger(next);
-
1707 m_ledgerMaster->switchLCL(next);
-
1708}
+ +
1687 create_genesis, *config_, initialAmendments, nodeFamily_);
+
1688 m_ledgerMaster->storeLedger(genesis);
+
1689
+
1690 auto const next =
+
1691 std::make_shared<Ledger>(*genesis, timeKeeper().closeTime());
+
1692 next->updateSkipList();
+
1693 XRPL_ASSERT(
+
1694 next->header().seq < XRP_LEDGER_EARLIEST_FEES ||
+
1695 next->read(keylet::fees()),
+
1696 "xrpl::ApplicationImp::startGenesisLedger : valid ledger fees");
+
1697 next->setImmutable();
+
1698 openLedger_.emplace(next, cachedSLEs_, logs_->journal("OpenLedger"));
+
1699 m_ledgerMaster->storeLedger(next);
+
1700 m_ledgerMaster->switchLCL(next);
+
1701}
-
1709
- -
-
1711ApplicationImp::getLastFullLedger()
-
1712{
-
1713 auto j = journal("Ledger");
+
1702
+ +
+
1704ApplicationImp::getLastFullLedger()
+
1705{
+
1706 auto j = journal("Ledger");
+
1707
+
1708 try
+
1709 {
+
1710 auto const [ledger, seq, hash] = getLatestLedger(*this);
+
1711
+
1712 if (!ledger)
+
1713 return ledger;
1714
-
1715 try
-
1716 {
-
1717 auto const [ledger, seq, hash] = getLatestLedger(*this);
-
1718
-
1719 if (!ledger)
-
1720 return ledger;
-
1721
-
1722 XRPL_ASSERT(
-
1723 ledger->header().seq < XRP_LEDGER_EARLIEST_FEES ||
-
1724 ledger->read(keylet::fees()),
-
1725 "xrpl::ApplicationImp::getLastFullLedger : valid ledger fees");
-
1726 ledger->setImmutable();
-
1727
-
1728 if (getLedgerMaster().haveLedger(seq))
-
1729 ledger->setValidated();
-
1730
-
1731 if (ledger->header().hash == hash)
-
1732 {
-
1733 JLOG(j.trace()) << "Loaded ledger: " << hash;
-
1734 return ledger;
-
1735 }
-
1736
-
1737 if (auto stream = j.error())
-
1738 {
-
1739 stream << "Failed on ledger";
-
1740 Json::Value p;
-
1741 addJson(p, {*ledger, nullptr, LedgerFill::full});
-
1742 stream << p;
-
1743 }
-
1744
-
1745 return {};
-
1746 }
-
1747 catch (SHAMapMissingNode const& mn)
-
1748 {
-
1749 JLOG(j.warn()) << "Ledger in database: " << mn.what();
-
1750 return {};
-
1751 }
-
1752}
+
1715 XRPL_ASSERT(
+
1716 ledger->header().seq < XRP_LEDGER_EARLIEST_FEES ||
+
1717 ledger->read(keylet::fees()),
+
1718 "xrpl::ApplicationImp::getLastFullLedger : valid ledger fees");
+
1719 ledger->setImmutable();
+
1720
+
1721 if (getLedgerMaster().haveLedger(seq))
+
1722 ledger->setValidated();
+
1723
+
1724 if (ledger->header().hash == hash)
+
1725 {
+
1726 JLOG(j.trace()) << "Loaded ledger: " << hash;
+
1727 return ledger;
+
1728 }
+
1729
+
1730 if (auto stream = j.error())
+
1731 {
+
1732 stream << "Failed on ledger";
+
1733 Json::Value p;
+
1734 addJson(p, {*ledger, nullptr, LedgerFill::full});
+
1735 stream << p;
+
1736 }
+
1737
+
1738 return {};
+
1739 }
+
1740 catch (SHAMapMissingNode const& mn)
+
1741 {
+
1742 JLOG(j.warn()) << "Ledger in database: " << mn.what();
+
1743 return {};
+
1744 }
+
1745}
+
1746
+ +
+
1748ApplicationImp::loadLedgerFromFile(std::string const& name)
+
1749{
+
1750 try
+
1751 {
+
1752 std::ifstream ledgerFile(name, std::ios::in);
1753
- -
-
1755ApplicationImp::loadLedgerFromFile(std::string const& name)
-
1756{
-
1757 try
-
1758 {
-
1759 std::ifstream ledgerFile(name, std::ios::in);
-
1760
-
1761 if (!ledgerFile)
-
1762 {
-
1763 JLOG(m_journal.fatal()) << "Unable to open file '" << name << "'";
-
1764 return nullptr;
-
1765 }
-
1766
-
1767 Json::Reader reader;
-
1768 Json::Value jLedger;
-
1769
-
1770 if (!reader.parse(ledgerFile, jLedger))
-
1771 {
-
1772 JLOG(m_journal.fatal()) << "Unable to parse ledger JSON";
-
1773 return nullptr;
-
1774 }
-
1775
- +
1754 if (!ledgerFile)
+
1755 {
+
1756 JLOG(m_journal.fatal()) << "Unable to open file '" << name << "'";
+
1757 return nullptr;
+
1758 }
+
1759
+
1760 Json::Reader reader;
+
1761 Json::Value jLedger;
+
1762
+
1763 if (!reader.parse(ledgerFile, jLedger))
+
1764 {
+
1765 JLOG(m_journal.fatal()) << "Unable to parse ledger JSON";
+
1766 return nullptr;
+
1767 }
+
1768
+ +
1770
+
1771 // accept a wrapped ledger
+
1772 if (ledger.get().isMember("result"))
+
1773 ledger = ledger.get()["result"];
+
1774
+
1775 if (ledger.get().isMember("ledger"))
+
1776 ledger = ledger.get()["ledger"];
1777
-
1778 // accept a wrapped ledger
-
1779 if (ledger.get().isMember("result"))
-
1780 ledger = ledger.get()["result"];
-
1781
-
1782 if (ledger.get().isMember("ledger"))
-
1783 ledger = ledger.get()["ledger"];
+
1778 std::uint32_t seq = 1;
+
1779 auto closeTime = timeKeeper().closeTime();
+
1780 using namespace std::chrono_literals;
+
1781 auto closeTimeResolution = 30s;
+
1782 bool closeTimeEstimated = false;
+
1783 std::uint64_t totalDrops = 0;
1784
-
1785 std::uint32_t seq = 1;
-
1786 auto closeTime = timeKeeper().closeTime();
-
1787 using namespace std::chrono_literals;
-
1788 auto closeTimeResolution = 30s;
-
1789 bool closeTimeEstimated = false;
-
1790 std::uint64_t totalDrops = 0;
+
1785 if (ledger.get().isMember("accountState"))
+
1786 {
+
1787 if (ledger.get().isMember(jss::ledger_index))
+
1788 {
+
1789 seq = ledger.get()[jss::ledger_index].asUInt();
+
1790 }
1791
-
1792 if (ledger.get().isMember("accountState"))
-
1793 {
-
1794 if (ledger.get().isMember(jss::ledger_index))
-
1795 {
-
1796 seq = ledger.get()[jss::ledger_index].asUInt();
+
1792 if (ledger.get().isMember("close_time"))
+
1793 {
+
1794 using tp = NetClock::time_point;
+
1795 using d = tp::duration;
+
1796 closeTime = tp{d{ledger.get()["close_time"].asUInt()}};
1797 }
-
1798
-
1799 if (ledger.get().isMember("close_time"))
-
1800 {
-
1801 using tp = NetClock::time_point;
-
1802 using d = tp::duration;
-
1803 closeTime = tp{d{ledger.get()["close_time"].asUInt()}};
-
1804 }
-
1805 if (ledger.get().isMember("close_time_resolution"))
-
1806 {
-
1807 using namespace std::chrono;
-
1808 closeTimeResolution =
-
1809 seconds{ledger.get()["close_time_resolution"].asUInt()};
-
1810 }
-
1811 if (ledger.get().isMember("close_time_estimated"))
-
1812 {
-
1813 closeTimeEstimated =
-
1814 ledger.get()["close_time_estimated"].asBool();
-
1815 }
-
1816 if (ledger.get().isMember("total_coins"))
-
1817 {
-
1818 totalDrops = beast::lexicalCastThrow<std::uint64_t>(
-
1819 ledger.get()["total_coins"].asString());
-
1820 }
-
1821
-
1822 ledger = ledger.get()["accountState"];
-
1823 }
-
1824
-
1825 if (!ledger.get().isArrayOrNull())
-
1826 {
-
1827 JLOG(m_journal.fatal()) << "State nodes must be an array";
-
1828 return nullptr;
-
1829 }
-
1830
-
1831 auto loadLedger =
-
1832 std::make_shared<Ledger>(seq, closeTime, *config_, nodeFamily_);
-
1833 loadLedger->setTotalDrops(totalDrops);
-
1834
-
1835 for (Json::UInt index = 0; index < ledger.get().size(); ++index)
-
1836 {
-
1837 Json::Value& entry = ledger.get()[index];
-
1838
-
1839 if (!entry.isObjectOrNull())
-
1840 {
-
1841 JLOG(m_journal.fatal()) << "Invalid entry in ledger";
-
1842 return nullptr;
-
1843 }
-
1844
-
1845 uint256 uIndex;
-
1846
-
1847 if (!uIndex.parseHex(entry[jss::index].asString()))
-
1848 {
-
1849 JLOG(m_journal.fatal()) << "Invalid entry in ledger";
-
1850 return nullptr;
-
1851 }
-
1852
-
1853 entry.removeMember(jss::index);
-
1854
-
1855 STParsedJSONObject stp("sle", ledger.get()[index]);
-
1856
-
1857 if (!stp.object || uIndex.isZero())
-
1858 {
-
1859 JLOG(m_journal.fatal()) << "Invalid entry in ledger";
-
1860 return nullptr;
-
1861 }
-
1862
-
1863 // VFALCO TODO This is the only place that
-
1864 // constructor is used, try to remove it
-
1865 STLedgerEntry sle(*stp.object, uIndex);
-
1866
-
1867 if (!loadLedger->addSLE(sle))
-
1868 {
-
1869 JLOG(m_journal.fatal())
-
1870 << "Couldn't add serialized ledger: " << uIndex;
-
1871 return nullptr;
-
1872 }
-
1873 }
-
1874
-
1875 loadLedger->stateMap().flushDirty(hotACCOUNT_NODE);
+
1798 if (ledger.get().isMember("close_time_resolution"))
+
1799 {
+
1800 using namespace std::chrono;
+
1801 closeTimeResolution =
+
1802 seconds{ledger.get()["close_time_resolution"].asUInt()};
+
1803 }
+
1804 if (ledger.get().isMember("close_time_estimated"))
+
1805 {
+
1806 closeTimeEstimated =
+
1807 ledger.get()["close_time_estimated"].asBool();
+
1808 }
+
1809 if (ledger.get().isMember("total_coins"))
+
1810 {
+
1811 totalDrops = beast::lexicalCastThrow<std::uint64_t>(
+
1812 ledger.get()["total_coins"].asString());
+
1813 }
+
1814
+
1815 ledger = ledger.get()["accountState"];
+
1816 }
+
1817
+
1818 if (!ledger.get().isArrayOrNull())
+
1819 {
+
1820 JLOG(m_journal.fatal()) << "State nodes must be an array";
+
1821 return nullptr;
+
1822 }
+
1823
+
1824 auto loadLedger =
+
1825 std::make_shared<Ledger>(seq, closeTime, *config_, nodeFamily_);
+
1826 loadLedger->setTotalDrops(totalDrops);
+
1827
+
1828 for (Json::UInt index = 0; index < ledger.get().size(); ++index)
+
1829 {
+
1830 Json::Value& entry = ledger.get()[index];
+
1831
+
1832 if (!entry.isObjectOrNull())
+
1833 {
+
1834 JLOG(m_journal.fatal()) << "Invalid entry in ledger";
+
1835 return nullptr;
+
1836 }
+
1837
+
1838 uint256 uIndex;
+
1839
+
1840 if (!uIndex.parseHex(entry[jss::index].asString()))
+
1841 {
+
1842 JLOG(m_journal.fatal()) << "Invalid entry in ledger";
+
1843 return nullptr;
+
1844 }
+
1845
+
1846 entry.removeMember(jss::index);
+
1847
+
1848 STParsedJSONObject stp("sle", ledger.get()[index]);
+
1849
+
1850 if (!stp.object || uIndex.isZero())
+
1851 {
+
1852 JLOG(m_journal.fatal()) << "Invalid entry in ledger";
+
1853 return nullptr;
+
1854 }
+
1855
+
1856 // VFALCO TODO This is the only place that
+
1857 // constructor is used, try to remove it
+
1858 STLedgerEntry sle(*stp.object, uIndex);
+
1859
+
1860 if (!loadLedger->addSLE(sle))
+
1861 {
+
1862 JLOG(m_journal.fatal())
+
1863 << "Couldn't add serialized ledger: " << uIndex;
+
1864 return nullptr;
+
1865 }
+
1866 }
+
1867
+
1868 loadLedger->stateMap().flushDirty(hotACCOUNT_NODE);
+
1869
+
1870 XRPL_ASSERT(
+
1871 loadLedger->header().seq < XRP_LEDGER_EARLIEST_FEES ||
+
1872 loadLedger->read(keylet::fees()),
+
1873 "xrpl::ApplicationImp::loadLedgerFromFile : valid ledger fees");
+
1874 loadLedger->setAccepted(
+
1875 closeTime, closeTimeResolution, !closeTimeEstimated);
1876
-
1877 XRPL_ASSERT(
-
1878 loadLedger->header().seq < XRP_LEDGER_EARLIEST_FEES ||
-
1879 loadLedger->read(keylet::fees()),
-
1880 "xrpl::ApplicationImp::loadLedgerFromFile : valid ledger fees");
-
1881 loadLedger->setAccepted(
-
1882 closeTime, closeTimeResolution, !closeTimeEstimated);
-
1883
-
1884 return loadLedger;
-
1885 }
-
1886 catch (std::exception const& x)
-
1887 {
-
1888 JLOG(m_journal.fatal()) << "Ledger contains invalid data: " << x.what();
-
1889 return nullptr;
-
1890 }
-
1891}
+
1877 return loadLedger;
+
1878 }
+
1879 catch (std::exception const& x)
+
1880 {
+
1881 JLOG(m_journal.fatal()) << "Ledger contains invalid data: " << x.what();
+
1882 return nullptr;
+
1883 }
+
1884}
-
1892
-
1893bool
-
-
1894ApplicationImp::loadOldLedger(
-
1895 std::string const& ledgerID,
-
1896 bool replay,
-
1897 bool isFileName,
-
1898 std::optional<uint256> trapTxID)
-
1899{
-
1900 try
-
1901 {
-
1902 std::shared_ptr<Ledger const> loadLedger, replayLedger;
-
1903
-
1904 if (isFileName)
-
1905 {
-
1906 if (!ledgerID.empty())
-
1907 loadLedger = loadLedgerFromFile(ledgerID);
-
1908 }
-
1909 else if (ledgerID.length() == 64)
-
1910 {
-
1911 uint256 hash;
-
1912
-
1913 if (hash.parseHex(ledgerID))
-
1914 {
-
1915 loadLedger = loadByHash(hash, *this);
-
1916
-
1917 if (!loadLedger)
-
1918 {
-
1919 // Try to build the ledger from the back end
- -
1921 *this,
-
1922 hash,
-
1923 0,
-
1924 InboundLedger::Reason::GENERIC,
-
1925 stopwatch(),
-
1926 make_DummyPeerSet(*this));
-
1927 if (il->checkLocal())
-
1928 loadLedger = il->getLedger();
-
1929 }
-
1930 }
-
1931 }
-
1932 else if (ledgerID.empty() || boost::iequals(ledgerID, "latest"))
-
1933 {
-
1934 loadLedger = getLastFullLedger();
-
1935 }
-
1936 else
-
1937 {
-
1938 // assume by sequence
-
1939 std::uint32_t index;
+
1885
+
1886bool
+
+
1887ApplicationImp::loadOldLedger(
+
1888 std::string const& ledgerID,
+
1889 bool replay,
+
1890 bool isFileName,
+
1891 std::optional<uint256> trapTxID)
+
1892{
+
1893 try
+
1894 {
+
1895 std::shared_ptr<Ledger const> loadLedger, replayLedger;
+
1896
+
1897 if (isFileName)
+
1898 {
+
1899 if (!ledgerID.empty())
+
1900 loadLedger = loadLedgerFromFile(ledgerID);
+
1901 }
+
1902 else if (ledgerID.length() == 64)
+
1903 {
+
1904 uint256 hash;
+
1905
+
1906 if (hash.parseHex(ledgerID))
+
1907 {
+
1908 loadLedger = loadByHash(hash, *this);
+
1909
+
1910 if (!loadLedger)
+
1911 {
+
1912 // Try to build the ledger from the back end
+ +
1914 *this,
+
1915 hash,
+
1916 0,
+
1917 InboundLedger::Reason::GENERIC,
+
1918 stopwatch(),
+
1919 make_DummyPeerSet(*this));
+
1920 if (il->checkLocal())
+
1921 loadLedger = il->getLedger();
+
1922 }
+
1923 }
+
1924 }
+
1925 else if (ledgerID.empty() || boost::iequals(ledgerID, "latest"))
+
1926 {
+
1927 loadLedger = getLastFullLedger();
+
1928 }
+
1929 else
+
1930 {
+
1931 // assume by sequence
+
1932 std::uint32_t index;
+
1933
+
1934 if (beast::lexicalCastChecked(index, ledgerID))
+
1935 loadLedger = loadByIndex(index, *this);
+
1936 }
+
1937
+
1938 if (!loadLedger)
+
1939 return false;
1940
-
1941 if (beast::lexicalCastChecked(index, ledgerID))
-
1942 loadLedger = loadByIndex(index, *this);
-
1943 }
+
1941 if (replay)
+
1942 {
+
1943 // Replay a ledger close with same prior ledger and transactions
1944
-
1945 if (!loadLedger)
-
1946 return false;
+
1945 // this ledger holds the transactions we want to replay
+
1946 replayLedger = loadLedger;
1947
-
1948 if (replay)
-
1949 {
-
1950 // Replay a ledger close with same prior ledger and transactions
-
1951
-
1952 // this ledger holds the transactions we want to replay
-
1953 replayLedger = loadLedger;
-
1954
-
1955 JLOG(m_journal.info()) << "Loading parent ledger";
-
1956
-
1957 loadLedger = loadByHash(replayLedger->header().parentHash, *this);
-
1958 if (!loadLedger)
-
1959 {
-
1960 JLOG(m_journal.info())
-
1961 << "Loading parent ledger from node store";
-
1962
-
1963 // Try to build the ledger from the back end
- -
1965 *this,
-
1966 replayLedger->header().parentHash,
-
1967 0,
-
1968 InboundLedger::Reason::GENERIC,
-
1969 stopwatch(),
-
1970 make_DummyPeerSet(*this));
-
1971
-
1972 if (il->checkLocal())
-
1973 loadLedger = il->getLedger();
-
1974
-
1975 if (!loadLedger)
-
1976 {
-
1977 // LCOV_EXCL_START
-
1978 JLOG(m_journal.fatal()) << "Replay ledger missing/damaged";
-
1979 UNREACHABLE(
-
1980 "xrpl::ApplicationImp::loadOldLedger : replay ledger "
-
1981 "missing/damaged");
-
1982 return false;
-
1983 // LCOV_EXCL_STOP
-
1984 }
-
1985 }
-
1986 }
-
1987 using namespace std::chrono_literals;
-
1988 using namespace date;
-
1989 static constexpr NetClock::time_point ledgerWarnTimePoint{
-
1990 sys_days{January / 1 / 2018} - sys_days{January / 1 / 2000}};
-
1991 if (loadLedger->header().closeTime < ledgerWarnTimePoint)
-
1992 {
-
1993 JLOG(m_journal.fatal())
-
1994 << "\n\n*** WARNING ***\n"
-
1995 "You are replaying a ledger from before "
-
1996 << to_string(ledgerWarnTimePoint)
-
1997 << " UTC.\n"
-
1998 "This replay will not handle your ledger as it was "
-
1999 "originally "
-
2000 "handled.\nConsider running an earlier version of rippled "
-
2001 "to "
-
2002 "get the older rules.\n*** CONTINUING ***\n";
-
2003 }
-
2004
-
2005 JLOG(m_journal.info()) << "Loading ledger " << loadLedger->header().hash
-
2006 << " seq:" << loadLedger->header().seq;
-
2007
-
2008 if (loadLedger->header().accountHash.isZero())
-
2009 {
-
2010 // LCOV_EXCL_START
-
2011 JLOG(m_journal.fatal()) << "Ledger is empty.";
-
2012 UNREACHABLE(
-
2013 "xrpl::ApplicationImp::loadOldLedger : ledger is empty");
-
2014 return false;
-
2015 // LCOV_EXCL_STOP
-
2016 }
-
2017
-
2018 if (!loadLedger->walkLedger(journal("Ledger"), true))
-
2019 {
-
2020 // LCOV_EXCL_START
-
2021 JLOG(m_journal.fatal()) << "Ledger is missing nodes.";
-
2022 UNREACHABLE(
-
2023 "xrpl::ApplicationImp::loadOldLedger : ledger is missing "
-
2024 "nodes");
-
2025 return false;
-
2026 // LCOV_EXCL_STOP
-
2027 }
-
2028
-
2029 if (!loadLedger->assertSensible(journal("Ledger")))
-
2030 {
-
2031 // LCOV_EXCL_START
-
2032 JLOG(m_journal.fatal()) << "Ledger is not sensible.";
-
2033 UNREACHABLE(
-
2034 "xrpl::ApplicationImp::loadOldLedger : ledger is not "
-
2035 "sensible");
-
2036 return false;
-
2037 // LCOV_EXCL_STOP
-
2038 }
-
2039
-
2040 m_ledgerMaster->setLedgerRangePresent(
-
2041 loadLedger->header().seq, loadLedger->header().seq);
-
2042
-
2043 m_ledgerMaster->switchLCL(loadLedger);
-
2044 loadLedger->setValidated();
-
2045 m_ledgerMaster->setFullLedger(loadLedger, true, false);
-
2046 openLedger_.emplace(
-
2047 loadLedger, cachedSLEs_, logs_->journal("OpenLedger"));
+
1948 JLOG(m_journal.info()) << "Loading parent ledger";
+
1949
+
1950 loadLedger = loadByHash(replayLedger->header().parentHash, *this);
+
1951 if (!loadLedger)
+
1952 {
+
1953 JLOG(m_journal.info())
+
1954 << "Loading parent ledger from node store";
+
1955
+
1956 // Try to build the ledger from the back end
+ +
1958 *this,
+
1959 replayLedger->header().parentHash,
+
1960 0,
+
1961 InboundLedger::Reason::GENERIC,
+
1962 stopwatch(),
+
1963 make_DummyPeerSet(*this));
+
1964
+
1965 if (il->checkLocal())
+
1966 loadLedger = il->getLedger();
+
1967
+
1968 if (!loadLedger)
+
1969 {
+
1970 // LCOV_EXCL_START
+
1971 JLOG(m_journal.fatal()) << "Replay ledger missing/damaged";
+
1972 UNREACHABLE(
+
1973 "xrpl::ApplicationImp::loadOldLedger : replay ledger "
+
1974 "missing/damaged");
+
1975 return false;
+
1976 // LCOV_EXCL_STOP
+
1977 }
+
1978 }
+
1979 }
+
1980 using namespace std::chrono_literals;
+
1981 using namespace date;
+
1982 static constexpr NetClock::time_point ledgerWarnTimePoint{
+
1983 sys_days{January / 1 / 2018} - sys_days{January / 1 / 2000}};
+
1984 if (loadLedger->header().closeTime < ledgerWarnTimePoint)
+
1985 {
+
1986 JLOG(m_journal.fatal())
+
1987 << "\n\n*** WARNING ***\n"
+
1988 "You are replaying a ledger from before "
+
1989 << to_string(ledgerWarnTimePoint)
+
1990 << " UTC.\n"
+
1991 "This replay will not handle your ledger as it was "
+
1992 "originally "
+
1993 "handled.\nConsider running an earlier version of rippled "
+
1994 "to "
+
1995 "get the older rules.\n*** CONTINUING ***\n";
+
1996 }
+
1997
+
1998 JLOG(m_journal.info()) << "Loading ledger " << loadLedger->header().hash
+
1999 << " seq:" << loadLedger->header().seq;
+
2000
+
2001 if (loadLedger->header().accountHash.isZero())
+
2002 {
+
2003 // LCOV_EXCL_START
+
2004 JLOG(m_journal.fatal()) << "Ledger is empty.";
+
2005 UNREACHABLE(
+
2006 "xrpl::ApplicationImp::loadOldLedger : ledger is empty");
+
2007 return false;
+
2008 // LCOV_EXCL_STOP
+
2009 }
+
2010
+
2011 if (!loadLedger->walkLedger(journal("Ledger"), true))
+
2012 {
+
2013 // LCOV_EXCL_START
+
2014 JLOG(m_journal.fatal()) << "Ledger is missing nodes.";
+
2015 UNREACHABLE(
+
2016 "xrpl::ApplicationImp::loadOldLedger : ledger is missing "
+
2017 "nodes");
+
2018 return false;
+
2019 // LCOV_EXCL_STOP
+
2020 }
+
2021
+
2022 if (!loadLedger->assertSensible(journal("Ledger")))
+
2023 {
+
2024 // LCOV_EXCL_START
+
2025 JLOG(m_journal.fatal()) << "Ledger is not sensible.";
+
2026 UNREACHABLE(
+
2027 "xrpl::ApplicationImp::loadOldLedger : ledger is not "
+
2028 "sensible");
+
2029 return false;
+
2030 // LCOV_EXCL_STOP
+
2031 }
+
2032
+
2033 m_ledgerMaster->setLedgerRangePresent(
+
2034 loadLedger->header().seq, loadLedger->header().seq);
+
2035
+
2036 m_ledgerMaster->switchLCL(loadLedger);
+
2037 loadLedger->setValidated();
+
2038 m_ledgerMaster->setFullLedger(loadLedger, true, false);
+
2039 openLedger_.emplace(
+
2040 loadLedger, cachedSLEs_, logs_->journal("OpenLedger"));
+
2041
+
2042 if (replay)
+
2043 {
+
2044 // inject transaction(s) from the replayLedger into our open ledger
+
2045 // and build replay structure
+
2046 auto replayData =
+
2047 std::make_unique<LedgerReplay>(loadLedger, replayLedger);
2048
-
2049 if (replay)
-
2050 {
-
2051 // inject transaction(s) from the replayLedger into our open ledger
-
2052 // and build replay structure
-
2053 auto replayData =
-
2054 std::make_unique<LedgerReplay>(loadLedger, replayLedger);
-
2055
-
2056 for (auto const& [_, tx] : replayData->orderedTxns())
-
2057 {
-
2058 (void)_;
-
2059 auto txID = tx->getTransactionID();
-
2060 if (trapTxID == txID)
-
2061 {
-
2062 trapTxID_ = txID;
-
2063 JLOG(m_journal.debug()) << "Trap transaction set: " << txID;
-
2064 }
-
2065
- -
2067 tx->add(*s);
-
2068
-
2069 forceValidity(getHashRouter(), txID, Validity::SigGoodOnly);
+
2049 for (auto const& [_, tx] : replayData->orderedTxns())
+
2050 {
+
2051 (void)_;
+
2052 auto txID = tx->getTransactionID();
+
2053 if (trapTxID == txID)
+
2054 {
+
2055 trapTxID_ = txID;
+
2056 JLOG(m_journal.debug()) << "Trap transaction set: " << txID;
+
2057 }
+
2058
+ +
2060 tx->add(*s);
+
2061
+
2062 forceValidity(getHashRouter(), txID, Validity::SigGoodOnly);
+
2063
+
2064 openLedger_->modify(
+
2065 [&txID, &s](OpenView& view, beast::Journal j) {
+
2066 view.rawTxInsert(txID, std::move(s), nullptr);
+
2067 return true;
+
2068 });
+
2069 }
2070
-
2071 openLedger_->modify(
-
2072 [&txID, &s](OpenView& view, beast::Journal j) {
-
2073 view.rawTxInsert(txID, std::move(s), nullptr);
-
2074 return true;
-
2075 });
-
2076 }
-
2077
-
2078 m_ledgerMaster->takeReplay(std::move(replayData));
-
2079
-
2080 if (trapTxID && !trapTxID_)
-
2081 {
-
2082 JLOG(m_journal.fatal())
-
2083 << "Ledger " << replayLedger->header().seq
-
2084 << " does not contain the transaction hash " << *trapTxID;
-
2085 return false;
-
2086 }
-
2087 }
-
2088 }
-
2089 catch (SHAMapMissingNode const& mn)
-
2090 {
-
2091 JLOG(m_journal.fatal())
-
2092 << "While loading specified ledger: " << mn.what();
-
2093 return false;
-
2094 }
-
2095 catch (boost::bad_lexical_cast&)
-
2096 {
-
2097 JLOG(m_journal.fatal())
-
2098 << "Ledger specified '" << ledgerID << "' is not valid";
-
2099 return false;
-
2100 }
-
2101
-
2102 return true;
-
2103}
+
2071 m_ledgerMaster->takeReplay(std::move(replayData));
+
2072
+
2073 if (trapTxID && !trapTxID_)
+
2074 {
+
2075 JLOG(m_journal.fatal())
+
2076 << "Ledger " << replayLedger->header().seq
+
2077 << " does not contain the transaction hash " << *trapTxID;
+
2078 return false;
+
2079 }
+
2080 }
+
2081 }
+
2082 catch (SHAMapMissingNode const& mn)
+
2083 {
+
2084 JLOG(m_journal.fatal())
+
2085 << "While loading specified ledger: " << mn.what();
+
2086 return false;
+
2087 }
+
2088 catch (boost::bad_lexical_cast&)
+
2089 {
+
2090 JLOG(m_journal.fatal())
+
2091 << "Ledger specified '" << ledgerID << "' is not valid";
+
2092 return false;
+
2093 }
+
2094
+
2095 return true;
+
2096}
-
2104
-
2105bool
-
-
2106ApplicationImp::serverOkay(std::string& reason)
-
2107{
-
2108 if (!config().ELB_SUPPORT)
-
2109 return true;
-
2110
-
2111 if (isStopping())
-
2112 {
-
2113 reason = "Server is shutting down";
-
2114 return false;
-
2115 }
-
2116
-
2117 if (getOPs().isNeedNetworkLedger())
-
2118 {
-
2119 reason = "Not synchronized with network yet";
-
2120 return false;
-
2121 }
-
2122
-
2123 if (getOPs().isAmendmentBlocked())
-
2124 {
-
2125 reason = "Server version too old";
-
2126 return false;
-
2127 }
-
2128
-
2129 if (getOPs().isUNLBlocked())
-
2130 {
-
2131 reason = "No valid validator list available";
-
2132 return false;
-
2133 }
-
2134
-
2135 if (getOPs().getOperatingMode() < OperatingMode::SYNCING)
-
2136 {
-
2137 reason = "Not synchronized with network";
-
2138 return false;
-
2139 }
-
2140
-
2141 if (!getLedgerMaster().isCaughtUp(reason))
-
2142 return false;
-
2143
-
2144 if (getFeeTrack().isLoadedLocal())
-
2145 {
-
2146 reason = "Too much load";
-
2147 return false;
-
2148 }
-
2149
-
2150 return true;
-
2151}
+
2097
+
2098bool
+
+
2099ApplicationImp::serverOkay(std::string& reason)
+
2100{
+
2101 if (!config().ELB_SUPPORT)
+
2102 return true;
+
2103
+
2104 if (isStopping())
+
2105 {
+
2106 reason = "Server is shutting down";
+
2107 return false;
+
2108 }
+
2109
+
2110 if (getOPs().isNeedNetworkLedger())
+
2111 {
+
2112 reason = "Not synchronized with network yet";
+
2113 return false;
+
2114 }
+
2115
+
2116 if (getOPs().isAmendmentBlocked())
+
2117 {
+
2118 reason = "Server version too old";
+
2119 return false;
+
2120 }
+
2121
+
2122 if (getOPs().isUNLBlocked())
+
2123 {
+
2124 reason = "No valid validator list available";
+
2125 return false;
+
2126 }
+
2127
+
2128 if (getOPs().getOperatingMode() < OperatingMode::SYNCING)
+
2129 {
+
2130 reason = "Not synchronized with network";
+
2131 return false;
+
2132 }
+
2133
+
2134 if (!getLedgerMaster().isCaughtUp(reason))
+
2135 return false;
+
2136
+
2137 if (getFeeTrack().isLoadedLocal())
+
2138 {
+
2139 reason = "Too much load";
+
2140 return false;
+
2141 }
+
2142
+
2143 return true;
+
2144}
-
2152
- -
-
2154ApplicationImp::journal(std::string const& name)
-
2155{
-
2156 return logs_->journal(name);
-
2157}
+
2145
+ +
+
2147ApplicationImp::journal(std::string const& name)
+
2148{
+
2149 return logs_->journal(name);
+
2150}
+
2151
+
2152void
+
+
2153ApplicationImp::setMaxDisallowedLedger()
+
2154{
+
2155 auto seq = getRelationalDatabase().getMaxLedgerSeq();
+
2156 if (seq)
+
2157 maxDisallowedLedger_ = *seq;
2158
-
2159void
-
-
2160ApplicationImp::setMaxDisallowedLedger()
-
2161{
-
2162 auto seq = getRelationalDatabase().getMaxLedgerSeq();
-
2163 if (seq)
-
2164 maxDisallowedLedger_ = *seq;
-
2165
-
2166 JLOG(m_journal.trace())
-
2167 << "Max persisted ledger is " << maxDisallowedLedger_;
-
2168}
+
2159 JLOG(m_journal.trace())
+
2160 << "Max persisted ledger is " << maxDisallowedLedger_;
+
2161}
-
2169
-
2170//------------------------------------------------------------------------------
-
2171
+
2162
+
2163//------------------------------------------------------------------------------
+
2164
+
+
2165Application::Application() : beast::PropertyStream::Source("app")
+
2166{
+
2167}
+
+
2168
+
2169//------------------------------------------------------------------------------
+
2170
+
-
2172Application::Application() : beast::PropertyStream::Source("app")
-
2173{
-
2174}
+ + + +
2175 std::unique_ptr<TimeKeeper> timeKeeper)
+
2176{
+ +
2178 std::move(config), std::move(logs), std::move(timeKeeper));
+
2179}
-
2175
-
2176//------------------------------------------------------------------------------
-
2177
- -
- - - -
2182 std::unique_ptr<TimeKeeper> timeKeeper)
+
2180
+
2181void
+
+
2182fixConfigPorts(Config& config, Endpoints const& endpoints)
2183{
- -
2185 std::move(config), std::move(logs), std::move(timeKeeper));
-
2186}
+
2184 for (auto const& [name, ep] : endpoints)
+
2185 {
+
2186 if (!config.exists(name))
+
2187 continue;
+
2188
+
2189 auto& section = config[name];
+
2190 auto const optPort = section.get("port");
+
2191 if (optPort)
+
2192 {
+
2193 std::uint16_t const port =
+
2194 beast::lexicalCast<std::uint16_t>(*optPort);
+
2195 if (!port)
+
2196 section.set("port", std::to_string(ep.port()));
+
2197 }
+
2198 }
+
2199}
-
2187
-
2188void
-
-
2189fixConfigPorts(Config& config, Endpoints const& endpoints)
-
2190{
-
2191 for (auto const& [name, ep] : endpoints)
-
2192 {
-
2193 if (!config.exists(name))
-
2194 continue;
-
2195
-
2196 auto& section = config[name];
-
2197 auto const optPort = section.get("port");
-
2198 if (optPort)
-
2199 {
-
2200 std::uint16_t const port =
-
2201 beast::lexicalCast<std::uint16_t>(*optPort);
-
2202 if (!port)
-
2203 section.set("port", std::to_string(ep.port()));
-
2204 }
-
2205 }
-
2206}
-
-
2207
-
2208} // namespace xrpl
+
2200
+
2201} // namespace xrpl
+ @@ -2497,129 +2491,127 @@ $(document).ready(function() { init_codefold(0); }); -
LedgerReplayer & getLedgerReplayer() override
-
Application::MutexType & getMasterMutex() override
+
LedgerReplayer & getLedgerReplayer() override
+
Application::MutexType & getMasterMutex() override
std::optional< std::pair< PublicKey, SecretKey > > nodeIdentity_
-
InboundLedgers & getInboundLedgers() override
+
InboundLedgers & getInboundLedgers() override
std::unique_ptr< LedgerCleaner > ledgerCleaner_
std::unique_ptr< LoadManager > m_loadManager
-
void start(bool withTimers) override
-
LoadFeeTrack & getFeeTrack() override
-
Cluster & cluster() override
+
void start(bool withTimers) override
+
LoadFeeTrack & getFeeTrack() override
+
Cluster & cluster() override
std::unique_ptr< perf::PerfLog > perfLog_
std::unique_ptr< HashRouter > hashRouter_
std::optional< OpenLedger > openLedger_
-
RCLValidations & getValidations() override
-
void run() override
-
OpenLedger & openLedger() override
-
Resource::Manager & getResourceManager() override
+
RCLValidations & getValidations() override
+
void run() override
+
OpenLedger & openLedger() override
+
Resource::Manager & getResourceManager() override
NodeStoreScheduler m_nodeStoreScheduler
ClosureCounter< void, boost::system::error_code const & > waitHandlerCounter_
beast::Journal m_journal
-
RelationalDatabase & getRelationalDatabase() override
-
TransactionMaster & getMasterTransaction() override
-
std::chrono::milliseconds getIOLatency() override
+
RelationalDatabase & getRelationalDatabase() override
+
TransactionMaster & getMasterTransaction() override
+
std::chrono::milliseconds getIOLatency() override
std::unique_ptr< CollectorManager > m_collectorManager
-
boost::asio::io_context & getIOContext() override
-
std::optional< PublicKey const > getValidationPublicKey() const override
-
HashRouter & getHashRouter() override
-
LoadManager & getLoadManager() override
- +
boost::asio::io_context & getIOContext() override
+
std::optional< PublicKey const > getValidationPublicKey() const override
+
HashRouter & getHashRouter() override
+
LoadManager & getLoadManager() override
+
PendingSaves pendingSaves_
std::unique_ptr< RelationalDatabase > mRelationalDatabase
-
std::atomic< bool > checkSigs_
-
bool checkSigs() const override
-
bool serverOkay(std::string &reason) override
+
std::atomic< bool > checkSigs_
+
bool checkSigs() const override
+
bool serverOkay(std::string &reason) override
std::unique_ptr< SHAMapStore > m_shaMapStore
Application::MutexType m_masterMutex
-
InboundTransactions & getInboundTransactions() override
-
io_latency_sampler m_io_latency_sampler
+
InboundTransactions & getInboundTransactions() override
+
io_latency_sampler m_io_latency_sampler
std::unique_ptr< AmendmentTable > m_amendmentTable
std::unique_ptr< InboundTransactions > m_inboundTransactions
-
SHAMapStore & getSHAMapStore() override
+
SHAMapStore & getSHAMapStore() override
boost::asio::steady_timer sweepTimer_
std::unique_ptr< NodeStore::Database > m_nodeStore
std::unique_ptr< LoadFeeTrack > mFeeTrack
boost::asio::steady_timer entropyTimer_
std::unique_ptr< Overlay > overlay_
- -
bool setup(boost::program_options::variables_map const &cmdline) override
- -
Overlay & overlay() override
+
bool setup(boost::program_options::variables_map const &cmdline) override
+ +
Overlay & overlay() override
std::unique_ptr< Config > config_
-
ManifestCache & publisherManifests() override
+
ManifestCache & publisherManifests() override
std::unique_ptr< ManifestCache > validatorManifests_
-
CollectorManager & getCollectorManager() override
+
CollectorManager & getCollectorManager() override
std::optional< uint256 > trapTxID_
-
std::unique_ptr< ResolverAsio > m_resolver
-
NetworkOPs & getOPs() override
-
TimeKeeper & timeKeeper() override
+
std::unique_ptr< ResolverAsio > m_resolver
+
NetworkOPs & getOPs() override
+
TimeKeeper & timeKeeper() override
std::unique_ptr< ValidatorList > validators_
std::unique_ptr< TxQ > txQ_
-
static std::size_t numberOfThreads(Config const &config)
-
OpenLedger const & openLedger() const override
- - +
static std::size_t numberOfThreads(Config const &config)
+
OpenLedger const & openLedger() const override
+ +
std::unique_ptr< ManifestCache > publisherManifests_
-
LedgerIndex getMaxDisallowedLedger() override
Ensure that a newly-started validator does not sign proposals older than the last ledger it persisted...
-
NodeCache & getTempNodeCache() override
-
Logs & logs() override
-
std::atomic< bool > isTimeToStop
+
LedgerIndex getMaxDisallowedLedger() override
Ensure that a newly-started validator does not sign proposals older than the last ledger it persisted...
+
NodeCache & getTempNodeCache() override
+
Logs & logs() override
OrderBookDB m_orderBookDB
-
ValidatorList & validators() override
-
PeerReservationTable & peerReservations() override
-
ApplicationImp(std::unique_ptr< Config > config, std::unique_ptr< Logs > logs, std::unique_ptr< TimeKeeper > timeKeeper)
+
ValidatorList & validators() override
+
PeerReservationTable & peerReservations() override
+
ApplicationImp(std::unique_ptr< Config > config, std::unique_ptr< Logs > logs, std::unique_ptr< TimeKeeper > timeKeeper)
std::unique_ptr< PeerReservationTable > peerReservations_
std::unique_ptr< Resource::Manager > m_resourceManager
-
std::pair< PublicKey, SecretKey > const & nodeIdentity() override
+
std::pair< PublicKey, SecretKey > const & nodeIdentity() override
std::unique_ptr< Logs > logs_
std::unique_ptr< DatabaseCon > mWalletDB
-
CachedSLEs & cachedSLEs() override
-
ValidatorSite & validatorSites() override
-
virtual std::optional< uint256 > const & trapTxID() const override
+
CachedSLEs & cachedSLEs() override
+
ValidatorSite & validatorSites() override
+
virtual std::optional< uint256 > const & trapTxID() const override
+
std::atomic_flag isTimeToStop
std::unique_ptr< LedgerMaster > m_ledgerMaster
-
std::unique_ptr< GRPCServer > grpcServer_
+
std::unique_ptr< GRPCServer > grpcServer_
std::unique_ptr< ServerHandler > serverHandler_
ValidatorKeys const validatorKeys_
-
std::uint64_t instanceID() const override
Returns a 64-bit instance identifier, generated at startup.
-
OrderBookDB & getOrderBookDB() override
-
Family & getNodeFamily() override
-
void gotTXSet(std::shared_ptr< SHAMap > const &set, bool fromAcquire)
-
Config & config() override
- -
DatabaseCon & getWalletDB() override
Retrieve the "wallet database".
-
PathRequests & getPathRequests() override
-
bool isStopping() const override
+
std::uint64_t instanceID() const override
Returns a 64-bit instance identifier, generated at startup.
+
OrderBookDB & getOrderBookDB() override
+
Family & getNodeFamily() override
+
void gotTXSet(std::shared_ptr< SHAMap > const &set, bool fromAcquire)
+
Config & config() override
+ +
DatabaseCon & getWalletDB() override
Retrieve the "wallet database".
+
PathRequests & getPathRequests() override
+
bool isStopping() const override
std::unique_ptr< TimeKeeper > timeKeeper_
-
beast::Journal journal(std::string const &name) override
+
beast::Journal journal(std::string const &name) override
std::unique_ptr< ValidatorSite > validatorSites_
RCLValidations mValidations
-
void signalStop(std::string msg) override
+
void signalStop(std::string msg) override
std::uint64_t const instanceCookie_
-
LedgerCleaner & getLedgerCleaner() override
-
ManifestCache & validatorManifests() override
-
AmendmentTable & getAmendmentTable() override
-
int fdRequired() const override
-
std::condition_variable stoppingCondition_
+
LedgerCleaner & getLedgerCleaner() override
+
ManifestCache & validatorManifests() override
+
AmendmentTable & getAmendmentTable() override
+
int fdRequired() const override
TaggedCache< uint256, AcceptedLedger > m_acceptedLedgerCache
std::unique_ptr< PathRequests > m_pathRequests
std::unique_ptr< JobQueue > m_jobQueue
-
LedgerMaster & getLedgerMaster() override
-
NodeStore::Database & getNodeStore() override
+
LedgerMaster & getLedgerMaster() override
+
NodeStore::Database & getNodeStore() override
TransactionMaster m_txMaster
std::unique_ptr< Cluster > cluster_
std::unique_ptr< NetworkOPs > m_networkOPs
-
virtual ServerHandler & getServerHandler() override
-
JobQueue & getJobQueue() override
-
PendingSaves & pendingSaves() override
-
void onWrite(beast::PropertyStream::Map &stream) override
Subclass override.
+
virtual ServerHandler & getServerHandler() override
+
JobQueue & getJobQueue() override
+
PendingSaves & pendingSaves() override
+
void onWrite(beast::PropertyStream::Map &stream) override
Subclass override.
std::unique_ptr< InboundLedgers > m_inboundLedgers
-
TaggedCache< uint256, AcceptedLedger > & getAcceptedLedgerCache() override
-
perf::PerfLog & getPerfLog() override
-
TxQ & getTxQ() override
+
TaggedCache< uint256, AcceptedLedger > & getAcceptedLedgerCache() override
+
perf::PerfLog & getPerfLog() override
+
TxQ & getTxQ() override
boost::asio::signal_set m_signals
std::unique_ptr< LedgerReplayer > m_ledgerReplayer
@@ -2734,7 +2726,7 @@ $(document).ready(function() { init_codefold(0); }); -
std::unique_ptr< Application > make_Application(std::unique_ptr< Config > config, std::unique_ptr< Logs > logs, std::unique_ptr< TimeKeeper > timeKeeper)
+
std::unique_ptr< Application > make_Application(std::unique_ptr< Config > config, std::unique_ptr< Logs > logs, std::unique_ptr< TimeKeeper > timeKeeper)
ServerHandler::Setup setup_ServerHandler(Config const &config, std::ostream &&log)
std::shared_ptr< Ledger > loadByIndex(std::uint32_t ledgerIndex, Application &app, bool acquire)
Definition Ledger.cpp:1102
std::unique_ptr< CollectorManager > make_CollectorManager(Section const &params, beast::Journal journal)
@@ -2742,7 +2734,7 @@ $(document).ready(function() { init_codefold(0); });
std::unique_ptr< InboundLedgers > make_InboundLedgers(Application &app, InboundLedgers::clock_type &clock, beast::insight::Collector::ptr const &collector)
std::unique_ptr< ServerHandler > make_ServerHandler(Application &app, boost::asio::io_context &io_context, JobQueue &jobQueue, NetworkOPs &networkOPs, Resource::Manager &resourceManager, CollectorManager &cm)
constexpr auto megabytes(T value) noexcept
-
static void fixConfigPorts(Config &config, Endpoints const &endpoints)
+
static void fixConfigPorts(Config &config, Endpoints const &endpoints)
DatabaseCon::Setup setup_DatabaseCon(Config const &c, std::optional< beast::Journal > j=std::nullopt)
void initAccountIdCache(std::size_t count)
Initialize the global cache used to map AccountID to base58 conversions.
Definition AccountID.cpp:88
std::unique_ptr< InboundTransactions > make_InboundTransactions(Application &app, beast::insight::Collector::ptr const &collector, std::function< void(std::shared_ptr< SHAMap > const &, bool)> gotSet)
@@ -2771,7 +2763,6 @@ $(document).ready(function() { init_codefold(0); });
T to_string(T... args)
- diff --git a/Application_8h_source.html b/Application_8h_source.html index 8c70a287b3..a5f06479af 100644 --- a/Application_8h_source.html +++ b/Application_8h_source.html @@ -388,7 +388,7 @@ $(document).ready(function() { init_codefold(0); });
virtual ServerHandler & getServerHandler()=0
virtual CachedSLEs & cachedSLEs()=0
virtual std::optional< uint256 > const & trapTxID() const =0
- +
virtual TimeKeeper & timeKeeper()=0
virtual std::optional< PublicKey const > getValidationPublicKey() const =0
virtual LoadManager & getLoadManager()=0
@@ -460,7 +460,7 @@ $(document).ready(function() { init_codefold(0); });
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:6
TaggedCache< uint256, SLE const > CachedSLEs
Definition CachedSLEs.h:9
-
std::unique_ptr< Application > make_Application(std::unique_ptr< Config > config, std::unique_ptr< Logs > logs, std::unique_ptr< TimeKeeper > timeKeeper)
+
std::unique_ptr< Application > make_Application(std::unique_ptr< Config > config, std::unique_ptr< Logs > logs, std::unique_ptr< TimeKeeper > timeKeeper)
STLedgerEntry SLE
diff --git a/Env_8cpp_source.html b/Env_8cpp_source.html index db86f0dd5c..7f163aaebd 100644 --- a/Env_8cpp_source.html +++ b/Env_8cpp_source.html @@ -952,7 +952,7 @@ $(document).ready(function() { init_codefold(0); });
std::string transHuman(TER code)
Definition TER.cpp:254
std::pair< int, Json::Value > rpcClient(std::vector< std::string > const &args, Config const &config, Logs &logs, unsigned int apiVersion, std::unordered_map< std::string, std::string > const &headers)
Internal invocation of RPC client.
Definition RPCCall.cpp:1489
std::string transToken(TER code)
Definition TER.cpp:245
-
std::unique_ptr< Application > make_Application(std::unique_ptr< Config > config, std::unique_ptr< Logs > logs, std::unique_ptr< TimeKeeper > timeKeeper)
+
std::unique_ptr< Application > make_Application(std::unique_ptr< Config > config, std::unique_ptr< Logs > logs, std::unique_ptr< TimeKeeper > timeKeeper)
constexpr std::uint32_t asfDefaultRipple
Definition TxFlags.h:65
@ temMALFORMED
Definition TER.h:68
diff --git a/Main_8cpp_source.html b/Main_8cpp_source.html index b700cf29e1..cd7aad4d3b 100644 --- a/Main_8cpp_source.html +++ b/Main_8cpp_source.html @@ -995,7 +995,7 @@ $(document).ready(function() { init_codefold(0); });
int run(int argc, char **argv)
Definition Main.cpp:330
std::unique_ptr< beast::Journal::Sink > setDebugLogSink(std::unique_ptr< beast::Journal::Sink > sink)
Set the sink for the debug journal.
Definition Log.cpp:451
bool adjustDescriptorLimit(int needed, beast::Journal j)
Definition Main.cpp:59
-
std::unique_ptr< Application > make_Application(std::unique_ptr< Config > config, std::unique_ptr< Logs > logs, std::unique_ptr< TimeKeeper > timeKeeper)
+
std::unique_ptr< Application > make_Application(std::unique_ptr< Config > config, std::unique_ptr< Logs > logs, std::unique_ptr< TimeKeeper > timeKeeper)
DatabaseCon::Setup setup_DatabaseCon(Config const &c, std::optional< beast::Journal > j=std::nullopt)
static std::string const & systemName()
diff --git a/classxrpl_1_1Application.html b/classxrpl_1_1Application.html index 857db72a62..dc8c7aa693 100644 --- a/classxrpl_1_1Application.html +++ b/classxrpl_1_1Application.html @@ -356,7 +356,7 @@ Private Attributes
-

Definition at line 2172 of file Application.cpp.

+

Definition at line 2165 of file Application.cpp.

diff --git a/classxrpl_1_1ApplicationImp-members.html b/classxrpl_1_1ApplicationImp-members.html index 62c0fe1231..a077aa6bd5 100644 --- a/classxrpl_1_1ApplicationImp-members.html +++ b/classxrpl_1_1ApplicationImp-members.html @@ -144,7 +144,7 @@ $(function() { instanceID() const overridexrpl::ApplicationImpvirtual io_context_BasicAppprivate isStopping() const overridexrpl::ApplicationImpvirtual - isTimeToStopxrpl::ApplicationImp + isTimeToStopxrpl::ApplicationImp item_beast::PropertyStream::Sourceprivate journal(std::string const &name) overridexrpl::ApplicationImpvirtual ledgerCleaner_xrpl::ApplicationImp @@ -220,8 +220,6 @@ $(function() { Source(Source const &)=deletebeast::PropertyStream::Source start(bool withTimers) overridexrpl::ApplicationImpvirtual startGenesisLedger()xrpl::ApplicationImpprivate - stoppingCondition_xrpl::ApplicationImp - stoppingMutex_xrpl::ApplicationImpmutable sweepTimer_xrpl::ApplicationImp threads_BasicAppprivate timeKeeper() overridexrpl::ApplicationImpvirtual diff --git a/classxrpl_1_1ApplicationImp.html b/classxrpl_1_1ApplicationImp.html index ceaaa03ce7..5e24eae9da 100644 --- a/classxrpl_1_1ApplicationImp.html +++ b/classxrpl_1_1ApplicationImp.html @@ -402,12 +402,8 @@ Public Attributes   boost::asio::signal_set m_signals   -std::condition_variable stoppingCondition_ -  -std::mutex stoppingMutex_ -  -std::atomic< bool > isTimeToStop = false -  +std::atomic_flag isTimeToStopstd::atomic< bool > checkSigs_   std::unique_ptr< ResolverAsiom_resolver @@ -512,7 +508,7 @@ Private Attributes
-

Definition at line 246 of file Application.cpp.

+

Definition at line 242 of file Application.cpp.

@@ -541,7 +537,7 @@ Private Attributes
-

Definition at line 223 of file Application.cpp.

+

Definition at line 219 of file Application.cpp.

@@ -571,7 +567,7 @@ Private Attributes

Implements xrpl::Application.

-

Definition at line 1153 of file Application.cpp.

+

Definition at line 1149 of file Application.cpp.

@@ -601,7 +597,7 @@ Private Attributes

Implements xrpl::Application.

-

Definition at line 1504 of file Application.cpp.

+

Definition at line 1500 of file Application.cpp.

@@ -630,7 +626,7 @@ Private Attributes

Implements xrpl::Application.

-

Definition at line 1531 of file Application.cpp.

+

Definition at line 1527 of file Application.cpp.

@@ -660,7 +656,7 @@ Private Attributes

Implements xrpl::Application.

-

Definition at line 1630 of file Application.cpp.

+

Definition at line 1623 of file Application.cpp.

@@ -689,7 +685,7 @@ Private Attributes

Implements xrpl::Application.

-

Definition at line 1644 of file Application.cpp.

+

Definition at line 1637 of file Application.cpp.

@@ -719,7 +715,7 @@ Private Attributes

Implements xrpl::Application.

-

Definition at line 1650 of file Application.cpp.

+

Definition at line 1643 of file Application.cpp.

@@ -748,7 +744,7 @@ Private Attributes

Implements xrpl::Application.

-

Definition at line 1656 of file Application.cpp.

+

Definition at line 1649 of file Application.cpp.

@@ -777,7 +773,7 @@ Private Attributes

Implements xrpl::Application.

-

Definition at line 1662 of file Application.cpp.

+

Definition at line 1655 of file Application.cpp.

@@ -808,7 +804,7 @@ Private Attributes

Implements xrpl::Application.

-

Definition at line 501 of file Application.cpp.

+

Definition at line 497 of file Application.cpp.

@@ -837,7 +833,7 @@ Private Attributes

Implements xrpl::Application.

-

Definition at line 507 of file Application.cpp.

+

Definition at line 503 of file Application.cpp.

@@ -866,7 +862,7 @@ Private Attributes

Implements xrpl::Application.

-

Definition at line 513 of file Application.cpp.

+

Definition at line 509 of file Application.cpp.

@@ -895,7 +891,7 @@ Private Attributes

Implements xrpl::Application.

-

Definition at line 519 of file Application.cpp.

+

Definition at line 515 of file Application.cpp.

@@ -924,7 +920,7 @@ Private Attributes

Implements xrpl::Application.

-

Definition at line 525 of file Application.cpp.

+

Definition at line 521 of file Application.cpp.

@@ -953,7 +949,7 @@ Private Attributes

Implements xrpl::Application.

-

Definition at line 531 of file Application.cpp.

+

Definition at line 527 of file Application.cpp.

@@ -982,7 +978,7 @@ Private Attributes

Implements xrpl::Application.

-

Definition at line 537 of file Application.cpp.

+

Definition at line 533 of file Application.cpp.

@@ -1011,7 +1007,7 @@ Private Attributes

Implements xrpl::Application.

-

Definition at line 543 of file Application.cpp.

+

Definition at line 539 of file Application.cpp.

@@ -1040,7 +1036,7 @@ Private Attributes

Implements xrpl::Application.

-

Definition at line 553 of file Application.cpp.

+

Definition at line 549 of file Application.cpp.

@@ -1069,7 +1065,7 @@ Private Attributes

Implements xrpl::Application.

-

Definition at line 562 of file Application.cpp.

+

Definition at line 558 of file Application.cpp.

@@ -1098,7 +1094,7 @@ Private Attributes

Implements xrpl::Application.

-

Definition at line 568 of file Application.cpp.

+

Definition at line 564 of file Application.cpp.

@@ -1127,7 +1123,7 @@ Private Attributes

Implements xrpl::Application.

-

Definition at line 578 of file Application.cpp.

+

Definition at line 574 of file Application.cpp.

@@ -1156,7 +1152,7 @@ Private Attributes

Implements xrpl::Application.

-

Definition at line 584 of file Application.cpp.

+

Definition at line 580 of file Application.cpp.

@@ -1185,7 +1181,7 @@ Private Attributes

Implements xrpl::Application.

-

Definition at line 590 of file Application.cpp.

+

Definition at line 586 of file Application.cpp.

@@ -1214,7 +1210,7 @@ Private Attributes

Implements xrpl::Application.

-

Definition at line 596 of file Application.cpp.

+

Definition at line 592 of file Application.cpp.

@@ -1243,7 +1239,7 @@ Private Attributes

Implements xrpl::Application.

-

Definition at line 602 of file Application.cpp.

+

Definition at line 598 of file Application.cpp.

@@ -1272,7 +1268,7 @@ Private Attributes

Implements xrpl::Application.

-

Definition at line 608 of file Application.cpp.

+

Definition at line 604 of file Application.cpp.

@@ -1301,7 +1297,7 @@ Private Attributes

Implements xrpl::Application.

-

Definition at line 614 of file Application.cpp.

+

Definition at line 610 of file Application.cpp.

@@ -1330,7 +1326,7 @@ Private Attributes

Implements xrpl::Application.

-

Definition at line 620 of file Application.cpp.

+

Definition at line 616 of file Application.cpp.

@@ -1360,7 +1356,7 @@ Private Attributes
-

Definition at line 626 of file Application.cpp.

+

Definition at line 622 of file Application.cpp.

@@ -1389,7 +1385,7 @@ Private Attributes

Implements xrpl::Application.

-

Definition at line 633 of file Application.cpp.

+

Definition at line 629 of file Application.cpp.

@@ -1418,7 +1414,7 @@ Private Attributes

Implements xrpl::Application.

-

Definition at line 639 of file Application.cpp.

+

Definition at line 635 of file Application.cpp.

@@ -1447,7 +1443,7 @@ Private Attributes

Implements xrpl::Application.

-

Definition at line 645 of file Application.cpp.

+

Definition at line 641 of file Application.cpp.

@@ -1476,7 +1472,7 @@ Private Attributes

Implements xrpl::Application.

-

Definition at line 651 of file Application.cpp.

+

Definition at line 647 of file Application.cpp.

@@ -1505,7 +1501,7 @@ Private Attributes

Implements xrpl::Application.

-

Definition at line 657 of file Application.cpp.

+

Definition at line 653 of file Application.cpp.

@@ -1534,7 +1530,7 @@ Private Attributes

Implements xrpl::Application.

-

Definition at line 663 of file Application.cpp.

+

Definition at line 659 of file Application.cpp.

@@ -1563,7 +1559,7 @@ Private Attributes

Implements xrpl::Application.

-

Definition at line 669 of file Application.cpp.

+

Definition at line 665 of file Application.cpp.

@@ -1592,7 +1588,7 @@ Private Attributes

Implements xrpl::Application.

-

Definition at line 675 of file Application.cpp.

+

Definition at line 671 of file Application.cpp.

@@ -1621,7 +1617,7 @@ Private Attributes

Implements xrpl::Application.

-

Definition at line 681 of file Application.cpp.

+

Definition at line 677 of file Application.cpp.

@@ -1650,7 +1646,7 @@ Private Attributes

Implements xrpl::Application.

-

Definition at line 687 of file Application.cpp.

+

Definition at line 683 of file Application.cpp.

@@ -1679,7 +1675,7 @@ Private Attributes

Implements xrpl::Application.

-

Definition at line 693 of file Application.cpp.

+

Definition at line 689 of file Application.cpp.

@@ -1708,7 +1704,7 @@ Private Attributes

Implements xrpl::Application.

-

Definition at line 699 of file Application.cpp.

+

Definition at line 695 of file Application.cpp.

@@ -1737,7 +1733,7 @@ Private Attributes

Implements xrpl::Application.

-

Definition at line 705 of file Application.cpp.

+

Definition at line 701 of file Application.cpp.

@@ -1766,7 +1762,7 @@ Private Attributes

Implements xrpl::Application.

-

Definition at line 711 of file Application.cpp.

+

Definition at line 707 of file Application.cpp.

@@ -1795,7 +1791,7 @@ Private Attributes

Implements xrpl::Application.

-

Definition at line 717 of file Application.cpp.

+

Definition at line 713 of file Application.cpp.

@@ -1824,7 +1820,7 @@ Private Attributes

Implements xrpl::Application.

-

Definition at line 723 of file Application.cpp.

+

Definition at line 719 of file Application.cpp.

@@ -1853,7 +1849,7 @@ Private Attributes

Implements xrpl::Application.

-

Definition at line 729 of file Application.cpp.

+

Definition at line 725 of file Application.cpp.

@@ -1882,7 +1878,7 @@ Private Attributes

Implements xrpl::Application.

-

Definition at line 735 of file Application.cpp.

+

Definition at line 731 of file Application.cpp.

@@ -1911,7 +1907,7 @@ Private Attributes

Implements xrpl::Application.

-

Definition at line 741 of file Application.cpp.

+

Definition at line 737 of file Application.cpp.

@@ -1940,7 +1936,7 @@ Private Attributes

Implements xrpl::Application.

-

Definition at line 747 of file Application.cpp.

+

Definition at line 743 of file Application.cpp.

@@ -1969,7 +1965,7 @@ Private Attributes

Implements xrpl::Application.

-

Definition at line 753 of file Application.cpp.

+

Definition at line 749 of file Application.cpp.

@@ -1998,7 +1994,7 @@ Private Attributes

Implements xrpl::Application.

-

Definition at line 759 of file Application.cpp.

+

Definition at line 755 of file Application.cpp.

@@ -2027,7 +2023,7 @@ Private Attributes

Implements xrpl::Application.

-

Definition at line 765 of file Application.cpp.

+

Definition at line 761 of file Application.cpp.

@@ -2056,7 +2052,7 @@ Private Attributes

Implements xrpl::Application.

-

Definition at line 771 of file Application.cpp.

+

Definition at line 767 of file Application.cpp.

@@ -2085,7 +2081,7 @@ Private Attributes

Implements xrpl::Application.

-

Definition at line 777 of file Application.cpp.

+

Definition at line 773 of file Application.cpp.

@@ -2114,7 +2110,7 @@ Private Attributes

Implements xrpl::Application.

-

Definition at line 785 of file Application.cpp.

+

Definition at line 781 of file Application.cpp.

@@ -2143,7 +2139,7 @@ Private Attributes

Implements xrpl::Application.

-

Definition at line 793 of file Application.cpp.

+

Definition at line 789 of file Application.cpp.

@@ -2174,7 +2170,7 @@ Private Attributes

Implements xrpl::Application.

-

Definition at line 803 of file Application.cpp.

+

Definition at line 799 of file Application.cpp.

@@ -2204,7 +2200,7 @@ Private Attributes

Implements xrpl::Application.

-

Definition at line 2106 of file Application.cpp.

+

Definition at line 2099 of file Application.cpp.

@@ -2234,7 +2230,7 @@ Private Attributes

Implements xrpl::Application.

-

Definition at line 2154 of file Application.cpp.

+

Definition at line 2147 of file Application.cpp.

@@ -2253,7 +2249,7 @@ Private Attributes
-

Definition at line 820 of file Application.cpp.

+

Definition at line 816 of file Application.cpp.

@@ -2272,7 +2268,7 @@ Private Attributes
-

Definition at line 849 of file Application.cpp.

+

Definition at line 845 of file Application.cpp.

@@ -2305,7 +2301,7 @@ Private Attributes

Reimplemented from beast::PropertyStream::Source.

-

Definition at line 887 of file Application.cpp.

+

Definition at line 883 of file Application.cpp.

@@ -2324,7 +2320,7 @@ Private Attributes
-

Definition at line 894 of file Application.cpp.

+

Definition at line 890 of file Application.cpp.

@@ -2343,7 +2339,7 @@ Private Attributes
-

Definition at line 924 of file Application.cpp.

+

Definition at line 920 of file Application.cpp.

@@ -2362,7 +2358,7 @@ Private Attributes
-

Definition at line 953 of file Application.cpp.

+

Definition at line 949 of file Application.cpp.

@@ -2393,7 +2389,7 @@ Private Attributes

Implements xrpl::Application.

-

Definition at line 1113 of file Application.cpp.

+

Definition at line 1109 of file Application.cpp.

@@ -2422,7 +2418,7 @@ Private Attributes

Implements xrpl::Application.

-

Definition at line 1119 of file Application.cpp.

+

Definition at line 1115 of file Application.cpp.

@@ -2449,7 +2445,7 @@ Private Attributes
-

Definition at line 1687 of file Application.cpp.

+

Definition at line 1680 of file Application.cpp.

@@ -2476,7 +2472,7 @@ Private Attributes
-

Definition at line 1711 of file Application.cpp.

+

Definition at line 1704 of file Application.cpp.

@@ -2504,7 +2500,7 @@ Private Attributes
-

Definition at line 1755 of file Application.cpp.

+

Definition at line 1748 of file Application.cpp.

@@ -2554,7 +2550,7 @@ Private Attributes
-

Definition at line 1894 of file Application.cpp.

+

Definition at line 1887 of file Application.cpp.

@@ -2581,7 +2577,7 @@ Private Attributes
-

Definition at line 2160 of file Application.cpp.

+

Definition at line 2153 of file Application.cpp.

@@ -3881,59 +3877,19 @@ template<class Derived > - -

◆ stoppingCondition_

+ +

◆ isTimeToStop

- +
std::condition_variable xrpl::ApplicationImp::stoppingCondition_std::atomic_flag xrpl::ApplicationImp::isTimeToStop
-

Definition at line 208 of file Application.cpp.

- -
-
- -

◆ stoppingMutex_

- -
-
- - - - - -
- - - - -
std::mutex xrpl::ApplicationImp::stoppingMutex_
-
-mutable
-
- -

Definition at line 209 of file Application.cpp.

- -
-
- -

◆ isTimeToStop

- -
-
- - - - -
std::atomic<bool> xrpl::ApplicationImp::isTimeToStop = false
-
- -

Definition at line 210 of file Application.cpp.

+

Definition at line 206 of file Application.cpp.

@@ -3949,7 +3905,7 @@ template<class Derived >
-

Definition at line 212 of file Application.cpp.

+

Definition at line 208 of file Application.cpp.

@@ -3965,7 +3921,7 @@ template<class Derived >
-

Definition at line 214 of file Application.cpp.

+

Definition at line 210 of file Application.cpp.

@@ -3981,7 +3937,7 @@ template<class Derived >
-

Definition at line 216 of file Application.cpp.

+

Definition at line 212 of file Application.cpp.

@@ -3997,7 +3953,7 @@ template<class Derived >
-

Definition at line 218 of file Application.cpp.

+

Definition at line 214 of file Application.cpp.

@@ -4021,7 +3977,7 @@ template<class Derived >
-

Definition at line 1127 of file Application.cpp.

+

Definition at line 1123 of file Application.cpp.

diff --git a/functions_a.html b/functions_a.html index f6e242842d..964315dce0 100644 --- a/functions_a.html +++ b/functions_a.html @@ -120,7 +120,7 @@ $(function() {
  • acceptToAccept : xrpl::test::csf::LedgerCollector
  • acceptToFullyValid : xrpl::test::csf::LedgerCollector
  • account() : xrpl::AMMContext, xrpl::Issue, xrpl::MPTAuthorizeArgs, xrpl::MPTCreateArgs, xrpl::RelationalDatabase::AccountTxArgs, xrpl::RelationalDatabase::AccountTxOptions, xrpl::RelationalDatabase::AccountTxPageOptions, xrpl::SignerEntries::SignerEntry
  • -
  • Account() : xrpl::test::jtx::Account
  • +
  • Account() : xrpl::test::jtx::Account
  • account : xrpl::test::jtx::BidArg, xrpl::test::jtx::BookSpec, xrpl::test::jtx::DepositArg, xrpl::test::jtx::IOU, xrpl::test::jtx::MPTAuthorize, xrpl::test::jtx::MPTSet, xrpl::test::jtx::signer, xrpl::test::jtx::VoteArg, xrpl::test::jtx::WithdrawArg, xrpl::test::Loan_test::LoanParameters, xrpl::test::SEnv< T >, xrpl::TxQ::MaybeTx, xrpl::TxQ::TxDetails, xrpl::TxQ::TxQAccount
  • account_ : xrpl::AMMContext, xrpl::CanonicalTXSet::Key, xrpl::RippleLineCache::AccountKey, xrpl::test::Balance< T >, xrpl::test::jtx::balance, xrpl::test::jtx::flags, xrpl::test::jtx::mptbalance, xrpl::test::jtx::nflags, xrpl::test::jtx::owner_count< Type >, xrpl::test::jtx::owners, xrpl::test::jtx::sig, xrpl::Transactor
  • account_id : xrpl::RPC::key_strings
  • @@ -366,7 +366,7 @@ $(function() {
  • ancestor() : xrpl::SpanTip< Ledger >
  • ancestors : xrpl::test::csf::Ledger::Instance
  • ancestors_ : xrpl::RCLValidatedLedger
  • -
  • Any() : xrpl::test::csf::CollectorRef::Any< T >
  • +
  • Any() : xrpl::test::csf::CollectorRef::Any< T >
  • any() : xrpl::Transaction::SubmitResult
  • any_failed() : xrpl::detail::multi_runner_base< IsParent >, xrpl::detail::multi_runner_base< IsParent >::inner, xrpl::test::multi_runner_parent
  • any_failed_ : xrpl::detail::multi_runner_base< IsParent >::inner
  • @@ -431,7 +431,7 @@ $(function() {
  • asNodeIDs() : xrpl::test::ValidatorList_test
  • assembleAdd() : xrpl::STPathSet
  • assertSensible() : xrpl::Ledger
  • -
  • Asset() : xrpl::Asset
  • +
  • Asset() : xrpl::Asset
  • asset() : xrpl::STAmount, xrpl::test::jtx::IOU, xrpl::test::jtx::MPT, xrpl::test::jtx::None, xrpl::test::jtx::Vault::CreateArgs, xrpl::test::Loan_test::BrokerInfo, xrpl::test::LoanBroker_test::VaultInfo, xrpl::ValidVault::Vault
  • asset1_ : xrpl::test::jtx::AMM
  • asset1In : xrpl::test::jtx::DepositArg
  • diff --git a/functions_c.html b/functions_c.html index aca04479b0..83c1071354 100644 --- a/functions_c.html +++ b/functions_c.html @@ -92,7 +92,7 @@ $(function() {
  • cacheValidatorFile() : xrpl::ValidatorList
  • caClaimID() : xrpl::test::SEnv< T >
  • calcID() : xrpl::test::csf::TxSet
  • -
  • calcMedFeeLevel() : xrpl::test::TxQPosNegFlows_test
  • +
  • calcMedFeeLevel() : xrpl::test::TxQPosNegFlows_test
  • calcOutPeers() : xrpl::PeerFinder::Config
  • calculateBalanceChange() : xrpl::TransfersNotFrozen
  • calculateBaseFee() : xrpl::AMMCreate, xrpl::Batch, xrpl::Change, xrpl::DeleteAccount, xrpl::EscrowFinish, xrpl::LedgerStateFix, xrpl::LoanPay, xrpl::LoanSet, xrpl::SetRegularKey, xrpl::Transactor
  • @@ -101,7 +101,7 @@ $(function() {
  • calculateTweak() : xrpl::detail::Generator
  • calculationResult_ : xrpl::path::RippleCalc::Output
  • callback : AutoSocket
  • -
  • Callback() : xrpl::NodeStore::BatchWriter::Callback, xrpl::Workers::Callback
  • +
  • Callback() : xrpl::NodeStore::BatchWriter::Callback, xrpl::Workers::Callback
  • callback_type : xrpl::detail::WorkBase< Impl >, xrpl::detail::WorkFile
  • CallData() : xrpl::GRPCServerImpl::CallData< Request, Response >
  • callRPCHandler() : xrpl::RPCCallImp
  • @@ -406,12 +406,12 @@ $(function() {
  • compression_test() : xrpl::test::compression_test
  • compressionEnabled() : xrpl::Peer, xrpl::PeerImp, xrpl::test::PeerPartial, xrpl::test::TestPeer
  • compressionEnabled_ : xrpl::PeerImp
  • -
  • CompT() : beast::aged_associative_container_test_base::CompT< T >
  • +
  • CompT() : beast::aged_associative_container_test_base::CompT< T >
  • computeDistance() : Json::ValueIteratorBase
  • computePathRanks() : xrpl::Pathfinder
  • computeReserveReduction() : xrpl::XRPEndpointOfferCrossingStep
  • cond_ : beast::unit_test::runner, xrpl::OverlayImpl, xrpl::PeerFinder::Checker< Protocol >, xrpl::perf::PerfLogImp, xrpl::Resource::ManagerImp, xrpl::SHAMapStoreImp, xrpl::short_read_test::Base, xrpl::test::jtx::require
  • -
  • Condition() : xrpl::cryptoconditions::Condition
  • +
  • Condition() : xrpl::cryptoconditions::Condition
  • condition() : xrpl::cryptoconditions::Fulfillment, xrpl::cryptoconditions::PreimageSha256, xrpl::RPC::LedgerHandler, xrpl::RPC::VersionHandler
  • condition_ : xrpl::RPC::Handler, xrpl::ServerHandler
  • CondvarType : xrpl::NodeStore::BatchWriter
  • @@ -419,11 +419,11 @@ $(function() {
  • Config() : xrpl::Config
  • config() : xrpl::detail::FileCfgGuard
  • Config() : xrpl::PeerFinder::Config
  • -
  • config() : xrpl::PeerFinder::Logic< Checker >, xrpl::PeerFinder::Manager, xrpl::PeerFinder::ManagerImp
  • +
  • config() : xrpl::PeerFinder::Logic< Checker >, xrpl::PeerFinder::Manager, xrpl::PeerFinder::ManagerImp
  • config_ : xrpl::ApplicationImp, xrpl::detail::FileCfgGuard, xrpl::PeerFinder::Logic< Checker >
  • CONFIG_DIR : xrpl::Config
  • CONFIG_FILE : xrpl::Config
  • -
  • config_t() : beast::detail::aged_ordered_container< IsMulti, IsMap, Key, T, Clock, Compare, Allocator >::config_t, beast::detail::aged_unordered_container< IsMulti, IsMap, Key, T, Clock, Hash, KeyEqual, Allocator >::config_t
  • +
  • config_t() : beast::detail::aged_ordered_container< IsMulti, IsMap, Key, T, Clock, Compare, Allocator >::config_t, beast::detail::aged_unordered_container< IsMulti, IsMap, Key, T, Clock, Hash, KeyEqual, Allocator >::config_t
  • configFile() : xrpl::detail::FileCfgGuard
  • configFileExists() : xrpl::detail::FileCfgGuard
  • configFileName : xrpl::Config
  • @@ -432,7 +432,7 @@ $(function() {
  • configLegacyName : xrpl::Config
  • ConfigSection() : xrpl::ConfigSection
  • confuseMap() : xrpl::tests::SHAMapSync_test
  • -
  • connect() : xrpl::Overlay, xrpl::OverlayImpl, xrpl::PeerFinder::Slot, xrpl::test::csf::BasicNetwork< Peer >, xrpl::test::csf::Digraph< Vertex, EdgeData >, xrpl::test::csf::Peer, xrpl::test::csf::PeerGroup, xrpl::test::Server_test
  • +
  • connect() : xrpl::Overlay, xrpl::OverlayImpl, xrpl::PeerFinder::Slot, xrpl::test::csf::BasicNetwork< Peer >, xrpl::test::csf::Digraph< Vertex, EdgeData >, xrpl::test::csf::Peer, xrpl::test::csf::PeerGroup, xrpl::test::Server_test
  • ConnectAttempt() : xrpl::ConnectAttempt
  • connectCount() : xrpl::PeerFinder::Counts
  • connected : xrpl::PeerFinder::Slot, xrpl::test::csf::Digraph< Vertex, EdgeData >
  • diff --git a/functions_d.html b/functions_d.html index cd92b128ce..bcc4baed40 100644 --- a/functions_d.html +++ b/functions_d.html @@ -167,8 +167,8 @@ $(function() {
  • deleteInterval : xrpl::test::SHAMapStore_test
  • deleteInterval_ : xrpl::SHAMapStoreImp
  • deleteLastPeer() : xrpl::test::Network, xrpl::test::OverlaySim
  • -
  • DeleteOracle() : xrpl::DeleteOracle
  • deleteOracle() : xrpl::DeleteOracle
  • +
  • DeleteOracle() : xrpl::DeleteOracle
  • deletePath_ : xrpl::NodeStore::NuDBBackend
  • deletePeer() : xrpl::OverlayImpl, xrpl::reduce_relay::Slot< clock_type >, xrpl::reduce_relay::Slots< clock_type >, xrpl::test::Overlay, xrpl::test::OverlaySim, xrpl::test::Validator
  • deleteSLE() : xrpl::DIDDelete
  • diff --git a/functions_e.html b/functions_e.html index 7990cd6775..c57240c6a5 100644 --- a/functions_e.html +++ b/functions_e.html @@ -111,7 +111,7 @@ $(function() {
  • EncodedBlob() : xrpl::NodeStore::EncodedBlob
  • encodeLengthLength() : xrpl::Serializer
  • encoding : xrpl::detail::AccountIdCache::CachedAccountID
  • -
  • end() : beast::detail::aged_ordered_container< IsMulti, IsMap, Key, T, Clock, Compare, Allocator >::chronological_t, beast::detail::aged_ordered_container< IsMulti, IsMap, Key, T, Clock, Compare, Allocator >, beast::detail::aged_unordered_container< IsMulti, IsMap, Key, T, Clock, Hash, KeyEqual, Allocator >::chronological_t, beast::detail::aged_unordered_container< IsMulti, IsMap, Key, T, Clock, Hash, KeyEqual, Allocator >, beast::List< T, Tag >, beast::LockFreeStack< Element, Tag >, beast::unit_test::detail::const_container< Container >, Json::Value, xrpl::AcceptedLedger, xrpl::base_uint< Bits, Tag >, xrpl::BookDirs, xrpl::Buffer, xrpl::CanonicalTXSet, xrpl::Dir, xrpl::JobTypes, xrpl::KnownFormats< KeyType, Derived >, xrpl::ledger_trie_detail::Span< Ledger >, xrpl::partitioned_unordered_map< Key, Value, Hash, Pred, Alloc >, xrpl::PeerFinder::Bootcache, xrpl::PeerFinder::detail::LivecacheBase::Hop< IsConst >, xrpl::PeerFinder::Livecache< Allocator >::hops_t, xrpl::PublicKey, xrpl::ReadView::sles_type, xrpl::ReadView::txs_type, xrpl::SecretKey, xrpl::Section, xrpl::Seed, xrpl::Serializer, xrpl::SHAMap, xrpl::Slice, xrpl::SOTemplate, xrpl::STArray, xrpl::STObject, xrpl::STPath, xrpl::STPathSet, xrpl::STVector256, xrpl::test::csf::PeerGroup, xrpl::test::csf::Scheduler::queue_type, xrpl::XChainAttestationsBase< TAttestation >
  • +
  • end() : beast::detail::aged_ordered_container< IsMulti, IsMap, Key, T, Clock, Compare, Allocator >::chronological_t, beast::detail::aged_ordered_container< IsMulti, IsMap, Key, T, Clock, Compare, Allocator >, beast::detail::aged_unordered_container< IsMulti, IsMap, Key, T, Clock, Hash, KeyEqual, Allocator >::chronological_t, beast::detail::aged_unordered_container< IsMulti, IsMap, Key, T, Clock, Hash, KeyEqual, Allocator >, beast::List< T, Tag >, beast::LockFreeStack< Element, Tag >, beast::unit_test::detail::const_container< Container >, Json::Value, xrpl::AcceptedLedger, xrpl::base_uint< Bits, Tag >, xrpl::BookDirs, xrpl::Buffer, xrpl::CanonicalTXSet, xrpl::Dir, xrpl::JobTypes, xrpl::KnownFormats< KeyType, Derived >, xrpl::ledger_trie_detail::Span< Ledger >, xrpl::partitioned_unordered_map< Key, Value, Hash, Pred, Alloc >, xrpl::PeerFinder::Bootcache, xrpl::PeerFinder::detail::LivecacheBase::Hop< IsConst >, xrpl::PeerFinder::Livecache< Allocator >::hops_t, xrpl::PublicKey, xrpl::ReadView::sles_type, xrpl::ReadView::txs_type, xrpl::SecretKey, xrpl::Section, xrpl::Seed, xrpl::Serializer, xrpl::SHAMap, xrpl::Slice, xrpl::SOTemplate, xrpl::STArray, xrpl::STObject, xrpl::STPath, xrpl::STPathSet, xrpl::STVector256, xrpl::test::csf::PeerGroup, xrpl::test::csf::Scheduler::queue_type, xrpl::XChainAttestationsBase< TAttestation >
  • end0_ : xrpl::detail::RawStateTable::sles_iter_impl
  • end1_ : xrpl::detail::RawStateTable::sles_iter_impl
  • end_ : beast::rfc2616::list_iterator, Json::Reader, Json::Reader::Token, xrpl::ledger_trie_detail::Span< Ledger >, xrpl::test::AMMCalc_test
  • @@ -119,7 +119,7 @@ $(function() {
  • endian : beast::xxhasher, xrpl::detail::basic_sha512_half_hasher< Secure >, xrpl::openssl_ripemd160_hasher, xrpl::openssl_sha256_hasher, xrpl::openssl_sha512_hasher, xrpl::ripesha_hasher, xrpl::test::nonhash< Bits >
  • Endpoint() : beast::IP::Endpoint
  • endpoint : xrpl::PeerFinder::detail::LivecacheBase::Element
  • -
  • Endpoint() : xrpl::PeerFinder::Endpoint
  • +
  • Endpoint() : xrpl::PeerFinder::Endpoint
  • endpoint : xrpl::PeerFinder::Store::Entry, xrpl::short_read_test::Server
  • endpoint_ : xrpl::short_read_test::Server
  • endpoint_type : AutoSocket, xrpl::BaseHTTPPeer< Handler, Impl >, xrpl::BasePeer< Handler, Impl >, xrpl::BaseWSPeer< Handler, Impl >, xrpl::ConnectAttempt, xrpl::detail::WorkBase< Impl >, xrpl::Door< Handler >, xrpl::OverlayImpl, xrpl::PeerFinder::Checker< Protocol >::async_op< Handler >, xrpl::PeerImp, xrpl::PlainHTTPPeer< Handler >, xrpl::PlainWSPeer< Handler >, xrpl::short_read_test, xrpl::SSLHTTPPeer< Handler >, xrpl::SSLWSPeer< Handler >, xrpl::test::DNS_test, xrpl::test::TrustedPublisherServer, xrpl::ValidatorSite
  • @@ -135,7 +135,7 @@ $(function() {
  • Entry() : xrpl::Resource::Entry, xrpl::TaggedCache< Key, T, IsKeyCache, SharedWeakUnionPointerType, SharedPointerType, Hash, KeyEqual, Mutex >
  • entry_ : xrpl::BookDirs::const_iterator, xrpl::BookDirs
  • EntryIntrusiveList : xrpl::Resource::Logic
  • -
  • Env() : xrpl::test::jtx::Env
  • +
  • Env() : xrpl::test::jtx::Env
  • env : xrpl::test::jtx::MPTInitDef, xrpl::test::jtx::Vault, xrpl::test::LedgerReplayClient, xrpl::test::LedgerServer, xrpl::test::Loan_test::VerifyLoanStatus, xrpl::test::NetworkHistory, xrpl::test::XChainSim_test::ChainStateTrack
  • ENV : xrpl::test::XChainSim_test
  • env_ : xrpl::PerfLog_test, xrpl::test::Balance< T >, xrpl::test::ClosureCounter_test, xrpl::test::DNS_test, xrpl::test::jtx::AMM, xrpl::test::jtx::Env_ss, xrpl::test::jtx::Env_ss::SignSubmitRunner, xrpl::test::jtx::MPTTester, xrpl::test::jtx::oracle::Oracle, xrpl::test::reduce_relay_test, xrpl::test::SEnv< T >
  • diff --git a/functions_f.html b/functions_f.html index d4d53d6ebe..cfcb040223 100644 --- a/functions_f.html +++ b/functions_f.html @@ -118,7 +118,7 @@ $(function() {
  • fees_ : xrpl::Ledger
  • feeVote_ : xrpl::RCLConsensus::Adaptor
  • FeeVoteImpl() : xrpl::FeeVoteImpl
  • -
  • fetch() : xrpl::NodeStore::Backend, xrpl::NodeStore::MemoryBackend, xrpl::NodeStore::NuDBBackend, xrpl::NodeStore::NullBackend, xrpl::PeerFinder::Logic< Checker >, xrpl::PeerFinder::Source, xrpl::PeerFinder::SourceStringsImp, xrpl::TaggedCache< Key, T, IsKeyCache, SharedWeakUnionPointerType, SharedPointerType, Hash, KeyEqual, Mutex >, xrpl::TransactionMaster
  • +
  • fetch() : xrpl::NodeStore::Backend, xrpl::NodeStore::MemoryBackend, xrpl::NodeStore::NuDBBackend, xrpl::NodeStore::NullBackend, xrpl::PeerFinder::Logic< Checker >, xrpl::PeerFinder::Source, xrpl::PeerFinder::SourceStringsImp, xrpl::TaggedCache< Key, T, IsKeyCache, SharedWeakUnionPointerType, SharedPointerType, Hash, KeyEqual, Mutex >, xrpl::TransactionMaster
  • FETCH_DEPTH : xrpl::Config
  • fetch_depth_ : xrpl::LedgerMaster
  • fetch_from_cache() : xrpl::TransactionMaster
  • diff --git a/functions_func.html b/functions_func.html index 5bfbe6e12c..d13c57ead2 100644 --- a/functions_func.html +++ b/functions_func.html @@ -233,13 +233,13 @@ $(function() {
  • amounts() : xrpl::Quality_test
  • AmountSpec() : xrpl::AmountSpec
  • ancestor() : xrpl::SpanTip< Ledger >
  • -
  • Any() : xrpl::test::csf::CollectorRef::Any< T >
  • +
  • Any() : xrpl::test::csf::CollectorRef::Any< T >
  • any() : xrpl::Transaction::SubmitResult
  • -
  • any_failed() : xrpl::detail::multi_runner_base< IsParent >, xrpl::detail::multi_runner_base< IsParent >::inner, xrpl::test::multi_runner_parent
  • -
  • AnyAmount() : xrpl::test::jtx::AnyAmount
  • +
  • any_failed() : xrpl::detail::multi_runner_base< IsParent >, xrpl::detail::multi_runner_base< IsParent >::inner, xrpl::test::multi_runner_parent
  • +
  • AnyAmount() : xrpl::test::jtx::AnyAmount
  • app() : xrpl::test::jtx::Env
  • AppBundle() : xrpl::test::jtx::Env::AppBundle
  • -
  • append() : beast::List< T, Tag >, Json::Value, Json::Writer, xrpl::Section, xrpl::test::jtx::path
  • +
  • append() : beast::List< T, Tag >, Json::Value, Json::Writer, xrpl::Section, xrpl::test::jtx::path
  • append_one() : xrpl::test::jtx::path
  • Application() : xrpl::Application
  • ApplicationImp() : xrpl::ApplicationImp
  • @@ -282,7 +282,7 @@ $(function() {
  • asNodeIDs() : xrpl::test::ValidatorList_test
  • assembleAdd() : xrpl::STPathSet
  • assertSensible() : xrpl::Ledger
  • -
  • Asset() : xrpl::Asset
  • +
  • Asset() : xrpl::Asset
  • asset() : xrpl::STAmount, xrpl::test::jtx::IOU, xrpl::test::jtx::MPT
  • assetsToClawback() : xrpl::VaultClawback
  • assign() : xrpl::STObject::Proxy< T >
  • diff --git a/functions_func_b.html b/functions_func_b.html index 9ebcb1c954..29619edb39 100644 --- a/functions_func_b.html +++ b/functions_func_b.html @@ -79,7 +79,7 @@ $(function() {
  • BadLexicalCast() : beast::BadLexicalCast
  • balance() : xrpl::Resource::Consumer, xrpl::Resource::Entry, xrpl::Resource::Logic
  • Balance() : xrpl::test::Balance< T >
  • -
  • balance() : xrpl::test::jtx::balance, xrpl::test::jtx::Env, xrpl::test::SEnv< T >
  • +
  • balance() : xrpl::test::jtx::balance, xrpl::test::jtx::Env, xrpl::test::SEnv< T >
  • balanceChanges() : xrpl::PaymentSandbox
  • balanceHook() : xrpl::PaymentSandbox, xrpl::ReadView
  • balances() : xrpl::test::jtx::AMM
  • @@ -144,7 +144,7 @@ $(function() {
  • bucket_size() : beast::detail::aged_unordered_container< IsMulti, IsMap, Key, T, Clock, Hash, KeyEqual, Allocator >
  • Buckets() : beast::detail::aged_unordered_container< IsMulti, IsMap, Key, T, Clock, Hash, KeyEqual, Allocator >::Buckets
  • buffer() : xrpl::BaseHTTPPeer< Handler, Impl >::buffer
  • -
  • Buffer() : xrpl::Buffer
  • +
  • Buffer() : xrpl::Buffer
  • buffer_string() : xrpl::test::JSONRPCClient, xrpl::test::WSClientImpl
  • build() : xrpl::BasicConfig, xrpl::PeerSetBuilder, xrpl::PeerSetBuilderImpl, xrpl::test::TestPeerSetBuilder
  • buildBlobInfos() : xrpl::ValidatorList
  • diff --git a/functions_func_c.html b/functions_func_c.html index 9d30aa1b7d..01221a33d2 100644 --- a/functions_func_c.html +++ b/functions_func_c.html @@ -313,14 +313,14 @@ $(function() {
  • computeDistance() : Json::ValueIteratorBase
  • computePathRanks() : xrpl::Pathfinder
  • computeReserveReduction() : xrpl::XRPEndpointOfferCrossingStep
  • -
  • Condition() : xrpl::cryptoconditions::Condition
  • +
  • Condition() : xrpl::cryptoconditions::Condition
  • condition() : xrpl::cryptoconditions::Fulfillment, xrpl::cryptoconditions::PreimageSha256
  • config() : xrpl::Application, xrpl::ApplicationImp
  • Config() : xrpl::Config
  • config() : xrpl::detail::FileCfgGuard
  • Config() : xrpl::PeerFinder::Config
  • -
  • config() : xrpl::PeerFinder::Logic< Checker >, xrpl::PeerFinder::Manager, xrpl::PeerFinder::ManagerImp
  • -
  • config_t() : beast::detail::aged_ordered_container< IsMulti, IsMap, Key, T, Clock, Compare, Allocator >::config_t, beast::detail::aged_unordered_container< IsMulti, IsMap, Key, T, Clock, Hash, KeyEqual, Allocator >::config_t
  • +
  • config() : xrpl::PeerFinder::Logic< Checker >, xrpl::PeerFinder::Manager, xrpl::PeerFinder::ManagerImp
  • +
  • config_t() : beast::detail::aged_ordered_container< IsMulti, IsMap, Key, T, Clock, Compare, Allocator >::config_t, beast::detail::aged_unordered_container< IsMulti, IsMap, Key, T, Clock, Hash, KeyEqual, Allocator >::config_t
  • configFile() : xrpl::detail::FileCfgGuard
  • configFileExists() : xrpl::detail::FileCfgGuard
  • configInvalid() : xrpl::ValidatorKeys
  • diff --git a/functions_func_d.html b/functions_func_d.html index 261739757e..505ef1a003 100644 --- a/functions_func_d.html +++ b/functions_func_d.html @@ -119,8 +119,8 @@ $(function() {
  • deleteIdlePeer() : xrpl::reduce_relay::Slot< clock_type >
  • deleteIdlePeers() : xrpl::OverlayImpl, xrpl::reduce_relay::Slots< clock_type >, xrpl::test::Overlay, xrpl::test::OverlaySim
  • deleteLastPeer() : xrpl::test::Network, xrpl::test::OverlaySim
  • -
  • deleteOracle() : xrpl::DeleteOracle
  • DeleteOracle() : xrpl::DeleteOracle
  • +
  • deleteOracle() : xrpl::DeleteOracle
  • deletePeer() : xrpl::OverlayImpl, xrpl::reduce_relay::Slot< clock_type >, xrpl::reduce_relay::Slots< clock_type >, xrpl::test::Overlay, xrpl::test::OverlaySim, xrpl::test::Validator
  • deleteSLE() : xrpl::DIDDelete
  • deleteSubAccountHistory() : xrpl::InfoSub
  • diff --git a/functions_func_i.html b/functions_func_i.html index 674729a9a6..033a96e454 100644 --- a/functions_func_i.html +++ b/functions_func_i.html @@ -81,7 +81,7 @@ $(function() {
  • impl() : beast::insight::Event, beast::insight::Gauge, beast::insight::Hook, beast::insight::Meter
  • Impl() : Json::Writer::Impl
  • impl() : xrpl::BaseHTTPPeer< Handler, Impl >, xrpl::BasePeer< Handler, Impl >, xrpl::BaseWSPeer< Handler, Impl >, xrpl::detail::WorkBase< Impl >
  • -
  • Impl() : xrpl::Rules::Impl
  • +
  • Impl() : xrpl::Rules::Impl
  • implOutput() : Json::Writer
  • Import() : xrpl::Resource::Import
  • importConsumers() : xrpl::Resource::Logic, xrpl::Resource::Manager, xrpl::Resource::ManagerImp
  • diff --git a/functions_func_j.html b/functions_func_j.html index 5a7075fd0f..3a9df57e54 100644 --- a/functions_func_j.html +++ b/functions_func_j.html @@ -77,16 +77,16 @@ $(function() {
  • JobQueue() : xrpl::JobQueue
  • jobQueue() : xrpl::perf::PerfLog, xrpl::perf::PerfLogImp, xrpl::perf::PerfLogTest
  • jobStart() : xrpl::perf::PerfLog, xrpl::perf::PerfLogImp, xrpl::perf::PerfLogTest
  • -
  • JobTypeData() : xrpl::JobTypeData
  • +
  • JobTypeData() : xrpl::JobTypeData
  • JobTypeInfo() : xrpl::JobTypeInfo
  • JobTypes() : xrpl::JobTypes
  • join() : beast::unit_test::thread, xrpl::ClosureCounter< Ret_t, Args_t >, xrpl::io_list, xrpl::JobQueue::Coro, xrpl::ValidatorSite
  • joinable() : beast::unit_test::thread
  • joined() : xrpl::ClosureCounter< Ret_t, Args_t >
  • -
  • Journal() : beast::Journal
  • +
  • Journal() : beast::Journal
  • journal() : xrpl::Application, xrpl::ApplicationImp, xrpl::BaseHTTPPeer< Handler, Impl >, xrpl::Config, xrpl::Family, xrpl::Logs, xrpl::NodeFamily, xrpl::RCLValidationsAdaptor, xrpl::Server, xrpl::ServerImpl< Handler >, xrpl::Session, xrpl::tests::TestNodeFamily
  • JSON() : antithesis::JSON
  • -
  • json() : xrpl::metrics::TxMetrics, xrpl::NetworkOPsImp::StateAccounting, xrpl::Overlay, xrpl::OverlayImpl, xrpl::Peer, xrpl::PeerImp, xrpl::test::jtx::Env, xrpl::test::jtx::json, xrpl::test::Path, xrpl::test::PathSet, xrpl::test::PeerPartial, xrpl::test::TestPeer
  • +
  • json() : xrpl::metrics::TxMetrics, xrpl::NetworkOPsImp::StateAccounting, xrpl::Overlay, xrpl::OverlayImpl, xrpl::Peer, xrpl::PeerImp, xrpl::test::jtx::Env, xrpl::test::jtx::json, xrpl::test::Path, xrpl::test::PathSet, xrpl::test::PeerPartial, xrpl::test::TestPeer
  • json_body() : xrpl::json_body
  • JSONArray() : antithesis::JSONArray
  • jsonClipped() : xrpl::unit::ValueUnit< UnitTag, T >, xrpl::XRPAmount
  • @@ -99,7 +99,7 @@ $(function() {
  • JsonTypeMismatchError() : Json::JsonTypeMismatchError
  • jt() : xrpl::test::jtx::Env
  • jtnofill() : xrpl::test::jtx::Env
  • -
  • JTx() : xrpl::test::jtx::JTx
  • +
  • JTx() : xrpl::test::jtx::JTx
  • JTxField() : xrpl::test::jtx::blobField, xrpl::test::jtx::JTxField< SField, StoredValue, OutputValue >, xrpl::test::jtx::JTxField< SField, StoredValue, StoredValue >
  • JTxFieldWrapper() : xrpl::test::jtx::JTxFieldWrapper< JTxField >, xrpl::test::jtx::JTxFieldWrapper< blobField >
  • jvParseCurrencyIssuer() : xrpl::RPCParser
  • diff --git a/functions_func_l.html b/functions_func_l.html index 77be9aa27a..9a810a7b89 100644 --- a/functions_func_l.html +++ b/functions_func_l.html @@ -169,7 +169,7 @@ $(function() {
  • locate() : xrpl::Transaction
  • lock() : xrpl::packed_spinlock< T >, xrpl::SharedWeakCachePointer< T >, xrpl::SharedWeakUnion< T >, xrpl::spinlock< T >, xrpl::TaggedCache< Key, T, IsKeyCache, SharedWeakUnionPointerType, SharedPointerType, Hash, KeyEqual, Mutex >::ValueEntry, xrpl::test::csf::Peer::ValAdaptor::Mutex, xrpl::test::csf::Validations_test::Adaptor::Mutex, xrpl::WeakIntrusive< T >
  • Locked() : xrpl::perf::Locked< T >
  • -
  • LockedSociSession() : xrpl::LockedSociSession
  • +
  • LockedSociSession() : xrpl::LockedSociSession
  • LockFreeStack() : beast::LockFreeStack< Element, Tag >
  • LockFreeStackIterator() : beast::LockFreeStackIterator< Container, IsConst >
  • lockingChainDoor() : xrpl::STXChainBridge
  • @@ -183,7 +183,7 @@ $(function() {
  • Logic() : xrpl::PeerFinder::Logic< Checker >, xrpl::Resource::Logic
  • logInterval() : xrpl::PerfLog_test::Fixture
  • logs() : xrpl::Application, xrpl::ApplicationImp
  • -
  • Logs() : xrpl::Logs
  • +
  • Logs() : xrpl::Logs
  • logStrand() : xrpl::test::TheoreticalQuality_test
  • logstream_buf() : beast::detail::logstream_buf< CharT, Traits >
  • logString() : xrpl::BookOfferCrossingStep< TIn, TOut >, xrpl::BookPaymentStep< TIn, TOut >, xrpl::DirectIOfferCrossingStep, xrpl::DirectIPaymentStep, xrpl::Step, xrpl::XRPEndpointOfferCrossingStep, xrpl::XRPEndpointPaymentStep
  • diff --git a/functions_func_m.html b/functions_func_m.html index c216a8db4b..210f651ea5 100644 --- a/functions_func_m.html +++ b/functions_func_m.html @@ -154,7 +154,7 @@ $(function() {
  • manual_clock() : beast::manual_clock< Clock >
  • ManualClock() : xrpl::test::ManualClock
  • ManualTimeKeeper() : xrpl::test::ManualTimeKeeper
  • -
  • Map() : beast::PropertyStream::Map
  • +
  • Map() : beast::PropertyStream::Map
  • map() : xrpl::partitioned_unordered_map< Key, Value, Hash, Pred, Alloc >
  • map_begin() : beast::PropertyStream, xrpl::JsonPropertyStream
  • map_end() : beast::PropertyStream, xrpl::JsonPropertyStream
  • @@ -227,9 +227,9 @@ $(function() {
  • move() : xrpl::STAccount, xrpl::STAmount, xrpl::STArray, xrpl::STBase, xrpl::STBitString< Bits >, xrpl::STBlob, xrpl::STCurrency, xrpl::STInteger< Integer >, xrpl::STIssue, xrpl::STLedgerEntry, xrpl::STNumber, xrpl::STObject, xrpl::STPathSet, xrpl::STTx, xrpl::STValidation, xrpl::STVector256, xrpl::STXChainBridge
  • move_back() : xrpl::PeerFinder::detail::LivecacheBase::Hop< IsConst >
  • moveMultiSignature() : xrpl::RPC::detail::SigningForParams
  • -
  • mpt() : xrpl::STAmount
  • +
  • mpt() : xrpl::STAmount, xrpl::test::jtx::MPT
  • MPT() : xrpl::test::jtx::MPT
  • -
  • mpt() : xrpl::test::jtx::MPT, xrpl::test::jtx::MPTTester
  • +
  • mpt() : xrpl::test::jtx::MPTTester
  • MPTAmount() : xrpl::MPTAmount
  • mptbalance() : xrpl::test::jtx::mptbalance
  • mptEscrowed() : xrpl::test::EscrowToken_test
  • diff --git a/functions_func_o.html b/functions_func_o.html index 82ad461f4e..2d5746cee1 100644 --- a/functions_func_o.html +++ b/functions_func_o.html @@ -80,7 +80,7 @@ $(function() {
  • offersUsed() : xrpl::BookStep< TIn, TOut, TDerived >, xrpl::Step
  • oldestAccountTxPage() : xrpl::SQLiteDatabase, xrpl::SQLiteDatabaseImp
  • oldestAccountTxPageB() : xrpl::SQLiteDatabase, xrpl::SQLiteDatabaseImp
  • -
  • on() : xrpl::test::Consensus_test::Disruptor, xrpl::test::Consensus_test::UndoDelay, xrpl::test::csf::CollectByNode< CollectorType >, xrpl::test::csf::CollectorRef::Any< T >, xrpl::test::csf::CollectorRef::ICollector, xrpl::test::csf::CollectorRef, xrpl::test::csf::CollectorRefs, xrpl::test::csf::Collectors< Cs >, xrpl::test::csf::JumpCollector, xrpl::test::csf::LedgerCollector, xrpl::test::csf::NullCollector, xrpl::test::csf::SimDurationCollector, xrpl::test::csf::StreamCollector, xrpl::test::csf::TxCollector
  • +
  • on() : xrpl::test::Consensus_test::Disruptor, xrpl::test::Consensus_test::UndoDelay, xrpl::test::csf::CollectByNode< CollectorType >, xrpl::test::csf::CollectorRef::Any< T >, xrpl::test::csf::CollectorRef::ICollector, xrpl::test::csf::CollectorRef, xrpl::test::csf::CollectorRefs, xrpl::test::csf::Collectors< Cs >, xrpl::test::csf::JumpCollector, xrpl::test::csf::LedgerCollector, xrpl::test::csf::NullCollector, xrpl::test::csf::SimDurationCollector, xrpl::test::csf::StreamCollector, xrpl::test::csf::TxCollector
  • on_accept() : xrpl::short_read_test::Server::Acceptor, xrpl::test::TrustedPublisherServer
  • on_case_begin() : beast::unit_test::detail::reporter< class >, beast::unit_test::recorder, beast::unit_test::runner, xrpl::test::multi_runner_child
  • on_case_end() : beast::unit_test::detail::reporter< class >, beast::unit_test::recorder, beast::unit_test::runner, xrpl::test::multi_runner_child
  • @@ -156,10 +156,10 @@ $(function() {
  • onWrite() : beast::PropertyStream::Source, xrpl::ApplicationImp, xrpl::ConnectAttempt, xrpl::LedgerCleanerImp, xrpl::OverlayImpl, xrpl::PeerFinder::Bootcache, xrpl::PeerFinder::Config, xrpl::PeerFinder::Counts, xrpl::PeerFinder::Livecache< Allocator >, xrpl::PeerFinder::Logic< Checker >, xrpl::PeerFinder::ManagerImp, xrpl::Resource::Logic, xrpl::Resource::ManagerImp
  • onWriteMessage() : xrpl::PeerImp
  • onWSMessage() : xrpl::ServerHandler, xrpl::test::Server_test::TestHandler
  • -
  • open() : xrpl::DBConfig, xrpl::detail::ApplyViewBase, xrpl::detail::CachedViewImpl, xrpl::Ledger, xrpl::Logs::File, xrpl::Logs, xrpl::NodeStore::Backend, xrpl::NodeStore::MemoryBackend, xrpl::NodeStore::MemoryFactory, xrpl::NodeStore::NuDBBackend, xrpl::NodeStore::NullBackend, xrpl::OpenView, xrpl::PeerFinder::StoreSqdb, xrpl::ReadView
  • +
  • open() : xrpl::DBConfig, xrpl::detail::ApplyViewBase, xrpl::detail::CachedViewImpl, xrpl::Ledger, xrpl::Logs::File, xrpl::Logs, xrpl::NodeStore::Backend, xrpl::NodeStore::MemoryBackend, xrpl::NodeStore::MemoryFactory, xrpl::NodeStore::NuDBBackend, xrpl::NodeStore::NullBackend, xrpl::OpenView, xrpl::PeerFinder::StoreSqdb, xrpl::ReadView
  • open_ledger_t() : xrpl::open_ledger_t
  • -
  • openLedger() : xrpl::Application, xrpl::ApplicationImp
  • -
  • OpenLedger() : xrpl::OpenLedger
  • +
  • openLedger() : xrpl::Application, xrpl::ApplicationImp
  • +
  • OpenLedger() : xrpl::OpenLedger
  • openLedgerCost() : xrpl::test::TxQPosNegFlows_test
  • openLedgerFee() : xrpl::test::Batch_test
  • openLog() : xrpl::perf::PerfLogImp
  • @@ -194,11 +194,11 @@ $(function() {
  • operator value_type() : xrpl::STBitString< Bits >, xrpl::STObject::ValueProxy< T >
  • operator xrpl::MPTIssue() : xrpl::test::jtx::MPT
  • operator!() : xrpl::base_uint< Bits, Tag >, xrpl::RPC::Status
  • -
  • operator!=() : beast::aged_associative_container_test_base::AllocT< T >, beast::detail::aged_container_iterator< is_const, Iterator >, beast::detail::aged_ordered_container< IsMulti, IsMap, Key, T, Clock, Compare, Allocator >, beast::detail::aged_unordered_container< IsMulti, IsMap, Key, T, Clock, Hash, KeyEqual, Allocator >, beast::detail::ListIterator< N >, beast::rfc2616::list_iterator, Json::ValueIteratorBase, xrpl::BookDirs::const_iterator, xrpl::detail::ReadViewFwdRange< ValueType >::iterator, xrpl::Dir::const_iterator, xrpl::JsonOptions, xrpl::NetworkOPsImp::ServerFeeSummary, xrpl::Rules, xrpl::Serializer, xrpl::SField, xrpl::SHAMapNodeID, xrpl::SharedIntrusive< T >, xrpl::STArray, xrpl::STBase, xrpl::STObject, xrpl::STPathElement, xrpl::unit::ValueUnit< UnitTag, T >
  • +
  • operator!=() : beast::aged_associative_container_test_base::AllocT< T >, beast::detail::aged_container_iterator< is_const, Iterator >, beast::detail::aged_ordered_container< IsMulti, IsMap, Key, T, Clock, Compare, Allocator >, beast::detail::aged_unordered_container< IsMulti, IsMap, Key, T, Clock, Hash, KeyEqual, Allocator >, beast::detail::ListIterator< N >, beast::rfc2616::list_iterator, Json::ValueIteratorBase, xrpl::BookDirs::const_iterator, xrpl::detail::ReadViewFwdRange< ValueType >::iterator, xrpl::Dir::const_iterator, xrpl::JsonOptions, xrpl::NetworkOPsImp::ServerFeeSummary, xrpl::Rules, xrpl::Serializer, xrpl::SField, xrpl::SHAMapNodeID, xrpl::SharedIntrusive< T >, xrpl::STArray, xrpl::STBase, xrpl::STObject, xrpl::STPathElement, xrpl::unit::ValueUnit< UnitTag, T >
  • operator%=() : xrpl::unit::ValueUnit< UnitTag, T >
  • operator&() : xrpl::JsonOptions
  • operator&=() : xrpl::base_uint< Bits, Tag >, xrpl::FeatureBitset
  • -
  • operator()() : beast::aged_associative_container_test_base::CompT< T >, beast::aged_associative_container_test_base::equal_value< Traits >, beast::aged_associative_container_test_base::EqualT< T >, beast::aged_associative_container_test_base::HashT< T >, beast::detail::aged_associative_container_extract_t< maybe_map >, beast::detail::aged_associative_container_extract_t< false >, beast::detail::aged_ordered_container< IsMulti, IsMap, Key, T, Clock, Compare, Allocator >::KeyValueCompare, beast::detail::aged_ordered_container< IsMulti, IsMap, Key, T, Clock, Compare, Allocator >::pair_value_compare, beast::detail::aged_unordered_container< IsMulti, IsMap, Key, T, Clock, Hash, KeyEqual, Allocator >::KeyValueEqual, beast::detail::aged_unordered_container< IsMulti, IsMap, Key, T, Clock, Hash, KeyEqual, Allocator >::ValueHash, beast::detail::LexicalCast< Out, boost::core::basic_string_view< char > >, beast::detail::LexicalCast< Out, char * >, beast::detail::LexicalCast< Out, char const * >, beast::detail::LexicalCast< Out, std::string >, beast::detail::LexicalCast< Out, std::string_view >, beast::detail::LexicalCast< std::string, In >, beast::detail::xor_shift_engine< class >, beast::io_latency_probe< Clock >::sample_op< Handler >, beast::rfc2616::detail::ci_equal_pred, beast::uhash< Hasher >, beast::unit_test::selector, beast::unit_test::suite, beast::unit_test::suite::testcase_t, beast::xxhasher, boost::hash<::beast::IP::Address >, boost::hash<::beast::IP::Endpoint >, io_latency_probe_test::test_sampler, std::hash< xrpl::Book >, std::hash< xrpl::Issue >, std::hash<::beast::IP::Endpoint >, xrpl::ApplicationImp::io_latency_sampler, xrpl::Asset, xrpl::Attestations::CmpByClaimID, xrpl::Attestations::CmpByCreateCount, xrpl::Buffer, xrpl::ClosureCounter< Ret_t, Args_t >::Substitute< Closure >, xrpl::Cluster::Comparator, xrpl::csprng_engine, xrpl::detail::basic_sha512_half_hasher< Secure >, xrpl::detail::Generator, xrpl::detail::MultiApiJson< MinVer, MaxVer >::visitor_t, xrpl::equal_to< T >, xrpl::hardened_hash< HashAlgorithm >, xrpl::KeyEqual, xrpl::keylet::book_t, xrpl::keylet::next_t, xrpl::keylet::ticket_t, xrpl::less< T >, xrpl::match_peer, xrpl::NodeStore::LessThan, xrpl::NodeStore::progress, xrpl::NodeStore::Timing_test::parallel_for_lambda< Body >, xrpl::openssl_ripemd160_hasher, xrpl::openssl_sha256_hasher, xrpl::openssl_sha512_hasher, xrpl::peer_in_cluster, xrpl::peer_in_set, xrpl::PeerFinder::Bootcache::Transform, xrpl::PeerFinder::Checker< Protocol >::async_op< Handler >, xrpl::PeerFinder::Checker< Protocol >::basic_async_op, xrpl::PeerFinder::detail::LivecacheBase::Hop< IsConst >::Transform, xrpl::PeerFinder::Livecache< Allocator >::hops_t::Transform< IsConst >, xrpl::Resource::Key::hasher, xrpl::Resource::Key::key_equal, xrpl::ripesha_hasher, xrpl::RippleLineCache::AccountKey::Hash, xrpl::send_always, xrpl::send_if_not_pred< Predicate >, xrpl::send_if_pred< Predicate >, xrpl::SeqEnforcer< Seq >, xrpl::STObject::Transform, xrpl::TER_test::CheckComparable< I1, I2 >, xrpl::TER_test::NotConvertible< I1, I2 >, xrpl::test::csf::ConstantDistribution, xrpl::test::csf::PowerLawDistribution, xrpl::test::csf::Scheduler::event, xrpl::test::csf::Scheduler::event_impl< Handler >, xrpl::test::csf::Selector< RAIter, Generator >, xrpl::test::jtx::account_txn_id, xrpl::test::jtx::AMM, xrpl::test::jtx::any_t, xrpl::test::jtx::balance, xrpl::test::jtx::batch::inner, xrpl::test::jtx::batch::msig, xrpl::test::jtx::batch::sig, xrpl::test::jtx::credentials::ids, xrpl::test::jtx::credentials::uri, xrpl::test::jtx::delegate::as, xrpl::test::jtx::deliver_min, xrpl::test::jtx::dest_tag, xrpl::test::jtx::did::data, xrpl::test::jtx::did::document, xrpl::test::jtx::did::uri, xrpl::test::jtx::domain, xrpl::test::jtx::dtag, xrpl::test::jtx::Env, xrpl::test::jtx::Env_ss, xrpl::test::jtx::Env_ss::SignSubmitRunner, xrpl::test::jtx::epsilon_t, xrpl::test::jtx::expiration, xrpl::test::jtx::fee, xrpl::test::jtx::flags, xrpl::test::jtx::invoice_id, xrpl::test::jtx::IOU, xrpl::test::jtx::json, xrpl::test::jtx::JTxField< SField, StoredValue, OutputValue >, xrpl::test::jtx::JTxField< SField, StoredValue, StoredValue >, xrpl::test::jtx::JTxFieldWrapper< JTxField >, xrpl::test::jtx::JTxFieldWrapper< blobField >, xrpl::test::jtx::last_ledger_seq, xrpl::test::jtx::memo, xrpl::test::jtx::memo_data, xrpl::test::jtx::memo_format, xrpl::test::jtx::memo_type, xrpl::test::jtx::MPT, xrpl::test::jtx::mptbalance, xrpl::test::jtx::mptflags, xrpl::test::jtx::MPTTester, xrpl::test::jtx::msig, xrpl::test::jtx::nflags, xrpl::test::jtx::owner_count< Type >, xrpl::test::jtx::owners, xrpl::test::jtx::path, xrpl::test::jtx::paths, xrpl::test::jtx::PrettyAsset, xrpl::test::jtx::prop< Prop >, xrpl::test::jtx::qualityIn, xrpl::test::jtx::qualityInPercent, xrpl::test::jtx::qualityOut, xrpl::test::jtx::qualityOutPercent, xrpl::test::jtx::require, xrpl::test::jtx::requireAny, xrpl::test::jtx::rpc, xrpl::test::jtx::sendmax, xrpl::test::jtx::seq, xrpl::test::jtx::sig, xrpl::test::jtx::source_tag, xrpl::test::jtx::stag, xrpl::test::jtx::ter, xrpl::test::jtx::testline, xrpl::test::jtx::ticket::use, xrpl::test::jtx::token::amount, xrpl::test::jtx::token::brokerFee, xrpl::test::jtx::token::destination, xrpl::test::jtx::token::expiration, xrpl::test::jtx::token::issuer, xrpl::test::jtx::token::owner, xrpl::test::jtx::token::rootIndex, xrpl::test::jtx::token::uri, xrpl::test::jtx::token::xferFee, xrpl::test::jtx::txflags, xrpl::test::jtx::XRP_t, xrpl::test::Loan_test::LoanParameters, xrpl::test::Loan_test::VerifyLoanStatus, xrpl::test::nonhash< Bits >, xrpl::test::TrustedPublisherServer::lambda, xrpl::tests::FetchPack_test::Handler, xrpl::Transactor, xrpl::TxQ::OrderCandidates
  • +
  • operator()() : beast::aged_associative_container_test_base::CompT< T >, beast::aged_associative_container_test_base::equal_value< Traits >, beast::aged_associative_container_test_base::EqualT< T >, beast::aged_associative_container_test_base::HashT< T >, beast::detail::aged_associative_container_extract_t< maybe_map >, beast::detail::aged_associative_container_extract_t< false >, beast::detail::aged_ordered_container< IsMulti, IsMap, Key, T, Clock, Compare, Allocator >::KeyValueCompare, beast::detail::aged_ordered_container< IsMulti, IsMap, Key, T, Clock, Compare, Allocator >::pair_value_compare, beast::detail::aged_unordered_container< IsMulti, IsMap, Key, T, Clock, Hash, KeyEqual, Allocator >::KeyValueEqual, beast::detail::aged_unordered_container< IsMulti, IsMap, Key, T, Clock, Hash, KeyEqual, Allocator >::ValueHash, beast::detail::LexicalCast< Out, boost::core::basic_string_view< char > >, beast::detail::LexicalCast< Out, char * >, beast::detail::LexicalCast< Out, char const * >, beast::detail::LexicalCast< Out, std::string >, beast::detail::LexicalCast< Out, std::string_view >, beast::detail::LexicalCast< std::string, In >, beast::detail::xor_shift_engine< class >, beast::io_latency_probe< Clock >::sample_op< Handler >, beast::rfc2616::detail::ci_equal_pred, beast::uhash< Hasher >, beast::unit_test::selector, beast::unit_test::suite, beast::unit_test::suite::testcase_t, beast::xxhasher, boost::hash<::beast::IP::Address >, boost::hash<::beast::IP::Endpoint >, io_latency_probe_test::test_sampler, std::hash< xrpl::Book >, std::hash< xrpl::Issue >, std::hash<::beast::IP::Endpoint >, xrpl::ApplicationImp::io_latency_sampler, xrpl::Asset, xrpl::Attestations::CmpByClaimID, xrpl::Attestations::CmpByCreateCount, xrpl::Buffer, xrpl::ClosureCounter< Ret_t, Args_t >::Substitute< Closure >, xrpl::Cluster::Comparator, xrpl::csprng_engine, xrpl::detail::basic_sha512_half_hasher< Secure >, xrpl::detail::Generator, xrpl::detail::MultiApiJson< MinVer, MaxVer >::visitor_t, xrpl::equal_to< T >, xrpl::hardened_hash< HashAlgorithm >, xrpl::KeyEqual, xrpl::keylet::book_t, xrpl::keylet::next_t, xrpl::keylet::ticket_t, xrpl::less< T >, xrpl::match_peer, xrpl::NodeStore::LessThan, xrpl::NodeStore::progress, xrpl::NodeStore::Timing_test::parallel_for_lambda< Body >, xrpl::openssl_ripemd160_hasher, xrpl::openssl_sha256_hasher, xrpl::openssl_sha512_hasher, xrpl::peer_in_cluster, xrpl::peer_in_set, xrpl::PeerFinder::Bootcache::Transform, xrpl::PeerFinder::Checker< Protocol >::async_op< Handler >, xrpl::PeerFinder::Checker< Protocol >::basic_async_op, xrpl::PeerFinder::detail::LivecacheBase::Hop< IsConst >::Transform, xrpl::PeerFinder::Livecache< Allocator >::hops_t::Transform< IsConst >, xrpl::Resource::Key::hasher, xrpl::Resource::Key::key_equal, xrpl::ripesha_hasher, xrpl::RippleLineCache::AccountKey::Hash, xrpl::send_always, xrpl::send_if_not_pred< Predicate >, xrpl::send_if_pred< Predicate >, xrpl::SeqEnforcer< Seq >, xrpl::STObject::Transform, xrpl::TER_test::CheckComparable< I1, I2 >, xrpl::TER_test::NotConvertible< I1, I2 >, xrpl::test::csf::ConstantDistribution, xrpl::test::csf::PowerLawDistribution, xrpl::test::csf::Scheduler::event, xrpl::test::csf::Scheduler::event_impl< Handler >, xrpl::test::csf::Selector< RAIter, Generator >, xrpl::test::jtx::account_txn_id, xrpl::test::jtx::AMM, xrpl::test::jtx::any_t, xrpl::test::jtx::balance, xrpl::test::jtx::batch::inner, xrpl::test::jtx::batch::msig, xrpl::test::jtx::batch::sig, xrpl::test::jtx::credentials::ids, xrpl::test::jtx::credentials::uri, xrpl::test::jtx::delegate::as, xrpl::test::jtx::deliver_min, xrpl::test::jtx::dest_tag, xrpl::test::jtx::did::data, xrpl::test::jtx::did::document, xrpl::test::jtx::did::uri, xrpl::test::jtx::domain, xrpl::test::jtx::dtag, xrpl::test::jtx::Env, xrpl::test::jtx::Env_ss, xrpl::test::jtx::Env_ss::SignSubmitRunner, xrpl::test::jtx::epsilon_t, xrpl::test::jtx::expiration, xrpl::test::jtx::fee, xrpl::test::jtx::flags, xrpl::test::jtx::invoice_id, xrpl::test::jtx::IOU, xrpl::test::jtx::json, xrpl::test::jtx::JTxField< SField, StoredValue, OutputValue >, xrpl::test::jtx::JTxField< SField, StoredValue, StoredValue >, xrpl::test::jtx::JTxFieldWrapper< JTxField >, xrpl::test::jtx::JTxFieldWrapper< blobField >, xrpl::test::jtx::last_ledger_seq, xrpl::test::jtx::memo, xrpl::test::jtx::memo_data, xrpl::test::jtx::memo_format, xrpl::test::jtx::memo_type, xrpl::test::jtx::MPT, xrpl::test::jtx::mptbalance, xrpl::test::jtx::mptflags, xrpl::test::jtx::MPTTester, xrpl::test::jtx::msig, xrpl::test::jtx::nflags, xrpl::test::jtx::owner_count< Type >, xrpl::test::jtx::owners, xrpl::test::jtx::path, xrpl::test::jtx::paths, xrpl::test::jtx::PrettyAsset, xrpl::test::jtx::prop< Prop >, xrpl::test::jtx::qualityIn, xrpl::test::jtx::qualityInPercent, xrpl::test::jtx::qualityOut, xrpl::test::jtx::qualityOutPercent, xrpl::test::jtx::require, xrpl::test::jtx::requireAny, xrpl::test::jtx::rpc, xrpl::test::jtx::sendmax, xrpl::test::jtx::seq, xrpl::test::jtx::sig, xrpl::test::jtx::source_tag, xrpl::test::jtx::stag, xrpl::test::jtx::ter, xrpl::test::jtx::testline, xrpl::test::jtx::ticket::use, xrpl::test::jtx::token::amount, xrpl::test::jtx::token::brokerFee, xrpl::test::jtx::token::destination, xrpl::test::jtx::token::expiration, xrpl::test::jtx::token::issuer, xrpl::test::jtx::token::owner, xrpl::test::jtx::token::rootIndex, xrpl::test::jtx::token::uri, xrpl::test::jtx::token::xferFee, xrpl::test::jtx::txflags, xrpl::test::jtx::XRP_t, xrpl::test::Loan_test::LoanParameters, xrpl::test::Loan_test::VerifyLoanStatus, xrpl::test::nonhash< Bits >, xrpl::test::TrustedPublisherServer::lambda, xrpl::tests::FetchPack_test::Handler, xrpl::Transactor, xrpl::TxQ::OrderCandidates
  • operator*() : beast::detail::aged_container_iterator< is_const, Iterator >, beast::detail::ListIterator< N >, beast::LockFreeStackIterator< Container, IsConst >, beast::PropertyStream::Item, beast::rfc2616::list_iterator, Json::ValueConstIterator, Json::ValueIterator, xrpl::BookDirs::const_iterator, xrpl::detail::ReadViewFwdRange< ValueType >::iterator, xrpl::detail::STVar, xrpl::Dir::const_iterator, xrpl::Expected< T, E >, xrpl::LocalValue< T >, xrpl::LockedSociSession, xrpl::partitioned_unordered_map< Key, Value, Hash, Pred, Alloc >::const_iterator, xrpl::partitioned_unordered_map< Key, Value, Hash, Pred, Alloc >::iterator, xrpl::Resource::Charge, xrpl::SHAMap::const_iterator, xrpl::SharedIntrusive< T >, xrpl::STObject::Proxy< T >, xrpl::unit::ValueUnit< UnitTag, T >, xrpl::XRPAmount
  • operator*=() : xrpl::Number, xrpl::unit::ValueUnit< UnitTag, T >, xrpl::XRPAmount
  • operator+() : xrpl::Number, xrpl::Slice, xrpl::unit::ValueUnit< UnitTag, T >
  • diff --git a/functions_func_s.html b/functions_func_s.html index 7327be3b8e..95193ee00c 100644 --- a/functions_func_s.html +++ b/functions_func_s.html @@ -144,7 +144,7 @@ $(function() {
  • ServerImpl() : xrpl::ServerImpl< Handler >
  • serverOkay() : xrpl::Application, xrpl::ApplicationImp
  • session() : xrpl::BaseHTTPPeer< Handler, Impl >
  • -
  • Session() : xrpl::Session
  • +
  • Session() : xrpl::Session
  • set() : beast::insight::detail::NullGaugeImpl, beast::insight::detail::StatsDGaugeImpl, beast::insight::Gauge, beast::insight::GaugeImpl, beast::manual_clock< Clock >
  • Set() : beast::PropertyStream::Set
  • set() : Json::Writer, xrpl::Consensus< Adaptor >::MonitoredMode, xrpl::DebugSink, xrpl::detail::MultiApiJson< MinVer, MaxVer >, xrpl::FeatureBitset, xrpl::LedgerHolder, xrpl::Section, xrpl::STAmount, xrpl::STExchange< STBlob, Buffer >, xrpl::STExchange< STBlob, PublicKey >, xrpl::STExchange< STBlob, Slice >, xrpl::STExchange< STInteger< U >, T >, xrpl::STObject, xrpl::test::jtx::JTx, xrpl::test::jtx::MPTTester, xrpl::test::jtx::oracle::Oracle, xrpl::test::jtx::Vault, xrpl::test::ManualTimeKeeper
  • @@ -505,8 +505,8 @@ $(function() {
  • StrandContext() : xrpl::StrandContext
  • StrandResult() : xrpl::StrandResult< TInAmt, TOutAmt >
  • stream() : beast::Journal
  • -
  • Stream() : beast::Journal::Stream
  • -
  • stream() : beast::PropertyStream::Map, beast::PropertyStream::Set, xrpl::detail::WorkPlain, xrpl::detail::WorkSSL
  • +
  • Stream() : beast::Journal::Stream
  • +
  • stream() : beast::PropertyStream::Map, beast::PropertyStream::Set, xrpl::detail::WorkPlain, xrpl::detail::WorkSSL
  • StreambufWSMsg() : xrpl::StreambufWSMsg< Streambuf >
  • StreamSink() : xrpl::test::StreamSink
  • streamTest() : xrpl::SeqProxy_test
  • diff --git a/functions_func_u.html b/functions_func_u.html index 72da41f1a8..46603c1ed9 100644 --- a/functions_func_u.html +++ b/functions_func_u.html @@ -77,7 +77,7 @@ $(function() {
  • unchecked() : xrpl::Number::unchecked, xrpl::STAmount::unchecked
  • UndoDelay() : xrpl::test::Consensus_test::UndoDelay
  • unexcept() : beast::unit_test::suite
  • -
  • unexpected() : beast::unit_test::suite
  • +
  • unexpected() : beast::unit_test::suite
  • Unexpected() : xrpl::Unexpected< E >
  • unimpairLoan() : xrpl::LoanManage
  • unindent() : Json::StyledStreamWriter, Json::StyledWriter
  • diff --git a/functions_func_v.html b/functions_func_v.html index 3da41abf9f..62f3217128 100644 --- a/functions_func_v.html +++ b/functions_func_v.html @@ -77,7 +77,7 @@ $(function() {
  • valid() : xrpl::detail::MultiApiJson< MinVer, MaxVer >, xrpl::test::ElementComboIter
  • ValidAMM() : xrpl::ValidAMM
  • validAmounts() : xrpl::Attestations::AttestationClaim, xrpl::Attestations::AttestationCreateAccount
  • -
  • validate() : xrpl::cryptoconditions::Fulfillment, xrpl::cryptoconditions::PreimageSha256, xrpl::RCLConsensus::Adaptor, xrpl::test::csf::Validations_test::Node
  • +
  • validate() : xrpl::cryptoconditions::Fulfillment, xrpl::cryptoconditions::PreimageSha256, xrpl::RCLConsensus::Adaptor, xrpl::test::csf::Validations_test::Node
  • validateClosedLedger() : xrpl::test::Batch_test
  • validateDepositAuthResult() : xrpl::test::DepositAuthorized_test
  • validatedLedger() : xrpl::LedgerHistory
  • @@ -110,21 +110,21 @@ $(function() {
  • validNumericRange() : xrpl::Transactor
  • validPublicKey() : xrpl::RPCParser
  • vals() : xrpl::test::csf::Validations_test::TestHarness
  • -
  • Value() : Json::Value
  • +
  • Value() : Json::Value
  • value() : xrpl::Asset, xrpl::DecayingSample< Window, Clock >, xrpl::DecayWindow< HalfLife, Clock >
  • Value() : xrpl::detail::DeferredCredits::Value, xrpl::detail::LocalValues::Value< T >
  • -
  • value() : xrpl::Expected< T, E >, xrpl::MPTAmount, xrpl::SeqProxy, xrpl::STAccount, xrpl::STAmount, xrpl::STBitString< Bits >, xrpl::STBlob, xrpl::STCurrency, xrpl::STInteger< Integer >, xrpl::STIssue, xrpl::STNumber, xrpl::STObject::Proxy< T >, xrpl::STVector256, xrpl::STXChainBridge, xrpl::test::jtx::accountIDField, xrpl::test::jtx::JTxField< SField, StoredValue, OutputValue >, xrpl::test::jtx::PrettyAmount, xrpl::test::jtx::stAmountField, xrpl::test::jtx::timePointField, xrpl::test::jtx::uint256Field, xrpl::test::jtx::valueUnitField< SField, UnitTag, ValueType >, xrpl::Unexpected< E >, xrpl::unit::ValueUnit< UnitTag, T >, xrpl::XRPAmount
  • +
  • value() : xrpl::Expected< T, E >, xrpl::MPTAmount, xrpl::SeqProxy, xrpl::STAccount, xrpl::STAmount, xrpl::STBitString< Bits >, xrpl::STBlob, xrpl::STCurrency, xrpl::STInteger< Integer >, xrpl::STIssue, xrpl::STNumber, xrpl::STObject::Proxy< T >, xrpl::STVector256, xrpl::STXChainBridge, xrpl::test::jtx::accountIDField, xrpl::test::jtx::JTxField< SField, StoredValue, OutputValue >, xrpl::test::jtx::PrettyAmount, xrpl::test::jtx::stAmountField, xrpl::test::jtx::timePointField, xrpl::test::jtx::uint256Field, xrpl::test::jtx::valueUnitField< SField, UnitTag, ValueType >, xrpl::Unexpected< E >, xrpl::unit::ValueUnit< UnitTag, T >, xrpl::XRPAmount
  • value_comp() : beast::detail::aged_ordered_container< IsMulti, IsMap, Key, T, Clock, Compare, Allocator >
  • value_hash() : beast::detail::aged_unordered_container< IsMulti, IsMap, Key, T, Clock, Hash, KeyEqual, Allocator >::config_t
  • value_or() : xrpl::Section, xrpl::STObject::OptionalProxy< T >
  • ValueConstIterator() : Json::ValueConstIterator
  • ValueEntry() : xrpl::TaggedCache< Key, T, IsKeyCache, SharedWeakUnionPointerType, SharedPointerType, Hash, KeyEqual, Mutex >::ValueEntry
  • -
  • ValueHash() : beast::detail::aged_unordered_container< IsMulti, IsMap, Key, T, Clock, Hash, KeyEqual, Allocator >::ValueHash
  • -
  • ValueIterator() : Json::ValueIterator
  • +
  • ValueHash() : beast::detail::aged_unordered_container< IsMulti, IsMap, Key, T, Clock, Hash, KeyEqual, Allocator >::ValueHash
  • +
  • ValueIterator() : Json::ValueIterator
  • ValueIteratorBase() : Json::ValueIteratorBase
  • ValueProxy() : xrpl::STObject::ValueProxy< T >
  • values() : beast::aged_associative_container_test_base::MaybeMap< Base, IsMap >, beast::aged_associative_container_test_base::MaybeMap< Base, true >, xrpl::Section
  • -
  • ValueUnit() : xrpl::unit::ValueUnit< UnitTag, T >
  • +
  • ValueUnit() : xrpl::unit::ValueUnit< UnitTag, T >
  • varint_traits() : xrpl::NodeStore::varint_traits< T, true >
  • VaultClawback() : xrpl::VaultClawback
  • VaultCreate() : xrpl::VaultCreate
  • diff --git a/functions_h.html b/functions_h.html index 76da73bcfc..2499d6cc1c 100644 --- a/functions_h.html +++ b/functions_h.html @@ -168,8 +168,8 @@ $(function() {
  • highQualityOut_ : xrpl::RPCTrustLine
  • Hist : xrpl::test::csf::LedgerCollector, xrpl::test::csf::TxCollector
  • hist_ : xrpl::ServerImpl< Handler >
  • -
  • Histogram : xrpl::PeerFinder::Livecache< Allocator >::hops_t
  • histogram() : xrpl::PeerFinder::Livecache< Allocator >::hops_t
  • +
  • Histogram : xrpl::PeerFinder::Livecache< Allocator >::hops_t
  • history : xrpl::test::NetworkHistory
  • historyLastLedgerSeq_ : xrpl::NetworkOPsImp::SubAccountHistoryIndex
  • historySize : xrpl::ServerImpl< Handler >
  • @@ -186,7 +186,7 @@ $(function() {
  • holdLedgers : xrpl::LocalTxs
  • holds() : xrpl::Asset, xrpl::STAmount, xrpl::STIssue, xrpl::test::jtx::PrettyAsset
  • holdTime : xrpl::HashRouter::Setup
  • -
  • Hook() : beast::insight::Hook
  • +
  • Hook() : beast::insight::Hook
  • hook : xrpl::JobQueue, xrpl::LedgerMaster::Stats, xrpl::NetworkOPsImp::Stats, xrpl::OverlayImpl::Stats, xrpl::PeerFinder::ManagerImp::Stats, xrpl::TaggedCache< Key, T, IsKeyCache, SharedWeakUnionPointerType, SharedPointerType, Hash, KeyEqual, Mutex >::Stats
  • Hop() : xrpl::PeerFinder::detail::LivecacheBase::Hop< IsConst >
  • hops : xrpl::PeerFinder::Endpoint, xrpl::PeerFinder::Livecache< Allocator >
  • diff --git a/functions_i.html b/functions_i.html index a8f4391188..e0f6789e07 100644 --- a/functions_i.html +++ b/functions_i.html @@ -74,20 +74,18 @@ $(function() {

    - i -