diff options
19 files changed, 42 insertions, 25 deletions
diff --git a/configd/src/apps/sentinel/config-owner.cpp b/configd/src/apps/sentinel/config-owner.cpp index 665cf07d3e7..89d5796ae79 100644 --- a/configd/src/apps/sentinel/config-owner.cpp +++ b/configd/src/apps/sentinel/config-owner.cpp @@ -6,7 +6,7 @@ #include <string> #include <vespa/log/log.h> -LOG_SETUP(".config-owner"); +LOG_SETUP(".sentinel.config-owner"); namespace config::sentinel { diff --git a/configd/src/apps/sentinel/connectivity.cpp b/configd/src/apps/sentinel/connectivity.cpp index c1c49e3068a..d36190e4e13 100644 --- a/configd/src/apps/sentinel/connectivity.cpp +++ b/configd/src/apps/sentinel/connectivity.cpp @@ -10,7 +10,7 @@ #include <thread> #include <chrono> -LOG_SETUP(".connectivity"); +LOG_SETUP(".sentinel.connectivity"); using vespalib::make_string_short::fmt; using namespace std::chrono_literals; diff --git a/configd/src/apps/sentinel/env.cpp b/configd/src/apps/sentinel/env.cpp index f857f95a496..c345de1df36 100644 --- a/configd/src/apps/sentinel/env.cpp +++ b/configd/src/apps/sentinel/env.cpp @@ -12,7 +12,7 @@ #include <thread> #include <chrono> -LOG_SETUP(".env"); +LOG_SETUP(".sentinel.env"); using vespalib::make_string_short::fmt; using namespace std::chrono_literals; diff --git a/configd/src/apps/sentinel/manager.cpp b/configd/src/apps/sentinel/manager.cpp index 0c13292d704..839f7c96ae2 100644 --- a/configd/src/apps/sentinel/manager.cpp +++ b/configd/src/apps/sentinel/manager.cpp @@ -11,7 +11,7 @@ #include <sys/wait.h> #include <vespa/log/log.h> -LOG_SETUP(".manager"); +LOG_SETUP(".sentinel.manager"); namespace config::sentinel { diff --git a/configd/src/apps/sentinel/output-connection.cpp b/configd/src/apps/sentinel/output-connection.cpp index 5dbe1c22f58..caf97c92eea 100644 --- a/configd/src/apps/sentinel/output-connection.cpp +++ b/configd/src/apps/sentinel/output-connection.cpp @@ -5,7 +5,7 @@ #include <cstring> #include <vespa/log/log.h> -LOG_SETUP(""); +LOG_SETUP(".sentinel.output-connection"); #include <vespa/log/llparser.h> #include "output-connection.h" diff --git a/configd/src/apps/sentinel/outward-check.cpp b/configd/src/apps/sentinel/outward-check.cpp index c9c94443274..391e5fee8bf 100644 --- a/configd/src/apps/sentinel/outward-check.cpp +++ b/configd/src/apps/sentinel/outward-check.cpp @@ -3,7 +3,7 @@ #include "outward-check.h" #include <vespa/log/log.h> -LOG_SETUP(".outward-check"); +LOG_SETUP(".sentinel.outward-check"); namespace config::sentinel { diff --git a/configd/src/apps/sentinel/peer-check.cpp b/configd/src/apps/sentinel/peer-check.cpp index daab80eefc7..b8060742355 100644 --- a/configd/src/apps/sentinel/peer-check.cpp +++ b/configd/src/apps/sentinel/peer-check.cpp @@ -4,7 +4,7 @@ #include <vespa/vespalib/util/stringfmt.h> #include <vespa/log/log.h> -LOG_SETUP(".peer-check"); +LOG_SETUP(".sentinel.peer-check"); using vespalib::make_string_short::fmt; diff --git a/configd/src/apps/sentinel/report-connectivity.cpp b/configd/src/apps/sentinel/report-connectivity.cpp index c1e519a4a9a..1ea7365aa3f 100644 --- a/configd/src/apps/sentinel/report-connectivity.cpp +++ b/configd/src/apps/sentinel/report-connectivity.cpp @@ -6,7 +6,7 @@ #include <vespa/log/log.h> #include <chrono> -LOG_SETUP(".report-connectivity"); +LOG_SETUP(".sentinel.report-connectivity"); using cloud::config::ModelConfig; using namespace std::chrono_literals; diff --git a/configd/src/apps/sentinel/rpchooks.cpp b/configd/src/apps/sentinel/rpchooks.cpp index 0d49063db84..3e5509bc8c3 100644 --- a/configd/src/apps/sentinel/rpchooks.cpp +++ b/configd/src/apps/sentinel/rpchooks.cpp @@ -9,7 +9,7 @@ #include <vespa/fnet/frt/rpcrequest.h> #include <vespa/log/log.h> -LOG_SETUP(".rpchooks"); +LOG_SETUP(".sentinel.rpchooks"); namespace config::sentinel { diff --git a/configd/src/apps/sentinel/rpcserver.cpp b/configd/src/apps/sentinel/rpcserver.cpp index be867ae95db..6c0de35a9e2 100644 --- a/configd/src/apps/sentinel/rpcserver.cpp +++ b/configd/src/apps/sentinel/rpcserver.cpp @@ -3,7 +3,7 @@ #include "rpcserver.h" #include <vespa/log/log.h> -LOG_SETUP(".rpcserver"); +LOG_SETUP(".sentinel.rpcserver"); namespace config::sentinel { diff --git a/configd/src/apps/sentinel/sentinel.cpp b/configd/src/apps/sentinel/sentinel.cpp index ebed1549106..32f4708188c 100644 --- a/configd/src/apps/sentinel/sentinel.cpp +++ b/configd/src/apps/sentinel/sentinel.cpp @@ -11,7 +11,7 @@ #include <sys/time.h> #include <vespa/log/log.h> -LOG_SETUP("config-sentinel"); +LOG_SETUP("sentinel.config-sentinel"); using namespace config; diff --git a/configd/src/apps/sentinel/service.cpp b/configd/src/apps/sentinel/service.cpp index 9c78894f1a7..d1dab4bb26f 100644 --- a/configd/src/apps/sentinel/service.cpp +++ b/configd/src/apps/sentinel/service.cpp @@ -12,7 +12,7 @@ #include <sys/wait.h> #include <vespa/log/log.h> -LOG_SETUP(".service"); +LOG_SETUP(".sentinel.service"); #include <vespa/log/llparser.h> static bool stop() diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgradeScheduler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgradeScheduler.java index 666d1c3b23a..a02937a03e3 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgradeScheduler.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgradeScheduler.java @@ -43,8 +43,10 @@ public class OsUpgradeScheduler extends ControllerMaintainer { @Override protected double maintain() { + Instant now = controller().clock().instant(); + if (!canTriggerAt(now)) return 1.0; for (var cloud : supportedClouds()) { - Optional<Version> newTarget = newTargetIn(cloud); + Optional<Version> newTarget = newTargetIn(cloud, now); if (newTarget.isEmpty()) continue; controller().upgradeOsIn(cloud, newTarget.get(), upgradeBudget(), false); } @@ -52,14 +54,12 @@ public class OsUpgradeScheduler extends ControllerMaintainer { } /** Returns the new target version for given cloud, if any */ - private Optional<Version> newTargetIn(CloudName cloud) { + private Optional<Version> newTargetIn(CloudName cloud, Instant now) { Optional<Version> currentTarget = controller().osVersionTarget(cloud) .map(OsVersionTarget::osVersion) .map(OsVersion::version); if (currentTarget.isEmpty()) return Optional.empty(); if (!hasExpired(currentTarget.get())) return Optional.empty(); - - Instant now = controller().clock().instant(); String qualifier = LocalDate.ofInstant(now.minus(AVAILABILITY_INTERVAL), ZoneOffset.UTC) .format(VERSION_DATE_PATTERN); return Optional.of(new Version(currentTarget.get().getMajor(), @@ -88,6 +88,14 @@ public class OsUpgradeScheduler extends ControllerMaintainer { .collect(Collectors.toUnmodifiableSet()); } + private boolean canTriggerAt(Instant instant) { + int hourOfDay = instant.atZone(ZoneOffset.UTC).getHour(); + int dayOfWeek = instant.atZone(ZoneOffset.UTC).getDayOfWeek().getValue(); + // Upgrade can only be scheduled between 07:00 and 12:59 UTC, Monday-Thursday + return hourOfDay >= 7 && hourOfDay <= 12 && + dayOfWeek < 5; + } + private Duration upgradeBudget() { return controller().system().isCd() ? Duration.ofHours(1) : Duration.ofDays(14); } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgradeSchedulerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgradeSchedulerTest.java index 7d512ba090c..7a0175845ca 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgradeSchedulerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgradeSchedulerTest.java @@ -24,8 +24,8 @@ public class OsUpgradeSchedulerTest { public void maintain() { ControllerTester tester = new ControllerTester(); OsUpgradeScheduler scheduler = new OsUpgradeScheduler(tester.controller(), Duration.ofDays(1)); - Instant initialTime = Instant.parse("2021-01-23T00:00:00.00Z"); - tester.clock().setInstant(initialTime); + Instant t0 = Instant.parse("2021-01-23T00:00:00.00Z"); // Outside trigger period + tester.clock().setInstant(t0); CloudName cloud = CloudName.from("cloud"); ZoneApi zone = zone("prod.us-west-1", cloud); @@ -50,7 +50,12 @@ public class OsUpgradeSchedulerTest { Version version1 = Version.fromString("7.0.0.20210302"); tester.clock().advance(Duration.ofDays(15).plus(Duration.ofSeconds(1))); scheduler.maintain(); - assertEquals("New target set", version1, tester.controller().osVersionTarget(cloud).get().osVersion().version()); + assertEquals("Target is unchanged because we're outside trigger period", version0, + tester.controller().osVersionTarget(cloud).get().osVersion().version()); + tester.clock().advance(Duration.ofHours(7)); // Put us inside the trigger period + scheduler.maintain(); + assertEquals("New target set", version1, + tester.controller().osVersionTarget(cloud).get().osVersion().version()); // A few days pass and target remains unchanged tester.clock().advance(Duration.ofDays(2)); diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporter.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporter.java index 9f84322fe0f..d8bbf305b57 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporter.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporter.java @@ -27,6 +27,7 @@ import com.yahoo.vespa.service.monitor.ServiceModel; import com.yahoo.vespa.service.monitor.ServiceMonitor; import java.time.Duration; +import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -66,7 +67,9 @@ public class MetricsReporter extends NodeRepositoryMaintainer { @Override public double maintain() { - NodeList nodes = nodeRepository().nodes().list(); + // Sort by hostname to get deterministic metric reporting order (and hopefully avoid changes + // to metric reporting time so we get double reporting or no reporting within a minute) + NodeList nodes = nodeRepository().nodes().list().sortedBy(Comparator.comparing(Node::hostname)); ServiceModel serviceModel = serviceMonitor.getServiceModelSnapshot(); updateZoneMetrics(); diff --git a/storage/src/tests/storageserver/mergethrottlertest.cpp b/storage/src/tests/storageserver/mergethrottlertest.cpp index 3a153fef9c3..dfeaee031ba 100644 --- a/storage/src/tests/storageserver/mergethrottlertest.cpp +++ b/storage/src/tests/storageserver/mergethrottlertest.cpp @@ -1220,6 +1220,7 @@ TEST_F(MergeThrottlerTest, unknown_merge_with_self_in_chain) { TEST_F(MergeThrottlerTest, busy_returned_on_full_queue) { size_t maxPending = _throttlers[0]->getThrottlePolicy().getMaxPendingCount(); size_t maxQueue = _throttlers[0]->getMaxQueueSize(); + ASSERT_EQ(20, maxQueue); ASSERT_LT(maxPending, 100); for (std::size_t i = 0; i < maxPending + maxQueue; ++i) { std::vector<MergeBucketCommand::Node> nodes; @@ -1233,8 +1234,8 @@ TEST_F(MergeThrottlerTest, busy_returned_on_full_queue) { // Wait till we have maxPending replies and maxQueue queued _topLinks[0]->waitForMessages(maxPending, _messageWaitTime); - EXPECT_EQ(19, _throttlers[0]->getMetrics().queueSize.getMaximum()); waitUntilMergeQueueIs(*_throttlers[0], maxQueue, _messageWaitTime); + EXPECT_EQ(maxQueue, _throttlers[0]->getMetrics().queueSize.getMaximum()); // Clear all forwarded merges _topLinks[0]->getRepliesOnce(); diff --git a/storage/src/vespa/storage/storageserver/mergethrottler.cpp b/storage/src/vespa/storage/storageserver/mergethrottler.cpp index a9bd7ade270..1761abfc097 100644 --- a/storage/src/vespa/storage/storageserver/mergethrottler.cpp +++ b/storage/src/vespa/storage/storageserver/mergethrottler.cpp @@ -416,8 +416,8 @@ MergeThrottler::enqueueMerge( if (!validateNewMerge(mergeCmd, nodeSeq, msgGuard)) { return; } - _metrics->queueSize.set(_queue.size()); _queue.insert(MergePriorityQueue::value_type(msg, _queueSequence++)); + _metrics->queueSize.set(_queue.size()); } bool diff --git a/vespa-feed-client/src/main/java/ai/vespa/feed/client/BenchmarkingCluster.java b/vespa-feed-client/src/main/java/ai/vespa/feed/client/BenchmarkingCluster.java index 0e9bfe0ef46..840219a6bf1 100644 --- a/vespa-feed-client/src/main/java/ai/vespa/feed/client/BenchmarkingCluster.java +++ b/vespa-feed-client/src/main/java/ai/vespa/feed/client/BenchmarkingCluster.java @@ -40,14 +40,14 @@ public class BenchmarkingCluster implements Cluster { @Override public void dispatch(HttpRequest request, CompletableFuture<HttpResponse> vessel) { requests.incrementAndGet(); - long startMillis = System.currentTimeMillis(); + long startNanos = System.nanoTime(); delegate.dispatch(request, vessel); vessel.whenCompleteAsync((response, thrown) -> { results++; if (thrown == null) { responses++; responsesByCode[response.code()]++; - long latency = System.currentTimeMillis() - startMillis; + long latency = (System.nanoTime() - startNanos) / 1_000_000; totalLatencyMillis += latency; minLatencyMillis = Math.min(minLatencyMillis, latency); maxLatencyMillis = Math.max(maxLatencyMillis, latency); diff --git a/vespa-feed-client/src/main/java/ai/vespa/feed/client/HttpRequestStrategy.java b/vespa-feed-client/src/main/java/ai/vespa/feed/client/HttpRequestStrategy.java index 72fa675ecf1..3cce423735f 100644 --- a/vespa-feed-client/src/main/java/ai/vespa/feed/client/HttpRequestStrategy.java +++ b/vespa-feed-client/src/main/java/ai/vespa/feed/client/HttpRequestStrategy.java @@ -59,7 +59,7 @@ class HttpRequestStrategy implements RequestStrategy { }); HttpRequestStrategy(FeedClientBuilder builder) throws IOException { - this(builder, new BenchmarkingCluster(new OkCluster(builder))); + this(builder, new BenchmarkingCluster(new ApacheCluster(builder))); } HttpRequestStrategy(FeedClientBuilder builder, Cluster cluster) { |