diff options
15 files changed, 114 insertions, 28 deletions
diff --git a/client/go/go.mod b/client/go/go.mod index 0df2d465cd7..8d46118dea6 100644 --- a/client/go/go.mod +++ b/client/go/go.mod @@ -8,7 +8,7 @@ require ( github.com/fatih/color v1.16.0 // This is the most recent version compatible with Go 1.20. Upgrade when we upgrade our Go version github.com/go-json-experiment/json v0.0.0-20230324203220-04923b7a9528 - github.com/klauspost/compress v1.17.3 + github.com/klauspost/compress v1.17.4 github.com/mattn/go-colorable v0.1.13 github.com/mattn/go-isatty v0.0.20 github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 diff --git a/client/go/go.sum b/client/go/go.sum index 1cc09fb4e9a..c4dd9837194 100644 --- a/client/go/go.sum +++ b/client/go/go.sum @@ -18,6 +18,8 @@ github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2 github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/klauspost/compress v1.17.3 h1:qkRjuerhUU1EmXLYGkSH6EZL+vPSxIrYjLNAK4slzwA= github.com/klauspost/compress v1.17.3/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= +github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= +github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= diff --git a/client/js/app/yarn.lock b/client/js/app/yarn.lock index 984bdbd2f48..b7a77e10561 100644 --- a/client/js/app/yarn.lock +++ b/client/js/app/yarn.lock @@ -777,31 +777,31 @@ resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.1.4.tgz#19654d1026cc410975d46445180e70a5089b3e7d" integrity sha512-qprfWkn82Iw821mcKofJ5Pk9wgioHicxcQMxx+5zt5GSKoqdWvgG5AxVmpmUUjzTLPVSH5auBrhI93Deayn/DA== -"@fortawesome/fontawesome-common-types@6.5.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.5.0.tgz#5d3912d28a2fb3e6c867320eb27a71f23e7bcb29" - integrity sha512-vYC8oN2l8meu05sRi1j3Iie/HNFAeIxpitYFhsUrBc11TxiMken9QdXnSQ0q16FYsOSt/6soxs5ghdk+VYGiog== +"@fortawesome/fontawesome-common-types@6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.5.1.tgz#fdb1ec4952b689f5f7aa0bffe46180bb35490032" + integrity sha512-GkWzv+L6d2bI5f/Vk6ikJ9xtl7dfXtoRu3YGE6nq0p/FFqA1ebMOAWg3XgRyb0I6LYyYkiAo+3/KrwuBp8xG7A== "@fortawesome/fontawesome-svg-core@^6": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.5.0.tgz#4957e163bb890963442c110c5290703af21803d9" - integrity sha512-5DrR+oxQr+ruRQ3CEVV8DSCT/q8Atm56+FzAs0P6eW/epW47OmecSpSwc/YTlJ3u5BfPKUBSGyPR2qjZ+5eIgA== + version "6.5.1" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.5.1.tgz#9d56d46bddad78a7ebb2043a97957039fcebcf0a" + integrity sha512-MfRCYlQPXoLlpem+egxjfkEuP9UQswTrlCOsknus/NcMoblTH2g0jPrapbcIb04KGA7E2GZxbAccGZfWoYgsrQ== dependencies: - "@fortawesome/fontawesome-common-types" "6.5.0" + "@fortawesome/fontawesome-common-types" "6.5.1" "@fortawesome/free-regular-svg-icons@^6": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-6.5.0.tgz#c2c448695efc0b2a16d126ff8e3cb94e1544778b" - integrity sha512-RaBW/y0jKcCyEPM+NYuBs3bQXuLYZHnXABQPmg6qwuRxNb2EUmyCcVUECUH2dkFmMjggh/xvl6n6y62Pl19JkA== + version "6.5.1" + resolved "https://registry.yarnpkg.com/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-6.5.1.tgz#c98a91d2c9137ed54a7aa2362a916f46503e0627" + integrity sha512-m6ShXn+wvqEU69wSP84coxLbNl7sGVZb+Ca+XZq6k30SzuP3X4TfPqtycgUh9ASwlNh5OfQCd8pDIWxl+O+LlQ== dependencies: - "@fortawesome/fontawesome-common-types" "6.5.0" + "@fortawesome/fontawesome-common-types" "6.5.1" "@fortawesome/free-solid-svg-icons@^6": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.5.0.tgz#bc50a291948fa43b1a9502548ac0b02e7b1f2433" - integrity sha512-6ZPq8mme67Q7O9Fbp2O+Z7mPZbcWTsRv555JLftLaTodiV0Wq+99YgMhyQ8O6mgNQfComqS9OEvqs7M8ySA92g== + version "6.5.1" + resolved "https://registry.yarnpkg.com/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.5.1.tgz#737b8d787debe88b400ab7528f47be333031274a" + integrity sha512-S1PPfU3mIJa59biTtXJz1oI0+KAXW6bkAb31XKhxdxtuXDiUIFsih4JR1v5BbxY7hVHsD1RKq+jRkVRaf773NQ== dependencies: - "@fortawesome/fontawesome-common-types" "6.5.0" + "@fortawesome/fontawesome-common-types" "6.5.1" "@fortawesome/react-fontawesome@^0": version "0.2.0" diff --git a/container-search/abi-spec.json b/container-search/abi-spec.json index f2348c58d4d..80833e3e27c 100644 --- a/container-search/abi-spec.json +++ b/container-search/abi-spec.json @@ -1582,6 +1582,7 @@ "public int getTermCount()", "protected void appendBodyString(java.lang.StringBuilder)", "public void addToken(java.lang.String)", + "public void removeToken(java.lang.String)", "public java.util.Collection getTokens()", "public boolean equals(java.lang.Object)", "public int hashCode()" diff --git a/container-search/src/main/java/com/yahoo/prelude/query/StringInItem.java b/container-search/src/main/java/com/yahoo/prelude/query/StringInItem.java index ebcf0de1a21..4473010082e 100644 --- a/container-search/src/main/java/com/yahoo/prelude/query/StringInItem.java +++ b/container-search/src/main/java/com/yahoo/prelude/query/StringInItem.java @@ -68,6 +68,10 @@ public class StringInItem extends InItem { tokens.add(token); } + public void removeToken(String token) { + tokens.remove(token); + } + public Collection<String> getTokens() { return Set.copyOf(tokens); } @Override diff --git a/container-search/src/main/java/com/yahoo/search/querytransform/LowercasingSearcher.java b/container-search/src/main/java/com/yahoo/search/querytransform/LowercasingSearcher.java index d023c1f9143..1889c755833 100644 --- a/container-search/src/main/java/com/yahoo/search/querytransform/LowercasingSearcher.java +++ b/container-search/src/main/java/com/yahoo/search/querytransform/LowercasingSearcher.java @@ -64,6 +64,8 @@ public abstract class LowercasingSearcher extends Searcher { } } else if (next instanceof WordAlternativesItem) { lowerCase((WordAlternativesItem) next, indexFacts); + } else if (next instanceof StringInItem) { + lowerCase((StringInItem) next, indexFacts); } } } @@ -144,6 +146,23 @@ public abstract class LowercasingSearcher extends Searcher { } + private void lowerCase(StringInItem set, IndexFacts.Session indexFacts) { + if ( ! syntheticLowerCaseCheck(set.getIndexName(), indexFacts, true)) { + return; + } + + // set.getTokens() uses Set.copyOf(), thus modification to original set is not reflected in + // set being iterated over. + var originalTokens = set.getTokens(); + for (String originalToken : originalTokens) { + String token = toLowerCase(originalToken); + if (!originalToken.equals(token)) { + set.removeToken(originalToken); + set.addToken(token); + } + } + } + /** * Override this to control whether a given term should be lowercased. * diff --git a/container-search/src/test/java/com/yahoo/search/querytransform/LowercasingTestCase.java b/container-search/src/test/java/com/yahoo/search/querytransform/LowercasingTestCase.java index c02739e857b..bacc5483a16 100644 --- a/container-search/src/test/java/com/yahoo/search/querytransform/LowercasingTestCase.java +++ b/container-search/src/test/java/com/yahoo/search/querytransform/LowercasingTestCase.java @@ -11,6 +11,7 @@ import com.yahoo.prelude.IndexModel; import static org.junit.jupiter.api.Assertions.assertEquals; import com.yahoo.prelude.SearchDefinition; import com.yahoo.prelude.query.SameElementItem; +import com.yahoo.prelude.query.StringInItem; import org.junit.jupiter.api.Test; import com.yahoo.component.chain.Chain; import com.yahoo.prelude.Index; @@ -232,4 +233,26 @@ public class LowercasingTestCase { assertEquals("def", w1.getWord()); } + @Test + void testIn() { + Query q = new Query(); + AndItem root = new AndItem(); + StringInItem tmp; + tmp = new StringInItem(BAMSE); + tmp.addToken("AbC"); + root.addItem(tmp); + tmp = new StringInItem(TEDDY); + tmp.addToken("dEf"); + root.addItem(tmp); + q.getModel().getQueryTree().setRoot(root); + Result r = createExecution().search(q); + root = (AndItem) r.getQuery().getModel().getQueryTree().getRoot(); + StringInItem w0 = (StringInItem) root.getItem(0); + StringInItem w1 = (StringInItem) root.getItem(1); + assertEquals(1, w0.getTokens().size()); + assertEquals(1, w1.getTokens().size()); + assertEquals("abc", w0.getTokens().iterator().next()); + assertEquals("dEf", w1.getTokens().iterator().next()); + } + } diff --git a/dependency-versions/pom.xml b/dependency-versions/pom.xml index 05daa54f32b..62afa4b17f7 100644 --- a/dependency-versions/pom.xml +++ b/dependency-versions/pom.xml @@ -59,7 +59,7 @@ <antlr4.vespa.version>4.13.1</antlr4.vespa.version> <apache.httpclient.vespa.version>4.5.14</apache.httpclient.vespa.version> <apache.httpcore.vespa.version>4.4.16</apache.httpcore.vespa.version> - <apache.httpclient5.vespa.version>5.2.1</apache.httpclient5.vespa.version> + <apache.httpclient5.vespa.version>5.2.3</apache.httpclient5.vespa.version> <apache.httpcore5.vespa.version>5.2.4</apache.httpcore5.vespa.version> <apiguardian.vespa.version>1.1.2</apiguardian.vespa.version> <asm.vespa.version>9.6</asm.vespa.version> diff --git a/flags/src/main/java/com/yahoo/vespa/flags/Flags.java b/flags/src/main/java/com/yahoo/vespa/flags/Flags.java index 7715eb0fb8d..95dc1cac9f2 100644 --- a/flags/src/main/java/com/yahoo/vespa/flags/Flags.java +++ b/flags/src/main/java/com/yahoo/vespa/flags/Flags.java @@ -243,7 +243,7 @@ public class Flags { public static final UnboundBooleanFlag ENABLED_HORIZON_DASHBOARD = defineFeatureFlag( "enabled-horizon-dashboard", false, - List.of("olaa"), "2021-09-13", "2023-12-01", + List.of("olaa"), "2021-09-13", "2024-01-01", "Enable Horizon dashboard", "Takes effect immediately", TENANT_ID, CONSOLE_USER_EMAIL @@ -279,7 +279,7 @@ public class Flags { public static final UnboundBooleanFlag SEPARATE_METRIC_CHECK_CONFIG = defineFeatureFlag( "separate-metric-check-config", false, - List.of("olaa"), "2022-07-04", "2023-12-01", + List.of("olaa"), "2022-07-04", "2024-01-01", "Determines whether one metrics config check should be written per Vespa node", "Takes effect on next tick", HOSTNAME); @@ -294,7 +294,7 @@ public class Flags { public static final UnboundBooleanFlag ENABLE_OTELCOL = defineFeatureFlag( "enable-otel-collector", false, - List.of("olaa"), "2022-09-23", "2023-12-01", + List.of("olaa"), "2022-09-23", "2024-01-01", "Whether an OpenTelemetry collector should be enabled", "Takes effect at next tick", INSTANCE_ID); @@ -425,6 +425,13 @@ public class Flags { "Takes effect immediately", TENANT_ID, CONSOLE_USER_EMAIL); + public static final UnboundBooleanFlag CENTRALIZED_AUTHZ = defineFeatureFlag( + "centralized-authz", false, + List.of("mortent"), "2023-11-27", "2024-02-01", + "Use centralized authorization checks", + "Takes effect immediately", + CONSOLE_USER_EMAIL); + /** WARNING: public for testing: All flags should be defined in {@link Flags}. */ public static UnboundBooleanFlag defineFeatureFlag(String flagId, boolean defaultValue, List<String> owners, String createdAt, String expiresAt, String description, diff --git a/integration/intellij/build.gradle.kts b/integration/intellij/build.gradle.kts index b437a1f5b28..502c09c58f8 100644 --- a/integration/intellij/build.gradle.kts +++ b/integration/intellij/build.gradle.kts @@ -4,7 +4,7 @@ import org.jetbrains.grammarkit.tasks.GenerateParserTask plugins { id("java-library") - id("org.jetbrains.intellij") version "1.16.0" + id("org.jetbrains.intellij") version "1.16.1" id("org.jetbrains.grammarkit") version "2022.3.2" id("maven-publish") // to deploy the plugin into a Maven repo } diff --git a/jdisc-security-filters/src/main/java/com/yahoo/jdisc/http/filter/security/misc/User.java b/jdisc-security-filters/src/main/java/com/yahoo/jdisc/http/filter/security/misc/User.java index f9ea6da3099..b573cf0c04a 100644 --- a/jdisc-security-filters/src/main/java/com/yahoo/jdisc/http/filter/security/misc/User.java +++ b/jdisc-security-filters/src/main/java/com/yahoo/jdisc/http/filter/security/misc/User.java @@ -80,4 +80,17 @@ public class User { public int hashCode() { return Objects.hash(name, email, nickname, picture, lastLogin, loginCount, isVerified); } + + @Override + public String toString() { + return "User{" + + "email='" + email + '\'' + + ", name='" + name + '\'' + + ", nickname='" + nickname + '\'' + + ", picture='" + picture + '\'' + + ", isVerified=" + isVerified + + ", loginCount=" + loginCount + + ", lastLogin=" + lastLogin + + '}'; + } } diff --git a/searchlib/src/tests/ranksetup/verify_feature/verify_feature_test.cpp b/searchlib/src/tests/ranksetup/verify_feature/verify_feature_test.cpp index feee5128493..4fdcc7f1d8a 100644 --- a/searchlib/src/tests/ranksetup/verify_feature/verify_feature_test.cpp +++ b/searchlib/src/tests/ranksetup/verify_feature/verify_feature_test.cpp @@ -28,6 +28,7 @@ std::ostream &operator<<(std::ostream &os, Level level) { } bool equal(const vespalib::string & a, const vespalib::string &b) { + EXPECT_EQUAL(a, b); return a == b; } @@ -53,6 +54,10 @@ struct RankFixture { EXPECT_EQUAL(errors[i].first, expected[i].second.first); EXPECT_TRUE(expected[i].first(errors[i].second, expected[i].second.second)); } + for (size_t i(expected.size()); i < errors.size(); i++) { + EXPECT_EQUAL(errors[i].first, Level::INFO); + EXPECT_EQUAL(errors[i].second, ""); + } return ok; } }; diff --git a/searchlib/src/vespa/searchlib/attribute/postinglistsearchcontext.hpp b/searchlib/src/vespa/searchlib/attribute/postinglistsearchcontext.hpp index 4436ea203ce..3ff5c749899 100644 --- a/searchlib/src/vespa/searchlib/attribute/postinglistsearchcontext.hpp +++ b/searchlib/src/vespa/searchlib/attribute/postinglistsearchcontext.hpp @@ -73,8 +73,7 @@ void PostingListSearchContextT<DataT>::fillBitVector() { for (auto it(_lowerDictItr); it != _upperDictItr; ++it) { - _merger.addToBitVector(PostingListTraverser<PostingStore>(_posting_store, - it.getData().load_acquire())); + _merger.addToBitVector(PostingListTraverser<PostingStore>(_posting_store, it.getData().load_acquire())); } } diff --git a/searchlib/src/vespa/searchlib/queryeval/create_blueprint_visitor_helper.cpp b/searchlib/src/vespa/searchlib/queryeval/create_blueprint_visitor_helper.cpp index 7e4ec966dda..27ff0d235a3 100644 --- a/searchlib/src/vespa/searchlib/queryeval/create_blueprint_visitor_helper.cpp +++ b/searchlib/src/vespa/searchlib/queryeval/create_blueprint_visitor_helper.cpp @@ -87,21 +87,33 @@ CreateBlueprintVisitorHelper::createWeightedSet(std::unique_ptr<WS> bp, NODE &n) bp->complete(estimate); setResult(std::move(bp)); } + void -CreateBlueprintVisitorHelper::visitWeightedSetTerm(query::WeightedSetTerm &n) { +CreateBlueprintVisitorHelper::visitWeightedSetTerm(query::WeightedSetTerm &n) +{ createWeightedSet(std::make_unique<WeightedSetTermBlueprint>(_field), n); } + void -CreateBlueprintVisitorHelper::visitDotProduct(query::DotProduct &n) { +CreateBlueprintVisitorHelper::visitDotProduct(query::DotProduct &n) +{ createWeightedSet(std::make_unique<DotProductBlueprint>(_field), n); } + void -CreateBlueprintVisitorHelper::visitWandTerm(query::WandTerm &n) { +CreateBlueprintVisitorHelper::visitWandTerm(query::WandTerm &n) +{ createWeightedSet(std::make_unique<ParallelWeakAndBlueprint>(_field, n.getTargetNumHits(), n.getScoreThreshold(), n.getThresholdBoostFactor()), n); } +void +CreateBlueprintVisitorHelper::visitInTerm(query::InTerm &n) +{ + createWeightedSet(std::make_unique<WeightedSetTermBlueprint>(_field), n); +} + void CreateBlueprintVisitorHelper::visit(query::TrueQueryNode &) { setResult(std::make_unique<AlwaysTrueBlueprint>()); } diff --git a/searchlib/src/vespa/searchlib/queryeval/create_blueprint_visitor_helper.h b/searchlib/src/vespa/searchlib/queryeval/create_blueprint_visitor_helper.h index 26d6f1d384d..98f62fa3249 100644 --- a/searchlib/src/vespa/searchlib/queryeval/create_blueprint_visitor_helper.h +++ b/searchlib/src/vespa/searchlib/queryeval/create_blueprint_visitor_helper.h @@ -48,6 +48,7 @@ public: void visitDotProduct(query::DotProduct &n); void visitWandTerm(query::WandTerm &n); void visitNearestNeighborTerm(query::NearestNeighborTerm &n); + void visitInTerm(query::InTerm &n); void handleNumberTermAsText(query::NumberTerm &n); @@ -69,7 +70,7 @@ public: void visit(query::WeightedSetTerm &n) override { visitWeightedSetTerm(n); } void visit(query::DotProduct &n) override { visitDotProduct(n); } void visit(query::WandTerm &n) override { visitWandTerm(n); } - void visit(query::InTerm&) override { illegalVisit(); } + void visit(query::InTerm& n) override { visitInTerm(n); } void visit(query::NumberTerm &n) override = 0; void visit(query::LocationTerm &n) override = 0; |