You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@kylin.apache.org by "Xiaoxiang Yu (Jira)" <ji...@apache.org> on 2023/03/29 06:47:00 UTC

[jira] [Resolved] (KYLIN-5256) Add a cache for the system property get by the optional config in KylinConfigBase

     [ https://issues.apache.org/jira/browse/KYLIN-5256?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Xiaoxiang Yu resolved KYLIN-5256.
---------------------------------
    Resolution: Fixed

> 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
>            Priority: Major
>             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)