Repository: atlas Updated Branches: refs/heads/branch-0.8 d6e69c6dd -> bccae6877
ATLAS-2312: Use ThreadLocal DateFormat objects to avoid simultaneous use from multiple threads (cherry picked from commit a40f3c2c5234acec5e4566394e748620697ba119) Project: http://git-wip-us.apache.org/repos/asf/atlas/repo Commit: http://git-wip-us.apache.org/repos/asf/atlas/commit/bccae687 Tree: http://git-wip-us.apache.org/repos/asf/atlas/tree/bccae687 Diff: http://git-wip-us.apache.org/repos/asf/atlas/diff/bccae687 Branch: refs/heads/branch-0.8 Commit: bccae6877531856001528a656aaa7168c97b351f Parents: d6e69c6 Author: Madhan Neethiraj <[email protected]> Authored: Fri Dec 15 14:13:29 2017 -0800 Committer: Madhan Neethiraj <[email protected]> Committed: Mon Dec 18 10:14:48 2017 -0800 ---------------------------------------------------------------------- .../atlas/model/instance/AtlasStruct.java | 4 +++- .../atlas/model/typedef/AtlasBaseTypeDef.java | 20 +++++++++++++++++++- .../apache/atlas/type/AtlasBuiltInTypes.java | 2 +- .../apache/atlas/type/TestAtlasDateType.java | 2 +- 4 files changed, 24 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/atlas/blob/bccae687/intg/src/main/java/org/apache/atlas/model/instance/AtlasStruct.java ---------------------------------------------------------------------- diff --git a/intg/src/main/java/org/apache/atlas/model/instance/AtlasStruct.java b/intg/src/main/java/org/apache/atlas/model/instance/AtlasStruct.java index 7c8ae2d..737e1cc 100644 --- a/intg/src/main/java/org/apache/atlas/model/instance/AtlasStruct.java +++ b/intg/src/main/java/org/apache/atlas/model/instance/AtlasStruct.java @@ -34,6 +34,7 @@ import javax.xml.bind.annotation.XmlSeeAlso; import org.apache.atlas.model.PList; import org.apache.atlas.model.SearchFilter.SortType; +import org.apache.atlas.model.typedef.AtlasBaseTypeDef; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.MapUtils; import org.codehaus.jackson.annotate.JsonAutoDetect; @@ -55,6 +56,7 @@ public class AtlasStruct implements Serializable { private static final long serialVersionUID = 1L; public static final String SERIALIZED_DATE_FORMAT_STR = "yyyyMMdd-HH:mm:ss.SSS-Z"; + @Deprecated public static final DateFormat DATE_FORMATTER = new SimpleDateFormat(SERIALIZED_DATE_FORMAT_STR); private String typeName; @@ -255,7 +257,7 @@ public class AtlasStruct implements Serializable { if (value == null) { sb.append(value); } else { - sb.append(DATE_FORMATTER.format(value)); + sb.append(AtlasBaseTypeDef.getDateFormatter().format(value)); } return sb; http://git-wip-us.apache.org/repos/asf/atlas/blob/bccae687/intg/src/main/java/org/apache/atlas/model/typedef/AtlasBaseTypeDef.java ---------------------------------------------------------------------- diff --git a/intg/src/main/java/org/apache/atlas/model/typedef/AtlasBaseTypeDef.java b/intg/src/main/java/org/apache/atlas/model/typedef/AtlasBaseTypeDef.java index 7308eb7..7a33f06 100644 --- a/intg/src/main/java/org/apache/atlas/model/typedef/AtlasBaseTypeDef.java +++ b/intg/src/main/java/org/apache/atlas/model/typedef/AtlasBaseTypeDef.java @@ -108,13 +108,31 @@ public abstract class AtlasBaseTypeDef implements java.io.Serializable { ATLAS_TYPE_OBJECT_ID, }; + public static final String SERIALIZED_DATE_FORMAT_STR = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"; + + @Deprecated public static final DateFormat DATE_FORMATTER = new SimpleDateFormat(SERIALIZED_DATE_FORMAT_STR); static { DATE_FORMATTER.setTimeZone(TimeZone.getTimeZone("UTC")); } + public static DateFormat getDateFormatter() { + return THREAD_LOCAL_DATE_FORMAT.get(); + } + + private static final ThreadLocal<DateFormat> THREAD_LOCAL_DATE_FORMAT = new ThreadLocal<DateFormat>() { + @Override + public DateFormat initialValue() { + DateFormat ret = new SimpleDateFormat(SERIALIZED_DATE_FORMAT_STR); + + ret.setTimeZone(TimeZone.getTimeZone("UTC")); + + return ret; + } + }; + private final TypeCategory category; private String guid = null; private String createdBy = null; @@ -375,7 +393,7 @@ public abstract class AtlasBaseTypeDef implements java.io.Serializable { if (value == null) { sb.append(value); } else { - sb.append(DATE_FORMATTER.format(value)); + sb.append(getDateFormatter().format(value)); } return sb; http://git-wip-us.apache.org/repos/asf/atlas/blob/bccae687/intg/src/main/java/org/apache/atlas/type/AtlasBuiltInTypes.java ---------------------------------------------------------------------- diff --git a/intg/src/main/java/org/apache/atlas/type/AtlasBuiltInTypes.java b/intg/src/main/java/org/apache/atlas/type/AtlasBuiltInTypes.java index 139d4ec..1039de6 100644 --- a/intg/src/main/java/org/apache/atlas/type/AtlasBuiltInTypes.java +++ b/intg/src/main/java/org/apache/atlas/type/AtlasBuiltInTypes.java @@ -479,7 +479,7 @@ public class AtlasBuiltInTypes { return new Date(((Number) obj).longValue()); } else { try { - return AtlasBaseTypeDef.DATE_FORMATTER.parse(obj.toString()); + return AtlasBaseTypeDef.getDateFormatter().parse(obj.toString()); } catch (ParseException excp) { try { // try to read it as a number long longDate = Long.valueOf(obj.toString()); http://git-wip-us.apache.org/repos/asf/atlas/blob/bccae687/intg/src/test/java/org/apache/atlas/type/TestAtlasDateType.java ---------------------------------------------------------------------- diff --git a/intg/src/test/java/org/apache/atlas/type/TestAtlasDateType.java b/intg/src/test/java/org/apache/atlas/type/TestAtlasDateType.java index 6236a6d..9e84331 100644 --- a/intg/src/test/java/org/apache/atlas/type/TestAtlasDateType.java +++ b/intg/src/test/java/org/apache/atlas/type/TestAtlasDateType.java @@ -46,7 +46,7 @@ public class TestAtlasDateType { private final Object[] invalidValues = { "12ab", "abcd", "-12ab", }; private final Date now = new Date(); - private final String strNow = AtlasBaseTypeDef.DATE_FORMATTER.format(now); + private final String strNow = AtlasBaseTypeDef.getDateFormatter().format(now); @Test public void testDateTypeDefaultValue() {
