summaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@online.no>2021-08-18 18:11:28 +0200
committerTor Egge <Tor.Egge@online.no>2021-08-18 18:11:28 +0200
commit7a9aa98435d0140c50eaa8544397aa597aad18d6 (patch)
treea56a083fd28dcd911656cc0b44b0469f5aa894dd /searchlib
parent996ca504122c999dd0adddf88ab63a37af109161 (diff)
Factor out common code.
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/src/vespa/searchlib/tensor/hnsw_index.cpp38
1 files changed, 21 insertions, 17 deletions
diff --git a/searchlib/src/vespa/searchlib/tensor/hnsw_index.cpp b/searchlib/src/vespa/searchlib/tensor/hnsw_index.cpp
index 51f025becb3..ca5f522457a 100644
--- a/searchlib/src/vespa/searchlib/tensor/hnsw_index.cpp
+++ b/searchlib/src/vespa/searchlib/tensor/hnsw_index.cpp
@@ -503,36 +503,40 @@ HnswIndex::compact_link_arrays(bool compact_memory, bool compact_address_space)
}
}
+namespace {
+
bool
-HnswIndex::consider_compact_level_arrays(const CompactionStrategy& compaction_strategy)
+consider_compact_arrays(const CompactionStrategy& compaction_strategy, vespalib::MemoryUsage& memory_usage, vespalib::AddressSpace& address_space_usage, std::function<void(bool,bool)> compact_arrays)
{
- size_t used_bytes = _cached_level_arrays_memory_usage.usedBytes();
- size_t dead_bytes = _cached_level_arrays_memory_usage.deadBytes();
+ size_t used_bytes = memory_usage.usedBytes();
+ size_t dead_bytes = memory_usage.deadBytes();
bool compact_memory = compaction_strategy.should_compact_memory(used_bytes, dead_bytes);
- size_t used_address_space = _cached_level_arrays_address_space_usage.used();
- size_t dead_address_space = _cached_level_arrays_address_space_usage.dead();
+ size_t used_address_space = address_space_usage.used();
+ size_t dead_address_space = address_space_usage.dead();
bool compact_address_space = compaction_strategy.should_compact_address_space(used_address_space, dead_address_space);
if (compact_memory || compact_address_space) {
- compact_level_arrays(compact_memory, compact_address_space);
+ compact_arrays(compact_memory, compact_address_space);
return true;
}
return false;
}
+}
+
+bool
+HnswIndex::consider_compact_level_arrays(const CompactionStrategy& compaction_strategy)
+{
+ return consider_compact_arrays(compaction_strategy, _cached_level_arrays_memory_usage, _cached_level_arrays_address_space_usage,
+ [this](bool compact_memory, bool compact_address_space)
+ { compact_level_arrays(compact_memory, compact_address_space); });
+}
+
bool
HnswIndex::consider_compact_link_arrays(const CompactionStrategy& compaction_strategy)
{
- size_t used_bytes = _cached_link_arrays_memory_usage.usedBytes();
- size_t dead_bytes = _cached_link_arrays_memory_usage.deadBytes();
- bool compact_memory = compaction_strategy.should_compact_memory(used_bytes, dead_bytes);
- size_t used_address_space = _cached_level_arrays_address_space_usage.used();
- size_t dead_address_space = _cached_level_arrays_address_space_usage.dead();
- bool compact_address_space = compaction_strategy.should_compact_address_space(used_address_space, dead_address_space);
- if (compact_memory || compact_address_space) {
- compact_link_arrays(compact_memory, compact_address_space);
- return true;
- }
- return false;
+ return consider_compact_arrays(compaction_strategy, _cached_link_arrays_memory_usage, _cached_link_arrays_address_space_usage,
+ [this](bool compact_memory, bool compact_address_space)
+ { compact_link_arrays(compact_memory, compact_address_space); });
}
bool