From c90f50b02a8ddb0d11aaef4cf456564beecaf7d3 Mon Sep 17 00:00:00 2001 From: Tor Egge Date: Tue, 10 Sep 2019 12:34:47 +0200 Subject: Allocate nested vector used to map from EntryRef to enum value earlier to avoid interference from compaction when populating the mapping. --- vespalib/src/vespa/vespalib/datastore/unique_store_enumerator.h | 2 ++ .../src/vespa/vespalib/datastore/unique_store_enumerator.hpp | 9 ++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) (limited to 'vespalib') diff --git a/vespalib/src/vespa/vespalib/datastore/unique_store_enumerator.h b/vespalib/src/vespa/vespalib/datastore/unique_store_enumerator.h index 40cc295e76d..0ffc695a285 100644 --- a/vespalib/src/vespa/vespalib/datastore/unique_store_enumerator.h +++ b/vespalib/src/vespa/vespalib/datastore/unique_store_enumerator.h @@ -23,6 +23,8 @@ private: const DataStoreBase &_store; EnumValues _enumValues; uint32_t _next_enum_val; + + void allocate_enum_values(); public: UniqueStoreEnumerator(const IUniqueStoreDictionary &dict, const DataStoreBase &store); ~UniqueStoreEnumerator(); diff --git a/vespalib/src/vespa/vespalib/datastore/unique_store_enumerator.hpp b/vespalib/src/vespa/vespalib/datastore/unique_store_enumerator.hpp index 729177d394c..48489e9edd5 100644 --- a/vespalib/src/vespa/vespalib/datastore/unique_store_enumerator.hpp +++ b/vespalib/src/vespa/vespalib/datastore/unique_store_enumerator.hpp @@ -15,6 +15,7 @@ UniqueStoreEnumerator::UniqueStoreEnumerator(const IUniqueStoreDictionary _enumValues(), _next_enum_val(1) { + allocate_enum_values(); } template @@ -37,7 +38,7 @@ UniqueStoreEnumerator::enumerateValue(EntryRef ref) template void -UniqueStoreEnumerator::enumerateValues() +UniqueStoreEnumerator::allocate_enum_values() { _enumValues.resize(RefType::numBuffers()); for (uint32_t bufferId = 0; bufferId < RefType::numBuffers(); ++bufferId) { @@ -46,6 +47,12 @@ UniqueStoreEnumerator::enumerateValues() _enumValues[bufferId].resize(state.size() / state.getArraySize()); } } +} + +template +void +UniqueStoreEnumerator::enumerateValues() +{ _next_enum_val = 1; _dict_snapshot->foreach_key([this](EntryRef ref) { enumerateValue(ref); }); } -- cgit v1.2.3