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() {

Reply via email to