diff options
author | Martin Polden <mpolden@mpolden.no> | 2022-09-13 13:40:47 +0200 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2022-09-23 10:50:16 +0200 |
commit | 8d5fc524c26fe61c4cb9f3303c3c464338b69d3e (patch) | |
tree | 8ef299c61bcf4cdc0f2e296c28112f209471cc49 /controller-server | |
parent | 4546243e16b79e2fdb999a25ec93b54dd5d75196 (diff) |
Convert to record
Diffstat (limited to 'controller-server')
3 files changed, 24 insertions, 33 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/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); |