summaryrefslogtreecommitdiffstats
path: root/controller-server
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2022-09-23 13:38:52 +0200
committerGitHub <noreply@github.com>2022-09-23 13:38:52 +0200
commitba9328856ecd42d0f4df2dcced793afc51f458b8 (patch)
tree875dc7c4e3fa6fd69d8b8fc599a68ecab1adb357 /controller-server
parent922ce1f4e259c22417300ed3008d29d06c9f35de (diff)
parent5430891caa1c59bb6d0d14a5f7ccadd1855405c3 (diff)
Merge pull request #24196 from vespa-engine/mpolden/lower-interval
Lower OsUpgradeScheduler interval
Diffstat (limited to 'controller-server')
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/dns/NameServiceQueue.java41
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ControllerMaintenance.java2
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/NameServiceDispatcher.java2
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/NameServiceQueueSerializer.java14
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/routing/RoutingApiHandler.java47
5 files changed, 47 insertions, 59 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/dns/NameServiceQueue.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/dns/NameServiceQueue.java
index 89fa560e035..516a1aa265f 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/dns/NameServiceQueue.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/dns/NameServiceQueue.java
@@ -4,7 +4,7 @@ package com.yahoo.vespa.hosted.controller.dns;
import com.yahoo.vespa.hosted.controller.api.integration.dns.NameService;
import com.yahoo.yolean.Exceptions;
-import java.util.Collections;
+import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Objects;
@@ -20,22 +20,15 @@ import java.util.logging.Logger;
*
* @author mpolden
*/
-public class NameServiceQueue {
+public record NameServiceQueue(List<NameServiceRequest> requests) {
public static final NameServiceQueue EMPTY = new NameServiceQueue(List.of());
private static final Logger log = Logger.getLogger(NameServiceQueue.class.getName());
- private final LinkedList<NameServiceRequest> requests;
-
/** DO NOT USE. Public for serialization purposes */
public NameServiceQueue(List<NameServiceRequest> requests) {
- this.requests = new LinkedList<>(Objects.requireNonNull(requests, "requests must be non-null"));
- }
-
- /** Returns a view of requests in this queue */
- public List<NameServiceRequest> requests() {
- return Collections.unmodifiableList(requests);
+ this.requests = List.copyOf(Objects.requireNonNull(requests, "requests must be non-null"));
}
/** Returns a copy of this containing the last n requests */
@@ -50,13 +43,18 @@ public class NameServiceQueue {
/** Returns a copy of this with given request queued according to priority */
public NameServiceQueue with(NameServiceRequest request, Priority priority) {
- var queue = new NameServiceQueue(this.requests);
- if (priority == Priority.high) {
- queue.requests.addFirst(request);
- } else {
- queue.requests.add(request);
+ List<NameServiceRequest> copy = new ArrayList<>(this.requests.size() + 1);
+ switch (priority) {
+ case normal -> {
+ copy.addAll(this.requests);
+ copy.add(request);
+ }
+ case high -> {
+ copy.add(request);
+ copy.addAll(this.requests);
+ }
}
- return queue;
+ return new NameServiceQueue(copy);
}
/** Returns a copy of this with given request added */
@@ -73,19 +71,18 @@ public class NameServiceQueue {
requireNonNegative(n);
if (requests.isEmpty()) return this;
- var queue = new NameServiceQueue(requests);
- for (int i = 0; i < n && !queue.requests.isEmpty(); i++) {
- var request = queue.requests.peek();
+ LinkedList<NameServiceRequest> copy = new LinkedList<>(requests);
+ for (int i = 0; i < n && !copy.isEmpty(); i++) {
+ var request = copy.peek();
try {
request.dispatchTo(nameService);
- queue.requests.poll();
+ copy.poll();
} catch (Exception e) {
log.log(Level.WARNING, "Failed to execute " + request + ": " + Exceptions.toMessageString(e) +
", request will be retried");
}
}
-
- return queue;
+ return new NameServiceQueue(copy);
}
@Override
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ControllerMaintenance.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ControllerMaintenance.java
index ab2e0312b15..9c6ab32a338 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ControllerMaintenance.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ControllerMaintenance.java
@@ -150,7 +150,7 @@ public class ControllerMaintenance extends AbstractComponent {
this.jobRunner = duration(system.isCd() ? 45 : 90, SECONDS);
this.osVersionStatusUpdater = duration(2, MINUTES);
this.osUpgrader = duration(1, MINUTES);
- this.osUpgradeScheduler = duration(3, HOURS);
+ this.osUpgradeScheduler = duration(15, MINUTES);
this.contactInformationMaintainer = duration(12, HOURS);
this.nameServiceDispatcher = duration(10, SECONDS);
this.costReportMaintainer = duration(2, HOURS);
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/NameServiceDispatcher.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/NameServiceDispatcher.java
index 19616f862ab..964d4228f9a 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/NameServiceDispatcher.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/NameServiceDispatcher.java
@@ -38,7 +38,7 @@ public class NameServiceDispatcher extends ControllerMaintainer {
var queue = db.readNameServiceQueue();
var instant = clock.instant();
var remaining = queue.dispatchTo(nameService, requestCount);
- if (queue == remaining) return 1.0; // Queue unchanged
+ if (queue.equals(remaining)) return 1.0; // Queue unchanged
var dispatched = queue.first(requestCount);
if (!dispatched.requests().isEmpty()) {
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/NameServiceQueueSerializer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/NameServiceQueueSerializer.java
index e37f5e895c0..3fd2a262e2e 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/NameServiceQueueSerializer.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/NameServiceQueueSerializer.java
@@ -63,16 +63,10 @@ public class NameServiceQueueSerializer {
root.field(requestsField).traverse((ArrayTraverser) (i, object) -> {
var request = Request.valueOf(object.field(requestType).asString());
switch (request) {
- case createRecords:
- items.add(createRecordsFromSlime(object));
- break;
- case createRecord:
- items.add(createRecordFromSlime(object));
- break;
- case removeRecords:
- items.add(removeRecordsFromSlime(object));
- break;
- default: throw new IllegalArgumentException("No serialization defined for request " + request);
+ case createRecords -> items.add(createRecordsFromSlime(object));
+ case createRecord -> items.add(createRecordFromSlime(object));
+ case removeRecords -> items.add(removeRecordsFromSlime(object));
+ default -> throw new IllegalArgumentException("No serialization defined for request " + request);
}
});
return new NameServiceQueue(items);
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/routing/RoutingApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/routing/RoutingApiHandler.java
index 2ecd63546e6..05dd8257ad0 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/routing/RoutingApiHandler.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/routing/RoutingApiHandler.java
@@ -60,12 +60,12 @@ public class RoutingApiHandler extends AuditLoggingRequestHandler {
public HttpResponse auditAndHandle(HttpRequest request) {
try {
var path = new Path(request.getUri());
- switch (request.getMethod()) {
- case GET: return get(path, request);
- case POST: return post(path, request);
- case DELETE: return delete(path, request);
- default: return ErrorResponse.methodNotAllowed("Method '" + request.getMethod() + "' is not supported");
- }
+ return switch (request.getMethod()) {
+ case GET -> get(path, request);
+ case POST -> post(path, request);
+ case DELETE -> delete(path, request);
+ default -> ErrorResponse.methodNotAllowed("Method '" + request.getMethod() + "' is not supported");
+ };
} catch (IllegalArgumentException e) {
return ErrorResponse.badRequest(Exceptions.toMessageString(e));
} catch (RuntimeException e) {
@@ -106,7 +106,7 @@ public class RoutingApiHandler extends AuditLoggingRequestHandler {
List<DeploymentId> deployments = endpoints.stream()
.flatMap(e -> e.deployments().stream())
.distinct()
- .collect(Collectors.toList());
+ .toList();
Map<DeploymentId, RoutingStatus> deploymentsStatus = deployments.stream()
.collect(Collectors.toMap(
@@ -256,8 +256,7 @@ public class RoutingApiHandler extends AuditLoggingRequestHandler {
EndpointList declaredEndpoints = controller.routing().declaredEndpointsOf(application);
for (var instance : instances) {
var zones = zoneId == null
- ? instance.deployments().keySet().stream().sorted(Comparator.comparing(ZoneId::value))
- .collect(Collectors.toList())
+ ? instance.deployments().keySet().stream().sorted(Comparator.comparing(ZoneId::value)).toList()
: List.of(zoneId);
for (var zone : zones) {
DeploymentId deploymentId = requireDeployment(new DeploymentId(instance.id(), zone), instance);
@@ -350,28 +349,26 @@ public class RoutingApiHandler extends AuditLoggingRequestHandler {
}
private static String asString(RoutingStatus.Value value) {
- switch (value) {
- case in: return "in";
- case out: return "out";
- default: return "unknown";
- }
+ return switch (value) {
+ case in -> "in";
+ case out -> "out";
+ };
}
private static String asString(RoutingStatus.Agent agent) {
- switch (agent) {
- case operator: return "operator";
- case system: return "system";
- case tenant: return "tenant";
- default: return "unknown";
- }
+ return switch (agent) {
+ case operator -> "operator";
+ case system -> "system";
+ case tenant -> "tenant";
+ case unknown -> "unknown";
+ };
}
private static String asString(RoutingMethod method) {
- switch (method) {
- case exclusive: return "exclusive";
- case sharedLayer4: return "sharedLayer4";
- default: return "unknown";
- }
+ return switch (method) {
+ case exclusive -> "exclusive";
+ case sharedLayer4 -> "sharedLayer4";
+ };
}
}