morningman commented on code in PR #33971:
URL: https://github.com/apache/doris/pull/33971#discussion_r1576022820
##########
fe/fe-core/src/main/java/org/apache/doris/datasource/mapping/IdentifierMapping.java:
##########
@@ -179,51 +182,58 @@ public List<Column> setColumnNameMapping(String
remoteDbName, String remoteTable
}
public String getRemoteDatabaseName(String localDbName) {
- if (localDBToRemoteDB.isEmpty() ||
!localDBToRemoteDB.containsKey(localDbName)) {
- loadDatabaseNamesIfNeeded();
- }
- return localDBToRemoteDB.get(localDbName);
+ return getRequiredMapping(localDBToRemoteDB, localDbName, "database",
this::loadDatabaseNamesIfNeeded,
+ localDbName);
}
public String getRemoteTableName(String localDbName, String
localTableName) {
String remoteDbName = getRemoteDatabaseName(localDbName);
- if (localTableToRemoteTable.isEmpty()
- || !localTableToRemoteTable.containsKey(remoteDbName)
- || localTableToRemoteTable.get(remoteDbName) == null
- || localTableToRemoteTable.get(remoteDbName).isEmpty()
- ||
!localTableToRemoteTable.get(remoteDbName).containsKey(localTableName)
- ||
localTableToRemoteTable.get(remoteDbName).get(localTableName) == null) {
- loadTableNamesIfNeeded(localDbName);
- }
-
- return localTableToRemoteTable.get(remoteDbName).get(localTableName);
+ Map<String, String> tableMap =
localTableToRemoteTable.computeIfAbsent(remoteDbName,
+ k -> new ConcurrentHashMap<>());
+ return getRequiredMapping(tableMap, localTableName, "table", () ->
loadTableNamesIfNeeded(localDbName),
+ localTableName);
}
public Map<String, String> getRemoteColumnNames(String localDbName, String
localTableName) {
String remoteDbName = getRemoteDatabaseName(localDbName);
String remoteTableName = getRemoteTableName(localDbName,
localTableName);
- if (localColumnToRemoteColumn.isEmpty()
- || !localColumnToRemoteColumn.containsKey(remoteDbName)
- || localColumnToRemoteColumn.get(remoteDbName) == null
- || localColumnToRemoteColumn.get(remoteDbName).isEmpty()
- ||
!localColumnToRemoteColumn.get(remoteDbName).containsKey(remoteTableName)
- ||
localColumnToRemoteColumn.get(remoteDbName).get(remoteTableName) == null
- ||
localColumnToRemoteColumn.get(remoteDbName).get(remoteTableName).isEmpty()) {
+ ConcurrentHashMap<String, ConcurrentHashMap<String, String>>
tableColumnMap
+ = localColumnToRemoteColumn.computeIfAbsent(remoteDbName, k ->
new ConcurrentHashMap<>());
+ Map<String, String> columnMap =
tableColumnMap.computeIfAbsent(remoteTableName, k -> new ConcurrentHashMap<>());
+ if (columnMap.isEmpty()) {
+ LOG.info("Column name mapping missing, loading column names for
localDbName: {}, localTableName: {}",
+ localDbName, localTableName);
loadColumnNamesIfNeeded(localDbName, localTableName);
}
- return
localColumnToRemoteColumn.get(remoteDbName).get(remoteTableName);
+ if (columnMap.isEmpty()) {
+ LOG.error("No remote column found for localTableName: {}. Please
refresh this catalog.", localTableName);
Review Comment:
```suggestion
LOG.warn("No remote column found for localTableName: {}. Please
refresh this catalog.", localTableName);
```
##########
fe/fe-core/src/main/java/org/apache/doris/datasource/mapping/IdentifierMapping.java:
##########
@@ -179,51 +182,58 @@ public List<Column> setColumnNameMapping(String
remoteDbName, String remoteTable
}
public String getRemoteDatabaseName(String localDbName) {
- if (localDBToRemoteDB.isEmpty() ||
!localDBToRemoteDB.containsKey(localDbName)) {
- loadDatabaseNamesIfNeeded();
- }
- return localDBToRemoteDB.get(localDbName);
+ return getRequiredMapping(localDBToRemoteDB, localDbName, "database",
this::loadDatabaseNamesIfNeeded,
+ localDbName);
}
public String getRemoteTableName(String localDbName, String
localTableName) {
String remoteDbName = getRemoteDatabaseName(localDbName);
- if (localTableToRemoteTable.isEmpty()
- || !localTableToRemoteTable.containsKey(remoteDbName)
- || localTableToRemoteTable.get(remoteDbName) == null
- || localTableToRemoteTable.get(remoteDbName).isEmpty()
- ||
!localTableToRemoteTable.get(remoteDbName).containsKey(localTableName)
- ||
localTableToRemoteTable.get(remoteDbName).get(localTableName) == null) {
- loadTableNamesIfNeeded(localDbName);
- }
-
- return localTableToRemoteTable.get(remoteDbName).get(localTableName);
+ Map<String, String> tableMap =
localTableToRemoteTable.computeIfAbsent(remoteDbName,
+ k -> new ConcurrentHashMap<>());
+ return getRequiredMapping(tableMap, localTableName, "table", () ->
loadTableNamesIfNeeded(localDbName),
+ localTableName);
}
public Map<String, String> getRemoteColumnNames(String localDbName, String
localTableName) {
String remoteDbName = getRemoteDatabaseName(localDbName);
String remoteTableName = getRemoteTableName(localDbName,
localTableName);
- if (localColumnToRemoteColumn.isEmpty()
- || !localColumnToRemoteColumn.containsKey(remoteDbName)
- || localColumnToRemoteColumn.get(remoteDbName) == null
- || localColumnToRemoteColumn.get(remoteDbName).isEmpty()
- ||
!localColumnToRemoteColumn.get(remoteDbName).containsKey(remoteTableName)
- ||
localColumnToRemoteColumn.get(remoteDbName).get(remoteTableName) == null
- ||
localColumnToRemoteColumn.get(remoteDbName).get(remoteTableName).isEmpty()) {
+ ConcurrentHashMap<String, ConcurrentHashMap<String, String>>
tableColumnMap
+ = localColumnToRemoteColumn.computeIfAbsent(remoteDbName, k ->
new ConcurrentHashMap<>());
+ Map<String, String> columnMap =
tableColumnMap.computeIfAbsent(remoteTableName, k -> new ConcurrentHashMap<>());
+ if (columnMap.isEmpty()) {
+ LOG.info("Column name mapping missing, loading column names for
localDbName: {}, localTableName: {}",
+ localDbName, localTableName);
loadColumnNamesIfNeeded(localDbName, localTableName);
}
- return
localColumnToRemoteColumn.get(remoteDbName).get(remoteTableName);
+ if (columnMap.isEmpty()) {
Review Comment:
Even if you run `loadColumnNamesIfNeeded()`, the `columnMap` is still empty
##########
fe/fe-core/src/main/java/org/apache/doris/datasource/mapping/IdentifierMapping.java:
##########
@@ -179,51 +182,58 @@ public List<Column> setColumnNameMapping(String
remoteDbName, String remoteTable
}
public String getRemoteDatabaseName(String localDbName) {
- if (localDBToRemoteDB.isEmpty() ||
!localDBToRemoteDB.containsKey(localDbName)) {
- loadDatabaseNamesIfNeeded();
- }
- return localDBToRemoteDB.get(localDbName);
+ return getRequiredMapping(localDBToRemoteDB, localDbName, "database",
this::loadDatabaseNamesIfNeeded,
+ localDbName);
}
public String getRemoteTableName(String localDbName, String
localTableName) {
String remoteDbName = getRemoteDatabaseName(localDbName);
- if (localTableToRemoteTable.isEmpty()
- || !localTableToRemoteTable.containsKey(remoteDbName)
- || localTableToRemoteTable.get(remoteDbName) == null
- || localTableToRemoteTable.get(remoteDbName).isEmpty()
- ||
!localTableToRemoteTable.get(remoteDbName).containsKey(localTableName)
- ||
localTableToRemoteTable.get(remoteDbName).get(localTableName) == null) {
- loadTableNamesIfNeeded(localDbName);
- }
-
- return localTableToRemoteTable.get(remoteDbName).get(localTableName);
+ Map<String, String> tableMap =
localTableToRemoteTable.computeIfAbsent(remoteDbName,
+ k -> new ConcurrentHashMap<>());
+ return getRequiredMapping(tableMap, localTableName, "table", () ->
loadTableNamesIfNeeded(localDbName),
+ localTableName);
}
public Map<String, String> getRemoteColumnNames(String localDbName, String
localTableName) {
String remoteDbName = getRemoteDatabaseName(localDbName);
String remoteTableName = getRemoteTableName(localDbName,
localTableName);
- if (localColumnToRemoteColumn.isEmpty()
- || !localColumnToRemoteColumn.containsKey(remoteDbName)
- || localColumnToRemoteColumn.get(remoteDbName) == null
- || localColumnToRemoteColumn.get(remoteDbName).isEmpty()
- ||
!localColumnToRemoteColumn.get(remoteDbName).containsKey(remoteTableName)
- ||
localColumnToRemoteColumn.get(remoteDbName).get(remoteTableName) == null
- ||
localColumnToRemoteColumn.get(remoteDbName).get(remoteTableName).isEmpty()) {
+ ConcurrentHashMap<String, ConcurrentHashMap<String, String>>
tableColumnMap
+ = localColumnToRemoteColumn.computeIfAbsent(remoteDbName, k ->
new ConcurrentHashMap<>());
+ Map<String, String> columnMap =
tableColumnMap.computeIfAbsent(remoteTableName, k -> new ConcurrentHashMap<>());
+ if (columnMap.isEmpty()) {
+ LOG.info("Column name mapping missing, loading column names for
localDbName: {}, localTableName: {}",
+ localDbName, localTableName);
loadColumnNamesIfNeeded(localDbName, localTableName);
}
- return
localColumnToRemoteColumn.get(remoteDbName).get(remoteTableName);
+ if (columnMap.isEmpty()) {
+ LOG.error("No remote column found for localTableName: {}. Please
refresh this catalog.", localTableName);
+ throw new RuntimeException(
+ "No remote column found for localTableName: " +
localTableName + ". Please refresh this catalog.");
+ }
+ return columnMap;
}
+
private void loadDatabaseNamesIfNeeded() {
if (dbNamesLoaded.compareAndSet(false, true)) {
- loadDatabaseNames();
+ try {
+ loadDatabaseNames();
+ } catch (Exception e) {
+ dbNamesLoaded.set(false); // Reset on failure
+ LOG.error("Error loading database names", e);
Review Comment:
```suggestion
LOG.warn("Error loading database names", e);
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]