aboutsummaryrefslogtreecommitdiffstats
path: root/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/archive/ArchiveBuckets.java
blob: 62e341c674c351956f29914bbb74d1b396b3f746 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.hosted.controller.api.integration.archive;

import java.util.HashSet;
import java.util.Set;

/**
 * @author freva
 */
public record ArchiveBuckets(Set<VespaManagedArchiveBucket> vespaManaged,
                             Set<TenantManagedArchiveBucket> tenantManaged) {
    public static final ArchiveBuckets EMPTY = new ArchiveBuckets(Set.of(), Set.of());

    public ArchiveBuckets(Set<VespaManagedArchiveBucket> vespaManaged, Set<TenantManagedArchiveBucket> tenantManaged) {
        this.vespaManaged = Set.copyOf(vespaManaged);
        this.tenantManaged = Set.copyOf(tenantManaged);
    }

    /** Adds or replaces a VespaManagedArchive bucket with the given archive bucket */
    public ArchiveBuckets with(VespaManagedArchiveBucket vespaManagedArchiveBucket) {
        Set<VespaManagedArchiveBucket> updated = new HashSet<>(vespaManaged);
        updated.removeIf(bucket -> bucket.bucketName().equals(vespaManagedArchiveBucket.bucketName()));
        updated.add(vespaManagedArchiveBucket);
        return new ArchiveBuckets(updated, tenantManaged);
    }

    /** Adds or replaces a TenantManagedArchive bucket with the given archive bucket */
    public ArchiveBuckets with(TenantManagedArchiveBucket tenantManagedArchiveBucket) {
        Set<TenantManagedArchiveBucket> updated = new HashSet<>(tenantManaged);
        updated.removeIf(bucket -> bucket.cloudAccount().equals(tenantManagedArchiveBucket.cloudAccount()));
        updated.add(tenantManagedArchiveBucket);
        return new ArchiveBuckets(vespaManaged, updated);
    }
}