1 package com.atlassian.vcache.internal.core.service;
2
3 import com.atlassian.vcache.internal.core.ExternalCacheKeyGenerator;
4
5 import java.time.Duration;
6 import java.util.Optional;
7 import java.util.function.Supplier;
8
9
10
11
12
13
14
15
16 public class VersionedExternalCacheRequestContext<V> extends AbstractExternalCacheRequestContext<V> {
17 protected final String externalCacheVersionKey;
18 private Optional<Long> cacheVersion = Optional.empty();
19
20 public VersionedExternalCacheRequestContext(ExternalCacheKeyGenerator keyGenerator,
21 String name,
22 Supplier<String> partitionSupplier,
23 Duration lockTimeout) {
24 super(keyGenerator, name, partitionSupplier, lockTimeout);
25 this.externalCacheVersionKey =
26 keyGenerator.cacheVersionKey(partitionSupplier.get(), name);
27 }
28
29 @Override
30 protected long cacheVersion() {
31 return cacheVersion.get();
32 }
33
34 public void updateCacheVersion(long value) {
35 cacheVersion = Optional.of(value);
36 clearKeyMaps();
37 }
38
39 public String externalCacheVersionKey() {
40 return externalCacheVersionKey;
41 }
42 }