Repository: flume Updated Branches: refs/heads/trunk 375143493 -> 77d56e95e
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/77d56e95 Tree: http://git-wip-us.apache.org/repos/asf/flume/tree/77d56e95 Diff: http://git-wip-us.apache.org/repos/asf/flume/diff/77d56e95 Branch: refs/heads/trunk Commit: 77d56e95ead7a04499aa83d1a78fcfbd957b20c7 Parents: 3751434 Author: Hari Shreedharan <[email protected]> Authored: Mon Oct 27 13:41:25 2014 -0700 Committer: Hari Shreedharan <[email protected]> Committed: Mon Oct 27 13:41:25 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/77d56e95/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); }
