diff options
author | Jon Marius Venstad <jonmv@users.noreply.github.com> | 2021-06-21 11:12:24 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-06-21 11:12:24 +0200 |
commit | 1fd7aa975463ffc97e13dbfc7a862703b623c356 (patch) | |
tree | c50931fda0e3e8ea57f1756f1b18f132d4759ff4 /controller-server | |
parent | d8c78f91e7cc31359c6b8c83fd3abbbf12990b07 (diff) | |
parent | 5e5351d145ea31f3ac8fcebf5a845f6dfe3e61dc (diff) |
Merge pull request #18332 from vespa-engine/mpolden/cleanup
Move helper methods to SlimeUtils
Diffstat (limited to 'controller-server')
13 files changed, 64 insertions, 110 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 06442779b9c..26fb4be04af 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 @@ -295,18 +295,18 @@ public class ApplicationSerializer { Inspector root = slime.get(); TenantAndApplicationId id = TenantAndApplicationId.fromSerialized(root.field(idField).asString()); - Instant createdAt = Serializers.instant(root.field(createdAtField)); + Instant createdAt = SlimeUtils.instant(root.field(createdAtField)); DeploymentSpec deploymentSpec = DeploymentSpec.fromXml(root.field(deploymentSpecField).asString(), false); ValidationOverrides validationOverrides = ValidationOverrides.fromXml(root.field(validationOverridesField).asString()); - Optional<IssueId> deploymentIssueId = Serializers.optionalString(root.field(deploymentIssueField)).map(IssueId::from); - 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)); + Optional<IssueId> deploymentIssueId = SlimeUtils.optionalString(root.field(deploymentIssueField)).map(IssueId::from); + Optional<IssueId> ownershipIssueId = SlimeUtils.optionalString(root.field(ownershipIssueIdField)).map(IssueId::from); + Optional<User> owner = SlimeUtils.optionalString(root.field(ownerField)).map(User::from); + OptionalInt majorVersion = SlimeUtils.optionalInteger(root.field(majorVersionField)); ApplicationMetrics metrics = new ApplicationMetrics(root.field(queryQualityField).asDouble(), root.field(writeQualityField).asDouble()); Set<PublicKey> deployKeys = deployKeysFromSlime(root.field(pemDeployKeysField)); List<Instance> instances = instancesFromSlime(id, root.field(instancesField)); - OptionalLong projectId = Serializers.optionalLong(root.field(projectIdField)); + OptionalLong projectId = SlimeUtils.optionalLong(root.field(projectIdField)); Optional<ApplicationVersion> latestVersion = latestVersionFromSlime(root.field(latestVersionField)); return new Application(id, createdAt, deploymentSpec, validationOverrides, @@ -354,18 +354,18 @@ public class ApplicationSerializer { return new Deployment(zoneIdFromSlime(deploymentObject.field(zoneField)), applicationVersionFromSlime(deploymentObject.field(applicationPackageRevisionField)), Version.fromString(deploymentObject.field(versionField).asString()), - Serializers.instant(deploymentObject.field(deployTimeField)), + SlimeUtils.instant(deploymentObject.field(deployTimeField)), deploymentMetricsFromSlime(deploymentObject.field(deploymentMetricsField)), - DeploymentActivity.create(Serializers.optionalInstant(deploymentObject.field(lastQueriedField)), - Serializers.optionalInstant(deploymentObject.field(lastWrittenField)), - Serializers.optionalDouble(deploymentObject.field(lastQueriesPerSecondField)), - Serializers.optionalDouble(deploymentObject.field(lastWritesPerSecondField))), - QuotaUsage.create(Serializers.optionalDouble(deploymentObject.field(quotaUsageRateField))), - Serializers.optionalDouble(deploymentObject.field(deploymentCostField))); + DeploymentActivity.create(SlimeUtils.optionalInstant(deploymentObject.field(lastQueriedField)), + SlimeUtils.optionalInstant(deploymentObject.field(lastWrittenField)), + SlimeUtils.optionalDouble(deploymentObject.field(lastQueriesPerSecondField)), + SlimeUtils.optionalDouble(deploymentObject.field(lastWritesPerSecondField))), + QuotaUsage.create(SlimeUtils.optionalDouble(deploymentObject.field(quotaUsageRateField))), + SlimeUtils.optionalDouble(deploymentObject.field(deploymentCostField))); } private DeploymentMetrics deploymentMetricsFromSlime(Inspector object) { - Optional<Instant> instant = Serializers.optionalInstant(object.field(deploymentMetricsUpdateTime)); + Optional<Instant> instant = SlimeUtils.optionalInstant(object.field(deploymentMetricsUpdateTime)); return new DeploymentMetrics(object.field(deploymentMetricsQPSField).asDouble(), object.field(deploymentMetricsWPSField).asDouble(), object.field(deploymentMetricsDocsField).asDouble(), @@ -388,7 +388,7 @@ public class ApplicationSerializer { object.traverse((ArrayTraverser) (idx, statusObject) -> statusMap.put(new RotationId(statusObject.field(rotationIdField).asString()), new RotationStatus.Targets( singleRotationStatusFromSlime(statusObject.field(statusField)), - Serializers.instant(statusObject.field(lastUpdatedField))))); + SlimeUtils.instant(statusObject.field(lastUpdatedField))))); return RotationStatus.from(statusMap); } @@ -411,16 +411,16 @@ public class ApplicationSerializer { private ApplicationVersion applicationVersionFromSlime(Inspector object) { if ( ! object.valid()) return ApplicationVersion.unknown; - OptionalLong applicationBuildNumber = Serializers.optionalLong(object.field(applicationBuildNumberField)); + OptionalLong applicationBuildNumber = SlimeUtils.optionalLong(object.field(applicationBuildNumberField)); if (applicationBuildNumber.isEmpty()) return ApplicationVersion.unknown; Optional<SourceRevision> sourceRevision = sourceRevisionFromSlime(object.field(sourceRevisionField)); - 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)); - Optional<String> sourceUrl = Serializers.optionalString(object.field(sourceUrlField)); - Optional<String> commit = Serializers.optionalString(object.field(commitField)); + Optional<String> authorEmail = SlimeUtils.optionalString(object.field(authorEmailField)); + Optional<Version> compileVersion = SlimeUtils.optionalString(object.field(compileVersionField)).map(Version::fromString); + Optional<Instant> buildTime = SlimeUtils.optionalInstant(object.field(buildTimeField)); + Optional<String> sourceUrl = SlimeUtils.optionalString(object.field(sourceUrlField)); + Optional<String> commit = SlimeUtils.optionalString(object.field(commitField)); return new ApplicationVersion(sourceRevision, applicationBuildNumber, authorEmail, compileVersion, buildTime, sourceUrl, commit); } @@ -437,7 +437,7 @@ public class ApplicationSerializer { object.field(jobStatusField).traverse((ArrayTraverser) (__, jobPauseObject) -> JobType.fromOptionalJobName(jobPauseObject.field(jobTypeField).asString()) .ifPresent(jobType -> jobPauses.put(jobType, - Serializers.instant(jobPauseObject.field(pausedUntilField))))); + SlimeUtils.instant(jobPauseObject.field(pausedUntilField))))); return jobPauses; } 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 7ea722bf5de..e5253462730 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 @@ -5,6 +5,7 @@ import com.yahoo.slime.ArrayTraverser; import com.yahoo.slime.Cursor; import com.yahoo.slime.Inspector; import com.yahoo.slime.Slime; +import com.yahoo.slime.SlimeUtils; import com.yahoo.vespa.hosted.controller.auditlog.AuditLog; import java.util.ArrayList; @@ -51,11 +52,11 @@ public class AuditLogSerializer { Cursor root = slime.get(); root.field(entriesField).traverse((ArrayTraverser) (i, entryObject) -> { entries.add(new AuditLog.Entry( - Serializers.instant(entryObject.field(atField)), + SlimeUtils.instant(entryObject.field(atField)), entryObject.field(principalField).asString(), methodFrom(entryObject.field(methodField)), entryObject.field(resourceField).asString(), - Serializers.optionalString(entryObject.field(dataField)) + SlimeUtils.optionalString(entryObject.field(dataField)) )); }); return new AuditLog(entries); diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ControllerVersionSerializer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ControllerVersionSerializer.java index 30fcc0e40c6..24a6ef72438 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ControllerVersionSerializer.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ControllerVersionSerializer.java @@ -3,6 +3,7 @@ package com.yahoo.vespa.hosted.controller.persistence; import com.yahoo.component.Version; import com.yahoo.slime.Slime; +import com.yahoo.slime.SlimeUtils; import com.yahoo.vespa.hosted.controller.versions.ControllerVersion; /** @@ -36,7 +37,7 @@ public class ControllerVersionSerializer { var root = slime.get(); var version = Version.fromString(root.field(VERSION_FIELD).asString()); var commitSha = root.field(COMMIT_SHA_FIELD).asString(); - var commitDate = Serializers.instant(root.field(COMMIT_DATE_FIELD)); + var commitDate = SlimeUtils.instant(root.field(COMMIT_DATE_FIELD)); return new ControllerVersion(version, commitSha, commitDate); } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/LogSerializer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/LogSerializer.java index 6416d077ce4..4e3ab293a02 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/LogSerializer.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/LogSerializer.java @@ -92,7 +92,7 @@ class LogSerializer { private LogEntry fromSlime(Inspector entryObject) { return new LogEntry(entryObject.field(idField).asLong(), - Serializers.instant(entryObject.field(timestampField)), + SlimeUtils.instant(entryObject.field(timestampField)), typeOf(entryObject.field(typeField).asString()), entryObject.field(messageField).asString()); } 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 ff1dd4d95c6..dd431d94d94 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 @@ -6,6 +6,7 @@ import com.yahoo.slime.ArrayTraverser; import com.yahoo.slime.Cursor; import com.yahoo.slime.Inspector; import com.yahoo.slime.Slime; +import com.yahoo.slime.SlimeUtils; import com.yahoo.vespa.hosted.controller.api.integration.dns.Record; import com.yahoo.vespa.hosted.controller.api.integration.dns.RecordData; import com.yahoo.vespa.hosted.controller.api.integration.dns.RecordName; @@ -113,8 +114,8 @@ public class NameServiceQueueSerializer { private RemoveRecords removeRecordsFromSlime(Inspector object) { var type = Record.Type.valueOf(object.field(typeField).asString()); - var name = Serializers.optionalString(object.field(nameField)).map(RecordName::from); - var data = Serializers.optionalString(object.field(dataField)).map(RecordData::from); + var name = SlimeUtils.optionalString(object.field(nameField)).map(RecordName::from); + var data = SlimeUtils.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/NodeVersionSerializer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/NodeVersionSerializer.java index f9f8de96591..2861e8922a5 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/NodeVersionSerializer.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/NodeVersionSerializer.java @@ -8,6 +8,7 @@ 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.SlimeUtils; import com.yahoo.vespa.hosted.controller.versions.NodeVersion; import com.yahoo.vespa.hosted.controller.versions.NodeVersions; @@ -47,7 +48,7 @@ public class NodeVersionSerializer { var hostname = HostName.from(entry.field(hostnameField).asString()); var zone = ZoneId.from(entry.field(zoneField).asString()); var wantedVersion = Version.fromString(entry.field(wantedVersionField).asString()); - var suspendedAt = Serializers.optionalInstant(entry.field(suspendedAtField)); + var suspendedAt = SlimeUtils.optionalInstant(entry.field(suspendedAtField)); nodeVersions.put(hostname, new NodeVersion(hostname, zone, version, wantedVersion, suspendedAt)); }); return new NodeVersions(nodeVersions.build()); diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/NotificationsSerializer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/NotificationsSerializer.java index 06263329091..ba1c5350580 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/NotificationsSerializer.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/NotificationsSerializer.java @@ -74,18 +74,18 @@ public class NotificationsSerializer { private static Notification fromInspector(TenantName tenantName, Inspector inspector) { return new Notification( - Serializers.instant(inspector.field(atFieldName)), - typeFrom(inspector.field(typeField)), - levelFrom(inspector.field(levelField)), - new NotificationSource( - tenantName, - Serializers.optionalString(inspector.field(applicationField)).map(ApplicationName::from), - Serializers.optionalString(inspector.field(instanceField)).map(InstanceName::from), - Serializers.optionalString(inspector.field(zoneField)).map(ZoneId::from), - Serializers.optionalString(inspector.field(clusterIdField)).map(ClusterSpec.Id::from), - Serializers.optionalString(inspector.field(jobTypeField)).map(JobType::fromJobName), - Serializers.optionalLong(inspector.field(runNumberField))), - SlimeUtils.entriesStream(inspector.field(messagesField)).map(Inspector::asString).collect(Collectors.toUnmodifiableList())); + SlimeUtils.instant(inspector.field(atFieldName)), + typeFrom(inspector.field(typeField)), + levelFrom(inspector.field(levelField)), + new NotificationSource( + tenantName, + SlimeUtils.optionalString(inspector.field(applicationField)).map(ApplicationName::from), + SlimeUtils.optionalString(inspector.field(instanceField)).map(InstanceName::from), + SlimeUtils.optionalString(inspector.field(zoneField)).map(ZoneId::from), + SlimeUtils.optionalString(inspector.field(clusterIdField)).map(ClusterSpec.Id::from), + SlimeUtils.optionalString(inspector.field(jobTypeField)).map(JobType::fromJobName), + SlimeUtils.optionalLong(inspector.field(runNumberField))), + SlimeUtils.entriesStream(inspector.field(messagesField)).map(Inspector::asString).collect(Collectors.toUnmodifiableList())); } private static String asString(Notification.Type type) { diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/OsVersionTargetSerializer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/OsVersionTargetSerializer.java index 6942fc0549f..7c27533c144 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/OsVersionTargetSerializer.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/OsVersionTargetSerializer.java @@ -42,9 +42,7 @@ public class OsVersionTargetSerializer { Set<OsVersionTarget> osVersionTargets = new TreeSet<>(); array.traverse((ArrayTraverser) (i, inspector) -> { OsVersion osVersion = osVersionSerializer.fromSlime(inspector); - // TODO(mpolden): Require this field after 2021-05-01 - Duration upgradeBudget = Serializers.optionalDuration(inspector.field(upgradeBudgetField)) - .orElse(Duration.ZERO); + Duration upgradeBudget = Duration.ofMillis(inspector.field(upgradeBudgetField).asLong()); osVersionTargets.add(new OsVersionTarget(osVersion, upgradeBudget)); }); return Collections.unmodifiableSet(osVersionTargets); 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 2697651f61b..d14cd780a8c 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 @@ -9,6 +9,7 @@ import com.yahoo.slime.ArrayTraverser; import com.yahoo.slime.Cursor; import com.yahoo.slime.Inspector; import com.yahoo.slime.Slime; +import com.yahoo.slime.SlimeUtils; import com.yahoo.vespa.hosted.controller.application.EndpointId; import com.yahoo.vespa.hosted.controller.routing.GlobalRouting; import com.yahoo.vespa.hosted.controller.routing.RoutingPolicy; @@ -80,7 +81,7 @@ public class RoutingPolicySerializer { ZoneId.from(inspect.field(zoneField).asString())); policies.put(id, new RoutingPolicy(id, HostName.from(inspect.field(canonicalNameField).asString()), - Serializers.optionalString(inspect.field(dnsZoneField)), + SlimeUtils.optionalString(inspect.field(dnsZoneField)), endpointIds, new Status(inspect.field(loadBalancerActiveField).asBool(), globalRoutingFromSlime(inspect.field(globalRoutingField))))); @@ -97,7 +98,7 @@ public class RoutingPolicySerializer { public GlobalRouting globalRoutingFromSlime(Inspector object) { var status = GlobalRouting.Status.valueOf(object.field(statusField).asString()); var agent = GlobalRouting.Agent.valueOf(object.field(agentField).asString()); - var changedAt = Serializers.optionalInstant(object.field(changedAtField)).orElse(Instant.EPOCH); + var changedAt = SlimeUtils.optionalInstant(object.field(changedAtField)).orElse(Instant.EPOCH); return new GlobalRouting(status, agent, changedAt); } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/RunSerializer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/RunSerializer.java index 60d8afe0f5e..87527085237 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/RunSerializer.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/RunSerializer.java @@ -9,6 +9,7 @@ import com.yahoo.slime.Cursor; import com.yahoo.slime.Inspector; import com.yahoo.slime.ObjectTraverser; import com.yahoo.slime.Slime; +import com.yahoo.slime.SlimeUtils; 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.RunId; @@ -121,7 +122,7 @@ class RunSerializer { // For historical reasons are the step details stored in a separate JSON structure from the step statuses. Inspector stepDetailsField = detailsField.field(step); Inspector startTimeValue = stepDetailsField.field(startTimeField); - Optional<Instant> startTime = Serializers.optionalInstant(startTimeValue); + Optional<Instant> startTime = SlimeUtils.optionalInstant(startTimeValue); steps.put(typedStep, new StepInfo(typedStep, stepStatusOf(status.asString()), startTime)); }); @@ -130,12 +131,12 @@ class RunSerializer { runObject.field(numberField).asLong()), steps, versionsFromSlime(runObject.field(versionsField)), - Serializers.instant(runObject.field(startField)), - Serializers.optionalInstant(runObject.field(endField)), + SlimeUtils.instant(runObject.field(startField)), + SlimeUtils.optionalInstant(runObject.field(endField)), runStatusOf(runObject.field(statusField).asString()), runObject.field(lastTestRecordField).asLong(), Instant.EPOCH.plus(runObject.field(lastVespaLogTimestampField).asLong(), ChronoUnit.MICROS), - Serializers.optionalInstant(runObject.field(noNodesDownSinceField)), + SlimeUtils.optionalInstant(runObject.field(noNodesDownSinceField)), convergenceSummaryFrom(runObject.field(convergenceSummaryField)), Optional.of(runObject.field(testerCertificateField)) .filter(Inspector::valid) @@ -166,11 +167,11 @@ class RunSerializer { versionObject.field(branchField).asString(), versionObject.field(commitField).asString())) .filter(revision -> ! revision.commit().isBlank() && ! revision.repository().isBlank() && ! revision.branch().isBlank()); - Optional<String> authorEmail = Serializers.optionalString(versionObject.field(authorEmailField)); - Optional<Version> compileVersion = Serializers.optionalString(versionObject.field(compileVersionField)).map(Version::fromString); - Optional<Instant> buildTime = Serializers.optionalInstant(versionObject.field(buildTimeField)); - Optional<String> sourceUrl = Serializers.optionalString(versionObject.field(sourceUrlField)); - Optional<String> commit = Serializers.optionalString(versionObject.field(commitField)); + Optional<String> authorEmail = SlimeUtils.optionalString(versionObject.field(authorEmailField)); + Optional<Version> compileVersion = SlimeUtils.optionalString(versionObject.field(compileVersionField)).map(Version::fromString); + Optional<Instant> buildTime = SlimeUtils.optionalInstant(versionObject.field(buildTimeField)); + Optional<String> sourceUrl = SlimeUtils.optionalString(versionObject.field(sourceUrlField)); + Optional<String> commit = SlimeUtils.optionalString(versionObject.field(commitField)); return new ApplicationVersion(source, OptionalLong.of(buildNumber), authorEmail, compileVersion, buildTime, sourceUrl, commit); 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 deleted file mode 100644 index 7c8a09e244e..00000000000 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/Serializers.java +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.vespa.hosted.controller.persistence; - -import com.yahoo.slime.Inspector; -import com.yahoo.slime.SlimeUtils; - -import java.time.Duration; -import java.time.Instant; -import java.util.Optional; -import java.util.OptionalDouble; -import java.util.OptionalInt; -import java.util.OptionalLong; - -/** - * Reusable serialization logic. - * - * @author mpolden - */ -public class Serializers { - - private Serializers() {} - - public static Instant instant(Inspector field) { - return Instant.ofEpochMilli(field.asLong()); - } - - 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) { - return optionalLong(field).stream().mapToObj(Instant::ofEpochMilli).findFirst(); - } - - public static Optional<Duration> optionalDuration(Inspector field) { - return optionalLong(field).stream().mapToObj(Duration::ofMillis).findFirst(); - } - -} diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/TenantSerializer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/TenantSerializer.java index 8e97368624d..6b167f26314 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/TenantSerializer.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/TenantSerializer.java @@ -151,14 +151,14 @@ public class TenantSerializer { Property property = new Property(tenantObject.field(propertyField).asString()); Optional<PropertyId> propertyId = SlimeUtils.optionalString(tenantObject.field(propertyIdField)).map(PropertyId::new); Optional<Contact> contact = contactFrom(tenantObject.field(contactField)); - Instant createdAt = Serializers.instant(tenantObject.field(createdAtField)); + Instant createdAt = SlimeUtils.instant(tenantObject.field(createdAtField)); LastLoginInfo lastLoginInfo = lastLoginInfoFromSlime(tenantObject.field(lastLoginInfoField)); return new AthenzTenant(name, domain, property, propertyId, contact, createdAt, lastLoginInfo); } private CloudTenant cloudTenantFrom(Inspector tenantObject) { TenantName name = TenantName.from(tenantObject.field(nameField).asString()); - Instant createdAt = Serializers.instant(tenantObject.field(createdAtField)); + Instant createdAt = SlimeUtils.instant(tenantObject.field(createdAtField)); LastLoginInfo lastLoginInfo = lastLoginInfoFromSlime(tenantObject.field(lastLoginInfoField)); Optional<Principal> creator = SlimeUtils.optionalString(tenantObject.field(creatorField)).map(SimplePrincipal::new); BiMap<PublicKey, Principal> developerKeys = developerKeysFromSlime(tenantObject.field(pemDeveloperKeysField)); @@ -227,7 +227,7 @@ public class TenantSerializer { private LastLoginInfo lastLoginInfoFromSlime(Inspector lastLoginInfoObject) { Map<LastLoginInfo.UserLevel, Instant> lastLoginByUserLevel = new HashMap<>(); lastLoginInfoObject.traverse((String name, Inspector value) -> - lastLoginByUserLevel.put(userLevelOf(name), Serializers.instant(value))); + lastLoginByUserLevel.put(userLevelOf(name), SlimeUtils.instant(value))); return new LastLoginInfo(lastLoginByUserLevel); } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/VersionStatusSerializer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/VersionStatusSerializer.java index 12d15aa7cdd..eccda7332e1 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/VersionStatusSerializer.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/VersionStatusSerializer.java @@ -7,6 +7,7 @@ import com.yahoo.slime.ArrayTraverser; import com.yahoo.slime.Cursor; import com.yahoo.slime.Inspector; import com.yahoo.slime.Slime; +import com.yahoo.slime.SlimeUtils; import com.yahoo.vespa.hosted.controller.versions.NodeVersions; import com.yahoo.vespa.hosted.controller.versions.VersionStatus; import com.yahoo.vespa.hosted.controller.versions.VespaVersion; @@ -106,7 +107,7 @@ public class VersionStatusSerializer { var version = Version.fromString(object.field(deploymentStatisticsField).field(versionField).asString()); return new VespaVersion(version, object.field(releaseCommitField).asString(), - Serializers.instant(object.field(committedAtField)), + SlimeUtils.instant(object.field(committedAtField)), object.field(isControllerVersionField).asBool(), object.field(isSystemVersionField).asBool(), object.field(isReleasedField).asBool(), |