summaryrefslogtreecommitdiffstats
path: root/controller-server
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2022-09-13 13:40:47 +0200
committerMartin Polden <mpolden@mpolden.no>2022-09-23 10:50:16 +0200
commit8d5fc524c26fe61c4cb9f3303c3c464338b69d3e (patch)
tree8ef299c61bcf4cdc0f2e296c28112f209471cc49 /controller-server
parent4546243e16b79e2fdb999a25ec93b54dd5d75196 (diff)
Convert to record
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/NameServiceDispatcher.java2
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/NameServiceQueueSerializer.java14
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);