Zhenning Zhang created KYLIN-5256:
-------------------------------------
Summary: Add a cache for the system property get by the optional
config in KylinConfigBase
Key: KYLIN-5256
URL: https://issues.apache.org/jira/browse/KYLIN-5256
Project: Kylin
Issue Type: Improvement
Reporter: Zhenning Zhang
Assignee: Zhenning Zhang
Fix For: 5.0-alpha
Currently for every getOptional() in {*}KylinConfigBase{*}, it will invoke
*System.getProperty* in which will be blocked by the lock of hash table. In
most cases, the config will not be changed. It's better to cache them with
concurrent hash map.
[https://community.oracle.com/tech/developers/discussion/4490235/the-performance-impact-of-java-lang-system-getproperty]
Stack:
{code:java}
"Query 73183025-c617-a3e5-64b9-f21aa6261c10-356" #356 daemon prio=5 os_prio=0
tid=0x00007f6900468000 nid=0x103c waiting for monitor entry [0x00007f68aa0e5000]
java.lang.Thread.State: BLOCKED (on object monitor)
at java.util.Hashtable.get(Hashtable.java:363)
- waiting to lock <0x00007f69f0034548> (a java.util.Properties)
at java.util.Properties.getProperty(Properties.java:969)
at
org.apache.kylin.common.KylinExternalConfigLoader.getProperty(KylinExternalConfigLoader.java:164)
at
org.apache.kylin.common.PropertiesDelegate.getProperty(PropertiesDelegate.java:58)
at
org.apache.kylin.common.PropertiesDelegate.getProperty(PropertiesDelegate.java:65)
at
org.apache.kylin.common.KylinConfigBase.getOptional(KylinConfigBase.java:206)
at
org.apache.kylin.common.KapConfig.defaultDecimalScale(KapConfig.java:558)
at
org.apache.kylin.query.calcite.KylinRelDataTypeSystem.getDefaultScale(KylinRelDataTypeSystem.java:102)
at
org.apache.calcite.sql.type.BasicSqlType.generateTypeString(BasicSqlType.java:186)
"Query 5d2f5f9b-a4ae-a919-a94f-79e5819e9dac-359" #359 daemon prio=5 os_prio=0
tid=0x00007f6902a92000 nid=0x103f waiting for monitor entry [0x00007f68a94e3000]
java.lang.Thread.State: BLOCKED (on object monitor)
at java.util.Hashtable.get(Hashtable.java:363)
- waiting to lock <0x00007f69f003dd30> (a java.util.Properties)
at java.util.Properties.getProperty(Properties.java:969)
at java.lang.System.getProperty(System.java:722)
at
org.apache.kylin.common.KylinConfigBase.getOptional(KylinConfigBase.java:204)
at
org.apache.kylin.common.KylinConfigBase.streamingEnabled(KylinConfigBase.java:1538)
at
org.apache.kylin.metadata.model.NTableMetadataManager.isTableAccessible(NTableMetadataManager.java:334)
"Query 3ce57dbc-cc0d-307e-2d48-f6c969d99426-361" #361 daemon prio=5 os_prio=0
tid=0x00007f6902a96800 nid=0x1041 waiting for monitor entry [0x00007f68a8ce0000]
java.lang.Thread.State: BLOCKED (on object monitor)
at java.util.Hashtable.get(Hashtable.java:363)
- waiting to lock <0x00007f69f0034548> (a java.util.Properties)
at java.util.Properties.getProperty(Properties.java:969)
at
org.apache.kylin.common.KylinExternalConfigLoader.getProperty(KylinExternalConfigLoader.java:164)
at
org.apache.kylin.common.PropertiesDelegate.getProperty(PropertiesDelegate.java:58)
at
org.apache.kylin.common.PropertiesDelegate.getProperty(PropertiesDelegate.java:65)
at
org.apache.kylin.common.KylinConfigBase.getOptional(KylinConfigBase.java:206)
at
org.apache.kylin.common.KylinConfigExt.getOptional(KylinConfigExt.java:86)
at
org.apache.kylin.common.KylinConfigBase.getSourceNameCaseSensitiveEnabled(KylinConfigBase.java:1194)
at
org.apache.kylin.query.schema.OLAPTable.deriveRowType(OLAPTable.java:228)
at
org.apache.kylin.query.schema.OLAPTable.getRowType(OLAPTable.java:208) {code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)