You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@metron.apache.org by ce...@apache.org on 2017/04/05 13:40:11 UTC

incubator-metron git commit: METRON-820: StellarProcessor should have a static expression cache. This closes apache/incubator-metron#508

Repository: incubator-metron
Updated Branches:
  refs/heads/master fccb67aec -> 8f1dc5af9


METRON-820: StellarProcessor should have a static expression cache.  This closes apache/incubator-metron#508


Project: http://git-wip-us.apache.org/repos/asf/incubator-metron/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-metron/commit/8f1dc5af
Tree: http://git-wip-us.apache.org/repos/asf/incubator-metron/tree/8f1dc5af
Diff: http://git-wip-us.apache.org/repos/asf/incubator-metron/diff/8f1dc5af

Branch: refs/heads/master
Commit: 8f1dc5af946e30ec280c99f6620a5de4f46ffe27
Parents: fccb67a
Author: cstella <ce...@gmail.com>
Authored: Wed Apr 5 09:40:00 2017 -0400
Committer: cstella <ce...@gmail.com>
Committed: Wed Apr 5 09:40:00 2017 -0400

----------------------------------------------------------------------
 .../common/stellar/BaseStellarProcessor.java    | 41 +++++++++++++++-----
 .../stellar/StellarPredicateProcessor.java      |  3 ++
 .../metron/common/stellar/StellarProcessor.java | 12 ++++++
 3 files changed, 46 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-metron/blob/8f1dc5af/metron-platform/metron-common/src/main/java/org/apache/metron/common/stellar/BaseStellarProcessor.java
----------------------------------------------------------------------
diff --git a/metron-platform/metron-common/src/main/java/org/apache/metron/common/stellar/BaseStellarProcessor.java b/metron-platform/metron-common/src/main/java/org/apache/metron/common/stellar/BaseStellarProcessor.java
index afd92b8..a04ee43 100644
--- a/metron-platform/metron-common/src/main/java/org/apache/metron/common/stellar/BaseStellarProcessor.java
+++ b/metron-platform/metron-common/src/main/java/org/apache/metron/common/stellar/BaseStellarProcessor.java
@@ -55,6 +55,17 @@ import static org.apache.commons.lang3.StringUtils.isEmpty;
  * @see StellarPredicateProcessor
  */
 public class BaseStellarProcessor<T> {
+  public static final int DEFAULT_CACHE_SIZE = 500;
+  public static final int DEFAULT_EXPIRY_TIME = 10;
+  public static final TimeUnit DEFAULT_EXPIRY_TIME_UNITS = TimeUnit.MINUTES;
+
+  /**
+   * The default expression cache.  This is used when the expression cache is not otherwise specified.
+   */
+  private static Cache<String, StellarCompiler.Expression> defaultExpressionCache;
+  static {
+    defaultExpressionCache = createCache(DEFAULT_CACHE_SIZE, DEFAULT_EXPIRY_TIME, DEFAULT_EXPIRY_TIME_UNITS);
+  }
   /**
    * The class containing the type that the Stellar expression being processed will evaluate to.
    */
@@ -65,26 +76,36 @@ public class BaseStellarProcessor<T> {
    */
   Cache<String, StellarCompiler.Expression> expressionCache;
 
-  public static final int DEFAULT_CACHE_SIZE = 500;
-  public static final int DEFAULT_EXPIRY_TIME = 10;
-  public static final TimeUnit DEFAULT_EXPIRY_TIME_UNITS = TimeUnit.MINUTES;
-
+  /**
+   * Create a default stellar processor.  This processor uses the static expression cache.
+   */
   BaseStellarProcessor(final Class<T> clazz) {
-    this(clazz, DEFAULT_CACHE_SIZE, DEFAULT_EXPIRY_TIME, DEFAULT_EXPIRY_TIME_UNITS);
+    this(clazz, defaultExpressionCache);
   }
 
   BaseStellarProcessor(final Class<T> clazz, int cacheSize, int expiryTime, TimeUnit expiryUnit) {
+    this(clazz, createCache(cacheSize, expiryTime, expiryUnit));
+  }
+
+  BaseStellarProcessor(final Class<T> clazz, Cache<String, StellarCompiler.Expression> expressionCache) {
     this.clazz = clazz;
+    this.expressionCache = expressionCache;
+  }
+
+  static Cache<String, StellarCompiler.Expression> createCache( int cacheSize
+                                                       , int expiryTime
+                                                       , TimeUnit expiryUnit
+                                                       ) {
     CacheLoader<String, StellarCompiler.Expression> loader = new CacheLoader<String, StellarCompiler.Expression>() {
       @Override
       public StellarCompiler.Expression load(String key) throws Exception {
         return compile(key);
       }
     };
-    expressionCache = CacheBuilder.newBuilder()
-                              .maximumSize(cacheSize)
-                              .expireAfterAccess(expiryTime, expiryUnit)
-                              .build(loader);
+    return CacheBuilder.newBuilder()
+                       .maximumSize(cacheSize)
+                       .expireAfterAccess(expiryTime, expiryUnit)
+                       .build(loader);
   }
 
   /**
@@ -132,7 +153,7 @@ public class BaseStellarProcessor<T> {
    * @param rule The Stellar expression to parse and evaluate.
    * @return The Expression, which can be reevaluated without reparsing in different Contexts and Resolvers.
    */
-  public StellarCompiler.Expression compile(final String rule) {
+  public static StellarCompiler.Expression compile(final String rule) {
     if (rule == null || isEmpty(rule.trim())) {
       return null;
     }

http://git-wip-us.apache.org/repos/asf/incubator-metron/blob/8f1dc5af/metron-platform/metron-common/src/main/java/org/apache/metron/common/stellar/StellarPredicateProcessor.java
----------------------------------------------------------------------
diff --git a/metron-platform/metron-common/src/main/java/org/apache/metron/common/stellar/StellarPredicateProcessor.java b/metron-platform/metron-common/src/main/java/org/apache/metron/common/stellar/StellarPredicateProcessor.java
index 581c9c1..bbde172 100644
--- a/metron-platform/metron-common/src/main/java/org/apache/metron/common/stellar/StellarPredicateProcessor.java
+++ b/metron-platform/metron-common/src/main/java/org/apache/metron/common/stellar/StellarPredicateProcessor.java
@@ -36,6 +36,9 @@ import static org.apache.commons.lang3.StringUtils.isEmpty;
 
 public class StellarPredicateProcessor extends BaseStellarProcessor<Boolean> {
 
+  /**
+   * Create a default stellar processor.  This processor uses the static expression cache.
+   */
   public StellarPredicateProcessor() {
     super(Boolean.class);
   }

http://git-wip-us.apache.org/repos/asf/incubator-metron/blob/8f1dc5af/metron-platform/metron-common/src/main/java/org/apache/metron/common/stellar/StellarProcessor.java
----------------------------------------------------------------------
diff --git a/metron-platform/metron-common/src/main/java/org/apache/metron/common/stellar/StellarProcessor.java b/metron-platform/metron-common/src/main/java/org/apache/metron/common/stellar/StellarProcessor.java
index ae6238b..22a556a 100644
--- a/metron-platform/metron-common/src/main/java/org/apache/metron/common/stellar/StellarProcessor.java
+++ b/metron-platform/metron-common/src/main/java/org/apache/metron/common/stellar/StellarProcessor.java
@@ -18,6 +18,8 @@
 
 package org.apache.metron.common.stellar;
 
+import com.google.common.cache.Cache;
+
 import java.util.concurrent.TimeUnit;
 
 /**
@@ -29,10 +31,20 @@ import java.util.concurrent.TimeUnit;
  */
 public class StellarProcessor extends BaseStellarProcessor<Object> {
 
+  /**
+   * Create a default stellar processor.  This processor uses the static expression cache.
+   */
   public StellarProcessor() {
     super(Object.class);
   }
 
+  /**
+   * Create a stellar processor with a new expression cache.  NOTE: This object should be reused to prevent
+   * performance regressions.
+   * @param cacheSize
+   * @param expiryTime
+   * @param expiryUnit
+   */
   public StellarProcessor(int cacheSize, int expiryTime, TimeUnit expiryUnit) {
     super(Object.class, cacheSize, expiryTime, expiryUnit);
   }