diff options
author | Tor Brede Vekterli <vekterli@verizonmedia.com> | 2020-10-07 12:03:17 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-10-07 12:03:17 +0200 |
commit | f2e89d3361cae0e2e74bac89405a175d6ecf5e98 (patch) | |
tree | 1a3dbf21c9254413dc7e3d556069a1d4319e5f57 | |
parent | 8f0ce0d33c6b1c88eebdbcd675c2b3fcddff9b76 (diff) | |
parent | 04711cb52b87a98be08fa7fcf9167e90f552fe6f (diff) |
Merge pull request #14748 from vespa-engine/vekterli/ensure-empty-hold-lists-on-db-destruction
Ensure hold lists are empty upon DB destruction
-rw-r--r-- | storage/src/vespa/storage/bucketdb/generic_btree_bucket_database.h | 2 | ||||
-rw-r--r-- | storage/src/vespa/storage/bucketdb/generic_btree_bucket_database.hpp | 9 |
2 files changed, 11 insertions, 0 deletions
diff --git a/storage/src/vespa/storage/bucketdb/generic_btree_bucket_database.h b/storage/src/vespa/storage/bucketdb/generic_btree_bucket_database.h index 5044193ed79..9534b583cd5 100644 --- a/storage/src/vespa/storage/bucketdb/generic_btree_bucket_database.h +++ b/storage/src/vespa/storage/bucketdb/generic_btree_bucket_database.h @@ -73,6 +73,8 @@ public: GenericBTreeBucketDatabase(GenericBTreeBucketDatabase&&) = delete; GenericBTreeBucketDatabase& operator=(GenericBTreeBucketDatabase&&) = delete; + ~GenericBTreeBucketDatabase(); + ValueType entry_from_iterator(const BTreeConstIterator& iter) const; ConstValueRef const_value_ref_from_valid_iterator(const BTreeConstIterator& iter) const; diff --git a/storage/src/vespa/storage/bucketdb/generic_btree_bucket_database.hpp b/storage/src/vespa/storage/bucketdb/generic_btree_bucket_database.hpp index 5fb673a1440..e53fad84db2 100644 --- a/storage/src/vespa/storage/bucketdb/generic_btree_bucket_database.hpp +++ b/storage/src/vespa/storage/bucketdb/generic_btree_bucket_database.hpp @@ -17,6 +17,15 @@ namespace storage::bucketdb { using document::BucketId; template <typename DataStoreTraitsT> +GenericBTreeBucketDatabase<DataStoreTraitsT>::~GenericBTreeBucketDatabase() { + // If there was a snapshot reader concurrent with the last modify operation + // on the DB, it's possible for the hold list to be non-empty. Explicitly + // clean it up now to ensure that we don't try to destroy any data stores + // with a non-empty hold list. Failure to do so might trigger an assertion. + commit_tree_changes(); +} + +template <typename DataStoreTraitsT> BucketId GenericBTreeBucketDatabase<DataStoreTraitsT>::bucket_from_valid_iterator(const BTreeConstIterator& iter) { return BucketId(BucketId::keyToBucketId(iter.getKey())); } |