You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@fluo.apache.org by GitBox <gi...@apache.org> on 2017/10/24 14:04:17 UTC

[GitHub] keith-turner closed pull request #951: FLUO-950 Make VisibilityCache customizable

keith-turner closed pull request #951: FLUO-950 Make VisibilityCache customizable
URL: https://github.com/apache/fluo/pull/951
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

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 febb3183..aad97a1c 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 static int getTxCommitMemory(FluoConfiguration conf) {
   }
 
   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 static long getTxIfoCacheTimeout(FluoConfiguration conf, TimeUnit tu) {
     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 b629fdfb..10c79b81 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 SharedResources(Environment env) throws TableNotFoundException {
             .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 06c43429..eeb16934 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.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 int weigh(Bytes key, ColumnVisibility vis) {
 
   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 81036bbe..1e207f23 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 @@
 
   @Test
   public void testVisibilityCacheConstructor() {
-    VisibilityCache cache = new VisibilityCache();
+    VisibilityCache cache = new VisibilityCache(new FluoConfiguration());
     Assert.assertNotNull("VisibilityCache failed to instantiate.", cache);
     cache = null;
   }


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services