1 package com.atlassian.cache.hazelcast;
2
3 import javax.annotation.Nonnull;
4
5 import com.atlassian.cache.CacheLoader;
6
7 import static com.google.common.base.Preconditions.checkNotNull;
8
9
10
11
12
13
14
15 public class CacheVersionAwareCacheLoader<K, V> implements CacheLoader<K, V>
16 {
17 private final CacheLoader<K, V> delegate;
18 private final CacheVersion cacheVersion;
19
20 CacheVersionAwareCacheLoader(CacheLoader<K, V> delegate, CacheVersion cacheVersion)
21 {
22 this.delegate = checkNotNull(delegate);
23 this.cacheVersion = checkNotNull(cacheVersion);
24 }
25
26 @Nonnull
27 @Override
28 public V load(@Nonnull K key)
29 {
30 V v;
31 long currentVersion;
32
33 do
34 {
35 currentVersion = cacheVersion.get();
36 v = delegate.load(key);
37 }
38 while (currentVersion != cacheVersion.get());
39
40 return v;
41 }
42 }