summaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@yahoo-inc.com>2017-03-28 13:37:12 +0000
committerTor Egge <Tor.Egge@yahoo-inc.com>2017-03-28 13:37:12 +0000
commit0ac458bf1dd30748b97742c06db1710ffb52ef58 (patch)
treef6f6cd94af9080a9a81352f5f957cff8fe3f7209 /searchlib
parentd8c4301822b9cf86b76f10b785c2ebca09433f8e (diff)
Add unit test for attribute initializer.
Set create serial number when loading predicate attribute. Tweak signature for search::attribute::AttributeHeader::extractTags.
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/src/vespa/searchlib/attribute/attribute_header.cpp16
-rw-r--r--searchlib/src/vespa/searchlib/attribute/attribute_header.h4
-rw-r--r--searchlib/src/vespa/searchlib/attribute/predicate_attribute.cpp8
3 files changed, 23 insertions, 5 deletions
diff --git a/searchlib/src/vespa/searchlib/attribute/attribute_header.cpp b/searchlib/src/vespa/searchlib/attribute/attribute_header.cpp
index 933b62abf68..84f0720b140 100644
--- a/searchlib/src/vespa/searchlib/attribute/attribute_header.cpp
+++ b/searchlib/src/vespa/searchlib/attribute/attribute_header.cpp
@@ -8,6 +8,7 @@ namespace attribute {
namespace {
+const vespalib::string versionTag = "version";
const vespalib::string dataTypeTag = "datatype";
const vespalib::string collectionTypeTag = "collectiontype";
const vespalib::string createSerialNumTag = "createSerialNum";
@@ -68,7 +69,7 @@ AttributeHeader::~AttributeHeader()
}
void
-AttributeHeader::extractTags(const vespalib::GenericHeader &header)
+AttributeHeader::internalExtractTags(const vespalib::GenericHeader &header)
{
if (header.hasTag(createSerialNumTag)) {
_createSerialNum = header.getTag(createSerialNumTag).asInteger();
@@ -95,6 +96,17 @@ AttributeHeader::extractTags(const vespalib::GenericHeader &header)
assert(!header.hasTag(predicateUpperBoundTag));
}
}
+ if (header.hasTag(versionTag)) {
+ _version = header.getTag(versionTag).asInteger();
+ }
+}
+
+AttributeHeader
+AttributeHeader::extractTags(const vespalib::GenericHeader &header)
+{
+ AttributeHeader result;
+ result.internalExtractTags(header);
+ return result;
}
void
@@ -108,7 +120,7 @@ AttributeHeader::addTags(vespalib::GenericHeader &header) const
header.putTag(Tag("docIdLimit", _numDocs));
header.putTag(Tag("frozen", 0));
header.putTag(Tag("fileBitSize", 0));
- header.putTag(Tag("version", _version));
+ header.putTag(Tag(versionTag, _version));
if (_enumerated) {
header.putTag(Tag("enumerated", 1));
}
diff --git a/searchlib/src/vespa/searchlib/attribute/attribute_header.h b/searchlib/src/vespa/searchlib/attribute/attribute_header.h
index 32f6123036e..7e9ef78dafb 100644
--- a/searchlib/src/vespa/searchlib/attribute/attribute_header.h
+++ b/searchlib/src/vespa/searchlib/attribute/attribute_header.h
@@ -32,6 +32,8 @@ private:
uint64_t _totalValueCount;
uint64_t _createSerialNum;
uint32_t _version;
+
+ void internalExtractTags(const vespalib::GenericHeader &header);
public:
AttributeHeader();
AttributeHeader(const vespalib::string &fileName,
@@ -63,7 +65,7 @@ public:
uint32_t getVersion() const { return _version; }
const PersistentPredicateParams &getPredicateParams() const { return _predicateParams; }
bool getPredicateParamsSet() const { return _predicateParamsSet; }
- void extractTags(const vespalib::GenericHeader &header);
+ static AttributeHeader extractTags(const vespalib::GenericHeader &header);
void addTags(vespalib::GenericHeader &header) const;
};
diff --git a/searchlib/src/vespa/searchlib/attribute/predicate_attribute.cpp b/searchlib/src/vespa/searchlib/attribute/predicate_attribute.cpp
index 4ce7015fdba..e7df13549ef 100644
--- a/searchlib/src/vespa/searchlib/attribute/predicate_attribute.cpp
+++ b/searchlib/src/vespa/searchlib/attribute/predicate_attribute.cpp
@@ -6,6 +6,7 @@
#include <vespa/document/predicate/predicate.h>
#include <vespa/vespalib/data/slime/slime.h>
#include "iattributesavetarget.h"
+#include "attribute_header.h"
#include <vespa/log/log.h>
LOG_SETUP(".predicate_attribute");
@@ -184,8 +185,11 @@ bool PredicateAttribute::onLoad()
buffer.moveFreeToData(size);
const GenericHeader &header = loaded_buffer->getHeader();
- uint32_t version = static_cast<uint32_t>(
- header.hasTag("version") ? header.getTag("version").asInteger() : 0);
+ auto attributeHeader = attribute::AttributeHeader::extractTags(header);
+ uint32_t version = attributeHeader.getVersion();
+
+ setCreateSerialNum(attributeHeader.getCreateSerialNum());
+
LOG(info, "Loading predicate attribute version %d. getVersion() = %d", version, getVersion());
DocId highest_doc_id;