aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2024-04-16 20:42:38 +0200
committerGitHub <noreply@github.com>2024-04-16 20:42:38 +0200
commitd3c2f37d6565bbb5ba671a16125f61d2a453317b (patch)
treec4eab24241639e1742da9b2c3cdc83d956b10c54
parentdc06df74c11187dd3e4783291c0a1aa902deb7c0 (diff)
parentb56c435909bdbec532d4f29c41e9d54900bc78fd (diff)
Merge pull request #30930 from vespa-engine/toregge/pad-disk-index-dictionary-files-at-end
Pad disk index dictionary files at end.
-rw-r--r--searchlib/src/vespa/searchlib/bitcompression/compression.cpp18
-rw-r--r--searchlib/src/vespa/searchlib/bitcompression/compression.h2
-rw-r--r--searchlib/src/vespa/searchlib/diskindex/pagedict4file.cpp8
-rw-r--r--searchlib/src/vespa/searchlib/diskindex/zc4_posting_writer.cpp14
4 files changed, 24 insertions, 18 deletions
diff --git a/searchlib/src/vespa/searchlib/bitcompression/compression.cpp b/searchlib/src/vespa/searchlib/bitcompression/compression.cpp
index 0f089c60e4b..f3fc31ac8b1 100644
--- a/searchlib/src/vespa/searchlib/bitcompression/compression.cpp
+++ b/searchlib/src/vespa/searchlib/bitcompression/compression.cpp
@@ -359,6 +359,24 @@ getParams(PostingListParams &params) const
params.clear();
}
+template <bool bigEndian>
+void
+FeatureEncodeContext<bigEndian>::pad_for_memory_map_and_flush()
+{
+ // Write some pad bits to avoid decompression readahead going past
+ // memory mapped file during search and into SIGSEGV territory.
+
+ // First pad to 64 bits alignment.
+ this->smallAlign(64);
+ writeComprBufferIfNeeded();
+
+ // Then write 128 more bits. This allows for 64-bit decoding
+ // with a readbits that always leaves a nonzero preRead
+ padBits(128);
+ this->alignDirectIO();
+ this->flush();
+ writeComprBuffer(); // Also flushes slack
+}
template <bool bigEndian>
void
diff --git a/searchlib/src/vespa/searchlib/bitcompression/compression.h b/searchlib/src/vespa/searchlib/bitcompression/compression.h
index 9d4ca38eed3..4124f1f659f 100644
--- a/searchlib/src/vespa/searchlib/bitcompression/compression.h
+++ b/searchlib/src/vespa/searchlib/bitcompression/compression.h
@@ -1595,6 +1595,8 @@ public:
writeComprBufferIfNeeded();
}
+ void pad_for_memory_map_and_flush();
+
virtual void readHeader(const vespalib::GenericHeader &header, const vespalib::string &prefix);
virtual void writeHeader(vespalib::GenericHeader &header, const vespalib::string &prefix) const;
virtual const vespalib::string &getIdentifier() const;
diff --git a/searchlib/src/vespa/searchlib/diskindex/pagedict4file.cpp b/searchlib/src/vespa/searchlib/diskindex/pagedict4file.cpp
index 387d95bce66..bceeb1e7bc1 100644
--- a/searchlib/src/vespa/searchlib/diskindex/pagedict4file.cpp
+++ b/searchlib/src/vespa/searchlib/diskindex/pagedict4file.cpp
@@ -269,11 +269,9 @@ PageDict4FileSeqWrite::DictFileContext::DictFileContext(bool extended, vespalib:
}
bool
-PageDict4FileSeqWrite::DictFileContext::DictFileContext::close() {
- //uint64_t usedPBits = _ec.getWriteOffset();
- _ec.flush();
- _writeContext.writeComprBuffer(true);
-
+PageDict4FileSeqWrite::DictFileContext::DictFileContext::close()
+{
+ _ec.pad_for_memory_map_and_flush();
_writeContext.dropComprBuf();
bool success = _file.Sync();
success &= _file.Close();
diff --git a/searchlib/src/vespa/searchlib/diskindex/zc4_posting_writer.cpp b/searchlib/src/vespa/searchlib/diskindex/zc4_posting_writer.cpp
index c7480633e21..f2b7911ba55 100644
--- a/searchlib/src/vespa/searchlib/diskindex/zc4_posting_writer.cpp
+++ b/searchlib/src/vespa/searchlib/diskindex/zc4_posting_writer.cpp
@@ -247,19 +247,7 @@ template <bool bigEndian>
void
Zc4PostingWriter<bigEndian>::on_close()
{
- // Write some pad bits to avoid decompression readahead going past
- // memory mapped file during search and into SIGSEGV territory.
-
- // First pad to 64 bits alignment.
- _encode_context.smallAlign(64);
- _encode_context.writeComprBufferIfNeeded();
-
- // Then write 128 more bits. This allows for 64-bit decoding
- // with a readbits that always leaves a nonzero preRead
- _encode_context.padBits(128);
- _encode_context.alignDirectIO();
- _encode_context.flush();
- _encode_context.writeComprBuffer(); // Also flushes slack
+ _encode_context.pad_for_memory_map_and_flush();
}
template class Zc4PostingWriter<false>;