Catch transaction deserialization error in doLedgerGrpc (#4323)

* Allow clio to extract ledgers with transactions that can no longer be
  deserialized. The problem transactions will be skipped.
This commit is contained in:
CJ Cobb
2022-12-13 20:09:53 -05:00
committed by Richard Holland
parent 3c1f84f09e
commit 167a7b3a5b

View File

@@ -134,14 +134,16 @@ doLedgerGrpc(RPC::GRPCContext<org::xrpl::rpc::v1::GetLedgerRequest>& context)
response.set_ledger_header(s.peekData().data(), s.getLength());
if (request.transactions())
{
try
{
for (auto& i : ledger->txs)
{
assert(i.first);
if (request.expand())
{
auto txn =
response.mutable_transactions_list()->add_transactions();
auto txn = response.mutable_transactions_list()
->add_transactions();
Serializer sTxn = i.first->getSerializer();
txn->set_transaction_blob(sTxn.data(), sTxn.getLength());
if (i.second)
@@ -158,6 +160,15 @@ doLedgerGrpc(RPC::GRPCContext<org::xrpl::rpc::v1::GetLedgerRequest>& context)
}
}
}
catch (std::exception const& e)
{
JLOG(context.j.error())
<< __func__ << " - Error deserializing transaction in ledger "
<< ledger->info().seq
<< " . skipping transaction and following transactions. You "
"should look into this further";
}
}
if (request.get_objects())
{