diff options
21 files changed, 267 insertions, 65 deletions
diff --git a/client/js/app/yarn.lock b/client/js/app/yarn.lock index ebe56ced456..a647f8a22cd 100644 --- a/client/js/app/yarn.lock +++ b/client/js/app/yarn.lock @@ -721,10 +721,10 @@ resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== -"@eslint/eslintrc@^2.1.3": - version "2.1.3" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.3.tgz#797470a75fe0fbd5a53350ee715e85e87baff22d" - integrity sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA== +"@eslint/eslintrc@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" + integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== dependencies: ajv "^6.12.4" debug "^4.3.2" @@ -736,10 +736,10 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.54.0": - version "8.54.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.54.0.tgz#4fab9a2ff7860082c304f750e94acd644cf984cf" - integrity sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ== +"@eslint/js@8.55.0": + version "8.55.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.55.0.tgz#b721d52060f369aa259cf97392403cb9ce892ec6" + integrity sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA== "@floating-ui/core@^1.4.2": version "1.5.0" @@ -2587,14 +2587,14 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4 integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== eslint@^8: - version "8.54.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.54.0.tgz#588e0dd4388af91a2e8fa37ea64924074c783537" - integrity sha512-NY0DfAkM8BIZDVl6PgSa1ttZbx3xHgJzSNJKYcQglem6CppHyMhRIQkBVSSMaSRnLhig3jsDbEzOjwCVt4AmmA== + version "8.55.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.55.0.tgz#078cb7b847d66f2c254ea1794fa395bf8e7e03f8" + integrity sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.6.1" - "@eslint/eslintrc" "^2.1.3" - "@eslint/js" "8.54.0" + "@eslint/eslintrc" "^2.1.4" + "@eslint/js" "8.55.0" "@humanwhocodes/config-array" "^0.11.13" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" diff --git a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/FleetController.java b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/FleetController.java index dd2ba5bf5f1..3e520d95d2c 100644 --- a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/FleetController.java +++ b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/FleetController.java @@ -8,7 +8,6 @@ import com.yahoo.vdslib.state.Node; import com.yahoo.vdslib.state.NodeState; import com.yahoo.vdslib.state.State; import com.yahoo.vespa.clustercontroller.core.database.DatabaseHandler; -import com.yahoo.vespa.clustercontroller.core.database.ZooKeeperDatabaseFactory; import com.yahoo.vespa.clustercontroller.core.hostinfo.HostInfo; import com.yahoo.vespa.clustercontroller.core.listeners.NodeListener; import com.yahoo.vespa.clustercontroller.core.listeners.SlobrokListener; @@ -152,7 +151,7 @@ public class FleetController implements NodeListener, SlobrokListener, SystemSta options.nodeStateRequestTimeoutEarliestPercentage(), options.nodeStateRequestTimeoutLatestPercentage(), options.nodeStateRequestRoundTripTimeMaxSeconds()); - var database = new DatabaseHandler(context, new ZooKeeperDatabaseFactory(context), timer, options.zooKeeperServerAddress(), timer); + var database = new DatabaseHandler(context, options.dbFactoryFn().apply(context), timer, options.zooKeeperServerAddress(), timer); var lookUp = new SlobrokClient(context, timer, options.slobrokConnectionSpecs()); var stateGenerator = new StateChangeHandler(context, timer, log); var stateBroadcaster = new SystemStateBroadcaster(context, timer, timer); diff --git a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/FleetControllerOptions.java b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/FleetControllerOptions.java index d3b2bdf3d8d..a0efaa70b58 100644 --- a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/FleetControllerOptions.java +++ b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/FleetControllerOptions.java @@ -5,6 +5,9 @@ import ai.vespa.validation.Validation; import com.yahoo.vdslib.distribution.ConfiguredNode; import com.yahoo.vdslib.distribution.Distribution; import com.yahoo.vdslib.state.NodeType; +import com.yahoo.vespa.clustercontroller.core.database.DatabaseFactory; +import com.yahoo.vespa.clustercontroller.core.database.ZooKeeperDatabaseFactory; + import java.time.Duration; import java.util.Collection; import java.util.Collections; @@ -13,6 +16,7 @@ import java.util.Objects; import java.util.Set; import java.util.TreeMap; import java.util.TreeSet; +import java.util.function.Function; /** * Immutable class representing all the options that can be set in the fleetcontroller. @@ -128,6 +132,9 @@ public class FleetControllerOptions { private final int maxNumberOfGroupsAllowedToBeDown; + private final Function<FleetControllerContext, DatabaseFactory> dbFactoryFn; + + // TODO less impressive length...! private FleetControllerOptions(String clusterName, int fleetControllerIndex, int fleetControllerCount, @@ -168,7 +175,8 @@ public class FleetControllerOptions { boolean clusterFeedBlockEnabled, Map<String, Double> clusterFeedBlockLimit, double clusterFeedBlockNoiseLevel, - int maxNumberOfGroupsAllowedToBeDown) { + int maxNumberOfGroupsAllowedToBeDown, + Function<FleetControllerContext, DatabaseFactory> dbFactoryFn) { this.clusterName = clusterName; this.fleetControllerIndex = fleetControllerIndex; this.fleetControllerCount = fleetControllerCount; @@ -210,6 +218,7 @@ public class FleetControllerOptions { this.clusterFeedBlockLimit = clusterFeedBlockLimit; this.clusterFeedBlockNoiseLevel = clusterFeedBlockNoiseLevel; this.maxNumberOfGroupsAllowedToBeDown = maxNumberOfGroupsAllowedToBeDown; + this.dbFactoryFn = dbFactoryFn; } public Duration getMaxDeferredTaskVersionWaitTime() { @@ -382,6 +391,8 @@ public class FleetControllerOptions { public int maxNumberOfGroupsAllowedToBeDown() { return maxNumberOfGroupsAllowedToBeDown; } + public Function<FleetControllerContext, DatabaseFactory> dbFactoryFn() { return dbFactoryFn; } + public static class Builder { private String clusterName; @@ -425,6 +436,7 @@ public class FleetControllerOptions { private Map<String, Double> clusterFeedBlockLimit = Collections.emptyMap(); private double clusterFeedBlockNoiseLevel = 0.01; private int maxNumberOfGroupsAllowedToBeDown = 1; + private Function<FleetControllerContext, DatabaseFactory> dbFactoryFn = ZooKeeperDatabaseFactory::new; public Builder(String clusterName, Collection<ConfiguredNode> nodes) { this.clusterName = clusterName; @@ -677,6 +689,11 @@ public class FleetControllerOptions { return this; } + public Builder setDbFactoryFn(Function<FleetControllerContext, DatabaseFactory> fn) { + this.dbFactoryFn = fn; + return this; + } + public FleetControllerOptions build() { return new FleetControllerOptions(clusterName, index, @@ -718,7 +735,8 @@ public class FleetControllerOptions { clusterFeedBlockEnabled, clusterFeedBlockLimit, clusterFeedBlockNoiseLevel, - maxNumberOfGroupsAllowedToBeDown); + maxNumberOfGroupsAllowedToBeDown, + dbFactoryFn); } public static Builder copy(FleetControllerOptions options) { @@ -764,6 +782,7 @@ public class FleetControllerOptions { builder.clusterFeedBlockLimit = Map.copyOf(options.clusterFeedBlockLimit); builder.clusterFeedBlockNoiseLevel = options.clusterFeedBlockNoiseLevel; builder.maxNumberOfGroupsAllowedToBeDown = options.maxNumberOfGroupsAllowedToBeDown; + builder.dbFactoryFn = options.dbFactoryFn; return builder; } diff --git a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/database/DatabaseFactory.java b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/database/DatabaseFactory.java index a77c22da835..6419e5f05e7 100644 --- a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/database/DatabaseFactory.java +++ b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/database/DatabaseFactory.java @@ -9,9 +9,9 @@ package com.yahoo.vespa.clustercontroller.core.database; public interface DatabaseFactory { class Params { - String dbAddress; - int dbSessionTimeout; - Database.DatabaseListener listener; + public String dbAddress; + public int dbSessionTimeout; + public Database.DatabaseListener listener; Params databaseAddress(String address) { this.dbAddress = address; return this; } Params databaseSessionTimeout(int timeout) { this.dbSessionTimeout = timeout; return this; } diff --git a/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/DistributionBitCountTest.java b/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/DistributionBitCountTest.java index 0e48a9bbc45..1e13ed4eef5 100644 --- a/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/DistributionBitCountTest.java +++ b/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/DistributionBitCountTest.java @@ -14,9 +14,12 @@ import java.util.List; import static org.junit.jupiter.api.Assertions.assertEquals; -@ExtendWith(CleanupZookeeperLogsOnSuccess.class) public class DistributionBitCountTest extends FleetControllerTest { + DistributionBitCountTest() { + useRealZooKeeperInTest(false); + } + private FleetControllerOptions setUpSystem() throws Exception { List<ConfiguredNode> configuredNodes = new ArrayList<>(); for (int i = 0 ; i < 10; i++) { diff --git a/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/FakeZooKeeperDatabase.java b/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/FakeZooKeeperDatabase.java new file mode 100644 index 00000000000..057d137650f --- /dev/null +++ b/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/FakeZooKeeperDatabase.java @@ -0,0 +1,136 @@ +// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.clustercontroller.core; + +import com.yahoo.vdslib.state.Node; +import com.yahoo.vdslib.state.NodeState; +import com.yahoo.vespa.clustercontroller.core.database.Database; +import com.yahoo.vespa.clustercontroller.core.database.DatabaseFactory; + +import java.util.Map; +import java.util.TreeMap; + +/** + * Memory-backed fake DB implementation that tries to mirror the semantics of the + * (synchronous) ZooKeeper DB implementation. By itself this fake acts as if a quorum + * with a _single_, local ZK instance has been configured. This DB instance cannot be + * used across multiple cluster controller instances. + * + * Threading note: we expect all invocations on this instance to happen from the + * main cluster controller thread (i.e. "as-if" single threaded), but we wrap everything + * in a mutex to stay on the safe side since this isn't explicitly documented as + * part of the API, + */ +public class FakeZooKeeperDatabase extends Database { + + public static class Factory implements DatabaseFactory { + private final FleetControllerContext context; + public Factory(FleetControllerContext context) { + this.context = context; + } + @Override + public Database create(Params params) { + return new FakeZooKeeperDatabase(context, params.listener); + } + } + + private final FleetControllerContext context; + private final Database.DatabaseListener listener; + + private final Object mutex = new Object(); + private boolean closed = false; + private Integer persistedLatestStateVersion = null; + private Map<Integer, Integer> persistedLeaderVotes = new TreeMap<>(); + private Map<Node, NodeState> persistedWantedStates = new TreeMap<>(); + private Map<Node, Long> persistedStartTimestamps = new TreeMap<>(); + private ClusterStateBundle persistedBundle = ClusterStateBundle.ofBaselineOnly(AnnotatedClusterState.emptyState()); + + public FakeZooKeeperDatabase(FleetControllerContext context, DatabaseListener listener) { + this.context = context; + this.listener = listener; + } + + @Override + public void close() { + synchronized (mutex) { + closed = true; + } + } + + @Override + public boolean isClosed() { + synchronized (mutex) { + return closed; + } + } + + @Override + public boolean storeMasterVote(int voteForNode) { + Map<Integer, Integer> voteState; + synchronized (mutex) { + persistedLeaderVotes.put(context.id().index(), voteForNode); + voteState = Map.copyOf(persistedLeaderVotes); + } + listener.handleMasterData(voteState); + return true; + } + + @Override + public boolean storeLatestSystemStateVersion(int version) { + synchronized (mutex) { + persistedLatestStateVersion = version; + return true; + } + } + + @Override + public Integer retrieveLatestSystemStateVersion() { + synchronized (mutex) { + return persistedLatestStateVersion; + } + } + + @Override + public boolean storeWantedStates(Map<Node, NodeState> states) { + synchronized (mutex) { + persistedWantedStates = Map.copyOf(states); + } + return true; + } + + @Override + public Map<Node, NodeState> retrieveWantedStates() { + synchronized (mutex) { + return Map.copyOf(persistedWantedStates); + } + } + + @Override + public boolean storeStartTimestamps(Map<Node, Long> timestamps) { + synchronized (mutex) { + persistedStartTimestamps = Map.copyOf(timestamps); + return true; + } + } + + @Override + public Map<Node, Long> retrieveStartTimestamps() { + synchronized (mutex) { + return Map.copyOf(persistedStartTimestamps); + } + } + + @Override + public boolean storeLastPublishedStateBundle(ClusterStateBundle stateBundle) { + synchronized (mutex) { + persistedBundle = stateBundle; + return true; + } + } + + @Override + public ClusterStateBundle retrieveLastPublishedStateBundle() { + synchronized (mutex) { + return persistedBundle; + } + } +} diff --git a/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/FleetControllerTest.java b/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/FleetControllerTest.java index 400f4a14d24..ee0506070b5 100644 --- a/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/FleetControllerTest.java +++ b/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/FleetControllerTest.java @@ -16,7 +16,6 @@ import com.yahoo.vdslib.state.NodeState; import com.yahoo.vdslib.state.NodeType; import com.yahoo.vdslib.state.State; import com.yahoo.vespa.clustercontroller.core.database.DatabaseHandler; -import com.yahoo.vespa.clustercontroller.core.database.ZooKeeperDatabaseFactory; import com.yahoo.vespa.clustercontroller.core.rpc.RPCCommunicator; import com.yahoo.vespa.clustercontroller.core.rpc.RpcServer; import com.yahoo.vespa.clustercontroller.core.rpc.SlobrokClient; @@ -49,13 +48,14 @@ import static org.junit.jupiter.api.Assertions.fail; */ public abstract class FleetControllerTest implements Waiter { - private static final Logger log = Logger.getLogger(FleetControllerTest.class.getName()); + protected static final Logger log = Logger.getLogger(FleetControllerTest.class.getName()); private static final int DEFAULT_NODE_COUNT = 10; private final Duration timeout = Duration.ofSeconds(30); protected Slobrok slobrok; protected FleetControllerOptions options; + private boolean useRealZooKeeperInTest = true; ZooKeeperTestServer zooKeeperServer; protected final List<FleetController> fleetControllers = new ArrayList<>(); protected List<DummyVdsNode> nodes = new ArrayList<>(); @@ -73,6 +73,10 @@ public abstract class FleetControllerTest implements Waiter { LogSetup.initVespaLogging("fleetcontroller"); } + protected void useRealZooKeeperInTest(boolean useRealZk) { + this.useRealZooKeeperInTest = useRealZk; + } + protected static FleetControllerOptions.Builder defaultOptions() { return defaultOptions(IntStream.range(0, DEFAULT_NODE_COUNT) .mapToObj(i -> new ConfiguredNode(i, false)) @@ -121,7 +125,7 @@ public abstract class FleetControllerTest implements Waiter { var log = new EventLog(timer, metricUpdater); var cluster = new ContentCluster(options.clusterName(), options.nodes(), options.storageDistribution()); var stateGatherer = new NodeStateGatherer(timer, timer, log); - var database = new DatabaseHandler(context, new ZooKeeperDatabaseFactory(context), timer, options.zooKeeperServerAddress(), timer); + var database = new DatabaseHandler(context, options.dbFactoryFn().apply(context), timer, options.zooKeeperServerAddress(), timer); // Setting this <1000 ms causes ECONNREFUSED on socket trying to connect to ZK server, in ZooKeeper, // after creating a new ZooKeeper (session). This causes ~10s extra time to connect after connection loss. // Reasons unknown. Larger values like the default 10_000 causes that much additional running time for some tests. @@ -139,7 +143,13 @@ public abstract class FleetControllerTest implements Waiter { } protected FleetControllerOptions setUpFleetController(Timer timer, FleetControllerOptions.Builder builder) throws Exception { - setUpZooKeeperServer(builder); + // TODO consolidate CC setup in tests; currently partial duplication of + // setup/init code across test subclasses. + if (useRealZooKeeperInTest) { + setUpZooKeeperServer(builder); + } else { + builder.setDbFactoryFn(FakeZooKeeperDatabase.Factory::new); + } builder.setSlobrokConnectionSpecs(getSlobrokConnectionSpecs(slobrok)); options = builder.build(); startFleetController(timer); diff --git a/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/StateChangeTest.java b/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/StateChangeTest.java index 01987cf1f4c..9e9206526e5 100644 --- a/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/StateChangeTest.java +++ b/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/StateChangeTest.java @@ -9,7 +9,6 @@ import com.yahoo.vdslib.state.NodeType; import com.yahoo.vdslib.state.State; import com.yahoo.vespa.clustercontroller.core.testutils.StateWaiter; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; import java.time.Duration; import java.util.ArrayList; @@ -23,7 +22,6 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; -@ExtendWith(CleanupZookeeperLogsOnSuccess.class) public class StateChangeTest extends FleetControllerTest { private final FakeTimer timer = new FakeTimer(); @@ -31,6 +29,10 @@ public class StateChangeTest extends FleetControllerTest { private FleetController ctrl; private DummyCommunicator communicator; + StateChangeTest() { + useRealZooKeeperInTest(false); + } + private void initialize(FleetControllerOptions.Builder builder) throws Exception { List<Node> nodes = new ArrayList<>(); for (int i = 0; i < builder.nodes().size(); ++i) { @@ -38,7 +40,7 @@ public class StateChangeTest extends FleetControllerTest { nodes.add(new Node(NodeType.DISTRIBUTOR, i)); } - setUpZooKeeperServer(builder); + builder.setDbFactoryFn(FakeZooKeeperDatabase.Factory::new); communicator = new DummyCommunicator(nodes, timer); boolean start = false; FleetControllerOptions options = builder.build(); diff --git a/container-apache-http-client-bundle/pom.xml b/container-apache-http-client-bundle/pom.xml index 48a8131b73d..e580364a51a 100644 --- a/container-apache-http-client-bundle/pom.xml +++ b/container-apache-http-client-bundle/pom.xml @@ -77,7 +77,15 @@ <Bundle-Version>${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}</Bundle-Version> <Export-Package>org.apache.hc.*;version=1.0.0;-noimport:=true,org.apache.http.*;version=1.0.0;-noimport:=true</Export-Package> <Embed-Dependency>*;scope=compile;type=!pom;inline=true</Embed-Dependency> - <Import-Package>!javax.servlet,javax.*,org.slf4j,org.ietf.jgss</Import-Package> + <Import-Package> + !javax.servlet, + javax.*, + org.slf4j, + org.slf4j.spi, + org.slf4j.helpers, + org.slf4j.event, + org.ietf.jgss + </Import-Package> <Embed-Transitive>true</Embed-Transitive> <_nouses>true</_nouses> </instructions> diff --git a/dependency-versions/pom.xml b/dependency-versions/pom.xml index 62afa4b17f7..deb82e9e2c7 100644 --- a/dependency-versions/pom.xml +++ b/dependency-versions/pom.xml @@ -93,6 +93,7 @@ <curator.vespa.version>5.5.0</curator.vespa.version> <dropwizard.metrics.vespa.version>4.1.12.1</dropwizard.metrics.vespa.version> <!-- ZK 3.9.1 requires this --> <eclipse-collections.vespa.version>11.1.0</eclipse-collections.vespa.version> + <eclipse-sisu.vespa.version>0.9.0.M2</eclipse-sisu.vespa.version> <felix.vespa.version>7.0.5</felix.vespa.version> <felix.log.vespa.version>1.3.0</felix.log.vespa.version> <findbugs.vespa.version>3.0.2</findbugs.vespa.version> <!-- Should be kept in sync with guava --> @@ -102,6 +103,7 @@ <icu4j.vespa.version>74.1</icu4j.vespa.version> <java-jjwt.vespa.version>0.11.5</java-jjwt.vespa.version> <java-jwt.vespa.version>4.4.0</java-jwt.vespa.version> + <javax.annotation.vespa.version>1.2</javax.annotation.vespa.version> <jaxb.runtime.vespa.version>4.0.4</jaxb.runtime.vespa.version> <jetty.vespa.version>11.0.18</jetty.vespa.version> <jetty-servlet-api.vespa.version>5.0.2</jetty-servlet-api.vespa.version> @@ -111,7 +113,7 @@ <junit.vespa.version>5.10.0</junit.vespa.version> <junit.platform.vespa.version>1.10.0</junit.platform.vespa.version> <junit4.vespa.version>4.13.2</junit4.vespa.version> - <luben.zstd.vespa.version>1.5.5-10</luben.zstd.vespa.version> + <luben.zstd.vespa.version>1.5.5-11</luben.zstd.vespa.version> <lucene.vespa.version>9.8.0</lucene.vespa.version> <maven-archiver.vespa.version>3.6.1</maven-archiver.vespa.version> <maven-wagon.vespa.version>3.5.3</maven-wagon.vespa.version> @@ -150,7 +152,7 @@ <maven-assembly-plugin.vespa.version>3.6.0</maven-assembly-plugin.vespa.version> <maven-bundle-plugin.vespa.version>5.1.9</maven-bundle-plugin.vespa.version> <maven-compiler-plugin.vespa.version>3.11.0</maven-compiler-plugin.vespa.version> - <maven-core.vespa.version>3.9.5</maven-core.vespa.version> + <maven-core.vespa.version>3.9.6</maven-core.vespa.version> <maven-dependency-plugin.vespa.version>3.6.1</maven-dependency-plugin.vespa.version> <maven-deploy-plugin.vespa.version>3.1.1</maven-deploy-plugin.vespa.version> <maven-enforcer-plugin.vespa.version>3.4.1</maven-enforcer-plugin.vespa.version> @@ -158,7 +160,7 @@ <maven-gpg-plugin.vespa.version>3.1.0</maven-gpg-plugin.vespa.version> <maven-install-plugin.vespa.version>3.1.1</maven-install-plugin.vespa.version> <maven-jar-plugin.vespa.version>3.3.0</maven-jar-plugin.vespa.version> - <maven-javadoc-plugin.vespa.version>3.6.2</maven-javadoc-plugin.vespa.version> + <maven-javadoc-plugin.vespa.version>3.6.3</maven-javadoc-plugin.vespa.version> <maven-plugin-api.vespa.version>${maven-core.vespa.version}</maven-plugin-api.vespa.version> <maven-plugin-tools.vespa.version>3.10.2</maven-plugin-tools.vespa.version> <maven-resources-plugin.vespa.version>3.3.1</maven-resources-plugin.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 95dc1cac9f2..94cba73af39 100644 --- a/flags/src/main/java/com/yahoo/vespa/flags/Flags.java +++ b/flags/src/main/java/com/yahoo/vespa/flags/Flags.java @@ -210,7 +210,7 @@ public class Flags { public static final UnboundIntFlag MAX_ACTIVATION_INHIBITED_OUT_OF_SYNC_GROUPS = defineIntFlag( "max-activation-inhibited-out-of-sync-groups", 0, - List.of("vekterli"), "2021-02-19", "2023-12-01", + List.of("vekterli"), "2021-02-19", "2024-03-01", "Allows replicas in up to N content groups to not be activated " + "for query visibility if they are out of sync with a majority of other replicas", "Takes effect at redeployment", @@ -218,7 +218,7 @@ public class Flags { public static final UnboundDoubleFlag MIN_NODE_RATIO_PER_GROUP = defineDoubleFlag( "min-node-ratio-per-group", 0.0, - List.of("geirst", "vekterli"), "2021-07-16", "2023-12-01", + List.of("geirst", "vekterli"), "2021-07-16", "2024-03-01", "Minimum ratio of nodes that have to be available (i.e. not Down) in any hierarchic content cluster group for the group to be Up", "Takes effect at redeployment", INSTANCE_ID); @@ -432,6 +432,13 @@ public class Flags { "Takes effect immediately", CONSOLE_USER_EMAIL); + public static final UnboundBooleanFlag RESTART_ON_DEPLOY_WHEN_ONNX_MODEL_CHANGES = defineFeatureFlag( + "restart-on-deploy-when-onnx-model-changes", false, + List.of("hmusum"), "2023-12-04", "2024-01-04", + "If set, restart on deploy if onnx model or onnx model options used by a container cluster change", + "Takes effect at redeployment", + INSTANCE_ID); + /** 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/flags/src/main/java/com/yahoo/vespa/flags/PermanentFlags.java b/flags/src/main/java/com/yahoo/vespa/flags/PermanentFlags.java index acebca05fdb..1c4e13cf44b 100644 --- a/flags/src/main/java/com/yahoo/vespa/flags/PermanentFlags.java +++ b/flags/src/main/java/com/yahoo/vespa/flags/PermanentFlags.java @@ -13,6 +13,7 @@ import java.util.Set; import java.util.function.Predicate; import java.util.regex.Pattern; +import static com.yahoo.vespa.flags.Dimension.CLOUD_ACCOUNT; import static com.yahoo.vespa.flags.Dimension.INSTANCE_ID; import static com.yahoo.vespa.flags.Dimension.CLUSTER_ID; import static com.yahoo.vespa.flags.Dimension.CLUSTER_TYPE; @@ -414,6 +415,14 @@ public class PermanentFlags { "Takes effect on next run of CertPoolMaintainer" ); + public static final UnboundBooleanFlag ENCLAVE_WITHOUT_WIREGUARD = defineFeatureFlag( + "enclave-without-wireguard", false, + "Do not use wireguard for inclave. This should only be set for a single legacy account, " + + "and removed once that account is no longer in use with us", + "Affects generated terraform code, and ip allocation on host provisioning", + CLOUD_ACCOUNT + ); + private PermanentFlags() {} private static UnboundBooleanFlag defineFeatureFlag( diff --git a/maven-plugins/allowed-maven-dependencies.txt b/maven-plugins/allowed-maven-dependencies.txt index 3972ddcd085..1c66b81b448 100644 --- a/maven-plugins/allowed-maven-dependencies.txt +++ b/maven-plugins/allowed-maven-dependencies.txt @@ -13,7 +13,7 @@ com.google.j2objc:j2objc-annotations:2.8 commons-codec:commons-codec:${commons-codec.vespa.version} commons-io:commons-io:${commons-io.vespa.version} jakarta.inject:jakarta.inject-api:${jakarta.inject.vespa.version} -javax.annotation:javax.annotation-api:${commons-logging.vespa.version} +javax.annotation:javax.annotation-api:${javax.annotation.vespa.version} javax.inject:javax.inject:${javax.inject.vespa.version} junit:junit:${junit4.vespa.version} net.bytebuddy:byte-buddy-agent:${byte-buddy.vespa.version} @@ -55,8 +55,8 @@ org.codehaus.plexus:plexus-sec-dispatcher:2.0 org.codehaus.plexus:plexus-utils:${maven-shade-plugin.vespa.version} org.eclipse.aether:aether-api:1.0.0.v20140518 org.eclipse.aether:aether-util:1.0.0.v20140518 -org.eclipse.sisu:org.eclipse.sisu.inject:0.3.5 -org.eclipse.sisu:org.eclipse.sisu.plexus:0.3.5 +org.eclipse.sisu:org.eclipse.sisu.inject:${eclipse-sisu.vespa.version} +org.eclipse.sisu:org.eclipse.sisu.plexus:${eclipse-sisu.vespa.version} org.hamcrest:hamcrest-core:${hamcrest.vespa.version} org.hamcrest:hamcrest:${hamcrest.vespa.version} org.iq80.snappy:snappy:0.4 diff --git a/parent/pom.xml b/parent/pom.xml index 7642b87ac7b..4009c78a0c1 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -992,6 +992,16 @@ <version>${eclipse-collections.vespa.version}</version> </dependency> <dependency> + <groupId>org.eclipse.sisu</groupId> + <artifactId>org.eclipse.sisu.inject</artifactId> + <version>${eclipse-sisu.vespa.version}</version> + </dependency> + <dependency> + <groupId>org.eclipse.sisu</groupId> + <artifactId>org.eclipse.sisu.plexus</artifactId> + <version>${eclipse-sisu.vespa.version}</version> + </dependency> + <dependency> <groupId>org.eclipse.collections</groupId> <artifactId>eclipse-collections-api</artifactId> <version>${eclipse-collections.vespa.version}</version> diff --git a/renovate.json b/renovate.json index a87bb9a67c6..c8913bd4783 100644 --- a/renovate.json +++ b/renovate.json @@ -5,19 +5,20 @@ ], "dependencyDashboardApproval": true, "transitiveRemediation": true, - "prHourlyLimit": 10, - "prConcurrentLimit": 10, + "prHourlyLimit": 20, + "prConcurrentLimit": 20, "ignorePaths": [], - "ignoreDeps": [ - "com.github.spotbugs:spotbugs-annotations", - "com.yahoo.vespa.bundle-plugin:test-bundles", - "com.yahoo.vespa.jdisc_core:test_bundles", - "com.yahoo.vespa:cloud-tenant-base", - "com.yahoo.vespa:container-dependency-versions", - "com.yahoo.vespa:hosted-tenant-base", - "com.yahoo.vespa:parent", - "com.yahoo.vespa:zookeeper-server-parent", - "github.com/go-json-experiment/json", - "javax.servlet:javax.servlet-api" + "ignoreDeps": [], + "schedule": ["before 6am on thursday"], + "packageRules": [ + { + "matchPackagePatterns": ["^com\\.yahoo\\.vespa"], + "matchManagers": ["maven"], + "enabled": false + }, + { + "minimumReleaseAge": "14 days", + "dependencyDashboardApproval": false + } ] } diff --git a/streamingvisitors/src/vespa/vsm/searcher/floatfieldsearcher.cpp b/streamingvisitors/src/vespa/vsm/searcher/floatfieldsearcher.cpp index 95ebdfe9a90..7dd40348f47 100644 --- a/streamingvisitors/src/vespa/vsm/searcher/floatfieldsearcher.cpp +++ b/streamingvisitors/src/vespa/vsm/searcher/floatfieldsearcher.cpp @@ -39,10 +39,8 @@ void FloatFieldSearcherT<T>::prepare(search::streaming::QueryTermList& qtl, for (auto qt : qtl) { size_t sz(qt->termLen()); if (sz) { - double low; - double high; - bool valid = qt->getAsDoubleTerm(low, high); - _floatTerm.push_back(FloatInfo(low, high, valid)); + auto range = qt->getRange<T>(); + _floatTerm.emplace_back(range.low, range.high, range.valid); } } } diff --git a/streamingvisitors/src/vespa/vsm/searcher/floatfieldsearcher.h b/streamingvisitors/src/vespa/vsm/searcher/floatfieldsearcher.h index 877050a3276..07b3f6e1c5f 100644 --- a/streamingvisitors/src/vespa/vsm/searcher/floatfieldsearcher.h +++ b/streamingvisitors/src/vespa/vsm/searcher/floatfieldsearcher.h @@ -20,7 +20,7 @@ protected: class FloatInfo { public: - FloatInfo(T low, T high, bool v) : _lower(low), _upper(high), _valid(v) { if (low > high) { _lower = high; _upper = low; } } + FloatInfo(T low, T high, bool v) noexcept : _lower(low), _upper(high), _valid(v) { } bool cmp(T key) const; bool valid() const { return _valid; } void setValid(bool v) { _valid = v; } diff --git a/streamingvisitors/src/vespa/vsm/searcher/intfieldsearcher.cpp b/streamingvisitors/src/vespa/vsm/searcher/intfieldsearcher.cpp index 4a941cecb83..e73c7f5c1a7 100644 --- a/streamingvisitors/src/vespa/vsm/searcher/intfieldsearcher.cpp +++ b/streamingvisitors/src/vespa/vsm/searcher/intfieldsearcher.cpp @@ -29,10 +29,8 @@ void IntFieldSearcher::prepare(search::streaming::QueryTermList& qtl, for (auto qt : qtl) { size_t sz(qt->termLen()); if (sz) { - int64_t low; - int64_t high; - bool valid = qt->getAsIntegerTerm(low, high); - _intTerm.push_back(IntInfo(low, high, valid)); + auto range = qt->getRange<int64_t>(); + _intTerm.emplace_back(range.low, range.high, range.valid); } } } diff --git a/streamingvisitors/src/vespa/vsm/searcher/intfieldsearcher.h b/streamingvisitors/src/vespa/vsm/searcher/intfieldsearcher.h index bf143a4d06b..47b83c1538d 100644 --- a/streamingvisitors/src/vespa/vsm/searcher/intfieldsearcher.h +++ b/streamingvisitors/src/vespa/vsm/searcher/intfieldsearcher.h @@ -20,7 +20,7 @@ protected: class IntInfo { public: - IntInfo(int64_t low, int64_t high, bool v) : _lower(low), _upper(high), _valid(v) { if (low > high) { _lower = high; _upper = low; } } + IntInfo(int64_t low, int64_t high, bool v) noexcept : _lower(low), _upper(high), _valid(v) { } bool cmp(int64_t key) const { return (_lower <= key) && (key <= _upper); } bool valid() const { return _valid; } private: diff --git a/vespa-dependencies-enforcer/allowed-maven-dependencies.txt b/vespa-dependencies-enforcer/allowed-maven-dependencies.txt index 525c77f7df6..eb9dee300b7 100644 --- a/vespa-dependencies-enforcer/allowed-maven-dependencies.txt +++ b/vespa-dependencies-enforcer/allowed-maven-dependencies.txt @@ -78,7 +78,7 @@ io.prometheus:simpleclient_tracer_otel:${prometheus.client.vespa.version} io.prometheus:simpleclient_tracer_otel_agent:${prometheus.client.vespa.version} jakarta.inject:jakarta.inject-api:${jakarta.inject.vespa.version} javax.activation:javax.activation-api:1.2.0 -javax.annotation:javax.annotation-api:${commons-logging.vespa.version} +javax.annotation:javax.annotation-api:${javax.annotation.vespa.version} javax.inject:javax.inject:${javax.inject.vespa.version} javax.servlet:javax.servlet-api:${javax.servlet-api.vespa.version} javax.ws.rs:javax.ws.rs-api:${javax.ws.rs-api.vespa.version} @@ -140,7 +140,7 @@ org.bouncycastle:bcprov-jdk18on:${bouncycastle.vespa.version} org.bouncycastle:bcutil-jdk18on:${bouncycastle.vespa.version} org.codehaus.plexus:plexus-archiver:4.8.0 org.codehaus.plexus:plexus-classworlds:2.7.0 -org.codehaus.plexus:plexus-component-annotations:1.5.5 +org.codehaus.plexus:plexus-component-annotations:2.1.0 org.codehaus.plexus:plexus-container-default:1.0-alpha-9-stable-1 org.codehaus.plexus:plexus-interpolation:1.26 org.codehaus.plexus:plexus-io:${maven-enforcer-plugin.vespa.version} @@ -166,8 +166,8 @@ org.eclipse.jetty:jetty-security:${jetty.vespa.version} org.eclipse.jetty:jetty-server:${jetty.vespa.version} org.eclipse.jetty:jetty-servlet:${jetty.vespa.version} org.eclipse.jetty:jetty-util:${jetty.vespa.version} -org.eclipse.sisu:org.eclipse.sisu.inject:0.3.5 -org.eclipse.sisu:org.eclipse.sisu.plexus:0.3.5 +org.eclipse.sisu:org.eclipse.sisu.inject:${eclipse-sisu.vespa.version} +org.eclipse.sisu:org.eclipse.sisu.plexus:${eclipse-sisu.vespa.version} org.fusesource.jansi:jansi:1.18 org.glassfish.jaxb:jaxb-core:${jaxb.runtime.vespa.version} org.glassfish.jaxb:jaxb-runtime:${jaxb.runtime.vespa.version} diff --git a/vespa-enforcer-extensions/pom.xml b/vespa-enforcer-extensions/pom.xml index 10cd2b8096b..c0b5e34076f 100644 --- a/vespa-enforcer-extensions/pom.xml +++ b/vespa-enforcer-extensions/pom.xml @@ -62,7 +62,7 @@ <!-- generate index of project components --> <groupId>org.eclipse.sisu</groupId> <artifactId>sisu-maven-plugin</artifactId> - <version>0.9.0.M2</version> + <version>${eclipse-sisu.vespa.version}</version> <executions> <execution> <goals> |