From 3c8ecc01f14f17ac0b8bcd9811967f1021a43bbc Mon Sep 17 00:00:00 2001 From: Nathan Nichols Date: Mon, 26 Apr 2021 15:35:29 -0500 Subject: [PATCH] impliment cursor for book_offers --- handlers/BookOffers.cpp | 5 ++++- reporting/CassandraBackend.cpp | 39 ++++++++++++++++++++++++---------- 2 files changed, 32 insertions(+), 12 deletions(-) diff --git a/handlers/BookOffers.cpp b/handlers/BookOffers.cpp index 94078956..cd8c4cae 100644 --- a/handlers/BookOffers.cpp +++ b/handlers/BookOffers.cpp @@ -266,8 +266,11 @@ doBookOffers( ripple::uint256 bookBase = getBookBase(book); auto start = std::chrono::system_clock::now(); + std::cout << "getting Book Offers" << std::endl; auto [offers, retCursor] = backend.fetchBookOffers(bookBase, *ledgerSequence, limit, cursor); + std::cout << "got Book Offers" << std::endl; + auto end = std::chrono::system_clock::now(); BOOST_LOG_TRIVIAL(warning) << "Time loading books from Postgres: " @@ -281,7 +284,7 @@ doBookOffers( std::move_iterator(offers.begin()), std::move_iterator(offers.end()), std::back_inserter(jsonOffers), - [](auto obj) { + [](auto&& obj) { try { ripple::SerialIter it{obj.blob.data(), obj.blob.size()}; diff --git a/reporting/CassandraBackend.cpp b/reporting/CassandraBackend.cpp index 60dfe4f6..c5adf6f9 100644 --- a/reporting/CassandraBackend.cpp +++ b/reporting/CassandraBackend.cpp @@ -666,14 +666,26 @@ CassandraBackend::fetchBookOffers( BOOST_LOG_TRIVIAL(info) << __func__ << " upper = " << std::to_string(upper) << " book = " << ripple::strHex(std::string((char*)book.data(), 24)); - // ripple::uint256 zero = {}; - // statement.bindBytes(zero.data(), 8); - // if (cursor) - // statement.bindBytes(*cursor); - // else - // { - // statement.bindBytes(zero); - // } + if (cursor) + { + auto object = fetchLedgerObject(*cursor, sequence); + + if(!object) + return {{}, {}}; + + ripple::SerialIter it{object->data(), object->size()}; + ripple::SLE offer{it, *cursor}; + ripple::uint256 bookDir = offer.getFieldH256(ripple::sfBookDirectory); + + statement.bindBytes(bookDir.data() + 24, 8); + statement.bindBytes(*cursor); + } + else + { + ripple::uint256 zero = beast::zero; + statement.bindBytes(zero.data(), 8); + statement.bindBytes(zero); + } // statement.bindUInt(limit); CassandraResult result = executeSyncRead(statement); @@ -681,6 +693,7 @@ CassandraBackend::fetchBookOffers( BOOST_LOG_TRIVIAL(debug) << __func__ << " - got keys"; if (!result) { + std::cout << "could not sync read" << std::endl; return {{}, {}}; } @@ -694,6 +707,7 @@ CassandraBackend::fetchBookOffers( BOOST_LOG_TRIVIAL(debug) << __func__ << " - populated keys. num keys = " << keys.size(); + std::cout << keys.size() << std::endl; if (!keys.size()) return {{}, {}}; @@ -701,11 +715,13 @@ CassandraBackend::fetchBookOffers( std::vector objs = fetchLedgerObjects(keys, sequence); for (size_t i = 0; i < objs.size(); ++i) { - if (results.size() == limit) - return {results, keys[i]}; - if (objs[i].size() != 0) + { + if (results.size() == limit) + return {results, keys[i]}; + results.push_back({keys[i], objs[i]}); + } } return {results, {}}; @@ -1634,6 +1650,7 @@ CassandraBackend::open() query.str(""); query << "SELECT quality_key FROM " << tablePrefix << "books2 " << " WHERE book = ? AND sequence = ?" + << " AND quality_key >= (?, ?)" " ORDER BY quality_key ASC"; if (!selectBook_.prepareStatement(query, session_.get())) continue;