Improve shard concurrency:

* Reduce lock scope on all public functions
* Use TaskQueue to process shard finalization in separate thread
* Store shard last ledger hash and other info in backend
* Use temp SQLite DB versus control file when acquiring
* Remove boost serialization from cmake files
This commit is contained in:
Miguel Portilla
2019-09-13 18:44:24 -04:00
committed by manojsdoshi
parent f00f263852
commit cc452dfa9b
47 changed files with 1972 additions and 1346 deletions

View File

@@ -19,8 +19,6 @@
#include <ripple/basics/RangeSet.h>
#include <ripple/beast/unit_test.h>
#include <boost/archive/binary_iarchive.hpp>
#include <boost/archive/binary_oarchive.hpp>
namespace ripple
{
@@ -78,39 +76,73 @@ public:
}
void
testSerialization()
testFromString()
{
testcase("fromString");
auto works = [](RangeSet<std::uint32_t> const & orig)
{
std::stringstream ss;
boost::archive::binary_oarchive oa(ss);
oa << orig;
RangeSet<std::uint32_t> set;
boost::archive::binary_iarchive ia(ss);
RangeSet<std::uint32_t> deser;
ia >> deser;
BEAST_EXPECT(!from_string(set, ""));
BEAST_EXPECT(boost::icl::length(set) == 0);
return orig == deser;
};
BEAST_EXPECT(!from_string(set, "#"));
BEAST_EXPECT(boost::icl::length(set) == 0);
RangeSet<std::uint32_t> rs;
BEAST_EXPECT(!from_string(set, ","));
BEAST_EXPECT(boost::icl::length(set) == 0);
BEAST_EXPECT(works(rs));
BEAST_EXPECT(!from_string(set, ",-"));
BEAST_EXPECT(boost::icl::length(set) == 0);
rs.insert(3);
BEAST_EXPECT(works(rs));
BEAST_EXPECT(!from_string(set, "1,,2"));
BEAST_EXPECT(boost::icl::length(set) == 0);
rs.insert(range(7u, 10u));
BEAST_EXPECT(works(rs));
set.clear();
BEAST_EXPECT(from_string(set, "1"));
BEAST_EXPECT(boost::icl::length(set) == 1);
BEAST_EXPECT(boost::icl::first(set) == 1);
set.clear();
BEAST_EXPECT(from_string(set, "1,1"));
BEAST_EXPECT(boost::icl::length(set) == 1);
BEAST_EXPECT(boost::icl::first(set) == 1);
set.clear();
BEAST_EXPECT(from_string(set, "1-1"));
BEAST_EXPECT(boost::icl::length(set) == 1);
BEAST_EXPECT(boost::icl::first(set) == 1);
set.clear();
BEAST_EXPECT(from_string(set, "1,4-6"));
BEAST_EXPECT(boost::icl::length(set) == 4);
BEAST_EXPECT(boost::icl::first(set) == 1);
BEAST_EXPECT(!boost::icl::contains(set, 2));
BEAST_EXPECT(!boost::icl::contains(set, 3));
BEAST_EXPECT(boost::icl::contains(set, 4));
BEAST_EXPECT(boost::icl::contains(set, 5));
BEAST_EXPECT(boost::icl::last(set) == 6);
set.clear();
BEAST_EXPECT(from_string(set, "1-2,4-6"));
BEAST_EXPECT(boost::icl::length(set) == 5);
BEAST_EXPECT(boost::icl::first(set) == 1);
BEAST_EXPECT(boost::icl::contains(set, 2));
BEAST_EXPECT(boost::icl::contains(set, 4));
BEAST_EXPECT(boost::icl::last(set) == 6);
set.clear();
BEAST_EXPECT(from_string(set, "1-2,6"));
BEAST_EXPECT(boost::icl::length(set) == 3);
BEAST_EXPECT(boost::icl::first(set) == 1);
BEAST_EXPECT(boost::icl::contains(set, 2));
BEAST_EXPECT(boost::icl::last(set) == 6);
}
void
run() override
{
testPrevMissing();
testToString();
testSerialization();
testFromString();
}
};

View File

@@ -109,7 +109,7 @@ public:
std::unique_ptr<perf::PerfLog> perfLog =
std::make_unique<perf::PerfLogTest>();
Workers w(cb, *perfLog, "Test", tc1);
Workers w(cb, perfLog.get(), "Test", tc1);
BEAST_EXPECT(w.getNumberOfThreads() == tc1);
auto testForThreadCount = [this, &cb, &w] (int const threadCount)

View File

@@ -165,7 +165,7 @@ public:
std::unique_ptr<Database> db =
Manager::instance().make_Database(
"test", scheduler, 2, parent, nodeParams, journal_);
BEAST_EXPECT(db->earliestSeq() == XRP_LEDGER_EARLIEST_SEQ);
BEAST_EXPECT(db->earliestLedgerSeq() == XRP_LEDGER_EARLIEST_SEQ);
}
// Set an invalid earliest ledger sequence
@@ -190,7 +190,7 @@ public:
"test", scheduler, 2, parent, nodeParams, journal_);
// Verify database uses the earliest ledger sequence setting
BEAST_EXPECT(db->earliestSeq() == 1);
BEAST_EXPECT(db->earliestLedgerSeq() == 1);
}

View File

@@ -195,7 +195,7 @@ public:
db.store (object->getType (),
std::move (data),
object->getHash (),
db.earliestSeq());
db.earliestLedgerSeq());
}
}

View File

@@ -2998,10 +2998,9 @@ static RPCCallTestData const rpcCallTestArray [] =
})"
},
{
"download_shard: novalidate.", __LINE__,
"download_shard:", __LINE__,
{
"download_shard",
"novalidate",
"20",
"url_NotValidated",
},
@@ -3016,8 +3015,7 @@ static RPCCallTestData const rpcCallTestArray [] =
"index" : 20,
"url" : "url_NotValidated"
}
],
"validate" : false
]
}
]
})"
@@ -3064,10 +3062,9 @@ static RPCCallTestData const rpcCallTestArray [] =
})"
},
{
"download_shard: novalidate many shards.", __LINE__,
"download_shard: many shards.", __LINE__,
{
"download_shard",
"novalidate",
"2000000",
"url_NotValidated0",
"2000001",
@@ -3106,8 +3103,7 @@ static RPCCallTestData const rpcCallTestArray [] =
"index" : 2000004,
"url" : "url_NotValidated4"
}
],
"validate" : false
]
}
]
})"
@@ -3160,8 +3156,7 @@ static RPCCallTestData const rpcCallTestArray [] =
"index" : 20,
"url" : "url_NotValidated"
}
],
"validate" : false
]
}
]
})"