diff options
author | Tor Egge <Tor.Egge@online.no> | 2023-02-01 15:08:51 +0100 |
---|---|---|
committer | Tor Egge <Tor.Egge@online.no> | 2023-02-01 15:08:51 +0100 |
commit | 40eb5657068c2b1643b9bcf82476ad6ebe7b000d (patch) | |
tree | e13235972cbb9353f30e176090a2c27c06a54ccd /vespalib | |
parent | 179daa38c12471ec9de4e48ec91865c8a336d8a8 (diff) |
Throw exception when data store buffer max size is too small.
Diffstat (limited to 'vespalib')
-rw-r--r-- | vespalib/src/vespa/vespalib/datastore/buffer_type.cpp | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/vespalib/src/vespa/vespalib/datastore/buffer_type.cpp b/vespalib/src/vespa/vespalib/datastore/buffer_type.cpp index d1b16e7ae7a..4a9ba2d33a8 100644 --- a/vespalib/src/vespa/vespalib/datastore/buffer_type.cpp +++ b/vespalib/src/vespa/vespalib/datastore/buffer_type.cpp @@ -1,6 +1,8 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #include "buffer_type.hpp" +#include <vespa/vespalib/stllike/asciistream.h> +#include <vespa/vespalib/util/exceptions.h> #include <algorithm> #include <cassert> #include <cmath> @@ -150,7 +152,24 @@ BufferTypeBase::calcArraysToAlloc(uint32_t bufferId, ElemCount elemsNeeded, bool if (result > _maxArrays) { result = _maxArrays; } - assert(result >= neededArrays); + if (result < neededArrays) { + vespalib::asciistream s; + s << "BufferTypeBase::calcArraysToAlloc(" << + "bufferId=" << bufferId << + ",elemsNeeeded=" << elemsNeeded << + ",resizing=" << (resizing ? "true" : "false") << ")" << + " wantedArrays=" << wantedArrays << + ", _arraySize=" << _arraySize << + ", _maxArrays=" << _maxArrays << + ", reservedElems=" << reservedElems << + ", liveArrays=" << liveArrays << + ", growArrays=" << growArrays << + ", usedArrays=" << usedArrays << + ", typeid(*this).name=\"" << typeid(*this).name() << "\"" << + ", newArrays=" << result << + " < neededArrays=" << neededArrays;; + throw vespalib::OverflowException(s.c_str()); + } return result; } |