Repository: flume
Updated Branches:
  refs/heads/flume-1.6 c6b3fce17 -> 0c1ff2fec


FLUME-2517. Cache SimpleDataFormat objects in bucketwriter for better 
performance.

(Pal Konyves via Hari)


Project: http://git-wip-us.apache.org/repos/asf/flume/repo
Commit: http://git-wip-us.apache.org/repos/asf/flume/commit/0c1ff2fe
Tree: http://git-wip-us.apache.org/repos/asf/flume/tree/0c1ff2fe
Diff: http://git-wip-us.apache.org/repos/asf/flume/diff/0c1ff2fe

Branch: refs/heads/flume-1.6
Commit: 0c1ff2fec6c3b815d54f056c629c8744736cccbb
Parents: c6b3fce
Author: Hari Shreedharan <[email protected]>
Authored: Mon Oct 27 13:41:25 2014 -0700
Committer: Hari Shreedharan <[email protected]>
Committed: Mon Oct 27 13:42:18 2014 -0700

----------------------------------------------------------------------
 .../flume/formatter/output/BucketPath.java      | 26 +++++++++++++++++++-
 1 file changed, 25 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flume/blob/0c1ff2fe/flume-ng-core/src/main/java/org/apache/flume/formatter/output/BucketPath.java
----------------------------------------------------------------------
diff --git 
a/flume-ng-core/src/main/java/org/apache/flume/formatter/output/BucketPath.java 
b/flume-ng-core/src/main/java/org/apache/flume/formatter/output/BucketPath.java
index bef4b1f..fe38d2c 100644
--- 
a/flume-ng-core/src/main/java/org/apache/flume/formatter/output/BucketPath.java
+++ 
b/flume-ng-core/src/main/java/org/apache/flume/formatter/output/BucketPath.java
@@ -24,10 +24,12 @@ import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.TimeZone;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 import com.google.common.annotations.VisibleForTesting;
+
 import org.apache.flume.Clock;
 import org.apache.flume.SystemClock;
 import org.apache.flume.tools.TimestampRoundDownUtil;
@@ -184,6 +186,28 @@ public class BucketPath {
     return replaceShorthand(c, headers, timeZone, needRounding, unit,
         roundDown, false, ts);
   }
+  
+  protected static final ThreadLocal<HashMap<String, SimpleDateFormat>> 
simpleDateFormatCache = new ThreadLocal<HashMap<String, SimpleDateFormat>>() {
+         
+         @Override
+         protected HashMap<String, SimpleDateFormat> initialValue() {
+                 return new HashMap<String, SimpleDateFormat>();
+         }
+  };
+  
+  protected static SimpleDateFormat getSimpleDateFormat(String string) {
+       HashMap<String, SimpleDateFormat> localCache = 
simpleDateFormatCache.get();
+       
+       SimpleDateFormat simpleDateFormat = localCache.get(string);
+       if (simpleDateFormat == null) {
+               simpleDateFormat = new SimpleDateFormat(string);
+               localCache.put(string, simpleDateFormat);
+               simpleDateFormatCache.set(localCache);
+       }
+       
+       return simpleDateFormat;
+  }
+  
 
   /**
    * Not intended as a public API
@@ -287,7 +311,7 @@ public class BucketPath {
       return "";
     }
 
-    SimpleDateFormat format = new SimpleDateFormat(formatString);
+    SimpleDateFormat format = getSimpleDateFormat(formatString);
     if (timeZone != null) {
       format.setTimeZone(timeZone);
     }

Reply via email to