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); }
