diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2022-01-26 16:24:22 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2022-01-26 16:24:22 +0000 |
commit | 95f590302087e06a26ee398bc7eb06e65b4d3870 (patch) | |
tree | 56067d664f07c60ee98da566c89f05b90e9c401d /searchlib | |
parent | 9b1e52cfb8e0806f0e87c9963770b8b45f6d93b4 (diff) |
Scope FastOS_File to avoid explicit Close().
Diffstat (limited to 'searchlib')
-rw-r--r-- | searchlib/src/vespa/searchlib/diskindex/bitvectordictionary.cpp | 54 | ||||
-rw-r--r-- | searchlib/src/vespa/searchlib/diskindex/fileheader.cpp | 46 |
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; |