diff options
author | Martin Polden <mpolden@mpolden.no> | 2019-08-15 13:44:12 +0200 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2019-08-15 14:11:22 +0200 |
commit | 0f4bf2cfd1e93c9329a3fdd9cf1c52880aca4e1b (patch) | |
tree | f2df9b1d1d583fdf199822de794f3387c28e94c8 /controller-server | |
parent | 4fed490379fb4363cd33764f13bd7ba0f159d43a (diff) |
Reduce code duplication
Diffstat (limited to 'controller-server')
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(); } } |