aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2022-01-26 16:24:22 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2022-01-26 16:24:22 +0000
commit95f590302087e06a26ee398bc7eb06e65b4d3870 (patch)
tree56067d664f07c60ee98da566c89f05b90e9c401d
parent9b1e52cfb8e0806f0e87c9963770b8b45f6d93b4 (diff)
Scope FastOS_File to avoid explicit Close().
-rw-r--r--searchlib/src/vespa/searchlib/diskindex/bitvectordictionary.cpp54
-rw-r--r--searchlib/src/vespa/searchlib/diskindex/fileheader.cpp46
2 files changed, 49 insertions, 51 deletions
diff --git a/searchlib/src/vespa/searchlib/diskindex/bitvectordictionary.cpp b/searchlib/src/vespa/searchlib/diskindex/bitvectordictionary.cpp
index 12866e74137..29c82936076 100644
--- a/searchlib/src/vespa/searchlib/diskindex/bitvectordictionary.cpp
+++ b/searchlib/src/vespa/searchlib/diskindex/bitvectordictionary.cpp
@@ -19,12 +19,7 @@ BitVectorDictionary::BitVectorDictionary()
{ }
-BitVectorDictionary::~BitVectorDictionary()
-{
- if (_datFile) {
- _datFile->Close();
- }
-}
+BitVectorDictionary::~BitVectorDictionary() = default;
bool
@@ -35,31 +30,32 @@ BitVectorDictionary::open(const vespalib::string &pathPrefix,
vespalib::string booloccIdxName = pathPrefix + "boolocc" +
getBitVectorKeyScopeSuffix(scope);
vespalib::string booloccDatName = pathPrefix + "boolocc.bdat";
- FastOS_File idxFile;
- idxFile.OpenReadOnly(booloccIdxName.c_str());
- if (!idxFile.IsOpened()) {
- LOG(warning, "Could not open bitvector idx file '%s'",
- booloccIdxName.c_str());
- return false;
- }
+ {
+ FastOS_File idxFile;
+ idxFile.OpenReadOnly(booloccIdxName.c_str());
+ if (!idxFile.IsOpened()) {
+ LOG(warning, "Could not open bitvector idx file '%s'",
+ booloccIdxName.c_str());
+ return false;
+ }
- vespalib::FileHeader idxHeader;
- uint32_t idxHeaderLen = idxHeader.readFile(idxFile);
- idxFile.SetPosition(idxHeaderLen);
- assert(idxHeader.hasTag("frozen"));
- assert(idxHeader.hasTag("docIdLimit"));
- assert(idxHeader.hasTag("numKeys"));
- assert(idxHeader.getTag("frozen").asInteger() != 0);
- _docIdLimit = idxHeader.getTag("docIdLimit").asInteger();
- uint32_t numEntries = idxHeader.getTag("numKeys").asInteger();
+ vespalib::FileHeader idxHeader;
+ uint32_t idxHeaderLen = idxHeader.readFile(idxFile);
+ idxFile.SetPosition(idxHeaderLen);
+ assert(idxHeader.hasTag("frozen"));
+ assert(idxHeader.hasTag("docIdLimit"));
+ assert(idxHeader.hasTag("numKeys"));
+ assert(idxHeader.getTag("frozen").asInteger() != 0);
+ _docIdLimit = idxHeader.getTag("docIdLimit").asInteger();
+ uint32_t numEntries = idxHeader.getTag("numKeys").asInteger();
- _entries.resize(numEntries);
- size_t bufSize = sizeof(WordSingleKey) * numEntries;
- assert(idxFile.GetSize() >= static_cast<int64_t>(idxHeaderLen + bufSize));
- if (bufSize > 0) {
- idxFile.Read(&_entries[0], bufSize);
+ _entries.resize(numEntries);
+ size_t bufSize = sizeof(WordSingleKey) * numEntries;
+ assert(idxFile.GetSize() >= static_cast<int64_t>(idxHeaderLen + bufSize));
+ if (bufSize > 0) {
+ idxFile.Read(&_entries[0], bufSize);
+ }
}
- idxFile.Close();
_vectorSize = BitVector::getFileBytes(_docIdLimit);
_datFile = std::make_unique<FastOS_File>();
@@ -79,7 +75,7 @@ BitVectorDictionary::open(const vespalib::string &pathPrefix,
vespalib::FileHeader datHeader(64);
_datHeaderLen = datHeader.readFile(*_datFile);
assert(_datFile->GetSize() >=
- static_cast<int64_t>(_vectorSize) * numEntries + _datHeaderLen);
+ static_cast<int64_t>(_vectorSize * _entries.size() + _datHeaderLen));
return true;
}
diff --git a/searchlib/src/vespa/searchlib/diskindex/fileheader.cpp b/searchlib/src/vespa/searchlib/diskindex/fileheader.cpp
index d76d1136f8d..e1c31c1ed8d 100644
--- a/searchlib/src/vespa/searchlib/diskindex/fileheader.cpp
+++ b/searchlib/src/vespa/searchlib/diskindex/fileheader.cpp
@@ -31,32 +31,34 @@ FileHeader::taste(const vespalib::string &name,
const TuneFileSeqRead &tuneFileRead)
{
vespalib::FileHeader header;
- FastOS_File file;
+ uint32_t headerLen;
+ uint64_t fileSize;
+ {
+ FastOS_File file;
- if (tuneFileRead.getWantDirectIO()) {
- file.EnableDirectIO();
- }
- bool res = file.OpenReadOnly(name.c_str());
- if (!res) {
- return false;
- }
- uint32_t headerLen = 0u;
- uint64_t fileSize = file.GetSize();
- try {
- headerLen = header.readFile(file);
- assert(headerLen >= header.getSize());
- (void) headerLen;
- } catch (vespalib::IllegalHeaderException &e) {
- if (e.getMessage() != "Failed to read header info." &&
- e.getMessage() != "Failed to verify magic bits.") {
- LOG(error, "FileHeader::tastGeneric(\"%s\") exception: %s",
- name.c_str(), e.getMessage().c_str());
+ if (tuneFileRead.getWantDirectIO()) {
+ file.EnableDirectIO();
+ }
+ bool res = file.OpenReadOnly(name.c_str());
+ if (!res) {
+ return false;
+ }
+
+ fileSize = file.GetSize();
+ try {
+ headerLen = header.readFile(file);
+ assert(headerLen >= header.getSize());
+ (void) headerLen;
+ } catch (vespalib::IllegalHeaderException &e) {
+ if (e.getMessage() != "Failed to read header info." &&
+ e.getMessage() != "Failed to verify magic bits.") {
+ LOG(error, "FileHeader::tastGeneric(\"%s\") exception: %s",
+ name.c_str(), e.getMessage().c_str());
+ }
+ return false;
}
- file.Close();
- return false;
}
- file.Close();
_version = 1;
_headerLen = headerLen;