1
1
package com .launchdarkly .client ;
2
2
3
+ import com .google .common .base .Optional ;
3
4
import com .google .common .cache .CacheBuilder ;
4
5
import com .google .common .cache .CacheLoader ;
5
6
import com .google .common .cache .CacheStats ;
@@ -37,7 +38,7 @@ public class RedisFeatureStore implements FeatureStore {
37
38
private static final String INIT_KEY = "$initialized$" ;
38
39
private static final String CACHE_REFRESH_THREAD_POOL_NAME_FORMAT = "RedisFeatureStore-cache-refresher-pool-%d" ;
39
40
private final JedisPool pool ;
40
- private LoadingCache <String , FeatureFlag > cache ;
41
+ private LoadingCache <String , Optional < FeatureFlag > > cache ;
41
42
private LoadingCache <String , Boolean > initCache ;
42
43
private String prefix ;
43
44
private ListeningExecutorService executorService ;
@@ -155,11 +156,11 @@ private void createCache(long cacheTimeSecs, boolean refreshStaleValues, boolean
155
156
}
156
157
}
157
158
158
- private CacheLoader <String , FeatureFlag > createDefaultCacheLoader () {
159
- return new CacheLoader <String , FeatureFlag >() {
159
+ private CacheLoader <String , Optional < FeatureFlag > > createDefaultCacheLoader () {
160
+ return new CacheLoader <String , Optional < FeatureFlag > >() {
160
161
@ Override
161
- public FeatureFlag load (String key ) throws Exception {
162
- return getRedis (key );
162
+ public Optional < FeatureFlag > load (String key ) throws Exception {
163
+ return Optional . fromNullable ( getRedis (key ) );
163
164
}
164
165
};
165
166
}
@@ -174,7 +175,7 @@ private void createRefreshCache(long cacheTimeSecs, boolean asyncRefresh) {
174
175
ThreadFactory threadFactory = new ThreadFactoryBuilder ().setNameFormat (CACHE_REFRESH_THREAD_POOL_NAME_FORMAT ).setDaemon (true ).build ();
175
176
ExecutorService parentExecutor = Executors .newSingleThreadExecutor (threadFactory );
176
177
executorService = MoreExecutors .listeningDecorator (parentExecutor );
177
- CacheLoader <String , FeatureFlag > cacheLoader = createDefaultCacheLoader ();
178
+ CacheLoader <String , Optional < FeatureFlag > > cacheLoader = createDefaultCacheLoader ();
178
179
if (asyncRefresh ) {
179
180
cacheLoader = CacheLoader .asyncReloading (cacheLoader , executorService );
180
181
}
@@ -214,7 +215,7 @@ public Boolean load(String key) throws Exception {
214
215
public FeatureFlag get (String key ) {
215
216
FeatureFlag featureFlag ;
216
217
if (cache != null ) {
217
- featureFlag = cache .getUnchecked (key );
218
+ featureFlag = cache .getUnchecked (key ). orNull () ;
218
219
} else {
219
220
featureFlag = getRedis (key );
220
221
}
0 commit comments