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)

Reply via email to