aboutsummaryrefslogtreecommitdiffstats
path: root/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ArchiveBucketsSerializer.java
diff options
context:
space:
mode:
Diffstat (limited to 'controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ArchiveBucketsSerializer.java')
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ArchiveBucketsSerializer.java61
1 files changed, 41 insertions, 20 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ArchiveBucketsSerializer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ArchiveBucketsSerializer.java
index a4c7c50085c..f40193510ce 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ArchiveBucketsSerializer.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ArchiveBucketsSerializer.java
@@ -1,12 +1,15 @@
// Copyright Yahoo. 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.config.provision.CloudAccount;
import com.yahoo.config.provision.TenantName;
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.archive.ArchiveBucket;
+import com.yahoo.vespa.hosted.controller.api.integration.archive.ArchiveBuckets;
+import com.yahoo.vespa.hosted.controller.api.integration.archive.TenantManagedArchiveBucket;
+import com.yahoo.vespa.hosted.controller.api.integration.archive.VespaManagedArchiveBucket;
import java.util.Set;
import java.util.stream.Collectors;
@@ -25,46 +28,64 @@ public class ArchiveBucketsSerializer {
// - REMOVING FIELDS: Stop reading the field first. Stop writing it on a later version.
// - CHANGING THE FORMAT OF A FIELD: Don't do it bro.
- private final static String bucketsFieldName = "buckets";
+ private final static String vespaManagedBucketsFieldName = "buckets";
+ private final static String tenantManagedBucketsFieldName = "tenantManagedBuckets";
private final static String bucketNameFieldName = "bucketName";
private final static String keyArnFieldName = "keyArn";
private final static String tenantsFieldName = "tenantIds";
+ private final static String accountFieldName = "account";
+ private final static String updatedAtFieldName = "updatedAt";
- public static Slime toSlime(Set<ArchiveBucket> archiveBuckets) {
+ public static Slime toSlime(ArchiveBuckets archiveBuckets) {
Slime slime = new Slime();
Cursor rootObject = slime.setObject();
- Cursor bucketsArray = rootObject.setArray(bucketsFieldName);
- archiveBuckets.forEach(bucket -> {
- Cursor cursor = bucketsArray.addObject();
- cursor.setString(bucketNameFieldName, bucket.bucketName());
- cursor.setString(keyArnFieldName, bucket.keyArn());
- Cursor tenants = cursor.setArray(tenantsFieldName);
- bucket.tenants().forEach(tenantName -> tenants.addString(tenantName.value()));
- }
- );
+ Cursor vespaBucketsArray = rootObject.setArray(vespaManagedBucketsFieldName);
+ archiveBuckets.vespaManaged().forEach(bucket -> {
+ Cursor cursor = vespaBucketsArray.addObject();
+ cursor.setString(bucketNameFieldName, bucket.bucketName());
+ cursor.setString(keyArnFieldName, bucket.keyArn());
+ Cursor tenants = cursor.setArray(tenantsFieldName);
+ bucket.tenants().forEach(tenantName -> tenants.addString(tenantName.value()));
+ });
+
+ Cursor tenantBucketsArray = rootObject.setArray(tenantManagedBucketsFieldName);
+ archiveBuckets.tenantManaged().forEach(bucket -> {
+ Cursor cursor = tenantBucketsArray.addObject();
+ cursor.setString(bucketNameFieldName, bucket.bucketName());
+ cursor.setString(accountFieldName, bucket.cloudAccount().value());
+ cursor.setLong(updatedAtFieldName, bucket.updatedAt().toEpochMilli());
+ });
return slime;
}
- public static Set<ArchiveBucket> fromSlime(Inspector inspector) {
- return SlimeUtils.entriesStream(inspector.field(bucketsFieldName))
- .map(ArchiveBucketsSerializer::fromInspector)
- .collect(Collectors.toUnmodifiableSet());
+ public static ArchiveBuckets fromSlime(Slime slime) {
+ Inspector inspector = slime.get();
+ return new ArchiveBuckets(
+ SlimeUtils.entriesStream(inspector.field(vespaManagedBucketsFieldName))
+ .map(ArchiveBucketsSerializer::vespaManagedArchiveBucketFromInspector)
+ .collect(Collectors.toUnmodifiableSet()),
+ SlimeUtils.entriesStream(inspector.field(tenantManagedBucketsFieldName))
+ .map(ArchiveBucketsSerializer::tenantManagedArchiveBucketFromInspector)
+ .collect(Collectors.toUnmodifiableSet()));
}
- private static ArchiveBucket fromInspector(Inspector inspector) {
+ private static VespaManagedArchiveBucket vespaManagedArchiveBucketFromInspector(Inspector inspector) {
Set<TenantName> tenants = SlimeUtils.entriesStream(inspector.field(tenantsFieldName))
.map(i -> TenantName.from(i.asString()))
.collect(Collectors.toUnmodifiableSet());
- return new ArchiveBucket(
+ return new VespaManagedArchiveBucket(
inspector.field(bucketNameFieldName).asString(),
inspector.field(keyArnFieldName).asString())
.withTenants(tenants);
}
- public static Set<ArchiveBucket> fromJsonString(String zkData) {
- return fromSlime(SlimeUtils.jsonToSlime(zkData).get());
+ private static TenantManagedArchiveBucket tenantManagedArchiveBucketFromInspector(Inspector inspector) {
+ return new TenantManagedArchiveBucket(
+ inspector.field(bucketNameFieldName).asString(),
+ CloudAccount.from(inspector.field(accountFieldName).asString()),
+ SlimeUtils.instant(inspector.field(updatedAtFieldName)));
}
}