Skip to content

Commit 9e87f47

Browse files
Kenneth McFarlandkeith-turner
authored andcommitted
fixes #950 Make VisibilityCache customizable (#951)
1 parent d9fc391 commit 9e87f47

File tree

4 files changed

+50
-7
lines changed

4 files changed

+50
-7
lines changed

modules/core/src/main/java/org/apache/fluo/core/impl/FluoConfigurationImpl.java

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ public static int getTxCommitMemory(FluoConfiguration conf) {
105105
}
106106

107107
public static final String TX_INFO_CACHE_SIZE = FLUO_IMPL_PREFIX + ".tx.failed.cache.size.mb";
108-
public static final long TX_INFO_CACHE_SIZE_DEFAULT = 10000000;
108+
public static final long TX_INFO_CACHE_SIZE_DEFAULT = 10_000_000;
109109

110110
/**
111111
* Gets the cache size
@@ -144,6 +144,47 @@ public static long getTxIfoCacheTimeout(FluoConfiguration conf, TimeUnit tu) {
144144
return tu.convert(millis, TimeUnit.MILLISECONDS);
145145
}
146146

147+
public static final String VISIBILITY_CACHE_SIZE = FLUO_IMPL_PREFIX + ".visibility.cache.size.mb";
148+
public static final long VISIBILITY_CACHE_SIZE_DEFAULT = 10_000_000;
149+
150+
/**
151+
* Gets the cache size
152+
*
153+
* @param conf The FluoConfiguration
154+
* @return The size of the cache value from the property value {@value #VISIBILITY_CACHE_SIZE}
155+
* if it is set, else the value of the default value {@value #VISIBILITY_CACHE_SIZE_DEFAULT}
156+
*/
157+
158+
public static long getVisibilityCacheSize(FluoConfiguration conf) {
159+
long size = conf.getLong(VISIBILITY_CACHE_SIZE, VISIBILITY_CACHE_SIZE_DEFAULT);
160+
if (size <= 0) {
161+
throw new IllegalArgumentException(
162+
"Cache size must be positive for " + VISIBILITY_CACHE_SIZE);
163+
}
164+
return size;
165+
}
166+
167+
public static final String VISIBILITY_CACHE_TIMEOUT =
168+
FLUO_IMPL_PREFIX + ".visibility.cache.expireTime.ms";
169+
public static final long VISIBILITY_CACHE_TIMEOUT_DEFAULT = 24 * 60 * 1000;
170+
171+
/**
172+
* Gets the time before stale entries in the cache are evicted based on age.
173+
* This method returns a long representing the time converted from the
174+
* TimeUnit passed in.
175+
*
176+
* @param conf The FluoConfiguration
177+
* @param tu The TimeUnit desired to represent the cache timeout
178+
*/
179+
180+
public static long getVisibilityCacheTimeout(FluoConfiguration conf, TimeUnit tu) {
181+
long millis = conf.getLong(VISIBILITY_CACHE_TIMEOUT, VISIBILITY_CACHE_TIMEOUT_DEFAULT);
182+
if (millis <= 0) {
183+
throw new IllegalArgumentException("Timeout must positive for " + VISIBILITY_CACHE_TIMEOUT);
184+
}
185+
return tu.convert(millis, TimeUnit.MILLISECONDS);
186+
}
187+
147188
public static final String ASYNC_CW_THREADS = FLUO_IMPL_PREFIX + ".async.cw.threads";
148189
public static final int ASYNC_CW_THREADS_DEFAULT = 8;
149190
public static final String ASYNC_CW_LIMIT = FLUO_IMPL_PREFIX + ".async.cw.limit";

modules/core/src/main/java/org/apache/fluo/core/impl/SharedResources.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ public SharedResources(Environment env) throws TableNotFoundException {
8282
.setAuthorizations(env.getAuthorizations()).setMaxWriteThreads(numCWThreads));
8383

8484
txInfoCache = new TxInfoCache(env);
85-
visCache = new VisibilityCache();
85+
visCache = new VisibilityCache(env.getConfiguration());
8686
metricRegistry = new MetricRegistry();
8787

8888
int commitThreads = env.getConfiguration().getInt(FluoConfigurationImpl.ASYNC_COMMIT_THREADS,

modules/core/src/main/java/org/apache/fluo/core/impl/VisibilityCache.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,13 @@
2424
import com.google.common.cache.CacheBuilder;
2525
import com.google.common.cache.Weigher;
2626
import org.apache.accumulo.core.security.ColumnVisibility;
27+
import org.apache.fluo.api.config.FluoConfiguration;
2728
import org.apache.fluo.api.data.Bytes;
2829
import org.apache.fluo.api.data.Column;
2930
import org.apache.fluo.core.util.ByteUtil;
3031

3132
/**
32-
* PArsing Column visibilities can be expensive. This class provides a cache of parsed visibility
33+
* Parsing Column visibilities can be expensive. This class provides a cache of parsed visibility
3334
* objects.
3435
*/
3536

@@ -46,11 +47,11 @@ public int weigh(Bytes key, ColumnVisibility vis) {
4647

4748
private final Cache<Bytes, ColumnVisibility> visCache;
4849

49-
VisibilityCache() {
50+
VisibilityCache(FluoConfiguration conf) {
5051
visCache = CacheBuilder.newBuilder()
51-
.expireAfterAccess(FluoConfigurationImpl.TX_INFO_CACHE_TIMEOUT_DEFAULT,
52+
.expireAfterAccess(FluoConfigurationImpl.getVisibilityCacheTimeout(conf, TimeUnit.MILLISECONDS),
5253
TimeUnit.MILLISECONDS)
53-
.maximumWeight(FluoConfigurationImpl.TX_INFO_CACHE_SIZE_DEFAULT).weigher(new VisWeigher())
54+
.maximumWeight(FluoConfigurationImpl.getVisibilityCacheSize(conf)).weigher(new VisWeigher())
5455
.concurrencyLevel(10).build();
5556
}
5657

modules/core/src/test/java/org/apache/fluo/core/impl/VisibilityCacheTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
package org.apache.fluo.core.impl;
1717

18+
import org.apache.fluo.api.config.FluoConfiguration;
1819
import org.junit.Assert;
1920
import org.junit.Test;
2021

@@ -25,7 +26,7 @@ public class VisibilityCacheTest {
2526

2627
@Test
2728
public void testVisibilityCacheConstructor() {
28-
VisibilityCache cache = new VisibilityCache();
29+
VisibilityCache cache = new VisibilityCache(new FluoConfiguration());
2930
Assert.assertNotNull("VisibilityCache failed to instantiate.", cache);
3031
cache = null;
3132
}

0 commit comments

Comments
 (0)