summaryrefslogtreecommitdiffstats
path: root/searchcore
diff options
context:
space:
mode:
authorGeir Storli <geirst@verizonmedia.com>2021-09-14 11:52:31 +0000
committerGeir Storli <geirst@verizonmedia.com>2021-09-14 14:23:30 +0000
commitdcc1c4f1c1fb93ccfb8a1f30cdd9eeb62799a298 (patch)
treec95a10584d224c492bb3039374ab2fad9c9adbf2 /searchcore
parent8ecfc3ac12bc50aedf09a44c4001d9512fdeca94 (diff)
Refactor to represent files with a generic header in a new class.
Also move DIRECT I/O alignment setting to a common place.
Diffstat (limited to 'searchcore')
-rw-r--r--searchcore/src/vespa/searchcore/proton/documentmetastore/documentmetastore.cpp40
1 files changed, 15 insertions, 25 deletions
diff --git a/searchcore/src/vespa/searchcore/proton/documentmetastore/documentmetastore.cpp b/searchcore/src/vespa/searchcore/proton/documentmetastore/documentmetastore.cpp
index 8262ae30fd0..bbc780e3584 100644
--- a/searchcore/src/vespa/searchcore/proton/documentmetastore/documentmetastore.cpp
+++ b/searchcore/src/vespa/searchcore/proton/documentmetastore/documentmetastore.cpp
@@ -14,15 +14,15 @@
#include <vespa/searchlib/attribute/readerbase.h>
#include <vespa/searchlib/common/i_gid_to_lid_mapper.h>
#include <vespa/searchlib/query/query_term_simple.h>
+#include <vespa/searchlib/util/bufferwriter.h>
#include <vespa/vespalib/btree/btree.hpp>
#include <vespa/vespalib/btree/btreebuilder.hpp>
#include <vespa/vespalib/btree/btreenodeallocator.hpp>
#include <vespa/vespalib/btree/btreenodestore.hpp>
#include <vespa/vespalib/btree/btreeroot.hpp>
-#include <vespa/searchlib/util/bufferwriter.h>
+#include <vespa/vespalib/datastore/buffer_type.hpp>
#include <vespa/vespalib/util/exceptions.h>
#include <vespa/vespalib/util/rcuvector.hpp>
-#include <vespa/vespalib/datastore/buffer_type.hpp>
#include <vespa/log/log.h>
LOG_SETUP(".proton.documentmetastore");
@@ -33,12 +33,12 @@ using proton::bucketdb::BucketState;
using proton::documentmetastore::GidToLidMapKey;
using search::AttributeVector;
using search::FileReader;
+using search::FileWithHeader;
using search::GrowStrategy;
using search::IAttributeSaveTarget;
using search::LidUsageStats;
using search::attribute::LoadUtils;
using search::attribute::SearchContextParams;
-using vespalib::btree::BTreeNoLeafData;
using search::fef::TermFieldMatchData;
using search::queryeval::Blueprint;
using search::queryeval::SearchIterator;
@@ -47,6 +47,7 @@ using vespalib::GenerationHandler;
using vespalib::GenerationHeldBase;
using vespalib::IllegalStateException;
using vespalib::MemoryUsage;
+using vespalib::btree::BTreeNoLeafData;
using vespalib::make_string;
namespace proton {
@@ -58,36 +59,25 @@ vespalib::string VERSION("version");
class Reader {
private:
- std::unique_ptr<FastOS_FileInterface> _datFile;
+ FileWithHeader _datFile;
FileReader<uint32_t> _lidReader;
FileReader<GlobalId> _gidReader;
FileReader<uint8_t> _bucketUsedBitsReader;
FileReader<Timestamp> _timestampReader;
- vespalib::FileHeader _header;
- uint32_t _headerLen;
uint32_t _docIdLimit;
uint32_t _version;
- uint64_t _datFileSize;
public:
Reader(std::unique_ptr<FastOS_FileInterface> datFile)
: _datFile(std::move(datFile)),
- _lidReader(*_datFile),
- _gidReader(*_datFile),
- _bucketUsedBitsReader(*_datFile),
- _timestampReader(*_datFile),
- _header(),
- _headerLen(0u),
- _docIdLimit(0),
- _datFileSize(0u)
+ _lidReader(_datFile.file()),
+ _gidReader(_datFile.file()),
+ _bucketUsedBitsReader(_datFile.file()),
+ _timestampReader(_datFile.file()),
+ _docIdLimit(0)
{
- _headerLen = _header.readFile(*_datFile);
- _datFile->SetPosition(_headerLen);
- if (!search::ReaderBase::extractFileSize(_header, *_datFile, _datFileSize)) {
- LOG_ABORT("should not be reached");
- }
- _docIdLimit = _header.getTag(DOCID_LIMIT).asInteger();
- _version = _header.getTag(VERSION).asInteger();
+ _docIdLimit = _datFile.header().getTag(DOCID_LIMIT).asInteger();
+ _version = _datFile.header().getTag(VERSION).asInteger();
}
uint32_t getDocIdLimit() const { return _docIdLimit; }
@@ -118,14 +108,14 @@ public:
}
uint8_t sizeLow;
uint16_t sizeHigh;
- _datFile->ReadBuf(&sizeLow, sizeof(sizeLow));
- _datFile->ReadBuf(&sizeHigh, sizeof(sizeHigh));
+ _datFile.file().ReadBuf(&sizeLow, sizeof(sizeLow));
+ _datFile.file().ReadBuf(&sizeHigh, sizeof(sizeHigh));
return sizeLow + (static_cast<uint32_t>(sizeHigh) << 8);
}
size_t
getNumElems() const {
- return (_datFileSize - _headerLen) /
+ return _datFile.data_size() /
(sizeof(uint32_t) + sizeof(GlobalId) +
sizeof(uint8_t) + sizeof(Timestamp::Type) +
((_version == NO_DOCUMENT_SIZE_TRACKING_VERSION) ? 0 : 3));