This is an automated email from the ASF dual-hosted git repository.
morningman pushed a commit to branch branch-2.0
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-2.0 by this push:
new ae356c906ed [opt](catalog) cache the converted properties (#30668)
(#30878)
ae356c906ed is described below
commit ae356c906edbadcbc03e986c03ab917a1ab4b015
Author: Mingyu Chen <[email protected]>
AuthorDate: Tue Feb 6 00:14:55 2024 +0800
[opt](catalog) cache the converted properties (#30668) (#30878)
bp #30668
---
.../org/apache/doris/datasource/ExternalCatalog.java | 20 +++++++++++++++++++-
1 file changed, 19 insertions(+), 1 deletion(-)
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/datasource/ExternalCatalog.java
b/fe/fe-core/src/main/java/org/apache/doris/datasource/ExternalCatalog.java
index 3029f6ca79f..cab86bc35b7 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/ExternalCatalog.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/ExternalCatalog.java
@@ -101,6 +101,10 @@ public abstract class ExternalCatalog
private ExternalSchemaCache schemaCache;
private String comment;
+ // A cached and being converted properties for external catalog.
+ // generated from catalog properties.
+ private byte[] propLock = new byte[0];
+ private Map<String, String> convertedProperties = null;
public ExternalCatalog() {
}
@@ -289,6 +293,9 @@ public abstract class ExternalCatalog
public void onRefresh(boolean invalidCache) {
this.objectCreated = false;
this.initialized = false;
+ synchronized (this.propLock) {
+ this.convertedProperties = null;
+ }
this.invalidCacheInInit = invalidCache;
if (invalidCache) {
Env.getCurrentEnv().getExtMetaCacheMgr().invalidateCatalogCache(id);
@@ -404,7 +411,17 @@ public abstract class ExternalCatalog
@Override
public Map<String, String> getProperties() {
- return
PropertyConverter.convertToMetaProperties(catalogProperty.getProperties());
+ // convert properties may be a heavy operation, so we cache the result.
+ if (convertedProperties != null) {
+ return convertedProperties;
+ }
+ synchronized (propLock) {
+ if (convertedProperties != null) {
+ return convertedProperties;
+ }
+ convertedProperties =
PropertyConverter.convertToMetaProperties(catalogProperty.getProperties());
+ return convertedProperties;
+ }
}
@Override
@@ -542,6 +559,7 @@ public abstract class ExternalCatalog
}
}
}
+ this.propLock = new byte[0];
}
public void addDatabaseForTest(ExternalDatabase<? extends ExternalTable>
db) {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]