From 8d04bec3b2ef6bc53eeaf79fc7870f4887bd4af6 Mon Sep 17 00:00:00 2001 From: johnniang Date: Thu, 28 Mar 2019 18:25:57 +0800 Subject: [PATCH] Fix putIfAbsent bug in InMemoryCacheStore --- .../cc/ryanc/halo/cache/AbstractCacheStore.java | 1 - .../java/cc/ryanc/halo/cache/CacheWrapper.java | 5 +++-- .../cc/ryanc/halo/cache/InMemoryCacheStore.java | 16 +++++++++++++++- .../cc/ryanc/halo/config/HaloConfiguration.java | 4 ++-- 4 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/main/java/cc/ryanc/halo/cache/AbstractCacheStore.java b/src/main/java/cc/ryanc/halo/cache/AbstractCacheStore.java index be1f33197..53827beb9 100644 --- a/src/main/java/cc/ryanc/halo/cache/AbstractCacheStore.java +++ b/src/main/java/cc/ryanc/halo/cache/AbstractCacheStore.java @@ -111,7 +111,6 @@ public abstract class AbstractCacheStore implements CacheStore { expireAt = DateUtils.addMilliseconds(now, Long.valueOf(millis).intValue()); } - // Build cache wrapper CacheWrapper cacheWrapper = new CacheWrapper<>(); cacheWrapper.setCreateAt(now); diff --git a/src/main/java/cc/ryanc/halo/cache/CacheWrapper.java b/src/main/java/cc/ryanc/halo/cache/CacheWrapper.java index a7069a8e8..e7d75380f 100644 --- a/src/main/java/cc/ryanc/halo/cache/CacheWrapper.java +++ b/src/main/java/cc/ryanc/halo/cache/CacheWrapper.java @@ -2,6 +2,7 @@ package cc.ryanc.halo.cache; import lombok.*; +import java.io.Serializable; import java.util.Date; /** @@ -10,11 +11,11 @@ import java.util.Date; * @author johnniang */ @Data -@EqualsAndHashCode @ToString +@EqualsAndHashCode @NoArgsConstructor @AllArgsConstructor -public class CacheWrapper { +class CacheWrapper implements Serializable { /** * Cache data diff --git a/src/main/java/cc/ryanc/halo/cache/InMemoryCacheStore.java b/src/main/java/cc/ryanc/halo/cache/InMemoryCacheStore.java index cd3927268..2fc03ab8f 100644 --- a/src/main/java/cc/ryanc/halo/cache/InMemoryCacheStore.java +++ b/src/main/java/cc/ryanc/halo/cache/InMemoryCacheStore.java @@ -42,10 +42,24 @@ public class InMemoryCacheStore extends StringCacheStore { Assert.hasText(key, "Cache key must not be blank"); Assert.notNull(cacheWrapper, "Cache wrapper must not be null"); + log.debug("Preparing to put key: [{}], value: [{}]", key, cacheWrapper); + // Put the cache wrapper CacheWrapper putCacheWrapper = cacheContainer.putIfAbsent(key, cacheWrapper); - return cacheWrapper.equals(putCacheWrapper); + if (putCacheWrapper == null) { + putCacheWrapper = cacheWrapper; + } + + boolean isEqual = cacheWrapper.equals(putCacheWrapper); + + if (isEqual) { + log.debug("Put successfully"); + } else { + log.warn("Failed to put the cache, because the key: [{}] has been present already", key); + } + + return isEqual; } @Override diff --git a/src/main/java/cc/ryanc/halo/config/HaloConfiguration.java b/src/main/java/cc/ryanc/halo/config/HaloConfiguration.java index 6b5c96f76..ad9856160 100644 --- a/src/main/java/cc/ryanc/halo/config/HaloConfiguration.java +++ b/src/main/java/cc/ryanc/halo/config/HaloConfiguration.java @@ -38,7 +38,7 @@ public class HaloConfiguration { * @return Cors filter registration bean */ @Bean - FilterRegistrationBean corsFilter() { + public FilterRegistrationBean corsFilter() { FilterRegistrationBean corsFilter = new FilterRegistrationBean<>(); corsFilter.setOrder(Ordered.HIGHEST_PRECEDENCE + 10); @@ -54,7 +54,7 @@ public class HaloConfiguration { * @return Log filter registration bean */ @Bean - FilterRegistrationBean logFilter() { + public FilterRegistrationBean logFilter() { FilterRegistrationBean logFilter = new FilterRegistrationBean<>(); logFilter.setOrder(Ordered.HIGHEST_PRECEDENCE + 9);