@@ -75,7 +75,7 @@ protected DateFormat initialValue() {
75
75
/**
76
76
* DataType converter for different computing engines
77
77
*/
78
- private static DataTypeConverter converter ;
78
+ private static final ThreadLocal < DataTypeConverter > converter = new ThreadLocal <>() ;
79
79
80
80
/**
81
81
* This method will convert a given value to its specific type
@@ -105,7 +105,7 @@ public static Object getMeasureValueBasedOnDataType(String msrValue, DataType da
105
105
new BigDecimal (msrValue ).setScale (scale , RoundingMode .HALF_UP );
106
106
BigDecimal decimal = normalizeDecimalValue (bigDecimal , precision );
107
107
if (useConverter ) {
108
- return converter .convertFromBigDecimalToDecimal (decimal );
108
+ return getDataTypeConverter () .convertFromBigDecimalToDecimal (decimal );
109
109
} else {
110
110
return decimal ;
111
111
}
@@ -144,7 +144,7 @@ public static Object getNoDictionaryValueBasedOnDataType(String dimValue, DataTy
144
144
new BigDecimal (dimValue ).setScale (scale , RoundingMode .HALF_UP );
145
145
BigDecimal decimal = normalizeDecimalValue (bigDecimal , precision );
146
146
if (useConverter ) {
147
- return converter .convertFromBigDecimalToDecimal (decimal );
147
+ return getDataTypeConverter () .convertFromBigDecimalToDecimal (decimal );
148
148
} else {
149
149
return decimal ;
150
150
}
@@ -457,7 +457,7 @@ public static Object getDataDataTypeForNoDictionaryColumn(String dimensionValue,
457
457
}
458
458
} else {
459
459
// Default action for String/Varchar
460
- return converter .convertFromStringToUTF8String (dimensionValue );
460
+ return getDataTypeConverter () .convertFromStringToUTF8String (dimensionValue );
461
461
}
462
462
}
463
463
@@ -974,7 +974,7 @@ private static String parseStringToBigDecimal(String value, ColumnSchema columnS
974
974
*/
975
975
public static void setDataTypeConverter (DataTypeConverter converterLocal ) {
976
976
if (converterLocal != null ) {
977
- converter = converterLocal ;
977
+ converter . set ( converterLocal ) ;
978
978
timeStampformatter .remove ();
979
979
dateformatter .remove ();
980
980
}
@@ -989,10 +989,17 @@ public static void clearFormatter() {
989
989
}
990
990
991
991
public static DataTypeConverter getDataTypeConverter () {
992
- if (converter == null ) {
993
- converter = new DataTypeConverterImpl ();
992
+ DataTypeConverter dataTypeConverter = converter .get ();
993
+ if (dataTypeConverter == null ) {
994
+ synchronized (converter ) {
995
+ dataTypeConverter = converter .get ();
996
+ if (dataTypeConverter == null ) {
997
+ dataTypeConverter = new DataTypeConverterImpl ();
998
+ converter .set (dataTypeConverter );
999
+ }
1000
+ }
994
1001
}
995
- return converter ;
1002
+ return dataTypeConverter ;
996
1003
}
997
1004
998
1005
public static DataType valueOf (String name ) {
0 commit comments