aboutsummaryrefslogtreecommitdiffstats
path: root/vespalib/src/vespa/vespalib/datastore/datastorebase.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'vespalib/src/vespa/vespalib/datastore/datastorebase.cpp')
-rw-r--r--vespalib/src/vespa/vespalib/datastore/datastorebase.cpp56
1 files changed, 6 insertions, 50 deletions
diff --git a/vespalib/src/vespa/vespalib/datastore/datastorebase.cpp b/vespalib/src/vespa/vespalib/datastore/datastorebase.cpp
index 008ab0f0af9..aff26fc7b84 100644
--- a/vespalib/src/vespa/vespalib/datastore/datastorebase.cpp
+++ b/vespalib/src/vespa/vespalib/datastore/datastorebase.cpp
@@ -120,47 +120,6 @@ DataStoreBase::switch_primary_buffer(uint32_t typeId, size_t elemsNeeded)
_primary_buffer_ids[typeId] = buffer_id;
}
-bool
-DataStoreBase::consider_grow_active_buffer(uint32_t type_id, size_t elems_needed)
-{
- auto type_handler = _typeHandlers[type_id];
- uint32_t buffer_id = _primary_buffer_ids[type_id];
- uint32_t active_buffers_count = type_handler->get_active_buffers_count();
- constexpr uint32_t min_active_buffers = 4u;
- if (active_buffers_count < min_active_buffers) {
- return false;
- }
- if (type_handler->get_num_arrays_for_new_buffer() == 0u) {
- return false;
- }
- assert(!_states[buffer_id].getCompacting());
- uint32_t min_buffer_id = buffer_id;
- size_t min_used = _states[buffer_id].size();
- uint32_t checked_active_buffers = 1u;
- for (auto &alt_buffer_id : type_handler->get_active_buffers()) {
- if (alt_buffer_id != buffer_id && !_states[alt_buffer_id].getCompacting()) {
- ++checked_active_buffers;
- if (_states[alt_buffer_id].size() < min_used) {
- min_buffer_id = alt_buffer_id;
- min_used = _states[alt_buffer_id].size();
- }
- }
- }
- if (checked_active_buffers < min_active_buffers) {
- return false;
- }
- auto array_size = type_handler->getArraySize();
- if (elems_needed + min_used > type_handler->getMaxArrays() * array_size) {
- return false;
- }
- if (min_buffer_id != buffer_id) {
- // Resume another active buffer for same type as primary buffer
- _primary_buffer_ids[type_id] = min_buffer_id;
- _states[min_buffer_id].resume_primary_buffer(min_buffer_id);
- }
- return true;
-}
-
void
DataStoreBase::switch_or_grow_primary_buffer(uint32_t typeId, size_t elemsNeeded)
{
@@ -170,11 +129,8 @@ DataStoreBase::switch_or_grow_primary_buffer(uint32_t typeId, size_t elemsNeeded
size_t numEntriesForNewBuffer = numArraysForNewBuffer * arraySize;
uint32_t bufferId = _primary_buffer_ids[typeId];
if (elemsNeeded + _states[bufferId].size() >= numEntriesForNewBuffer) {
- if (consider_grow_active_buffer(typeId, elemsNeeded)) {
- fallbackResize(_primary_buffer_ids[typeId], elemsNeeded);
- } else {
- switch_primary_buffer(typeId, elemsNeeded);
- }
+ // Don't try to resize existing buffer, new buffer will be large enough
+ switch_primary_buffer(typeId, elemsNeeded);
} else {
fallbackResize(bufferId, elemsNeeded);
}
@@ -258,7 +214,7 @@ DataStoreBase::dropBuffers()
{
uint32_t numBuffers = _buffers.size();
for (uint32_t bufferId = 0; bufferId < numBuffers; ++bufferId) {
- _states[bufferId].dropBuffer(bufferId, _buffers[bufferId].getBuffer());
+ _states[bufferId].dropBuffer(_buffers[bufferId].getBuffer());
}
_genHolder.clearHoldLists();
}
@@ -278,7 +234,7 @@ DataStoreBase::getMemoryUsage() const
void
DataStoreBase::holdBuffer(uint32_t bufferId)
{
- _states[bufferId].onHold(bufferId);
+ _states[bufferId].onHold();
size_t holdBytes = 0u; // getMemStats() still accounts held buffers
GenerationHeldBase::UP hold(new BufferHold(holdBytes, *this, bufferId));
_genHolder.hold(std::move(hold));
@@ -473,8 +429,8 @@ DataStoreBase::startCompactWorstBuffer(uint32_t typeId)
{
uint32_t buffer_id = get_primary_buffer_id(typeId);
const BufferTypeBase *typeHandler = _typeHandlers[typeId];
- assert(typeHandler->get_active_buffers_count() >= 1u);
- if (typeHandler->get_active_buffers_count() == 1u) {
+ assert(typeHandler->getActiveBuffers() >= 1u);
+ if (typeHandler->getActiveBuffers() == 1u) {
// Single active buffer for type, no need for scan
_states[buffer_id].setCompacting();
_states[buffer_id].disableElemHoldList();