add date to transaction tables

This commit is contained in:
CJ Cobb
2021-09-07 10:46:10 -04:00
parent 553be19882
commit cc76ece6f2
7 changed files with 55 additions and 45 deletions

View File

@@ -36,6 +36,7 @@ struct TransactionAndMetadata
Blob transaction;
Blob metadata;
uint32_t ledgerSequence;
uint32_t date;
bool
operator==(const TransactionAndMetadata&) const = default;
};
@@ -201,15 +202,14 @@ protected:
bool isFirst = false) const = 0;
void
writeLedgerObject(
std::string&& key,
uint32_t seq,
std::string&& blob) const;
writeLedgerObject(std::string&& key, uint32_t seq, std::string&& blob)
const;
virtual void
writeTransaction(
std::string&& hash,
uint32_t seq,
uint32_t date,
std::string&& transaction,
std::string&& metadata) const = 0;
@@ -257,10 +257,8 @@ private:
std::uint32_t limit) const = 0;
virtual void
doWriteLedgerObject(
std::string&& key,
uint32_t seq,
std::string&& blob) const = 0;
doWriteLedgerObject(std::string&& key, uint32_t seq, std::string&& blob)
const = 0;
virtual bool
doFinishWrites() const = 0;

View File

@@ -226,6 +226,7 @@ void
CassandraBackend::writeTransaction(
std::string&& hash,
uint32_t seq,
uint32_t date,
std::string&& transaction,
std::string&& metadata) const
{
@@ -242,12 +243,17 @@ CassandraBackend::writeTransaction(
makeAndExecuteAsyncWrite(
this,
std::move(std::make_tuple(
std::move(hash), seq, std::move(transaction), std::move(metadata))),
std::move(hash),
seq,
date,
std::move(transaction),
std::move(metadata))),
[this](auto& params) {
CassandraStatement statement{insertTransaction_};
auto& [hash, sequence, transaction, metadata] = params.data;
auto& [hash, sequence, date, transaction, metadata] = params.data;
statement.bindNextBytes(hash);
statement.bindNextInt(sequence);
statement.bindNextInt(date);
statement.bindNextBytes(transaction);
statement.bindNextBytes(metadata);
return statement;
@@ -346,6 +352,7 @@ CassandraBackend::fetchTransactions(
results[i] = {
result.getBytes(),
result.getBytes(),
result.getUInt32(),
result.getUInt32()};
}));
executeAsyncRead(statement, processAsyncRead, *cbs[i]);
@@ -1058,11 +1065,11 @@ CassandraBackend::open(bool readOnly)
continue;
query.str("");
query << "CREATE TABLE IF NOT EXISTS " << tablePrefix << "transactions"
<< " ( hash blob PRIMARY KEY, ledger_sequence bigint, "
"transaction "
"blob, metadata blob)"
<< " WITH default_time_to_live = " << std::to_string(ttl);
query
<< "CREATE TABLE IF NOT EXISTS " << tablePrefix << "transactions"
<< " ( hash blob PRIMARY KEY, ledger_sequence bigint, date bigint, "
"transaction blob, metadata blob)"
<< " WITH default_time_to_live = " << std::to_string(ttl);
if (!executeSimpleStatement(query.str()))
continue;
query.str("");
@@ -1079,15 +1086,8 @@ CassandraBackend::open(bool readOnly)
<< " LIMIT 1";
if (!executeSimpleStatement(query.str()))
continue;
query.str("");
query << "CREATE INDEX ON " << tablePrefix
<< "transactions(ledger_sequence)";
if (!executeSimpleStatement(query.str()))
continue;
query.str("");
query << "SELECT * FROM " << tablePrefix
<< "transactions WHERE ledger_sequence = 1"
query << "SELECT * FROM " << tablePrefix << "ledger_transactions"
<< " LIMIT 1";
if (!executeSimpleStatement(query.str()))
continue;
@@ -1179,9 +1179,8 @@ CassandraBackend::open(bool readOnly)
query.str("");
query << "INSERT INTO " << tablePrefix << "transactions"
<< " (hash, ledger_sequence, transaction, metadata) VALUES "
"(?, ?, "
"?, ?)";
<< " (hash, ledger_sequence, date, transaction, metadata) VALUES "
"(?, ?, ?, ?, ?)";
if (!insertTransaction_.prepareStatement(query, session_.get()))
continue;
query.str("");
@@ -1213,7 +1212,7 @@ CassandraBackend::open(bool readOnly)
continue;
query.str("");
query << "SELECT transaction, metadata, ledger_sequence FROM "
query << "SELECT transaction, metadata, ledger_sequence, date FROM "
<< tablePrefix << "transactions"
<< " WHERE hash = ?";
if (!selectTransaction_.prepareStatement(query, session_.get()))

View File

@@ -806,7 +806,11 @@ public:
BOOST_LOG_TRIVIAL(error) << __func__ << " - no rows";
return {};
}
return {{result.getBytes(), result.getBytes(), result.getUInt32()}};
return {
{result.getBytes(),
result.getBytes(),
result.getUInt32(),
result.getUInt32()}};
}
LedgerPage
doFetchLedgerPage(
@@ -841,6 +845,7 @@ public:
writeTransaction(
std::string&& hash,
uint32_t seq,
uint32_t date,
std::string&& transaction,
std::string&& metadata) const override;

View File

@@ -85,15 +85,16 @@ void
PostgresBackend::writeTransaction(
std::string&& hash,
uint32_t seq,
uint32_t date,
std::string&& transaction,
std::string&& metadata) const
{
if (abortWrite_)
return;
transactionsBuffer_ << "\\\\x" << ripple::strHex(hash) << '\t'
<< std::to_string(seq) << '\t' << "\\\\x"
<< ripple::strHex(transaction) << '\t' << "\\\\x"
<< ripple::strHex(metadata) << '\n';
<< std::to_string(seq) << '\t' << std::to_string(date)
<< '\t' << "\\\\x" << ripple::strHex(transaction)
<< '\t' << "\\\\x" << ripple::strHex(metadata) << '\n';
}
uint32_t
@@ -275,7 +276,7 @@ PostgresBackend::fetchTransaction(ripple::uint256 const& hash) const
PgQuery pgQuery(pgPool_);
pgQuery("SET statement_timeout TO 10000");
std::stringstream sql;
sql << "SELECT transaction,metadata,ledger_seq FROM transactions "
sql << "SELECT transaction,metadata,ledger_seq,date FROM transactions "
"WHERE hash = "
<< "\'\\x" << ripple::strHex(hash) << "\'";
auto res = pgQuery(sql.str().data());
@@ -284,7 +285,8 @@ PostgresBackend::fetchTransaction(ripple::uint256 const& hash) const
return {
{res.asUnHexedBlob(0, 0),
res.asUnHexedBlob(0, 1),
res.asBigInt(0, 2)}};
res.asBigInt(0, 2),
res.asBigInt(0, 3)}};
}
return {};
@@ -295,7 +297,8 @@ PostgresBackend::fetchAllTransactionsInLedger(uint32_t ledgerSequence) const
PgQuery pgQuery(pgPool_);
pgQuery("SET statement_timeout TO 10000");
std::stringstream sql;
sql << "SELECT transaction, metadata, ledger_seq FROM transactions WHERE "
sql << "SELECT transaction, metadata, ledger_seq,date FROM transactions "
"WHERE "
<< "ledger_seq = " << std::to_string(ledgerSequence);
auto res = pgQuery(sql.str().data());
if (size_t numRows = checkResult(res, 3))
@@ -306,7 +309,8 @@ PostgresBackend::fetchAllTransactionsInLedger(uint32_t ledgerSequence) const
txns.push_back(
{res.asUnHexedBlob(i, 0),
res.asUnHexedBlob(i, 1),
res.asBigInt(i, 2)});
res.asBigInt(i, 2),
res.asBigInt(i, 3)});
}
return txns;
}
@@ -410,7 +414,7 @@ PostgresBackend::fetchTransactions(
<< __func__ << " getting txn = " << i;
PgQuery pgQuery(pgPool_);
std::stringstream sql;
sql << "SELECT transaction,metadata,ledger_seq FROM "
sql << "SELECT transaction,metadata,ledger_seq,date FROM "
"transactions "
"WHERE HASH = \'\\x"
<< ripple::strHex(hash) << "\'";
@@ -421,7 +425,8 @@ PostgresBackend::fetchTransactions(
results[i] = {
res.asUnHexedBlob(0, 0),
res.asUnHexedBlob(0, 1),
res.asBigInt(0, 2)};
res.asBigInt(0, 2),
res.asBigInt(0, 3)};
}
if (--numRemaining == 0)
{
@@ -447,7 +452,7 @@ PostgresBackend::fetchTransactions(
for (size_t i = 0; i < hashes.size(); ++i)
{
auto const& hash = hashes[i];
sql << "SELECT transaction,metadata,ledger_seq FROM "
sql << "SELECT transaction,metadata,ledger_seq,date FROM "
"transactions "
"WHERE HASH = \'\\x"
<< ripple::strHex(hash) << "\'";
@@ -468,7 +473,8 @@ PostgresBackend::fetchTransactions(
results.push_back(
{res.asUnHexedBlob(i, 0),
res.asUnHexedBlob(i, 1),
res.asBigInt(i, 2)});
res.asBigInt(i, 2),
res.asBigInt(i, 3)});
}
}
return results;

View File

@@ -76,15 +76,14 @@ public:
bool isFirst) const override;
void
doWriteLedgerObject(
std::string&& key,
uint32_t seq,
std::string&& blob) const override;
doWriteLedgerObject(std::string&& key, uint32_t seq, std::string&& blob)
const override;
void
writeTransaction(
std::string&& hash,
uint32_t seq,
uint32_t date,
std::string&& transaction,
std::string&& metadata) const override;

View File

@@ -79,6 +79,7 @@ ReportingETL::insertTransactions(
backend_->writeTransaction(
std::move(keyStr),
ledger.seq,
ledger.closeTime.time_since_epoch().count(),
std::move(*raw),
std::move(*txn.mutable_metadata_blob()));
}