summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@verizonmedia.com>2019-02-21 14:42:28 +0100
committerTor Egge <Tor.Egge@verizonmedia.com>2019-02-21 14:54:42 +0100
commit40c409e8d81b120bd180b9717328cc203327c7b5 (patch)
tree783dc3658d26464259ac30309f9722f93fcb72a2
parent81552c6b6014118007449547c21a0aa779c37739 (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.
-rw-r--r--searchcore/src/tests/proton/attribute/attribute_aspect_delayer/attribute_aspect_delayer_test.cpp73
-rw-r--r--searchcore/src/tests/proton/documentdb/documentdbconfig/documentdbconfig_test.cpp19
-rw-r--r--searchcore/src/vespa/searchcore/proton/attribute/attribute_aspect_delayer.cpp34
-rw-r--r--searchcore/src/vespa/searchcore/proton/attribute/attribute_aspect_delayer.h3
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/documentdbconfig.cpp2
-rw-r--r--searchcore/src/vespa/searchcore/proton/test/documentdb_config_builder.h4
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;