Databases need to be dropped to be converted to dupsort.
This commit is contained in:
parent
636d015ed9
commit
5f196ee751
4 changed files with 80 additions and 1 deletions
|
@ -782,3 +782,72 @@ TEST (block_store, upgrade_v6_v7)
|
|||
ASSERT_EQ (store.unchecked_end (), store.unchecked_begin (transaction));
|
||||
}
|
||||
|
||||
// Databases need to be dropped in order to convert to dupsort compatible
|
||||
TEST (block_store, change_dupsort)
|
||||
{
|
||||
auto path (rai::unique_path ());
|
||||
bool init (false);
|
||||
rai::block_store store (init, path);
|
||||
rai::transaction transaction (store.environment, nullptr, true);
|
||||
ASSERT_EQ (0, mdb_drop (transaction, store.unchecked, 1));
|
||||
ASSERT_EQ (0, mdb_dbi_open (transaction, "unchecked", MDB_CREATE, &store.unchecked));
|
||||
rai::send_block send1 (0, 0, 0, rai::test_genesis_key.prv, rai::test_genesis_key.pub, 0);
|
||||
rai::send_block send2 (1, 0, 0, rai::test_genesis_key.prv, rai::test_genesis_key.pub, 0);
|
||||
ASSERT_NE (send1.hash (), send2.hash ());
|
||||
store.unchecked_put (transaction, send1.hash (), send1);
|
||||
store.unchecked_put (transaction, send1.hash (), send2);
|
||||
{
|
||||
auto iterator1 (store.unchecked_begin (transaction));
|
||||
++iterator1;
|
||||
ASSERT_EQ (store.unchecked_end (), iterator1);
|
||||
}
|
||||
ASSERT_EQ (0, mdb_drop (transaction, store.unchecked, 0));
|
||||
mdb_dbi_close (store.environment, store.unchecked);
|
||||
ASSERT_EQ (0, mdb_dbi_open (transaction, "unchecked", MDB_CREATE | MDB_DUPSORT, &store.unchecked));
|
||||
store.unchecked_put (transaction, send1.hash (), send1);
|
||||
store.unchecked_put (transaction, send1.hash (), send2);
|
||||
{
|
||||
auto iterator1 (store.unchecked_begin (transaction));
|
||||
++iterator1;
|
||||
ASSERT_EQ (store.unchecked_end (), iterator1);
|
||||
}
|
||||
ASSERT_EQ (0, mdb_drop (transaction, store.unchecked, 1));
|
||||
ASSERT_EQ (0, mdb_dbi_open (transaction, "unchecked", MDB_CREATE | MDB_DUPSORT, &store.unchecked));
|
||||
store.unchecked_put (transaction, send1.hash (), send1);
|
||||
store.unchecked_put (transaction, send1.hash (), send2);
|
||||
{
|
||||
auto iterator1 (store.unchecked_begin (transaction));
|
||||
++iterator1;
|
||||
ASSERT_NE (store.unchecked_end (), iterator1);
|
||||
++iterator1;
|
||||
ASSERT_EQ (store.unchecked_end (), iterator1);
|
||||
}
|
||||
}
|
||||
|
||||
TEST (block_store, upgrade_v7_v8)
|
||||
{
|
||||
auto path (rai::unique_path ());
|
||||
{
|
||||
bool init (false);
|
||||
rai::block_store store (init, path);
|
||||
rai::transaction transaction (store.environment, nullptr, true);
|
||||
ASSERT_EQ (0, mdb_drop (transaction, store.unchecked, 1));
|
||||
ASSERT_EQ (0, mdb_dbi_open (transaction, "unchecked", MDB_CREATE, &store.unchecked));
|
||||
store.version_put (transaction, 7);
|
||||
}
|
||||
bool init (false);
|
||||
rai::block_store store (init, path);
|
||||
ASSERT_FALSE (init);
|
||||
rai::transaction transaction (store.environment, nullptr, true);
|
||||
rai::send_block send1 (0, 0, 0, rai::test_genesis_key.prv, rai::test_genesis_key.pub, 0);
|
||||
rai::send_block send2 (1, 0, 0, rai::test_genesis_key.prv, rai::test_genesis_key.pub, 0);
|
||||
store.unchecked_put (transaction, send1.hash (), send1);
|
||||
store.unchecked_put (transaction, send1.hash (), send2);
|
||||
{
|
||||
auto iterator1 (store.unchecked_begin (transaction));
|
||||
++iterator1;
|
||||
ASSERT_NE (store.unchecked_end (), iterator1);
|
||||
++iterator1;
|
||||
ASSERT_EQ (store.unchecked_end (), iterator1);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1331,7 +1331,7 @@ TEST (rpc, version)
|
|||
ASSERT_EQ (200, response1.status);
|
||||
ASSERT_EQ ("1", response1.json.get <std::string> ("rpc_version"));
|
||||
ASSERT_EQ (200, response1.status);
|
||||
ASSERT_EQ ("7", response1.json.get <std::string> ("store_version"));
|
||||
ASSERT_EQ ("8", response1.json.get <std::string> ("store_version"));
|
||||
ASSERT_EQ (boost::str (boost::format ("RaiBlocks %1%.%2%.%3%") % RAIBLOCKS_VERSION_MAJOR % RAIBLOCKS_VERSION_MINOR % RAIBLOCKS_VERSION_PATCH), response1.json.get <std::string> ("node_vendor"));
|
||||
auto & headers (response1.resp.fields);
|
||||
auto access_control (std::find_if (headers.begin (), headers.end (), [] (decltype (*headers.begin ()) & header_a) { return boost::iequals (header_a.first, "Access-Control-Allow-Origin"); }));
|
||||
|
|
|
@ -1599,6 +1599,8 @@ void rai::block_store::do_upgrades (MDB_txn * transaction_a)
|
|||
case 6:
|
||||
upgrade_v6_to_v7 (transaction_a);
|
||||
case 7:
|
||||
upgrade_v7_to_v8 (transaction_a);
|
||||
case 8:
|
||||
break;
|
||||
default:
|
||||
assert (false);
|
||||
|
@ -1774,6 +1776,13 @@ void rai::block_store::upgrade_v6_to_v7 (MDB_txn * transaction_a)
|
|||
mdb_drop (transaction_a, unchecked, 0);
|
||||
}
|
||||
|
||||
void rai::block_store::upgrade_v7_to_v8 (MDB_txn * transaction_a)
|
||||
{
|
||||
version_put (transaction_a, 8);
|
||||
mdb_drop (transaction_a, unchecked, 1);
|
||||
mdb_dbi_open (transaction_a, "unchecked", MDB_CREATE | MDB_DUPSORT, &unchecked);
|
||||
}
|
||||
|
||||
void rai::block_store::clear (MDB_dbi db_a)
|
||||
{
|
||||
rai::transaction transaction (environment, nullptr, true);
|
||||
|
|
|
@ -395,6 +395,7 @@ public:
|
|||
void upgrade_v4_to_v5 (MDB_txn *);
|
||||
void upgrade_v5_to_v6 (MDB_txn *);
|
||||
void upgrade_v6_to_v7 (MDB_txn *);
|
||||
void upgrade_v7_to_v8 (MDB_txn *);
|
||||
|
||||
void clear (MDB_dbi);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue