From 8d302382fff28ca2ceb6195ffe44d7264affb32b Mon Sep 17 00:00:00 2001 From: Brandon Date: Wed, 6 Sep 2023 12:28:36 +0100 Subject: [PATCH 1/2] fixed bug in store::clear() - builds batch of delete operations to be applied to the column family --- nano/store/rocksdb/rocksdb.cpp | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/nano/store/rocksdb/rocksdb.cpp b/nano/store/rocksdb/rocksdb.cpp index 9b2aa7eb8a..4f744f9d9e 100644 --- a/nano/store/rocksdb/rocksdb.cpp +++ b/nano/store/rocksdb/rocksdb.cpp @@ -697,20 +697,20 @@ int nano::store::rocksdb::component::drop (store::write_transaction const & tran int nano::store::rocksdb::component::clear (::rocksdb::ColumnFamilyHandle * column_family) { - // Dropping completely removes the column - auto name = column_family->GetName (); - auto status = db->DropColumnFamily (column_family); - release_assert (status.ok ()); - - // Need to add it back as we just want to clear the contents - auto handle_it = std::find_if (handles.begin (), handles.end (), [column_family] (auto & handle) { - return handle.get () == column_family; - }); - debug_assert (handle_it != handles.cend ()); - status = db->CreateColumnFamily (get_cf_options (name), name, &column_family); - release_assert (status.ok ()); - handle_it->reset (column_family); - return status.code (); + ::rocksdb::ReadOptions read_options; + ::rocksdb::WriteOptions write_options; + ::rocksdb::WriteBatch write_batch; + std::unique_ptr<::rocksdb::Iterator> it(db->NewIterator(read_options, column_family)); + + for (it->SeekToFirst (); it->Valid (); it->Next ()) + { + write_batch.Delete (column_family, it->key()); + } + + ::rocksdb::Status status = db->Write(write_options, &write_batch); + release_assert(status.ok()); + + return status.code(); } void nano::store::rocksdb::component::construct_column_family_mutexes () From f32261d317149ff65d0dec097c0c3997b66fc601 Mon Sep 17 00:00:00 2001 From: Brandon Date: Wed, 6 Sep 2023 12:33:39 +0100 Subject: [PATCH 2/2] fixed bug in store::clear() --- nano/store/rocksdb/rocksdb.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/nano/store/rocksdb/rocksdb.cpp b/nano/store/rocksdb/rocksdb.cpp index 4f744f9d9e..575a39180c 100644 --- a/nano/store/rocksdb/rocksdb.cpp +++ b/nano/store/rocksdb/rocksdb.cpp @@ -698,19 +698,19 @@ int nano::store::rocksdb::component::drop (store::write_transaction const & tran int nano::store::rocksdb::component::clear (::rocksdb::ColumnFamilyHandle * column_family) { ::rocksdb::ReadOptions read_options; - ::rocksdb::WriteOptions write_options; - ::rocksdb::WriteBatch write_batch; - std::unique_ptr<::rocksdb::Iterator> it(db->NewIterator(read_options, column_family)); + ::rocksdb::WriteOptions write_options; + ::rocksdb::WriteBatch write_batch; + std::unique_ptr<::rocksdb::Iterator> it (db->NewIterator (read_options, column_family)); - for (it->SeekToFirst (); it->Valid (); it->Next ()) - { - write_batch.Delete (column_family, it->key()); - } + for (it->SeekToFirst (); it->Valid (); it->Next ()) + { + write_batch.Delete (column_family, it->key ()); + } - ::rocksdb::Status status = db->Write(write_options, &write_batch); - release_assert(status.ok()); + ::rocksdb::Status status = db->Write (write_options, &write_batch); + release_assert (status.ok ()); - return status.code(); + return status.code (); } void nano::store::rocksdb::component::construct_column_family_mutexes ()