Browse Source

fixed versioned caffeine cache

pull/10977/head
YevhenBondarenko 2 years ago
parent
commit
77a420b6d6
  1. 11
      common/cache/src/main/java/org/thingsboard/server/cache/VersionedCaffeineTbCache.java
  2. 7
      common/data/src/main/java/org/thingsboard/server/common/data/util/TbPair.java

11
common/cache/src/main/java/org/thingsboard/server/cache/VersionedCaffeineTbCache.java

@ -35,7 +35,11 @@ public abstract class VersionedCaffeineTbCache<K extends Serializable, V extends
@Override @Override
public TbCacheValueWrapper<V> get(K key) { public TbCacheValueWrapper<V> get(K key) {
return SimpleTbCacheValueWrapper.wrap(doGet(key).getSecond()); TbPair<Long, V> versionValuePair = doGet(key);
if (versionValuePair != null) {
return SimpleTbCacheValueWrapper.wrap(versionValuePair.getSecond());
}
return null;
} }
@Override @Override
@ -52,8 +56,7 @@ public abstract class VersionedCaffeineTbCache<K extends Serializable, V extends
lock.lock(); lock.lock();
try { try {
TbPair<Long, V> versionValuePair = doGet(key); TbPair<Long, V> versionValuePair = doGet(key);
Long currentVersion = versionValuePair.getFirst(); if (versionValuePair == null || version > versionValuePair.getFirst()) {
if (currentVersion == null || version > currentVersion) {
cacheManager.getCache(cacheName).put(key, TbPair.of(version, value)); cacheManager.getCache(cacheName).put(key, TbPair.of(version, value));
} }
} finally { } finally {
@ -63,7 +66,7 @@ public abstract class VersionedCaffeineTbCache<K extends Serializable, V extends
private TbPair<Long, V> doGet(K key) { private TbPair<Long, V> doGet(K key) {
Cache.ValueWrapper source = cacheManager.getCache(cacheName).get(key); Cache.ValueWrapper source = cacheManager.getCache(cacheName).get(key);
return source == null ? TbPair.emptyPair() : (TbPair<Long, V>) source.get(); return source == null ? null : (TbPair<Long, V>) source.get();
} }
@Override @Override

7
common/data/src/main/java/org/thingsboard/server/common/data/util/TbPair.java

@ -21,17 +21,10 @@ import lombok.Data;
@Data @Data
@AllArgsConstructor @AllArgsConstructor
public class TbPair<S, T> { public class TbPair<S, T> {
public static final TbPair EMPTY = new TbPair<>(null, null);
private S first; private S first;
private T second; private T second;
public static <S, T> TbPair<S, T> of(S first, T second) { public static <S, T> TbPair<S, T> of(S first, T second) {
return new TbPair<>(first, second); return new TbPair<>(first, second);
} }
@SuppressWarnings("unchecked")
public static <S, T> TbPair<S, T> emptyPair() {
return (TbPair<S, T>) EMPTY;
}
} }

Loading…
Cancel
Save