summaryrefslogtreecommitdiffstats
path: root/searchcore
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@yahoo-inc.com>2017-05-12 10:38:37 +0000
committerTor Egge <Tor.Egge@yahoo-inc.com>2017-05-12 10:38:37 +0000
commitcd8125caa2b91d42b697a2b29702be35734001bb (patch)
treea9b1d120b462f6377818645f8d39a385916e7dc3 /searchcore
parent703129f0917a91c0ae27a5aefce0059477753160 (diff)
Reuse shrink flush target when transferring attribute to new attribute
manager.
Diffstat (limited to 'searchcore')
-rw-r--r--searchcore/src/vespa/searchcore/proton/attribute/attributemanager.cpp30
-rw-r--r--searchcore/src/vespa/searchcore/proton/attribute/attributemanager.h2
2 files changed, 19 insertions, 13 deletions
diff --git a/searchcore/src/vespa/searchcore/proton/attribute/attributemanager.cpp b/searchcore/src/vespa/searchcore/proton/attribute/attributemanager.cpp
index c0ac043ebb8..ab6bed8e74d 100644
--- a/searchcore/src/vespa/searchcore/proton/attribute/attributemanager.cpp
+++ b/searchcore/src/vespa/searchcore/proton/attribute/attributemanager.cpp
@@ -72,6 +72,17 @@ search::SerialNum estimateShrinkSerialNum(const AttributeVector &attr)
return std::max(attr.getStatus().getLastSyncToken(), serialNum);
}
+std::shared_ptr<ShrinkLidSpaceFlushTarget> allocShrinker(const AttributeVector::SP &attr, search::ISequencedTaskExecutor &attributeFieldWriter)
+{
+ using Type = IFlushTarget::Type;
+ using Component = IFlushTarget::Component;
+
+ const vespalib::string &name = attr->getName();
+ auto shrinkwrap = std::make_shared<ThreadedCompactableLidSpace>(attr, attributeFieldWriter, attributeFieldWriter.getExecutorId(name));
+ search::SerialNum shrinkSerialNum = estimateShrinkSerialNum(*attr);
+ return std::make_shared<ShrinkLidSpaceFlushTarget>("attributeshrink." + name, Type::GC, Component::ATTRIBUTE, shrinkSerialNum, shrinkwrap);
+}
+
}
AttributeManager::AttributeWrap::AttributeWrap(const AttributeVectorSP & a,
@@ -128,14 +139,14 @@ AttributeManager::internalAddAttribute(const AttributeSpec &spec,
AttributeInitializerResult result = initializer.init();
if (result) {
result.getAttribute()->setInterlock(_interlock);
- SerialNum shrinkSerialNum = estimateShrinkSerialNum(*result.getAttribute());
- addAttribute(AttributeWrap::normalAttribute(result.getAttribute()), shrinkSerialNum);
+ auto shrinker = allocShrinker(result.getAttribute(), _attributeFieldWriter);
+ addAttribute(AttributeWrap::normalAttribute(result.getAttribute()), shrinker);
}
return result.getAttribute();
}
void
-AttributeManager::addAttribute(const AttributeWrap &attribute, SerialNum shrinkSerialNum)
+AttributeManager::addAttribute(const AttributeWrap &attribute, const ShrinkerSP &shrinker)
{
LOG(debug, "Adding attribute vector '%s'", attribute.getAttribute()->getBaseFileName().c_str());
_attributes[attribute.getAttribute()->getName()] = attribute;
@@ -145,10 +156,6 @@ AttributeManager::addAttribute(const AttributeWrap &attribute, SerialNum shrinkS
auto attr = attribute.getAttribute();
const vespalib::string &name = attr->getName();
auto flusher = std::make_shared<FlushableAttribute>(attr, _diskLayout->createAttributeDir(name), _tuneFileAttributes, _fileHeaderContext, _attributeFieldWriter, _hwInfo);
- auto shrinkwrap = std::make_shared<ThreadedCompactableLidSpace>(attr, _attributeFieldWriter, _attributeFieldWriter.getExecutorId(name));
- using Type = IFlushTarget::Type;
- using Component = IFlushTarget::Component;
- auto shrinker = std::make_shared<ShrinkLidSpaceFlushTarget>("attributeshrink." + name, Type::GC, Component::ATTRIBUTE, shrinkSerialNum, attr);
_flushables[attribute.getAttribute()->getName()] = FlushableWrap(flusher, shrinker);
_writableAttributes.push_back(attribute.getAttribute().get());
}
@@ -184,8 +191,7 @@ AttributeManager::transferExistingAttributes(const AttributeManager &currMgr,
assert(wrap != nullptr);
auto shrinker = wrap->getShrinker();
assert(shrinker);
- SerialNum shrinkSerialNum = shrinker->getFlushedSerialNum();
- addAttribute(AttributeWrap::normalAttribute(av), shrinkSerialNum);
+ addAttribute(AttributeWrap::normalAttribute(av), shrinker);
} else {
toBeAdded.push_back(aspec);
}
@@ -316,8 +322,8 @@ AttributeManager::addInitializedAttributes(const std::vector<AttributeInitialize
assert(result);
auto attr = result.getAttribute();
attr->setInterlock(_interlock);
- SerialNum shrinkSerialNum = estimateShrinkSerialNum(*attr);
- addAttribute(AttributeWrap::normalAttribute(attr), shrinkSerialNum);
+ auto shrinker = allocShrinker(attr, _attributeFieldWriter);
+ addAttribute(AttributeWrap::normalAttribute(attr), shrinker);
}
}
@@ -325,7 +331,7 @@ void
AttributeManager::addExtraAttribute(const AttributeVector::SP &attribute)
{
attribute->setInterlock(_interlock);
- addAttribute(AttributeWrap::extraAttribute(attribute), 0);
+ addAttribute(AttributeWrap::extraAttribute(attribute), ShrinkerSP());
}
void
diff --git a/searchcore/src/vespa/searchcore/proton/attribute/attributemanager.h b/searchcore/src/vespa/searchcore/proton/attribute/attributemanager.h
index ca07a5e766f..4faa3011a1d 100644
--- a/searchcore/src/vespa/searchcore/proton/attribute/attributemanager.h
+++ b/searchcore/src/vespa/searchcore/proton/attribute/attributemanager.h
@@ -98,7 +98,7 @@ private:
uint64_t serialNum,
const IAttributeFactory &factory);
- void addAttribute(const AttributeWrap &attribute, SerialNum shrinkSerialNum);
+ void addAttribute(const AttributeWrap &attribute, const ShrinkerSP &shrinker);
AttributeVectorSP findAttribute(const vespalib::string &name) const;