You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@fluo.apache.org by kt...@apache.org on 2017/10/24 14:02:44 UTC

[fluo] branch master updated: fixes #950 Make VisibilityCache customizable (#951)

This is an automated email from the ASF dual-hosted git repository.

kturner pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/fluo.git


The following commit(s) were added to refs/heads/master by this push:
     new 9e87f47  fixes #950 Make VisibilityCache customizable (#951)
9e87f47 is described below

commit 9e87f477463602533d8611c9561484d41d135654
Author: Kenneth McFarland <ke...@gmail.com>
AuthorDate: Sat Oct 21 16:47:58 2017 -0700

    fixes #950 Make VisibilityCache customizable (#951)
---
 .../fluo/core/impl/FluoConfigurationImpl.java      | 43 +++++++++++++++++++++-
 .../org/apache/fluo/core/impl/SharedResources.java |  2 +-
 .../org/apache/fluo/core/impl/VisibilityCache.java |  9 +++--
 .../apache/fluo/core/impl/VisibilityCacheTest.java |  3 +-
 4 files changed, 50 insertions(+), 7 deletions(-)

diff --git a/modules/core/src/main/java/org/apache/fluo/core/impl/FluoConfigurationImpl.java b/modules/core/src/main/java/org/apache/fluo/core/impl/FluoConfigurationImpl.java
index febb318..aad97a1 100644
--- a/modules/core/src/main/java/org/apache/fluo/core/impl/FluoConfigurationImpl.java
+++ b/modules/core/src/main/java/org/apache/fluo/core/impl/FluoConfigurationImpl.java
@@ -105,7 +105,7 @@ public class FluoConfigurationImpl {
   }
 
   public static final String TX_INFO_CACHE_SIZE = FLUO_IMPL_PREFIX + ".tx.failed.cache.size.mb";
-  public static final long TX_INFO_CACHE_SIZE_DEFAULT = 10000000;
+  public static final long TX_INFO_CACHE_SIZE_DEFAULT = 10_000_000;
 
   /** 
    * Gets the cache size
@@ -144,6 +144,47 @@ public class FluoConfigurationImpl {
     return tu.convert(millis, TimeUnit.MILLISECONDS);
   }
 
+  public static final String VISIBILITY_CACHE_SIZE = FLUO_IMPL_PREFIX + ".visibility.cache.size.mb";
+  public static final long VISIBILITY_CACHE_SIZE_DEFAULT = 10_000_000;
+
+  /** 
+   * Gets the cache size
+   * 
+   * @param conf The FluoConfiguration
+   * @return The size of the cache value from the property value {@value #VISIBILITY_CACHE_SIZE}
+   *     if it is set, else the value of the default value {@value #VISIBILITY_CACHE_SIZE_DEFAULT}
+   */
+
+  public static long getVisibilityCacheSize(FluoConfiguration conf) {
+    long size = conf.getLong(VISIBILITY_CACHE_SIZE, VISIBILITY_CACHE_SIZE_DEFAULT);
+    if (size <= 0) {
+      throw new IllegalArgumentException(
+          "Cache size must be positive for " + VISIBILITY_CACHE_SIZE);
+    }
+    return size;
+  }
+
+  public static final String VISIBILITY_CACHE_TIMEOUT =
+      FLUO_IMPL_PREFIX + ".visibility.cache.expireTime.ms";
+  public static final long VISIBILITY_CACHE_TIMEOUT_DEFAULT = 24 * 60 * 1000;
+
+  /**
+   * Gets the time before stale entries in the cache are evicted based on age.
+   * This method returns a long representing the time converted from the
+   * TimeUnit passed in.
+   * 
+   * @param conf The FluoConfiguration
+   * @param tu   The TimeUnit desired to represent the cache timeout
+   */
+
+  public static long getVisibilityCacheTimeout(FluoConfiguration conf, TimeUnit tu) {
+    long millis = conf.getLong(VISIBILITY_CACHE_TIMEOUT, VISIBILITY_CACHE_TIMEOUT_DEFAULT);
+    if (millis <= 0) {
+      throw new IllegalArgumentException("Timeout must positive for " + VISIBILITY_CACHE_TIMEOUT);
+    }
+    return tu.convert(millis, TimeUnit.MILLISECONDS);
+  }
+
   public static final String ASYNC_CW_THREADS = FLUO_IMPL_PREFIX + ".async.cw.threads";
   public static final int ASYNC_CW_THREADS_DEFAULT = 8;
   public static final String ASYNC_CW_LIMIT = FLUO_IMPL_PREFIX + ".async.cw.limit";
diff --git a/modules/core/src/main/java/org/apache/fluo/core/impl/SharedResources.java b/modules/core/src/main/java/org/apache/fluo/core/impl/SharedResources.java
index b629fdf..10c79b8 100644
--- a/modules/core/src/main/java/org/apache/fluo/core/impl/SharedResources.java
+++ b/modules/core/src/main/java/org/apache/fluo/core/impl/SharedResources.java
@@ -82,7 +82,7 @@ public class SharedResources implements AutoCloseable {
             .setAuthorizations(env.getAuthorizations()).setMaxWriteThreads(numCWThreads));
 
     txInfoCache = new TxInfoCache(env);
-    visCache = new VisibilityCache();
+    visCache = new VisibilityCache(env.getConfiguration());
     metricRegistry = new MetricRegistry();
 
     int commitThreads = env.getConfiguration().getInt(FluoConfigurationImpl.ASYNC_COMMIT_THREADS,
diff --git a/modules/core/src/main/java/org/apache/fluo/core/impl/VisibilityCache.java b/modules/core/src/main/java/org/apache/fluo/core/impl/VisibilityCache.java
index 06c4342..eeb1693 100644
--- a/modules/core/src/main/java/org/apache/fluo/core/impl/VisibilityCache.java
+++ b/modules/core/src/main/java/org/apache/fluo/core/impl/VisibilityCache.java
@@ -24,12 +24,13 @@ import com.google.common.cache.Cache;
 import com.google.common.cache.CacheBuilder;
 import com.google.common.cache.Weigher;
 import org.apache.accumulo.core.security.ColumnVisibility;
+import org.apache.fluo.api.config.FluoConfiguration;
 import org.apache.fluo.api.data.Bytes;
 import org.apache.fluo.api.data.Column;
 import org.apache.fluo.core.util.ByteUtil;
 
 /**
- * PArsing Column visibilities can be expensive. This class provides a cache of parsed visibility
+ * Parsing Column visibilities can be expensive. This class provides a cache of parsed visibility
  * objects.
  */
 
@@ -46,11 +47,11 @@ public class VisibilityCache {
 
   private final Cache<Bytes, ColumnVisibility> visCache;
 
-  VisibilityCache() {
+  VisibilityCache(FluoConfiguration conf) {
     visCache = CacheBuilder.newBuilder()
-        .expireAfterAccess(FluoConfigurationImpl.TX_INFO_CACHE_TIMEOUT_DEFAULT,
+        .expireAfterAccess(FluoConfigurationImpl.getVisibilityCacheTimeout(conf, TimeUnit.MILLISECONDS),
             TimeUnit.MILLISECONDS)
-        .maximumWeight(FluoConfigurationImpl.TX_INFO_CACHE_SIZE_DEFAULT).weigher(new VisWeigher())
+        .maximumWeight(FluoConfigurationImpl.getVisibilityCacheSize(conf)).weigher(new VisWeigher())
         .concurrencyLevel(10).build();
   }
 
diff --git a/modules/core/src/test/java/org/apache/fluo/core/impl/VisibilityCacheTest.java b/modules/core/src/test/java/org/apache/fluo/core/impl/VisibilityCacheTest.java
index 81036bb..1e207f2 100644
--- a/modules/core/src/test/java/org/apache/fluo/core/impl/VisibilityCacheTest.java
+++ b/modules/core/src/test/java/org/apache/fluo/core/impl/VisibilityCacheTest.java
@@ -15,6 +15,7 @@
 
 package org.apache.fluo.core.impl;
 
+import org.apache.fluo.api.config.FluoConfiguration;
 import org.junit.Assert;
 import org.junit.Test;
 
@@ -25,7 +26,7 @@ public class VisibilityCacheTest {
 
   @Test
   public void testVisibilityCacheConstructor() {
-    VisibilityCache cache = new VisibilityCache();
+    VisibilityCache cache = new VisibilityCache(new FluoConfiguration());
     Assert.assertNotNull("VisibilityCache failed to instantiate.", cache);
     cache = null;
   }

-- 
To stop receiving notification emails like this one, please contact
['"commits@fluo.apache.org" <co...@fluo.apache.org>'].