View Javadoc

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   * Represents the request context for an {@link com.atlassian.vcache.ExternalCache} that maintains a
11   * cache version.
12   *
13   * @param <V> the value type
14   * @since 1.0.0
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  }