diff options
author | Jon Marius Venstad <venstad@gmail.com> | 2020-09-01 17:22:43 +0200 |
---|---|---|
committer | Jon Marius Venstad <venstad@gmail.com> | 2020-09-01 17:22:43 +0200 |
commit | 30f02e92849dcdb1b1de17810d46a761eb03bc19 (patch) | |
tree | a76f0c4a2f3e38c9c8d9bd48099c748790ded66f /controller-server/src/test/java/com | |
parent | caf58f5b7ed8cdda43ec73706986b9e41dd019ed (diff) |
Add and use API for storing deployment meeta data
Diffstat (limited to 'controller-server/src/test/java/com')
-rw-r--r-- | controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ApplicationStoreMock.java | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ApplicationStoreMock.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ApplicationStoreMock.java index 3c33051e98b..be0cd975190 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ApplicationStoreMock.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ApplicationStoreMock.java @@ -10,9 +10,13 @@ import com.yahoo.vespa.hosted.controller.api.integration.deployment.ApplicationS import com.yahoo.vespa.hosted.controller.api.integration.deployment.ApplicationVersion; import com.yahoo.vespa.hosted.controller.api.integration.deployment.TesterId; +import java.time.Instant; import java.util.Map; +import java.util.NavigableMap; import java.util.Optional; +import java.util.Set; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentSkipListMap; import static java.util.Objects.requireNonNull; @@ -23,8 +27,11 @@ import static java.util.Objects.requireNonNull; */ public class ApplicationStoreMock implements ApplicationStore { + private static final byte[] tombstone = new byte[0]; + private final Map<ApplicationId, Map<ApplicationVersion, byte[]>> store = new ConcurrentHashMap<>(); private final Map<ApplicationId, Map<ZoneId, byte[]>> devStore = new ConcurrentHashMap<>(); + private final Map<ApplicationId, NavigableMap<Instant, byte[]>> meta = new ConcurrentHashMap<>(); private static ApplicationId appId(TenantName tenant, ApplicationName application) { return ApplicationId.from(tenant, application, InstanceName.defaultName()); @@ -101,4 +108,26 @@ public class ApplicationStoreMock implements ApplicationStore { return requireNonNull(devStore.get(application).get(zone)); } + @Override + public void putMeta(TenantName tenant, ApplicationName application, Instant now, byte[] metaZip) { + meta.putIfAbsent(appId(tenant, application), new ConcurrentSkipListMap<>()); + meta.get(appId(tenant, application)).put(now, metaZip); + } + + @Override + public void putMetaTombstone(TenantName tenant, ApplicationName application, Instant now) { + putMeta(tenant, application, now, tombstone); + } + + @Override + public void pruneMeta(Instant oldest) { + for (ApplicationId id : meta.keySet()) { + Instant activeAtOldest = meta.get(id).lowerKey(oldest); + if (activeAtOldest != null) + meta.get(id).headMap(activeAtOldest).clear(); + if (meta.get(id).lastKey().isBefore(oldest) && meta.get(id).lastEntry().getValue() == tombstone) + meta.remove(id); + } + } + } |