diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2022-08-30 07:50:17 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2022-08-30 07:50:17 +0000 |
commit | 9045702831d62d1a0a693389bfa397b9ca151d8f (patch) | |
tree | e032a4d5336093ded35fa005cd0675b42fdbd2b6 /streamingvisitors | |
parent | 07148b95b3c92c70aeb417a8944770b9307e8036 (diff) |
Use vespalib::SmartBuffer instead of ancient RawBuf.
Diffstat (limited to 'streamingvisitors')
-rw-r--r-- | streamingvisitors/src/vespa/searchvisitor/searchvisitor.cpp | 37 | ||||
-rw-r--r-- | streamingvisitors/src/vespa/searchvisitor/searchvisitor.h | 36 |
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); }; } |