aboutsummaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorGeir Storli <geirst@verizonmedia.com>2020-03-30 12:17:35 +0000
committerGeir Storli <geirst@verizonmedia.com>2020-03-30 12:17:35 +0000
commit0109cc6fe375ae95f4f741e5c2886aabead3e174 (patch)
tree7211cfe06b8ca73ddd5e06df70e3eb8a131fd934 /searchlib
parent644dde798d718bb3e9cffc15452dd2616edb311a (diff)
Move functions used to open / load attribute vector data files to separate class.
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/src/vespa/searchlib/attribute/attributevector.cpp73
-rw-r--r--searchlib/src/vespa/searchlib/attribute/attributevector.h11
-rw-r--r--searchlib/src/vespa/searchlib/attribute/attrvector.cpp5
-rw-r--r--searchlib/src/vespa/searchlib/attribute/attrvector.hpp5
-rw-r--r--searchlib/src/vespa/searchlib/attribute/flagattribute.cpp2
-rw-r--r--searchlib/src/vespa/searchlib/attribute/load_utils.cpp72
-rw-r--r--searchlib/src/vespa/searchlib/attribute/load_utils.h34
-rw-r--r--searchlib/src/vespa/searchlib/attribute/multinumericattribute.hpp2
-rw-r--r--searchlib/src/vespa/searchlib/attribute/multinumericenumattribute.hpp9
-rw-r--r--searchlib/src/vespa/searchlib/attribute/predicate_attribute.cpp11
-rw-r--r--searchlib/src/vespa/searchlib/attribute/readerbase.cpp13
-rw-r--r--searchlib/src/vespa/searchlib/attribute/reference_attribute.cpp3
-rw-r--r--searchlib/src/vespa/searchlib/attribute/singlenumericattribute.hpp8
-rw-r--r--searchlib/src/vespa/searchlib/attribute/singlenumericenumattribute.hpp13
-rw-r--r--searchlib/src/vespa/searchlib/attribute/stringbase.cpp7
15 files changed, 139 insertions, 129 deletions
diff --git a/searchlib/src/vespa/searchlib/attribute/attributevector.cpp b/searchlib/src/vespa/searchlib/attribute/attributevector.cpp
index b043bb4aaf8..ffc62d806e2 100644
--- a/searchlib/src/vespa/searchlib/attribute/attributevector.cpp
+++ b/searchlib/src/vespa/searchlib/attribute/attributevector.cpp
@@ -266,79 +266,6 @@ const IEnumStore* AttributeVector::getEnumStoreBase() const { return nullptr; }
IEnumStore* AttributeVector::getEnumStoreBase() { return nullptr; }
const attribute::MultiValueMappingBase * AttributeVector::getMultiValueBase() const { return nullptr; }
-std::unique_ptr<FastOS_FileInterface>
-AttributeVector::openFile(const char *suffix)
-{
- BaseName::string fileName(getBaseFileName());
- fileName += suffix;
- return FileUtil::openFile(fileName);
-}
-
-
-std::unique_ptr<FastOS_FileInterface>
-AttributeVector::openDAT()
-{
- return openFile(".dat");
-}
-
-
-std::unique_ptr<FastOS_FileInterface>
-AttributeVector::openIDX()
-{
- return openFile(".idx");
-}
-
-
-std::unique_ptr<FastOS_FileInterface>
-AttributeVector::openWeight()
-{
- return openFile(".weight");
-}
-
-
-std::unique_ptr<FastOS_FileInterface>
-AttributeVector::openUDAT()
-{
- return openFile(".dat");
-}
-
-fileutil::LoadedBuffer::UP
-AttributeVector::loadDAT()
-{
- return loadFile(".dat");
-}
-
-
-fileutil::LoadedBuffer::UP
-AttributeVector::loadIDX()
-{
- return loadFile(".idx");
-}
-
-
-fileutil::LoadedBuffer::UP
-AttributeVector::loadWeight()
-{
- return loadFile(".weight");
-}
-
-
-fileutil::LoadedBuffer::UP
-AttributeVector::loadUDAT()
-{
- return loadFile(".udat");
-}
-
-
-fileutil::LoadedBuffer::UP
-AttributeVector::loadFile(const char *suffix)
-{
- BaseName::string fileName(getBaseFileName());
- fileName += suffix;
- return FileUtil::loadFile(fileName);
-}
-
-
bool
AttributeVector::save(vespalib::stringref fileName)
{
diff --git a/searchlib/src/vespa/searchlib/attribute/attributevector.h b/searchlib/src/vespa/searchlib/attribute/attributevector.h
index a396fb70b7c..4a53f2dd5a2 100644
--- a/searchlib/src/vespa/searchlib/attribute/attributevector.h
+++ b/searchlib/src/vespa/searchlib/attribute/attributevector.h
@@ -212,11 +212,6 @@ protected:
void setNumDocs(uint32_t n) { _status.setNumDocs(n); }
void incNumDocs() { _status.incNumDocs(); }
- LoadedBufferUP loadDAT();
- LoadedBufferUP loadIDX();
- LoadedBufferUP loadWeight();
- LoadedBufferUP loadUDAT();
-
class ValueModifier
{
public:
@@ -269,10 +264,6 @@ protected:
}
public:
- std::unique_ptr<FastOS_FileInterface> openDAT();
- std::unique_ptr<FastOS_FileInterface> openIDX();
- std::unique_ptr<FastOS_FileInterface> openWeight();
- std::unique_ptr<FastOS_FileInterface> openUDAT();
void incGeneration();
void removeAllOldGenerations();
@@ -572,8 +563,6 @@ private:
virtual bool applyWeight(DocId doc, const FieldValue &fv, const ArithmeticValueUpdate &wAdjust);
virtual void onSave(IAttributeSaveTarget & saveTarget);
virtual bool onLoad();
- std::unique_ptr<FastOS_FileInterface> openFile(const char *suffix);
- LoadedBufferUP loadFile(const char *suffix);
BaseName _baseFileName;
diff --git a/searchlib/src/vespa/searchlib/attribute/attrvector.cpp b/searchlib/src/vespa/searchlib/attribute/attrvector.cpp
index 0304aa8f38e..59771d7ffae 100644
--- a/searchlib/src/vespa/searchlib/attribute/attrvector.cpp
+++ b/searchlib/src/vespa/searchlib/attribute/attrvector.cpp
@@ -3,6 +3,7 @@
#include "attrvector.h"
#include "attrvector.hpp"
#include "iattributesavetarget.h"
+#include "load_utils.h"
#include <vespa/log/log.h>
LOG_SETUP(".searchlib.attribute.attr_vector");
@@ -123,7 +124,7 @@ bool StringDirectAttribute::onLoad()
setCommittedDocIdLimit(0);
}
- fileutil::LoadedBuffer::UP tmpBuffer(loadDAT());
+ auto tmpBuffer = attribute::LoadUtils::loadDAT(*this);
bool rc(tmpBuffer.get());
if (rc) {
if ( ! tmpBuffer->empty()) {
@@ -158,7 +159,7 @@ bool StringDirectAttribute::onLoad()
}
if (hasMultiValue()) {
- fileutil::LoadedBuffer::UP tmpIdx(loadIDX());
+ auto tmpIdx = attribute::LoadUtils::loadIDX(*this);
size_t tmpIdxLen(tmpIdx->size(sizeof(uint32_t)));
_idx.clear();
_idx.reserve(tmpIdxLen);
diff --git a/searchlib/src/vespa/searchlib/attribute/attrvector.hpp b/searchlib/src/vespa/searchlib/attribute/attrvector.hpp
index cdd34725e69..4ce7575b28d 100644
--- a/searchlib/src/vespa/searchlib/attribute/attrvector.hpp
+++ b/searchlib/src/vespa/searchlib/attribute/attrvector.hpp
@@ -2,6 +2,7 @@
#pragma once
#include "attrvector.h"
+#include "load_utils.h"
#include <vespa/vespalib/util/hdr_abort.h>
#include <vespa/fastlib/io/bufferedfile.h>
#include <vespa/searchlib/util/filekit.h>
@@ -23,7 +24,7 @@ NumericDirectAttribute<B>::~NumericDirectAttribute() = default;
template <typename B>
bool NumericDirectAttribute<B>::onLoad()
{
- fileutil::LoadedBuffer::UP dataBuffer(B::loadDAT());
+ auto dataBuffer = attribute::LoadUtils::loadDAT(*this);
bool rc(dataBuffer.get());
if (rc) {
const BaseType * tmpData(static_cast <const BaseType *>(dataBuffer->buffer()));
@@ -56,7 +57,7 @@ bool NumericDirectAttribute<B>::onLoad()
}
dataBuffer.reset();
if (this->hasMultiValue()) {
- fileutil::LoadedBuffer::UP idxBuffer(B::loadIDX());
+ auto idxBuffer = attribute::LoadUtils::loadIDX(*this);
rc = idxBuffer.get();
if (rc) {
const uint32_t * tmpIdx(static_cast<const uint32_t *>(idxBuffer->buffer()));
diff --git a/searchlib/src/vespa/searchlib/attribute/flagattribute.cpp b/searchlib/src/vespa/searchlib/attribute/flagattribute.cpp
index 1e4bba95b4b..895e6a6f4c0 100644
--- a/searchlib/src/vespa/searchlib/attribute/flagattribute.cpp
+++ b/searchlib/src/vespa/searchlib/attribute/flagattribute.cpp
@@ -89,7 +89,7 @@ FlagAttributeT<B>::onLoadEnumerated(ReaderBase &attrReader)
if (numValues > 0)
_bitVectorSize = numDocs;
- fileutil::LoadedBuffer::UP udatBuffer(this->loadUDAT());
+ auto udatBuffer = attribute::LoadUtils::loadUDAT(*this);
assert((udatBuffer->size() % sizeof(TT)) == 0);
vespalib::ConstArrayRef<TT> map(reinterpret_cast<const TT *>(udatBuffer->buffer()),
udatBuffer->size() / sizeof(TT));
diff --git a/searchlib/src/vespa/searchlib/attribute/load_utils.cpp b/searchlib/src/vespa/searchlib/attribute/load_utils.cpp
index 041daa08cd5..17da246f140 100644
--- a/searchlib/src/vespa/searchlib/attribute/load_utils.cpp
+++ b/searchlib/src/vespa/searchlib/attribute/load_utils.cpp
@@ -5,13 +5,78 @@
#include "loadedenumvalue.h"
#include "multi_value_mapping.h"
#include "multivalue.h"
+#include <vespa/fastos/file.h>
+#include <vespa/searchlib/util/fileutil.h>
#include <vespa/vespalib/util/array.hpp>
using search::multivalue::Value;
using search::multivalue::WeightedValue;
-namespace search {
-namespace attribute {
+namespace search::attribute {
+
+using FileInterfaceUP = LoadUtils::FileInterfaceUP;
+using LoadedBufferUP = LoadUtils::LoadedBufferUP;
+
+FileInterfaceUP
+LoadUtils::openFile(AttributeVector& attr, const vespalib::string& suffix)
+{
+ return FileUtil::openFile(attr.getBaseFileName() + "." + suffix);
+}
+
+LoadedBufferUP
+LoadUtils::loadFile(AttributeVector& attr, const vespalib::string& suffix)
+{
+ return FileUtil::loadFile(attr.getBaseFileName() + "." + suffix);
+}
+
+FileInterfaceUP
+LoadUtils::openDAT(AttributeVector& attr)
+{
+ return openFile(attr, "dat");
+}
+
+FileInterfaceUP
+LoadUtils::openIDX(AttributeVector& attr)
+{
+ return openFile(attr, "idx");
+}
+
+FileInterfaceUP
+LoadUtils::openWeight(AttributeVector& attr)
+{
+ return openFile(attr, "weight");
+}
+
+FileInterfaceUP
+LoadUtils::openUDAT(AttributeVector& attr)
+{
+ return openFile(attr, "udat");
+}
+
+LoadedBufferUP
+LoadUtils::loadDAT(AttributeVector& attr)
+{
+ return loadFile(attr, "dat");
+}
+
+LoadedBufferUP
+LoadUtils::loadIDX(AttributeVector& attr)
+{
+ return loadFile(attr, "idx");
+}
+
+LoadedBufferUP
+LoadUtils::loadWeight(AttributeVector& attr)
+{
+ return loadFile(attr, "weight");
+}
+
+LoadedBufferUP
+LoadUtils::loadUDAT(AttributeVector& attr)
+{
+ return loadFile(attr, "udat");
+}
+
#define INSTANTIATE_ARRAY(ValueType, Saver) \
template uint32_t loadFromEnumeratedMultiValue(MultiValueMapping<Value<ValueType>> &, ReaderBase &, vespalib::ConstArrayRef<ValueType>, Saver)
@@ -40,5 +105,4 @@ INSTANTIATE_VALUE(int64_t);
INSTANTIATE_VALUE(float);
INSTANTIATE_VALUE(double);
-} // namespace search::attribute
-} // namespace search
+}
diff --git a/searchlib/src/vespa/searchlib/attribute/load_utils.h b/searchlib/src/vespa/searchlib/attribute/load_utils.h
index 050d7726ecd..b7e915310c4 100644
--- a/searchlib/src/vespa/searchlib/attribute/load_utils.h
+++ b/searchlib/src/vespa/searchlib/attribute/load_utils.h
@@ -6,10 +6,33 @@
#include "readerbase.h"
#include <vespa/vespalib/util/arrayref.h>
-namespace search {
-namespace attribute {
+namespace search::attribute {
-/*
+/**
+ * Helper functions used to open / load attribute vector data files from disk.
+ */
+class LoadUtils {
+public:
+ using FileInterfaceUP = std::unique_ptr<FastOS_FileInterface>;
+ using LoadedBufferUP = std::unique_ptr<fileutil::LoadedBuffer>;
+
+private:
+ static FileInterfaceUP openFile(AttributeVector& attr, const vespalib::string& suffix);
+ static LoadedBufferUP loadFile(AttributeVector& attr, const vespalib::string& suffix);
+
+public:
+ static FileInterfaceUP openDAT(AttributeVector& attr);
+ static FileInterfaceUP openIDX(AttributeVector& attr);
+ static FileInterfaceUP openWeight(AttributeVector& attr);
+ static FileInterfaceUP openUDAT(AttributeVector& attr);
+
+ static LoadedBufferUP loadDAT(AttributeVector& attr);
+ static LoadedBufferUP loadIDX(AttributeVector& attr);
+ static LoadedBufferUP loadWeight(AttributeVector& attr);
+ static LoadedBufferUP loadUDAT(AttributeVector& attr);
+};
+
+/**
* Function for loading mapping from document id to array of enum indexes
* or values from enumerated attribute reader.
*/
@@ -20,7 +43,7 @@ loadFromEnumeratedMultiValue(MvMapping &mapping,
vespalib::ConstArrayRef<typename MvMapping::MultiValueType::ValueType> enumValueToValueMap,
Saver saver) __attribute((noinline));
-/*
+/**
* Function for loading mapping from document id to enum index or
* value from enumerated attribute reader.
*/
@@ -32,5 +55,4 @@ loadFromEnumeratedSingleValue(Vector &vector,
vespalib::ConstArrayRef<typename Vector::ValueType> enumValueToValueMap,
Saver saver) __attribute((noinline));
-} // namespace search::attribute
-} // namespace search
+}
diff --git a/searchlib/src/vespa/searchlib/attribute/multinumericattribute.hpp b/searchlib/src/vespa/searchlib/attribute/multinumericattribute.hpp
index 1efa2789fcb..3ca7423c38c 100644
--- a/searchlib/src/vespa/searchlib/attribute/multinumericattribute.hpp
+++ b/searchlib/src/vespa/searchlib/attribute/multinumericattribute.hpp
@@ -117,7 +117,7 @@ MultiValueNumericAttribute<B, M>::onLoadEnumerated(ReaderBase & attrReader)
this->setCommittedDocIdLimit(numDocs);
this->_mvMapping.reserve(numDocs+1);
- LoadedBuffer::UP udatBuffer(this->loadUDAT());
+ auto udatBuffer = attribute::LoadUtils::loadUDAT(*this);
assert((udatBuffer->size() % sizeof(T)) == 0);
vespalib::ConstArrayRef<T> map(reinterpret_cast<const T *>(udatBuffer->buffer()), udatBuffer->size() / sizeof(T));
uint32_t maxvc = attribute::loadFromEnumeratedMultiValue(this->_mvMapping, attrReader, map, attribute::NoSaveLoadedEnum());
diff --git a/searchlib/src/vespa/searchlib/attribute/multinumericenumattribute.hpp b/searchlib/src/vespa/searchlib/attribute/multinumericenumattribute.hpp
index 9ee365fc7cc..e17d41a5521 100644
--- a/searchlib/src/vespa/searchlib/attribute/multinumericenumattribute.hpp
+++ b/searchlib/src/vespa/searchlib/attribute/multinumericenumattribute.hpp
@@ -2,13 +2,14 @@
#pragma once
-#include "multinumericenumattribute.h"
-#include "loadednumericvalue.h"
#include "attributeiterators.hpp"
-#include <vespa/searchlib/util/fileutil.hpp>
+#include "load_utils.h"
+#include "loadednumericvalue.h"
+#include "multinumericenumattribute.h"
#include <vespa/fastlib/io/bufferedfile.h>
#include <vespa/searchlib/query/query_term_simple.h>
#include <vespa/searchlib/queryeval/emptysearch.h>
+#include <vespa/searchlib/util/fileutil.hpp>
namespace search {
@@ -52,7 +53,7 @@ template <typename B, typename M>
bool
MultiValueNumericEnumAttribute<B, M>::onLoadEnumerated(ReaderBase &attrReader)
{
- LoadedBuffer::UP udatBuffer(this->loadUDAT());
+ auto udatBuffer = attribute::LoadUtils::loadUDAT(*this);
uint32_t numDocs = attrReader.getNumIdx() - 1;
uint64_t numValues = attrReader.getNumValues();
diff --git a/searchlib/src/vespa/searchlib/attribute/predicate_attribute.cpp b/searchlib/src/vespa/searchlib/attribute/predicate_attribute.cpp
index b0e4df65c2b..72cc6e38fac 100644
--- a/searchlib/src/vespa/searchlib/attribute/predicate_attribute.cpp
+++ b/searchlib/src/vespa/searchlib/attribute/predicate_attribute.cpp
@@ -1,12 +1,13 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-#include "predicate_attribute.h"
-#include "iattributesavetarget.h"
#include "attribute_header.h"
-#include <vespa/searchlib/predicate/predicate_index.h>
-#include <vespa/searchlib/util/fileutil.h>
+#include "iattributesavetarget.h"
+#include "load_utils.h"
+#include "predicate_attribute.h"
#include <vespa/document/fieldvalue/predicatefieldvalue.h>
#include <vespa/document/predicate/predicate.h>
+#include <vespa/searchlib/predicate/predicate_index.h>
+#include <vespa/searchlib/util/fileutil.h>
#include <vespa/vespalib/data/slime/slime.h>
#include <vespa/log/log.h>
@@ -183,7 +184,7 @@ struct DummyObserver : SimpleIndexDeserializeObserver<> {
bool PredicateAttribute::onLoad()
{
- fileutil::LoadedBuffer::UP loaded_buffer = loadDAT();
+ auto loaded_buffer = attribute::LoadUtils::loadDAT(*this);
char *rawBuffer = const_cast<char *>(static_cast<const char *>(loaded_buffer->buffer()));
size_t size = loaded_buffer->size();
DataBuffer buffer(rawBuffer, size);
diff --git a/searchlib/src/vespa/searchlib/attribute/readerbase.cpp b/searchlib/src/vespa/searchlib/attribute/readerbase.cpp
index 62936ecaaf4..cf37fc580e9 100644
--- a/searchlib/src/vespa/searchlib/attribute/readerbase.cpp
+++ b/searchlib/src/vespa/searchlib/attribute/readerbase.cpp
@@ -1,10 +1,11 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-#include "readerbase.h"
#include "attributevector.h"
+#include "load_utils.h"
+#include "readerbase.h"
#include <vespa/fastlib/io/bufferedfile.h>
-#include <vespa/vespalib/util/exceptions.h>
#include <vespa/searchlib/util/filesizecalculator.h>
+#include <vespa/vespalib/util/exceptions.h>
#include <vespa/log/log.h>
LOG_SETUP(".search.attribute.readerbase");
@@ -28,11 +29,11 @@ namespace {
}
ReaderBase::ReaderBase(AttributeVector &attr)
- : _datFile(attr.openDAT()),
+ : _datFile(attribute::LoadUtils::openDAT(attr)),
_weightFile(attr.hasWeightedSetType() ?
- attr.openWeight() : std::unique_ptr<Fast_BufferedFile>()),
+ attribute::LoadUtils::openWeight(attr) : std::unique_ptr<Fast_BufferedFile>()),
_idxFile(attr.hasMultiValue() ?
- attr.openIDX() : std::unique_ptr<Fast_BufferedFile>()),
+ attribute::LoadUtils::openIDX(attr) : std::unique_ptr<Fast_BufferedFile>()),
_udatFile(),
_weightReader(*_weightFile),
_idxReader(*_idxFile),
@@ -83,7 +84,7 @@ ReaderBase::ReaderBase(AttributeVector &attr)
}
if (hasData() && AttributeVector::isEnumerated(_datHeader)) {
_enumerated = true;
- _udatFile = attr.openUDAT();
+ _udatFile = attribute::LoadUtils::openUDAT(attr);
vespalib::FileHeader udatHeader(DIRECTIO_ALIGNMENT);
_udatHeaderLen = udatHeader.readFile(*_udatFile);
_udatFile->SetPosition(_udatHeaderLen);
diff --git a/searchlib/src/vespa/searchlib/attribute/reference_attribute.cpp b/searchlib/src/vespa/searchlib/attribute/reference_attribute.cpp
index b055af7c084..9421730f335 100644
--- a/searchlib/src/vespa/searchlib/attribute/reference_attribute.cpp
+++ b/searchlib/src/vespa/searchlib/attribute/reference_attribute.cpp
@@ -1,6 +1,7 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#include "attributesaver.h"
+#include "load_utils.h"
#include "readerbase.h"
#include "reference_attribute.h"
#include "reference_attribute_saver.h"
@@ -223,7 +224,7 @@ ReferenceAttribute::onLoad()
uint64_t numValues(0);
numValues = attrReader.getEnumCount();
numDocs = numValues;
- fileutil::LoadedBuffer::UP udatBuffer(loadUDAT());
+ auto udatBuffer = attribute::LoadUtils::loadUDAT(*this);
const GenericHeader &header = udatBuffer->getHeader();
uint32_t uniqueValueCount = extractUniqueValueCount(header);
assert(uniqueValueCount * sizeof(GlobalId) == udatBuffer->size());
diff --git a/searchlib/src/vespa/searchlib/attribute/singlenumericattribute.hpp b/searchlib/src/vespa/searchlib/attribute/singlenumericattribute.hpp
index 69d4e6a5ee9..681c2af1f07 100644
--- a/searchlib/src/vespa/searchlib/attribute/singlenumericattribute.hpp
+++ b/searchlib/src/vespa/searchlib/attribute/singlenumericattribute.hpp
@@ -1,12 +1,12 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#pragma once
-#include "singlenumericattribute.h"
+#include "attributeiterators.hpp"
#include "attributevector.hpp"
-#include "singlenumericattributesaver.h"
#include "load_utils.h"
#include "primitivereader.h"
-#include "attributeiterators.hpp"
+#include "singlenumericattribute.h"
+#include "singlenumericattributesaver.h"
#include <vespa/searchlib/query/query_term_simple.h>
#include <vespa/searchlib/queryeval/emptysearch.h>
@@ -114,7 +114,7 @@ SingleValueNumericAttribute<B>::onLoadEnumerated(ReaderBase &attrReader)
this->setCommittedDocIdLimit(numDocs);
_data.unsafe_reserve(numDocs);
- fileutil::LoadedBuffer::UP udatBuffer(this->loadUDAT());
+ auto udatBuffer = attribute::LoadUtils::loadUDAT(*this);
assert((udatBuffer->size() % sizeof(T)) == 0);
vespalib::ConstArrayRef<T> map(reinterpret_cast<const T *>(udatBuffer->buffer()),
udatBuffer->size() / sizeof(T));
diff --git a/searchlib/src/vespa/searchlib/attribute/singlenumericenumattribute.hpp b/searchlib/src/vespa/searchlib/attribute/singlenumericenumattribute.hpp
index 990388d2a12..5fb587c908e 100644
--- a/searchlib/src/vespa/searchlib/attribute/singlenumericenumattribute.hpp
+++ b/searchlib/src/vespa/searchlib/attribute/singlenumericenumattribute.hpp
@@ -2,14 +2,15 @@
#pragma once
-#include "singlenumericenumattribute.h"
-#include <vespa/searchlib/common/sort.h>
-#include "singleenumattribute.hpp"
+#include "attributeiterators.hpp"
+#include "load_utils.h"
#include "loadednumericvalue.h"
#include "primitivereader.h"
-#include "attributeiterators.hpp"
-#include <vespa/searchlib/queryeval/emptysearch.h>
+#include "singleenumattribute.hpp"
+#include "singlenumericenumattribute.h"
+#include <vespa/searchlib/common/sort.h>
#include <vespa/searchlib/query/query_term_simple.h>
+#include <vespa/searchlib/queryeval/emptysearch.h>
#include <vespa/searchlib/util/fileutil.hpp>
namespace search {
@@ -79,7 +80,7 @@ template <typename B>
bool
SingleValueNumericEnumAttribute<B>::onLoadEnumerated(ReaderBase &attrReader)
{
- fileutil::LoadedBuffer::UP udatBuffer(this->loadUDAT());
+ auto udatBuffer = attribute::LoadUtils::loadUDAT(*this);
uint64_t numValues = attrReader.getEnumCount();
uint32_t numDocs = numValues;
diff --git a/searchlib/src/vespa/searchlib/attribute/stringbase.cpp b/searchlib/src/vespa/searchlib/attribute/stringbase.cpp
index 32b5b3ca373..40e706e924d 100644
--- a/searchlib/src/vespa/searchlib/attribute/stringbase.cpp
+++ b/searchlib/src/vespa/searchlib/attribute/stringbase.cpp
@@ -1,11 +1,12 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-#include "stringbase.h"
#include "attributevector.hpp"
+#include "load_utils.h"
#include "readerbase.h"
+#include "stringbase.h"
#include <vespa/document/fieldvalue/fieldvalue.h>
-#include <vespa/searchlib/util/fileutil.hpp>
#include <vespa/searchlib/query/query_term_ucs4.h>
+#include <vespa/searchlib/util/fileutil.hpp>
#include <vespa/vespalib/locale/c.h>
#include <vespa/vespalib/util/array.hpp>
@@ -316,7 +317,7 @@ bool StringAttribute::apply(DocId, const ArithmeticValueUpdate & )
bool
StringAttribute::onLoadEnumerated(ReaderBase &attrReader)
{
- fileutil::LoadedBuffer::UP udatBuffer(loadUDAT());
+ auto udatBuffer = attribute::LoadUtils::loadUDAT(*this);
bool hasIdx(attrReader.hasIdx());
size_t numDocs(0);