diff options
author | Tor Egge <Tor.Egge@verizonmedia.com> | 2019-02-21 14:42:28 +0100 |
---|---|---|
committer | Tor Egge <Tor.Egge@verizonmedia.com> | 2019-02-21 14:54:42 +0100 |
commit | 40c409e8d81b120bd180b9717328cc203327c7b5 (patch) | |
tree | 783dc3658d26464259ac30309f9722f93fcb72a2 /searchcore | |
parent | 81552c6b6014118007449547c21a0aa779c37739 (diff) |
If removal of attribute aspect is delayed but summary aspect has been removed
then the old summary map override should not be added to the new summary map.
Diffstat (limited to 'searchcore')
6 files changed, 109 insertions, 26 deletions
diff --git a/searchcore/src/tests/proton/attribute/attribute_aspect_delayer/attribute_aspect_delayer_test.cpp b/searchcore/src/tests/proton/attribute/attribute_aspect_delayer/attribute_aspect_delayer_test.cpp index 24c38ad118b..a02a69aea5b 100644 --- a/searchcore/src/tests/proton/attribute/attribute_aspect_delayer/attribute_aspect_delayer_test.cpp +++ b/searchcore/src/tests/proton/attribute/attribute_aspect_delayer/attribute_aspect_delayer_test.cpp @@ -9,6 +9,7 @@ #include <vespa/vespalib/test/insertion_operators.h> #include <vespa/config-indexschema.h> #include <vespa/config-attributes.h> +#include <vespa/config-summary.h> #include <vespa/config-summarymap.h> #include <vespa/log/log.h> @@ -18,6 +19,8 @@ using vespa::config::search::AttributesConfig; using vespa::config::search::AttributesConfigBuilder; using vespa::config::search::IndexschemaConfig; using vespa::config::search::IndexschemaConfigBuilder; +using vespa::config::search::SummaryConfig; +using vespa::config::search::SummaryConfigBuilder; using vespa::config::search::SummarymapConfig; using vespa::config::search::SummarymapConfigBuilder; using search::attribute::Config; @@ -125,6 +128,24 @@ SummarymapConfig::Override make_attribute_combiner_override(const vespalib::stri return override; } +SummaryConfig::Classes::Fields make_summary_field(const vespalib::string name, const vespalib::string &type) +{ + SummaryConfig::Classes::Fields field; + field.name = name; + field.type = type; + return field; +} + +SummaryConfig sCfg(std::vector<SummaryConfig::Classes::Fields> fields) +{ + SummaryConfigBuilder result; + result.classes.resize(1); + result.classes.back().id = 0; + result.classes.back().name = "default"; + result.classes.back().fields = std::move(fields); + return result; +} + SummarymapConfig smCfg(std::vector<SummarymapConfig::Override> overrides) { SummarymapConfigBuilder result; @@ -175,10 +196,10 @@ public: _oldIndexSchema.indexfield.emplace_back(field); } void setup(const AttributesConfig &oldAttributesConfig, const SummarymapConfig &oldSummarymapConfig, - const AttributesConfig &newAttributesConfig, const SummarymapConfig &newSummarymapConfig) { + const AttributesConfig &newAttributesConfig, const SummaryConfig &newSummaryConfig, const SummarymapConfig &newSummarymapConfig) { IndexschemaInspector indexschemaInspector(_oldIndexSchema); _delayer.setup(oldAttributesConfig, oldSummarymapConfig, - newAttributesConfig, newSummarymapConfig, + newAttributesConfig, newSummaryConfig, newSummarymapConfig, indexschemaInspector, _inspector); } void assertAttributeConfig(const std::vector<AttributesConfig::Attribute> &exp) @@ -195,14 +216,14 @@ public: TEST_F("require that empty config is OK", Fixture) { - f.setup(attrCfg({}), smCfg({}), attrCfg({}), smCfg({})); + f.setup(attrCfg({}), smCfg({}), attrCfg({}), sCfg({}), smCfg({})); TEST_DO(f.assertAttributeConfig({})); TEST_DO(f.assertSummarymapConfig({})); } TEST_F("require that simple attribute config is OK", Fixture) { - f.setup(attrCfg({make_int32_sv_cfg()}), smCfg({make_attribute_override("a")}), attrCfg({make_int32_sv_cfg()}), smCfg({make_attribute_override("a")})); + f.setup(attrCfg({make_int32_sv_cfg()}), smCfg({make_attribute_override("a")}), attrCfg({make_int32_sv_cfg()}), sCfg({make_summary_field("a", "integer")}), smCfg({make_attribute_override("a")})); TEST_DO(f.assertAttributeConfig({make_int32_sv_cfg()})); TEST_DO(f.assertSummarymapConfig({make_attribute_override("a")})); } @@ -210,7 +231,7 @@ TEST_F("require that simple attribute config is OK", Fixture) TEST_F("require that adding attribute aspect is delayed if field type is unchanged", Fixture) { f.addFields({"a"}); - f.setup(attrCfg({}), smCfg({}), attrCfg({make_int32_sv_cfg()}), smCfg({make_attribute_override("a")})); + f.setup(attrCfg({}), smCfg({}), attrCfg({make_int32_sv_cfg()}), sCfg({make_summary_field("a", "integer")}), smCfg({make_attribute_override("a")})); TEST_DO(f.assertAttributeConfig({})); TEST_DO(f.assertSummarymapConfig({})); } @@ -218,14 +239,14 @@ TEST_F("require that adding attribute aspect is delayed if field type is unchang TEST_F("require that adding attribute aspect is delayed if field type is unchanged, geopos override", Fixture) { f.addFields({"a"}); - f.setup(attrCfg({}), smCfg({}), attrCfg({make_int32_sv_cfg()}), smCfg({make_geopos_override("a")})); + f.setup(attrCfg({}), smCfg({}), attrCfg({make_int32_sv_cfg()}), sCfg({make_summary_field("a", "integer")}), smCfg({make_geopos_override("a")})); TEST_DO(f.assertAttributeConfig({})); TEST_DO(f.assertSummarymapConfig({make_geopos_override("a")})); } TEST_F("require that adding attribute is not delayed if field type changed", Fixture) { - f.setup(attrCfg({}), smCfg({}), attrCfg({make_int32_sv_cfg()}), smCfg({make_attribute_override("a")})); + f.setup(attrCfg({}), smCfg({}), attrCfg({make_int32_sv_cfg()}), sCfg({make_summary_field("a", "integer")}), smCfg({make_attribute_override("a")})); TEST_DO(f.assertAttributeConfig({make_int32_sv_cfg()})); TEST_DO(f.assertSummarymapConfig({make_attribute_override("a")})); } @@ -233,22 +254,30 @@ TEST_F("require that adding attribute is not delayed if field type changed", Fix TEST_F("require that removing attribute aspect is delayed if field type is unchanged", Fixture) { f.addFields({"a"}); - f.setup(attrCfg({make_int32_sv_cfg()}), smCfg({make_attribute_override("a")}), attrCfg({}), smCfg({})); + f.setup(attrCfg({make_int32_sv_cfg()}), smCfg({make_attribute_override("a")}), attrCfg({}), sCfg({make_summary_field("a", "integer")}), smCfg({})); TEST_DO(f.assertAttributeConfig({make_int32_sv_cfg()})); TEST_DO(f.assertSummarymapConfig({make_attribute_override("a")})); } +TEST_F("require that summary map override is removed when summary aspect is removed, even if removing attribute aspect is delayed", Fixture) +{ + f.addFields({"a"}); + f.setup(attrCfg({make_int32_sv_cfg()}), smCfg({make_attribute_override("a")}), attrCfg({}), sCfg({}), smCfg({})); + TEST_DO(f.assertAttributeConfig({make_int32_sv_cfg()})); + TEST_DO(f.assertSummarymapConfig({})); +} + TEST_F("require that removing attribute aspect is delayed if field type is unchanged, gepos override", Fixture) { f.addFields({"a"}); - f.setup(attrCfg({make_int32_sv_cfg()}), smCfg({make_geopos_override("a")}), attrCfg({}), smCfg({})); + f.setup(attrCfg({make_int32_sv_cfg()}), smCfg({make_geopos_override("a")}), attrCfg({}), sCfg({}), smCfg({})); TEST_DO(f.assertAttributeConfig({make_int32_sv_cfg()})); TEST_DO(f.assertSummarymapConfig({})); } TEST_F("require that removing attribute aspect is not delayed if field type changed", Fixture) { - f.setup(attrCfg({make_int32_sv_cfg()}), smCfg({make_attribute_override("a")}), attrCfg({}), smCfg({})); + f.setup(attrCfg({make_int32_sv_cfg()}), smCfg({make_attribute_override("a")}), attrCfg({}), sCfg({make_summary_field("a", "integer")}), smCfg({})); TEST_DO(f.assertAttributeConfig({})); TEST_DO(f.assertSummarymapConfig({})); } @@ -257,7 +286,7 @@ TEST_F("require that removing attribute aspect is not delayed if also indexed", { f.addFields({"a"}); f.addOldIndexField("a"); - f.setup(attrCfg({make_string_sv_cfg()}), smCfg({make_attribute_override("a")}), attrCfg({}), smCfg({})); + f.setup(attrCfg({make_string_sv_cfg()}), smCfg({make_attribute_override("a")}), attrCfg({}), sCfg({make_summary_field("a", "string")}), smCfg({})); TEST_DO(f.assertAttributeConfig({})); TEST_DO(f.assertSummarymapConfig({})); } @@ -265,7 +294,7 @@ TEST_F("require that removing attribute aspect is not delayed if also indexed", TEST_F("require that removing attribute aspect is not delayed for tensor", Fixture) { f.addFields({"a"}); - f.setup(attrCfg({make_tensor_cfg("tensor(x[10])")}), smCfg({make_attribute_override("a")}), attrCfg({}), smCfg({})); + f.setup(attrCfg({make_tensor_cfg("tensor(x[10])")}), smCfg({make_attribute_override("a")}), attrCfg({}), sCfg({make_summary_field("a", "tensor")}), smCfg({})); TEST_DO(f.assertAttributeConfig({})); TEST_DO(f.assertSummarymapConfig({})); } @@ -273,7 +302,7 @@ TEST_F("require that removing attribute aspect is not delayed for tensor", Fixtu TEST_F("require that removing attribute aspect is not delayed for predicate", Fixture) { f.addFields({"a"}); - f.setup(attrCfg({make_predicate_cfg(4)}), smCfg({}), attrCfg({}), smCfg({})); + f.setup(attrCfg({make_predicate_cfg(4)}), smCfg({}), attrCfg({}), sCfg({make_summary_field("a", "string")}), smCfg({})); TEST_DO(f.assertAttributeConfig({})); TEST_DO(f.assertSummarymapConfig({})); } @@ -281,7 +310,7 @@ TEST_F("require that removing attribute aspect is not delayed for predicate", Fi TEST_F("require that removing attribute aspect is not delayed for reference", Fixture) { f.addFields({"a"}); - f.setup(attrCfg({make_reference_cfg()}), smCfg({}), attrCfg({}), smCfg({})); + f.setup(attrCfg({make_reference_cfg()}), smCfg({}), attrCfg({}), sCfg({make_summary_field("a", "longstring")}), smCfg({})); TEST_DO(f.assertAttributeConfig({})); TEST_DO(f.assertSummarymapConfig({})); } @@ -289,7 +318,7 @@ TEST_F("require that removing attribute aspect is not delayed for reference", Fi TEST_F("require that fast access flag change is delayed, false->true edge", Fixture) { f.addFields({"a"}); - f.setup(attrCfg({make_int32_sv_cfg()}), smCfg({make_attribute_override("a")}), attrCfg({make_fa(make_int32_sv_cfg())}), smCfg({make_attribute_override("a")})); + f.setup(attrCfg({make_int32_sv_cfg()}), smCfg({make_attribute_override("a")}), attrCfg({make_fa(make_int32_sv_cfg())}), sCfg({make_summary_field("a", "integer")}), smCfg({make_attribute_override("a")})); TEST_DO(f.assertAttributeConfig({make_int32_sv_cfg()})); TEST_DO(f.assertSummarymapConfig({make_attribute_override("a")})); } @@ -297,7 +326,7 @@ TEST_F("require that fast access flag change is delayed, false->true edge", Fixt TEST_F("require that fast access flag change is delayed, true->false edge", Fixture) { f.addFields({"a"}); - f.setup(attrCfg({make_fa(make_int32_sv_cfg())}), smCfg({make_attribute_override("a")}), attrCfg({make_int32_sv_cfg()}), smCfg({make_attribute_override("a")})); + f.setup(attrCfg({make_fa(make_int32_sv_cfg())}), smCfg({make_attribute_override("a")}), attrCfg({make_int32_sv_cfg()}), sCfg({make_summary_field("a", "integer")}), smCfg({make_attribute_override("a")})); TEST_DO(f.assertAttributeConfig({make_fa(make_int32_sv_cfg())})); TEST_DO(f.assertSummarymapConfig({make_attribute_override("a")})); } @@ -305,7 +334,7 @@ TEST_F("require that fast access flag change is delayed, true->false edge", Fixt TEST_F("require that fast access flag change is delayed, false->true edge, tensor attr", Fixture) { f.addFields({"a"}); - f.setup(attrCfg({make_tensor_cfg("tensor(x[10])")}), smCfg({make_attribute_override("a")}), attrCfg({make_fa(make_tensor_cfg("tensor(x[10])"))}), smCfg({make_attribute_override("a")})); + f.setup(attrCfg({make_tensor_cfg("tensor(x[10])")}), smCfg({make_attribute_override("a")}), attrCfg({make_fa(make_tensor_cfg("tensor(x[10])"))}), sCfg({make_summary_field("a", "tensor")}), smCfg({make_attribute_override("a")})); TEST_DO(f.assertAttributeConfig({make_tensor_cfg("tensor(x[10])")})); TEST_DO(f.assertSummarymapConfig({make_attribute_override("a")})); } @@ -313,7 +342,7 @@ TEST_F("require that fast access flag change is delayed, false->true edge, tenso TEST_F("require that fast access flag change is not delayed, true->false edge, tensor attr", Fixture) { f.addFields({"a"}); - f.setup(attrCfg({make_fa(make_tensor_cfg("tensor(x[10])"))}), smCfg({make_attribute_override("a")}), attrCfg({make_tensor_cfg("tensor(x[10])")}), smCfg({make_attribute_override("a")})); + f.setup(attrCfg({make_fa(make_tensor_cfg("tensor(x[10])"))}), smCfg({make_attribute_override("a")}), attrCfg({make_tensor_cfg("tensor(x[10])")}), sCfg({make_summary_field("a", "tensor")}), smCfg({make_attribute_override("a")})); TEST_DO(f.assertAttributeConfig({make_tensor_cfg("tensor(x[10])")})); TEST_DO(f.assertSummarymapConfig({make_attribute_override("a")})); } @@ -322,14 +351,14 @@ TEST_F("require that fast access flag change is not delayed, true->false edge, s { f.addFields({"a"}); f.addOldIndexField("a"); - f.setup(attrCfg({make_fa(make_string_sv_cfg())}), smCfg({make_attribute_override("a")}), attrCfg({make_string_sv_cfg()}), smCfg({make_attribute_override("a")})); + f.setup(attrCfg({make_fa(make_string_sv_cfg())}), smCfg({make_attribute_override("a")}), attrCfg({make_string_sv_cfg()}), sCfg({make_summary_field("a", "tensor")}), smCfg({make_attribute_override("a")})); TEST_DO(f.assertAttributeConfig({make_string_sv_cfg()})); TEST_DO(f.assertSummarymapConfig({make_attribute_override("a")})); } TEST_F("require that adding attribute aspect to struct field is not delayed if field type is changed", Fixture) { - f.setup(attrCfg({}), smCfg({}), attrCfg({make_int32_sv_cfg("array.a")}), smCfg({make_attribute_combiner_override("array")})); + f.setup(attrCfg({}), smCfg({}), attrCfg({make_int32_sv_cfg("array.a")}), sCfg({make_summary_field("array", "jsonstring")}), smCfg({make_attribute_combiner_override("array")})); TEST_DO(f.assertAttributeConfig({make_int32_sv_cfg("array.a")})); TEST_DO(f.assertSummarymapConfig({make_attribute_combiner_override("array")})); } @@ -337,7 +366,7 @@ TEST_F("require that adding attribute aspect to struct field is not delayed if f TEST_F("require that adding attribute aspect to struct field is delayed if field type is unchanged", Fixture) { f.addFields({"array.a"}); - f.setup(attrCfg({}), smCfg({}), attrCfg({make_int32_sv_cfg("array.a")}), smCfg({make_attribute_combiner_override("array")})); + f.setup(attrCfg({}), smCfg({}), attrCfg({make_int32_sv_cfg("array.a")}), sCfg({make_summary_field("array", "jsonstring")}), smCfg({make_attribute_combiner_override("array")})); TEST_DO(f.assertAttributeConfig({})); TEST_DO(f.assertSummarymapConfig({})); } @@ -345,7 +374,7 @@ TEST_F("require that adding attribute aspect to struct field is delayed if field TEST_F("require that removing attribute aspect from struct field is not delayed", Fixture) { f.addFields({"array.a"}); - f.setup(attrCfg({make_int32_sv_cfg("array.a")}), smCfg({make_attribute_combiner_override("array")}), attrCfg({}), smCfg({})); + f.setup(attrCfg({make_int32_sv_cfg("array.a")}), smCfg({make_attribute_combiner_override("array")}), attrCfg({}), sCfg({make_summary_field("array", "jsonstring")}), smCfg({})); TEST_DO(f.assertAttributeConfig({})); TEST_DO(f.assertSummarymapConfig({})); } diff --git a/searchcore/src/tests/proton/documentdb/documentdbconfig/documentdbconfig_test.cpp b/searchcore/src/tests/proton/documentdb/documentdbconfig/documentdbconfig_test.cpp index df01ae0fc02..a2b824b88ba 100644 --- a/searchcore/src/tests/proton/documentdb/documentdbconfig/documentdbconfig_test.cpp +++ b/searchcore/src/tests/proton/documentdb/documentdbconfig/documentdbconfig_test.cpp @@ -6,6 +6,7 @@ #include <vespa/searchcore/proton/server/documentdbconfig.h> #include <vespa/searchcore/proton/test/documentdb_config_builder.h> #include <vespa/vespalib/testkit/testapp.h> +#include <vespa/config-summary.h> #include <vespa/config-summarymap.h> #include <vespa/document/repo/configbuilder.h> #include <vespa/document/repo/documenttyperepo.h> @@ -86,6 +87,19 @@ public: _builder.attributes(make_shared<AttributesConfig>(builder)); return *this; } + MyConfigBuilder &addSummary(bool hasField) { + SummaryConfigBuilder builder; + builder.classes.resize(1); + builder.classes.back().id = 0; + builder.classes.back().name = "default"; + if (hasField) { + builder.classes.back().fields.resize(1); + builder.classes.back().fields.back().name = "my_attribute"; + builder.classes.back().fields.back().type = "integer"; + } + _builder.summary(make_shared<SummaryConfig>(builder)); + return *this; + } MyConfigBuilder &addSummarymap() { SummarymapConfigBuilder builder; builder.override.resize(1); @@ -114,11 +128,12 @@ struct Fixture { replayCfg(), nullCfg() { - basicCfg = MyConfigBuilder(4, schema, repo).addAttribute().build(); + basicCfg = MyConfigBuilder(4, schema, repo).addAttribute().addSummary(true).build(); fullCfg = MyConfigBuilder(4, schema, repo).addAttribute(). addRankProfile(). addRankingConstant(). addImportedField(). + addSummary(true). addSummarymap(). build(); replayCfg = DocumentDBConfig::makeReplayConfig(fullCfg); @@ -152,11 +167,13 @@ struct DelayAttributeAspectFixture { addRankProfile(). addRankingConstant(). addImportedField(). + addSummary(true). addSummarymap(). build(); noAttrCfg = MyConfigBuilder(4, schema, makeDocTypeRepo(hasDocField)).addRankProfile(). addRankingConstant(). addImportedField(). + addSummary(hasDocField). build(); } diff --git a/searchcore/src/vespa/searchcore/proton/attribute/attribute_aspect_delayer.cpp b/searchcore/src/vespa/searchcore/proton/attribute/attribute_aspect_delayer.cpp index cf803ec0368..b815f3c8f9f 100644 --- a/searchcore/src/vespa/searchcore/proton/attribute/attribute_aspect_delayer.cpp +++ b/searchcore/src/vespa/searchcore/proton/attribute/attribute_aspect_delayer.cpp @@ -7,6 +7,7 @@ #include <vespa/searchcore/proton/common/config_hash.hpp> #include <vespa/vespalib/stllike/hash_set.hpp> #include <vespa/config-attributes.h> +#include <vespa/config-summary.h> #include <vespa/config-summarymap.h> using search::attribute::ConfigConverter; @@ -14,6 +15,7 @@ using vespa::config::search::AttributesConfig; using vespa::config::search::AttributesConfigBuilder; using vespa::config::search::SummarymapConfig; using vespa::config::search::SummarymapConfigBuilder; +using vespa::config::search::SummaryConfig; using search::attribute::BasicType; namespace proton { @@ -40,6 +42,30 @@ bool willTriggerReprocessOnAttributeAspectRemoval(const search::attribute::Confi return fastPartialUpdateAttribute(cfg) && !indexschemaInspector.isStringIndex(name) && !isStructFieldAttribute(name); } +class KnownSummaryFields +{ + vespalib::hash_set<vespalib::string> _fields; + +public: + KnownSummaryFields(const SummaryConfig &summaryConfig); + ~KnownSummaryFields(); + + bool known(const vespalib::string &fieldName) const { + return _fields.find(fieldName) != _fields.end(); + } +}; + +KnownSummaryFields::KnownSummaryFields(const SummaryConfig &summaryConfig) + : _fields() +{ + for (const auto &summaryClass : summaryConfig.classes) { + for (const auto &summaryField : summaryClass.fields) { + _fields.insert(summaryField.name); + } + } +} + +KnownSummaryFields::~KnownSummaryFields() = default; } @@ -135,12 +161,14 @@ void handleOldAttributes(const AttributesConfig &oldAttributesConfig, const AttributesConfig &newAttributesConfig, const SummarymapConfig &oldSummarymapConfig, + const SummaryConfig &newSummaryConfig, const IIndexschemaInspector &oldIndexschemaInspector, const IDocumentTypeInspector &inspector, AttributesConfigBuilder &attributesConfig, SummarymapConfigBuilder &summarymapConfig) { vespalib::hash_set<vespalib::string> delayed; + KnownSummaryFields knownSummaryFields(newSummaryConfig); AttributesConfigHash newAttrs(newAttributesConfig.attribute); for (const auto &oldAttr : oldAttributesConfig.attribute) { search::attribute::Config oldCfg = ConfigConverter::convert(oldAttr); @@ -159,7 +187,7 @@ handleOldAttributes(const AttributesConfig &oldAttributesConfig, for (const auto &override : oldSummarymapConfig.override) { if (override.command == "attribute") { auto itr = delayed.find(override.field); - if (itr != delayed.end()) { + if (itr != delayed.end() && knownSummaryFields.known(override.field)) { summarymapConfig.override.emplace_back(override); } } @@ -172,16 +200,18 @@ void AttributeAspectDelayer::setup(const AttributesConfig &oldAttributesConfig, const SummarymapConfig &oldSummarymapConfig, const AttributesConfig &newAttributesConfig, + const SummaryConfig &newSummaryConfig, const SummarymapConfig &newSummarymapConfig, const IIndexschemaInspector &oldIndexschemaInspector, const IDocumentTypeInspector &inspector) { + (void) newSummaryConfig; handleNewAttributes(oldAttributesConfig, newAttributesConfig, newSummarymapConfig, oldIndexschemaInspector, inspector, *_attributesConfig, *_summarymapConfig); handleOldAttributes(oldAttributesConfig, newAttributesConfig, - oldSummarymapConfig, + oldSummarymapConfig, newSummaryConfig, oldIndexschemaInspector, inspector, *_attributesConfig, *_summarymapConfig); } diff --git a/searchcore/src/vespa/searchcore/proton/attribute/attribute_aspect_delayer.h b/searchcore/src/vespa/searchcore/proton/attribute/attribute_aspect_delayer.h index 3a2d1b5e0b1..abd3829f5dd 100644 --- a/searchcore/src/vespa/searchcore/proton/attribute/attribute_aspect_delayer.h +++ b/searchcore/src/vespa/searchcore/proton/attribute/attribute_aspect_delayer.h @@ -9,6 +9,7 @@ namespace vespa { namespace config { namespace search { namespace internal { class InternalAttributesType; class InternalIndexschemaType; class InternalSummarymapType; +class InternalSummaryType; } } } } namespace proton { @@ -28,6 +29,7 @@ class AttributeAspectDelayer using IndexschemaConfig = const vespa::config::search::internal::InternalIndexschemaType; using SummarymapConfigBuilder = vespa::config::search::internal::InternalSummarymapType; using SummarymapConfig = const vespa::config::search::internal::InternalSummarymapType; + using SummaryConfig = const vespa::config::search::internal::InternalSummaryType; std::shared_ptr<AttributesConfigBuilder> _attributesConfig; std::shared_ptr<SummarymapConfigBuilder> _summarymapConfig; @@ -43,6 +45,7 @@ public: void setup(const AttributesConfig &oldAttributesConfig, const SummarymapConfig &oldSummarymapConfig, const AttributesConfig &newAttributesConfig, + const SummaryConfig &newSummaryConfig, const SummarymapConfig &newSummarymapConfig, const IIndexschemaInspector &oldIndexschemaInspector, const IDocumentTypeInspector &inspector); diff --git a/searchcore/src/vespa/searchcore/proton/server/documentdbconfig.cpp b/searchcore/src/vespa/searchcore/proton/server/documentdbconfig.cpp index fd1f9f1155d..712bc553d08 100644 --- a/searchcore/src/vespa/searchcore/proton/server/documentdbconfig.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/documentdbconfig.cpp @@ -265,7 +265,7 @@ DocumentDBConfig::makeDelayedAttributeAspectConfig(const SP &newCfg, const Docum DocumentTypeInspector inspector(*oldCfg.getDocumentType(), *n.getDocumentType()); IndexschemaInspector oldIndexschemaInspector(oldCfg.getIndexschemaConfig()); attributeAspectDelayer.setup(oldCfg.getAttributesConfig(), oldCfg.getSummarymapConfig(), - n.getAttributesConfig(), n.getSummarymapConfig(), + n.getAttributesConfig(), n.getSummaryConfig(), n.getSummarymapConfig(), oldIndexschemaInspector, inspector); bool delayedAttributeAspects = (n.getAttributesConfig() != *attributeAspectDelayer.getAttributesConfig()) || (n.getSummarymapConfig() != *attributeAspectDelayer.getSummarymapConfig()); diff --git a/searchcore/src/vespa/searchcore/proton/test/documentdb_config_builder.h b/searchcore/src/vespa/searchcore/proton/test/documentdb_config_builder.h index 2de71dc3e1b..4a515cf3b19 100644 --- a/searchcore/src/vespa/searchcore/proton/test/documentdb_config_builder.h +++ b/searchcore/src/vespa/searchcore/proton/test/documentdb_config_builder.h @@ -58,6 +58,10 @@ public: _importedFields = importedFields_in; return *this; } + DocumentDBConfigBuilder &summary(const DocumentDBConfig::SummaryConfigSP &summary_in) { + _summary = summary_in; + return *this; + } DocumentDBConfigBuilder &summarymap(const DocumentDBConfig::SummarymapConfigSP &summarymap_in) { _summarymap = summarymap_in; return *this; |