summaryrefslogtreecommitdiffstats
path: root/streamingvisitors
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2022-08-30 07:50:17 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2022-08-30 07:50:17 +0000
commit9045702831d62d1a0a693389bfa397b9ca151d8f (patch)
treee032a4d5336093ded35fa005cd0675b42fdbd2b6 /streamingvisitors
parent07148b95b3c92c70aeb417a8944770b9307e8036 (diff)
Use vespalib::SmartBuffer instead of ancient RawBuf.
Diffstat (limited to 'streamingvisitors')
-rw-r--r--streamingvisitors/src/vespa/searchvisitor/searchvisitor.cpp37
-rw-r--r--streamingvisitors/src/vespa/searchvisitor/searchvisitor.h36
2 files changed, 41 insertions, 32 deletions
diff --git a/streamingvisitors/src/vespa/searchvisitor/searchvisitor.cpp b/streamingvisitors/src/vespa/searchvisitor/searchvisitor.cpp
index c2bbf4d09da..898860bdf73 100644
--- a/streamingvisitors/src/vespa/searchvisitor/searchvisitor.cpp
+++ b/streamingvisitors/src/vespa/searchvisitor/searchvisitor.cpp
@@ -3,6 +3,7 @@
#include "querytermdata.h"
#include "searchenvironment.h"
#include "searchvisitor.h"
+#include "matching_elements_filler.h"
#include <vespa/persistence/spi/docentry.h>
#include <vespa/document/datatype/positiondatatype.h>
#include <vespa/document/datatype/documenttype.h>
@@ -17,8 +18,8 @@
#include <vespa/vespalib/objects/nbostream.h>
#include <vespa/vespalib/util/exceptions.h>
#include <vespa/vespalib/util/size_literals.h>
+#include <vespa/vespalib/data/slime/slime.h>
#include <vespa/fnet/databuffer.h>
-#include "matching_elements_filler.h"
#include <vespa/log/log.h>
LOG_SETUP(".visitor.instance.searchvisitor");
@@ -92,7 +93,7 @@ createMultiValueAttribute(const vespalib::string & name, const document::FieldVa
LOG(debug, "Can not make an multivalue attribute out of %s with data type '%s' (%s)",
name.c_str(), ndt->getName().c_str(), fv.className());
}
- return AttributeVector::SP();
+ return {};
}
AttributeVector::SP
@@ -108,7 +109,7 @@ createAttribute(const vespalib::string & name, const document::FieldValue & fv)
} else {
LOG(debug, "Can not make an attribute out of %s of type '%s'.", name.c_str(), fv.className());
}
- return AttributeVector::SP();
+ return {};
}
SearchVisitor::SummaryGenerator::SummaryGenerator() :
@@ -117,7 +118,7 @@ SearchVisitor::SummaryGenerator::SummaryGenerator() :
_docsumState(_callback),
_docsumFilter(),
_docsumWriter(nullptr),
- _rawBuf(4_Ki)
+ _buf(4_Ki)
{
}
@@ -128,12 +129,20 @@ vespalib::ConstBufferRef
SearchVisitor::SummaryGenerator::fillSummary(AttributeVector::DocId lid, const HitsAggregationResult::SummaryClassType & summaryClass)
{
if (_docsumWriter != nullptr) {
- _rawBuf.reset();
_docsumState._args.setResultClassName(summaryClass);
- uint32_t docsumLen = _docsumWriter->WriteDocsum(lid, &_docsumState, _docsumFilter.get(), &_rawBuf);
- return vespalib::ConstBufferRef(_rawBuf.GetDrainPos(), docsumLen);
+ vespalib::Slime slime;
+ vespalib::slime::SlimeInserter inserter(slime);
+ _docsumWriter->WriteDocsum(lid, &_docsumState, _docsumFilter.get(), inserter);
+
+ _buf.reset();
+ vespalib::WritableMemory magicId = _buf.reserve(4);
+ memcpy(magicId.data, &search::docsummary::SLIME_MAGIC_ID, 4);
+ _buf.commit(4);
+ vespalib::slime::BinaryFormat::encode(slime, _buf);
+ vespalib::Memory mem = _buf.obtain();
+ return {mem.data, mem.size};
}
- return vespalib::ConstBufferRef();
+ return {};
}
void SearchVisitor::HitsResultPreparator::execute(vespalib::Identifiable & obj)
@@ -612,10 +621,10 @@ SearchVisitor::registerAdditionalFields(const std::vector<vsm::DocsumTools::Fiel
for (const vsm::DocsumTools::FieldSpec & spec : docsumSpec) {
fieldList.push_back(spec.getOutputName());
const std::vector<vespalib::string> & inputNames = spec.getInputNames();
- for (size_t j = 0; j < inputNames.size(); ++j) {
- fieldList.push_back(inputNames[j]);
- if (PositionDataType::isZCurveFieldName(inputNames[j])) {
- fieldList.emplace_back(PositionDataType::cutZCurveFieldName(inputNames[j]));
+ for (const auto & name : inputNames) {
+ fieldList.push_back(name);
+ if (PositionDataType::isZCurveFieldName(name)) {
+ fieldList.emplace_back(PositionDataType::cutZCurveFieldName(name));
}
}
}
@@ -732,7 +741,7 @@ SearchVisitor::setupAttributeVectors()
void SearchVisitor::setupAttributeVector(const FieldPath &fieldPath) {
vespalib::string attrName(fieldPath.front().getName());
- for (FieldPath::const_iterator ft(fieldPath.begin() + 1), fmt(fieldPath.end()); ft != fmt; ft++) {
+ for (auto ft(fieldPath.begin() + 1), fmt(fieldPath.end()); ft != fmt; ft++) {
attrName.append(".");
attrName.append((*ft)->getName());
}
@@ -855,7 +864,7 @@ private:
bool
SearchVisitor::compatibleDocumentTypes(const document::DocumentType& typeA,
- const document::DocumentType& typeB) const
+ const document::DocumentType& typeB)
{
if (&typeA == &typeB) {
return true;
diff --git a/streamingvisitors/src/vespa/searchvisitor/searchvisitor.h b/streamingvisitors/src/vespa/searchvisitor/searchvisitor.h
index 2b88286d381..98aa6b89c9c 100644
--- a/streamingvisitors/src/vespa/searchvisitor/searchvisitor.h
+++ b/streamingvisitors/src/vespa/searchvisitor/searchvisitor.h
@@ -18,13 +18,13 @@
#include <vespa/vsm/vsm/vsm-adapter.h>
#include <vespa/vespalib/objects/objectoperation.h>
#include <vespa/vespalib/objects/objectpredicate.h>
+#include <vespa/vespalib/data/smart_buffer.h>
#include <vespa/searchlib/query/streaming/query.h>
#include <vespa/searchlib/aggregation/aggregation.h>
#include <vespa/searchlib/attribute/attributemanager.h>
#include <vespa/searchlib/attribute/attributevector.h>
#include <vespa/searchlib/attribute/extendableattributes.h>
#include <vespa/searchlib/common/sortspec.h>
-#include <vespa/searchlib/util/rawbuf.h>
#include <vespa/storage/visiting/visitor.h>
#include <vespa/document/fieldvalue/fieldvalues.h>
#include <vespa/documentapi/messagebus/messages/queryresultmessage.h>
@@ -45,7 +45,7 @@ public:
SearchVisitor(storage::StorageComponent&, storage::VisitorEnvironment& vEnv,
const vdslib::Parameters & params);
- ~SearchVisitor();
+ ~SearchVisitor() override;
private:
/**
* This struct wraps an attribute vector.
@@ -102,7 +102,7 @@ private:
class PositionInserter : public AttributeInserter {
public:
PositionInserter(search::AttributeVector & attribute, search::AttributeVector::DocId docId);
- ~PositionInserter();
+ ~PositionInserter() override;
private:
void onPrimitive(uint32_t fid, const Content & c) override;
void onStructStart(const Content & fv) override;
@@ -129,9 +129,9 @@ private:
/**
* Process attribute hints and add needed attributes to the given list.
**/
- void processHintedAttributes(const IndexEnvironment & indexEnv, bool rank,
- const search::IAttributeManager & attrMan,
- std::vector<AttrInfo> & attributeFields);
+ static void processHintedAttributes(const IndexEnvironment & indexEnv, bool rank,
+ const search::IAttributeManager & attrMan,
+ std::vector<AttrInfo> & attributeFields);
public:
RankController();
@@ -245,8 +245,8 @@ private:
* @param docsumSpec config with the field names used by the docsum setup.
* @param fieldList list of field names that are built.
**/
- void registerAdditionalFields(const std::vector<vsm::DocsumTools::FieldSpec> & docsumSpec,
- std::vector<vespalib::string> & fieldList);
+ static void registerAdditionalFields(const std::vector<vsm::DocsumTools::FieldSpec> & docsumSpec,
+ std::vector<vespalib::string> & fieldList);
/**
* Setup the field searchers used when matching the query with the stream of documents.
@@ -302,8 +302,8 @@ private:
DocEntryList& entries,
HitCounter& hitCounter) override;
- bool compatibleDocumentTypes(const document::DocumentType& typeA,
- const document::DocumentType& typeB) const;
+ static bool compatibleDocumentTypes(const document::DocumentType& typeA,
+ const document::DocumentType& typeB);
/**
* Process one document
@@ -370,7 +370,7 @@ private:
class GroupingEntry : std::shared_ptr<Grouping> {
public:
- GroupingEntry(Grouping * grouping);
+ explicit GroupingEntry(Grouping * grouping);
~GroupingEntry();
void aggregate(const document::Document & doc, search::HitRank rank);
const Grouping & operator * () const { return *_grouping; }
@@ -388,32 +388,32 @@ private:
{
public:
SummaryGenerator();
- ~SummaryGenerator();
+ ~SummaryGenerator() override;
GetDocsumsState & getDocsumState() { return _docsumState; }
vsm::GetDocsumsStateCallback & getDocsumCallback() { return _callback; }
void setFilter(std::unique_ptr<vsm::DocsumFilter> filter) { _docsumFilter = std::move(filter); }
void setDocsumCache(const vsm::IDocSumCache & cache) { _docsumFilter->setDocSumStore(cache); }
void setDocsumWriter(IDocsumWriter & docsumWriter) { _docsumWriter = & docsumWriter; }
- virtual vespalib::ConstBufferRef fillSummary(search::AttributeVector::DocId lid, const HitsAggregationResult::SummaryClassType & summaryClass) override;
+ vespalib::ConstBufferRef fillSummary(search::AttributeVector::DocId lid, const HitsAggregationResult::SummaryClassType & summaryClass) override;
private:
vsm::GetDocsumsStateCallback _callback;
GetDocsumsState _docsumState;
std::unique_ptr<vsm::DocsumFilter> _docsumFilter;
search::docsummary::IDocsumWriter * _docsumWriter;
- search::RawBuf _rawBuf;
+ vespalib::SmartBuffer _buf;
};
class HitsResultPreparator : public vespalib::ObjectOperation, public vespalib::ObjectPredicate
{
public:
- HitsResultPreparator(SummaryGenerator & summaryGenerator) :
+ explicit HitsResultPreparator(SummaryGenerator & summaryGenerator) :
_summaryGenerator(summaryGenerator),
_numHitsAggregators(0)
{ }
size_t getNumHitsAggregators() const { return _numHitsAggregators; }
private:
- virtual void execute(vespalib::Identifiable &obj) override;
- virtual bool check(const vespalib::Identifiable &obj) const override;
+ void execute(vespalib::Identifiable &obj) override;
+ bool check(const vespalib::Identifiable &obj) const override;
SummaryGenerator & _summaryGenerator;
size_t _numHitsAggregators;
};
@@ -462,7 +462,7 @@ class SearchVisitorFactory : public storage::VisitorFactory {
storage::Visitor* makeVisitor(storage::StorageComponent&, storage::VisitorEnvironment&env,
const vdslib::Parameters& params) override;
public:
- SearchVisitorFactory(const config::ConfigUri & configUri);
+ explicit SearchVisitorFactory(const config::ConfigUri & configUri);
};
}