summaryrefslogtreecommitdiffstats
path: root/controller-server
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2019-08-15 13:44:12 +0200
committerMartin Polden <mpolden@mpolden.no>2019-08-15 14:11:22 +0200
commit0f4bf2cfd1e93c9329a3fdd9cf1c52880aca4e1b (patch)
treef2df9b1d1d583fdf199822de794f3387c28e94c8 /controller-server
parent4fed490379fb4363cd33764f13bd7ba0f159d43a (diff)
Reduce code duplication
Diffstat (limited to 'controller-server')
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializer.java61
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/AuditLogSerializer.java3
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/NameServiceQueueSerializer.java4
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/RoutingPolicySerializer.java3
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/Serializers.java27
5 files changed, 47 insertions, 51 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializer.java
index 28474b1181a..74478f1ab0e 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializer.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializer.java
@@ -7,21 +7,20 @@ import com.yahoo.config.application.api.ValidationOverrides;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.ClusterSpec;
import com.yahoo.config.provision.HostName;
+import com.yahoo.config.provision.zone.ZoneId;
import com.yahoo.slime.ArrayTraverser;
import com.yahoo.slime.Cursor;
import com.yahoo.slime.Inspector;
import com.yahoo.slime.ObjectTraverser;
import com.yahoo.slime.Slime;
-import com.yahoo.vespa.config.SlimeUtils;
import com.yahoo.vespa.hosted.controller.Application;
-import com.yahoo.vespa.hosted.controller.api.integration.metrics.MetricsService.ApplicationMetrics;
import com.yahoo.vespa.hosted.controller.api.integration.certificates.ApplicationCertificate;
import com.yahoo.vespa.hosted.controller.api.integration.deployment.ApplicationVersion;
import com.yahoo.vespa.hosted.controller.api.integration.deployment.JobType;
import com.yahoo.vespa.hosted.controller.api.integration.deployment.SourceRevision;
+import com.yahoo.vespa.hosted.controller.api.integration.metrics.MetricsService.ApplicationMetrics;
import com.yahoo.vespa.hosted.controller.api.integration.organization.IssueId;
import com.yahoo.vespa.hosted.controller.api.integration.organization.User;
-import com.yahoo.config.provision.zone.ZoneId;
import com.yahoo.vespa.hosted.controller.application.AssignedRotation;
import com.yahoo.vespa.hosted.controller.application.Change;
import com.yahoo.vespa.hosted.controller.application.ClusterInfo;
@@ -45,7 +44,6 @@ import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
-import java.util.OptionalDouble;
import java.util.OptionalInt;
import java.util.OptionalLong;
import java.util.TreeMap;
@@ -355,15 +353,15 @@ public class ApplicationSerializer {
DeploymentJobs deploymentJobs = deploymentJobsFromSlime(root.field(deploymentJobsField));
Change deploying = changeFromSlime(root.field(deployingField));
Change outstandingChange = changeFromSlime(root.field(outstandingChangeField));
- Optional<IssueId> ownershipIssueId = optionalString(root.field(ownershipIssueIdField)).map(IssueId::from);
- Optional<User> owner = optionalString(root.field(ownerField)).map(User::from);
- OptionalInt majorVersion = optionalInteger(root.field(majorVersionField));
+ Optional<IssueId> ownershipIssueId = Serializers.optionalString(root.field(ownershipIssueIdField)).map(IssueId::from);
+ Optional<User> owner = Serializers.optionalString(root.field(ownerField)).map(User::from);
+ OptionalInt majorVersion = Serializers.optionalInteger(root.field(majorVersionField));
ApplicationMetrics metrics = new ApplicationMetrics(root.field(queryQualityField).asDouble(),
root.field(writeQualityField).asDouble());
- Optional<String> pemDeployKey = optionalString(root.field(pemDeployKeyField));
+ Optional<String> pemDeployKey = Serializers.optionalString(root.field(pemDeployKeyField));
List<AssignedRotation> assignedRotations = assignedRotationsFromSlime(deploymentSpec, root);
Map<HostName, RotationStatus> rotationStatus = rotationStatusFromSlime(root.field(rotationStatusField));
- Optional<ApplicationCertificate> applicationCertificate = optionalString(root.field(applicationCertificateField)).map(ApplicationCertificate::new);
+ Optional<ApplicationCertificate> applicationCertificate = Serializers.optionalString(root.field(applicationCertificateField)).map(ApplicationCertificate::new);
return new Application(id, createdAt, deploymentSpec, validationOverrides, deployments, deploymentJobs,
deploying, outstandingChange, ownershipIssueId, owner, majorVersion, metrics,
@@ -384,10 +382,10 @@ public class ApplicationSerializer {
clusterUtilsMapFromSlime(deploymentObject.field(clusterUtilsField)),
clusterInfoMapFromSlime(deploymentObject.field(clusterInfoField)),
deploymentMetricsFromSlime(deploymentObject.field(deploymentMetricsField)),
- DeploymentActivity.create(optionalInstant(deploymentObject.field(lastQueriedField)),
- optionalInstant(deploymentObject.field(lastWrittenField)),
- optionalDouble(deploymentObject.field(lastQueriesPerSecondField)),
- optionalDouble(deploymentObject.field(lastWritesPerSecondField))));
+ DeploymentActivity.create(Serializers.optionalInstant(deploymentObject.field(lastQueriedField)),
+ Serializers.optionalInstant(deploymentObject.field(lastWrittenField)),
+ Serializers.optionalDouble(deploymentObject.field(lastQueriesPerSecondField)),
+ Serializers.optionalDouble(deploymentObject.field(lastWritesPerSecondField))));
}
private DeploymentMetrics deploymentMetricsFromSlime(Inspector object) {
@@ -463,14 +461,14 @@ public class ApplicationSerializer {
private ApplicationVersion applicationVersionFromSlime(Inspector object) {
if ( ! object.valid()) return ApplicationVersion.unknown;
- OptionalLong applicationBuildNumber = optionalLong(object.field(applicationBuildNumberField));
+ OptionalLong applicationBuildNumber = Serializers.optionalLong(object.field(applicationBuildNumberField));
Optional<SourceRevision> sourceRevision = sourceRevisionFromSlime(object.field(sourceRevisionField));
if (sourceRevision.isEmpty() || applicationBuildNumber.isEmpty()) {
return ApplicationVersion.unknown;
}
- Optional<String> authorEmail = optionalString(object.field(authorEmailField));
- Optional<Version> compileVersion = optionalString(object.field(compileVersionField)).map(Version::fromString);
- Optional<Instant> buildTime = optionalInstant(object.field(buildTimeField));
+ Optional<String> authorEmail = Serializers.optionalString(object.field(authorEmailField));
+ Optional<Version> compileVersion = Serializers.optionalString(object.field(compileVersionField)).map(Version::fromString);
+ Optional<Instant> buildTime = Serializers.optionalInstant(object.field(buildTimeField));
if (authorEmail.isEmpty())
return ApplicationVersion.from(sourceRevision.get(), applicationBuildNumber.getAsLong());
@@ -490,9 +488,9 @@ public class ApplicationSerializer {
}
private DeploymentJobs deploymentJobsFromSlime(Inspector object) {
- OptionalLong projectId = optionalLong(object.field(projectIdField));
+ OptionalLong projectId = Serializers.optionalLong(object.field(projectIdField));
List<JobStatus> jobStatusList = jobStatusListFromSlime(object.field(jobStatusField));
- Optional<IssueId> issueId = optionalString(object.field(issueIdField)).map(IssueId::from);
+ Optional<IssueId> issueId = Serializers.optionalString(object.field(issueIdField)).map(IssueId::from);
boolean builtInternally = object.field(builtInternallyField).asBool();
return new DeploymentJobs(projectId, jobStatusList, issueId, builtInternally);
@@ -533,7 +531,7 @@ public class ApplicationSerializer {
jobRunFromSlime(object.field(lastCompletedField)),
jobRunFromSlime(object.field(firstFailingField)),
jobRunFromSlime(object.field(lastSuccessField)),
- optionalLong(object.field(pausedUntilField))));
+ Serializers.optionalLong(object.field(pausedUntilField))));
}
private Optional<JobStatus.JobRun> jobRunFromSlime(Inspector object) {
@@ -541,7 +539,7 @@ public class ApplicationSerializer {
return Optional.of(new JobStatus.JobRun(object.field(jobRunIdField).asLong(),
new Version(object.field(versionField).asString()),
applicationVersionFromSlime(object.field(revisionField)),
- optionalString(object.field(sourceVersionField)).map(Version::fromString),
+ Serializers.optionalString(object.field(sourceVersionField)).map(Version::fromString),
Optional.of(object.field(sourceApplicationField)).filter(Inspector::valid).map(this::applicationVersionFromSlime),
object.field(reasonField).asString(),
Instant.ofEpochMilli(object.field(atField).asLong())));
@@ -564,25 +562,4 @@ public class ApplicationSerializer {
return List.copyOf(assignedRotations.values());
}
- private OptionalLong optionalLong(Inspector field) {
- return field.valid() ? OptionalLong.of(field.asLong()) : OptionalLong.empty();
- }
-
- private OptionalInt optionalInteger(Inspector field) {
- return field.valid() ? OptionalInt.of((int) field.asLong()) : OptionalInt.empty();
- }
-
- private OptionalDouble optionalDouble(Inspector field) {
- return field.valid() ? OptionalDouble.of(field.asDouble()) : OptionalDouble.empty();
- }
-
- private Optional<String> optionalString(Inspector field) {
- return SlimeUtils.optionalString(field);
- }
-
- private Optional<Instant> optionalInstant(Inspector field) {
- OptionalLong value = optionalLong(field);
- return value.isPresent() ? Optional.of(Instant.ofEpochMilli(value.getAsLong())) : Optional.empty();
- }
-
}
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/AuditLogSerializer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/AuditLogSerializer.java
index d18e561ce5d..b411f460568 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/AuditLogSerializer.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/AuditLogSerializer.java
@@ -10,7 +10,6 @@ import com.yahoo.vespa.hosted.controller.auditlog.AuditLog;
import java.time.Instant;
import java.util.ArrayList;
import java.util.List;
-import java.util.function.Function;
/**
* Slime serializer for {@link AuditLog}.
@@ -57,7 +56,7 @@ public class AuditLogSerializer {
entryObject.field(principalField).asString(),
methodFrom(entryObject.field(methodField)),
entryObject.field(resourceField).asString(),
- Serializers.optionalField(entryObject.field(dataField), Function.identity())
+ Serializers.optionalString(entryObject.field(dataField))
));
});
return new AuditLog(entries);
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 e3dedd65e68..ff1dd4d95c6 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
@@ -113,8 +113,8 @@ public class NameServiceQueueSerializer {
private RemoveRecords removeRecordsFromSlime(Inspector object) {
var type = Record.Type.valueOf(object.field(typeField).asString());
- var name = Serializers.optionalField(object.field(nameField), RecordName::from);
- var data = Serializers.optionalField(object.field(dataField), RecordData::from);
+ var name = Serializers.optionalString(object.field(nameField)).map(RecordName::from);
+ var data = Serializers.optionalString(object.field(dataField)).map(RecordData::from);
return new RemoveRecords(type, name, data);
}
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/RoutingPolicySerializer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/RoutingPolicySerializer.java
index 80858e713c2..890fa31bc4d 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/RoutingPolicySerializer.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/RoutingPolicySerializer.java
@@ -13,7 +13,6 @@ import com.yahoo.vespa.hosted.controller.application.RoutingPolicy;
import java.util.Collections;
import java.util.LinkedHashSet;
import java.util.Set;
-import java.util.function.Function;
/**
* Serializer and deserializer for a {@link RoutingPolicy}.
@@ -66,7 +65,7 @@ public class RoutingPolicySerializer {
ClusterSpec.Id.from(inspect.field(clusterField).asString()),
ZoneId.from(inspect.field(zoneField).asString()),
HostName.from(inspect.field(canonicalNameField).asString()),
- Serializers.optionalField(inspect.field(dnsZoneField), Function.identity()),
+ Serializers.optionalString(inspect.field(dnsZoneField)),
endpointIds));
});
return Collections.unmodifiableSet(policies);
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/Serializers.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/Serializers.java
index ef4e8bf80d7..841cb387e54 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/Serializers.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/Serializers.java
@@ -2,9 +2,13 @@
package com.yahoo.vespa.hosted.controller.persistence;
import com.yahoo.slime.Inspector;
+import com.yahoo.vespa.config.SlimeUtils;
+import java.time.Instant;
import java.util.Optional;
-import java.util.function.Function;
+import java.util.OptionalDouble;
+import java.util.OptionalInt;
+import java.util.OptionalLong;
/**
* Reusable serialization logic.
@@ -15,8 +19,25 @@ public class Serializers {
private Serializers() {}
- public static <T> Optional<T> optionalField(Inspector field, Function<String, T> fieldMapper) {
- return Optional.of(field).filter(Inspector::valid).map(Inspector::asString).map(fieldMapper);
+ public static OptionalLong optionalLong(Inspector field) {
+ return field.valid() ? OptionalLong.of(field.asLong()) : OptionalLong.empty();
+ }
+
+ public static OptionalInt optionalInteger(Inspector field) {
+ return field.valid() ? OptionalInt.of((int) field.asLong()) : OptionalInt.empty();
+ }
+
+ public static OptionalDouble optionalDouble(Inspector field) {
+ return field.valid() ? OptionalDouble.of(field.asDouble()) : OptionalDouble.empty();
+ }
+
+ public static Optional<String> optionalString(Inspector field) {
+ return SlimeUtils.optionalString(field);
+ }
+
+ public static Optional<Instant> optionalInstant(Inspector field) {
+ var value = optionalLong(field);
+ return value.isPresent() ? Optional.of(Instant.ofEpochMilli(value.getAsLong())) : Optional.empty();
}
}