summaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2017-01-23 11:06:02 +0100
committerHenning Baldersheim <balder@yahoo-inc.com>2017-01-23 11:06:02 +0100
commit15ec467d56ecd224efc8bf4048c8666582b5e71b (patch)
tree47b8d77070f0e1505dbdf18d8f3a7383f12898c4 /searchlib
parent70e5e8f22477641d32edc70655fea31252369e18 (diff)
Use ensure_size and implement onAddDocs.
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/src/vespa/searchlib/attribute/multinumericattribute.hpp2
-rw-r--r--searchlib/src/vespa/searchlib/attribute/multinumericenumattribute.hpp2
-rw-r--r--searchlib/src/vespa/searchlib/attribute/singleenumattribute.h2
-rw-r--r--searchlib/src/vespa/searchlib/attribute/singleenumattribute.hpp9
-rw-r--r--searchlib/src/vespa/searchlib/attribute/singlenumericattribute.hpp1
-rw-r--r--searchlib/src/vespa/searchlib/attribute/singlenumericenumattribute.hpp1
-rw-r--r--searchlib/src/vespa/searchlib/common/rcuvector.hpp4
-rw-r--r--searchlib/src/vespa/searchlib/docstore/logdatastore.cpp5
8 files changed, 18 insertions, 8 deletions
diff --git a/searchlib/src/vespa/searchlib/attribute/multinumericattribute.hpp b/searchlib/src/vespa/searchlib/attribute/multinumericattribute.hpp
index 2cbebea242a..1e865d95f2e 100644
--- a/searchlib/src/vespa/searchlib/attribute/multinumericattribute.hpp
+++ b/searchlib/src/vespa/searchlib/attribute/multinumericattribute.hpp
@@ -113,6 +113,7 @@ MultiValueNumericAttribute<B, M>::onLoadEnumerated(ReaderBase & attrReader)
uint32_t numDocs = attrReader.getNumIdx() - 1;
this->setNumDocs(numDocs);
this->setCommittedDocIdLimit(numDocs);
+ this->_mvMapping.reserve(numDocs+1);
LoadedBuffer::UP udatBuffer(this->loadUDAT());
assert((udatBuffer->size() % sizeof(T)) == 0);
@@ -147,6 +148,7 @@ MultiValueNumericAttribute<B, M>::onLoad()
std::vector<MultiValueType> values;
B::setNumDocs(numDocs);
B::setCommittedDocIdLimit(numDocs);
+ this->_mvMapping.reserve(numDocs+1);
for (DocId doc = 0; doc < numDocs; ++doc) {
const uint32_t valueCount(attrReader.getNextValueCount());
for (uint32_t i(0); i < valueCount; i++) {
diff --git a/searchlib/src/vespa/searchlib/attribute/multinumericenumattribute.hpp b/searchlib/src/vespa/searchlib/attribute/multinumericenumattribute.hpp
index cdcb83478d6..9255a23984d 100644
--- a/searchlib/src/vespa/searchlib/attribute/multinumericenumattribute.hpp
+++ b/searchlib/src/vespa/searchlib/attribute/multinumericenumattribute.hpp
@@ -64,6 +64,7 @@ MultiValueNumericEnumAttribute<B, M>::onLoadEnumerated(ReaderBase &attrReader)
this->fillEnum0(udatBuffer->buffer(), udatBuffer->size(), eidxs);
this->setNumDocs(numDocs);
this->setCommittedDocIdLimit(numDocs);
+ this->_mvMapping.reserve(numDocs);
LoadedEnumAttributeVector loaded;
EnumVector enumHist;
if (this->hasPostings()) {
@@ -114,6 +115,7 @@ MultiValueNumericEnumAttribute<B, M>::onLoad()
if (numDocs > 0) {
this->onAddDoc(numDocs - 1);
}
+ this->_mvMapping.reserve(numDocs);
loadAllAtOnce(attrReader, numDocs, numValues);
return true;
diff --git a/searchlib/src/vespa/searchlib/attribute/singleenumattribute.h b/searchlib/src/vespa/searchlib/attribute/singleenumattribute.h
index 2da9966e194..1b625b697ed 100644
--- a/searchlib/src/vespa/searchlib/attribute/singleenumattribute.h
+++ b/searchlib/src/vespa/searchlib/attribute/singleenumattribute.h
@@ -101,7 +101,7 @@ protected:
*
* Should return true if underlying structures were resized.
**/
- virtual bool onAddDoc(DocId doc) { (void) doc; return false; }
+ virtual bool onAddDoc(DocId doc);
public:
SingleValueEnumAttribute(const vespalib::string & baseFileName, const AttributeVector::Config & cfg);
diff --git a/searchlib/src/vespa/searchlib/attribute/singleenumattribute.hpp b/searchlib/src/vespa/searchlib/attribute/singleenumattribute.hpp
index 10bbb080ef8..345c7227627 100644
--- a/searchlib/src/vespa/searchlib/attribute/singleenumattribute.hpp
+++ b/searchlib/src/vespa/searchlib/attribute/singleenumattribute.hpp
@@ -26,6 +26,15 @@ SingleValueEnumAttribute<B>::~SingleValueEnumAttribute()
}
template <typename B>
+bool SingleValueEnumAttribute<B>::onAddDoc(DocId doc) {
+ if (doc < _enumIndices.capacity()) {
+ _enumIndices.reserve(doc+1);
+ return true;
+ }
+ return false;
+}
+
+template <typename B>
void
SingleValueEnumAttribute<B>::onAddDocs(DocId limit) {
_enumIndices.reserve(limit);
diff --git a/searchlib/src/vespa/searchlib/attribute/singlenumericattribute.hpp b/searchlib/src/vespa/searchlib/attribute/singlenumericattribute.hpp
index 34e76c6176b..713ab52186e 100644
--- a/searchlib/src/vespa/searchlib/attribute/singlenumericattribute.hpp
+++ b/searchlib/src/vespa/searchlib/attribute/singlenumericattribute.hpp
@@ -110,6 +110,7 @@ SingleValueNumericAttribute<B>::onLoadEnumerated(ReaderBase &attrReader)
this->setNumDocs(numDocs);
this->setCommittedDocIdLimit(numDocs);
+ _data.unsafe_reserve(numDocs);
fileutil::LoadedBuffer::UP udatBuffer(this->loadUDAT());
assert((udatBuffer->size() % sizeof(T)) == 0);
diff --git a/searchlib/src/vespa/searchlib/attribute/singlenumericenumattribute.hpp b/searchlib/src/vespa/searchlib/attribute/singlenumericenumattribute.hpp
index e50eae415ea..72ca876676c 100644
--- a/searchlib/src/vespa/searchlib/attribute/singlenumericenumattribute.hpp
+++ b/searchlib/src/vespa/searchlib/attribute/singlenumericenumattribute.hpp
@@ -129,6 +129,7 @@ SingleValueNumericEnumAttribute<B>::onLoad()
if (numDocs > 0) {
this->onAddDoc(numDocs - 1);
}
+
for (uint32_t docIdx = 0; docIdx < numDocs; ++docIdx) {
loaded[docIdx]._docId = docIdx;
loaded[docIdx]._idx = 0;
diff --git a/searchlib/src/vespa/searchlib/common/rcuvector.hpp b/searchlib/src/vespa/searchlib/common/rcuvector.hpp
index 42346981fa7..c68016dea81 100644
--- a/searchlib/src/vespa/searchlib/common/rcuvector.hpp
+++ b/searchlib/src/vespa/searchlib/common/rcuvector.hpp
@@ -32,9 +32,7 @@ RcuVectorBase<T>::unsafe_reserve(size_t n) {
template <typename T>
void
RcuVectorBase<T>::ensure_size(size_t n, T fill) {
- if (n > capacity()) {
- expand(calcNewSize(n));
- }
+ reserve(n);
while (size() < n) {
_data.push_back(fill);
}
diff --git a/searchlib/src/vespa/searchlib/docstore/logdatastore.cpp b/searchlib/src/vespa/searchlib/docstore/logdatastore.cpp
index a3eb5ee03f7..5fa582320ee 100644
--- a/searchlib/src/vespa/searchlib/docstore/logdatastore.cpp
+++ b/searchlib/src/vespa/searchlib/docstore/logdatastore.cpp
@@ -870,10 +870,7 @@ LogDataStore::setLid(const LockGuard & guard, uint32_t lid, const LidInfo & meta
_fileChunks[prev.getFileId()]->remove(lid, prev.size());
}
} else {
- _lidInfo.reserve(lid+1);
- while (lid >= _lidInfo.size()) {
- _lidInfo.push_back(LidInfo());
- }
+ _lidInfo.ensure_size(lid+1);
_lidInfo.setGeneration(_genHandler.getNextGeneration());
_genHandler.incGeneration();
_genHandler.updateFirstUsedGeneration();