mirror of
https://github.com/Xahau/xahaud.git
synced 2025-12-06 17:27:52 +00:00
Allow relayed ledger requests to check the shard store
This commit is contained in:
committed by
Nikolaos D. Bougalis
parent
4869a0d00e
commit
5db5e31140
@@ -2047,8 +2047,8 @@ getPeerWithTree (OverlayImpl& ov,
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns the set of peers that claim
|
// Returns a random peer weighted by how likely to
|
||||||
// to have the specified ledger.
|
// have the ledger and how responsive it is.
|
||||||
//
|
//
|
||||||
static
|
static
|
||||||
std::shared_ptr<PeerImp>
|
std::shared_ptr<PeerImp>
|
||||||
@@ -2173,40 +2173,40 @@ PeerImp::getLedger (std::shared_ptr<protocol::TMGetLedger> const& m)
|
|||||||
logMe += to_string (ledgerhash);
|
logMe += to_string (ledgerhash);
|
||||||
ledger = app_.getLedgerMaster ().getLedgerByHash (ledgerhash);
|
ledger = app_.getLedgerMaster ().getLedgerByHash (ledgerhash);
|
||||||
|
|
||||||
|
if (!ledger && packet.has_ledgerseq())
|
||||||
|
{
|
||||||
|
if (auto shardStore = app_.getShardStore())
|
||||||
|
{
|
||||||
|
auto seq = packet.ledgerseq();
|
||||||
|
if (seq >= shardStore->earliestSeq())
|
||||||
|
ledger = shardStore->fetchLedger(ledgerhash, seq);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!ledger)
|
if (!ledger)
|
||||||
{
|
{
|
||||||
JLOG(p_journal_.trace()) <<
|
JLOG(p_journal_.trace()) <<
|
||||||
"GetLedger: Don't have " << ledgerhash;
|
"GetLedger: Don't have " << ledgerhash;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ledger && (packet.has_querytype () &&
|
if (!ledger && (packet.has_querytype () &&
|
||||||
!packet.has_requestcookie ()))
|
!packet.has_requestcookie ()))
|
||||||
{
|
{
|
||||||
std::uint32_t seq = 0;
|
// We don't have the requested ledger
|
||||||
if (packet.has_ledgerseq())
|
// Search for a peer who might
|
||||||
|
auto const v = getPeerWithLedger(overlay_, ledgerhash,
|
||||||
|
packet.has_ledgerseq() ? packet.ledgerseq() : 0, this);
|
||||||
|
if (!v)
|
||||||
{
|
{
|
||||||
seq = packet.ledgerseq();
|
JLOG(p_journal_.trace()) << "GetLedger: Cannot route";
|
||||||
if (auto shardStore = app_.getShardStore())
|
|
||||||
{
|
|
||||||
if (seq >= shardStore->earliestSeq())
|
|
||||||
ledger = shardStore->fetchLedger(ledgerhash, seq);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (! ledger)
|
|
||||||
{
|
|
||||||
auto const v = getPeerWithLedger(
|
|
||||||
overlay_, ledgerhash, seq, this);
|
|
||||||
if (! v)
|
|
||||||
{
|
|
||||||
JLOG(p_journal_.trace()) << "GetLedger: Cannot route";
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
packet.set_requestcookie (id ());
|
|
||||||
v->send (std::make_shared<Message>(
|
|
||||||
packet, protocol::mtGET_LEDGER));
|
|
||||||
JLOG(p_journal_.debug()) << "GetLedger: Request routed";
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
packet.set_requestcookie (id ());
|
||||||
|
v->send (std::make_shared<Message>(
|
||||||
|
packet, protocol::mtGET_LEDGER));
|
||||||
|
JLOG(p_journal_.debug()) << "GetLedger: Request routed";
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (packet.has_ledgerseq ())
|
else if (packet.has_ledgerseq ())
|
||||||
|
|||||||
Reference in New Issue
Block a user