Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 20 additions & 6 deletions src/main/java/com/alipay/oceanbase/rpc/location/LocationUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@
import java.sql.*;
import java.text.MessageFormat;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import static com.alipay.oceanbase.rpc.location.model.partition.ObPartitionKey.MAX_PARTITION_ELEMENT;
import static com.alipay.oceanbase.rpc.location.model.partition.ObPartitionKey.MIN_PARTITION_ELEMENT;
Expand Down Expand Up @@ -1234,6 +1236,18 @@ public static Long getTableIdFromRemote(ObServerAddr obServerAddr, ObUserAuth sy
return tableId;
}

private static String getActualIndexName(String indexTableName) {
String actualIndexName = null;
if (indexTableName != null && indexTableName.startsWith("__idx_")) {
Pattern pattern = Pattern.compile("^__idx_\\d+_(.+)$");
Matcher matcher = pattern.matcher(indexTableName);
if (matcher.matches()) {
actualIndexName = matcher.group(1);
}
}
return actualIndexName == null ? indexTableName == null ? "" : indexTableName : actualIndexName;
}

public static ObIndexInfo getIndexInfoFromRemote(ObServerAddr obServerAddr, ObUserAuth sysUA,
long connectTimeout, long socketTimeout,
String indexTableName)
Expand All @@ -1254,22 +1268,22 @@ public static ObIndexInfo getIndexInfoFromRemote(ObServerAddr obServerAddr, ObUs
indexInfo.setIndexTableId(rs.getLong("table_id"));
indexInfo.setIndexType(ObIndexType.valueOf(rs.getInt("index_type")));
} else {
throw new ObTableEntryRefreshException("index is not exist");
throw new ObTableEntryRefreshException("[-5224][OB_WRONG_NAME_FOR_INDEX] index name is wrong");
}
} catch (SQLException e) {
// cannot execute sql, maybe some of the observers have been killed
RUNTIME.error(LCD.convert("01-00010"), indexTableName, e.getMessage());
RUNTIME.error(LCD.convert("01-00010"), getActualIndexName(indexTableName), e.getMessage());
throw new ObTableEntryRefreshException("fail to get index info from remote", e, true);
} catch (Exception e) {
if (e instanceof ObTableEntryRefreshException) {
throw new ObTableEntryRefreshException(format(
"fail to get index info from remote, indexTableName: %s, error message: %s",
indexTableName, e.getMessage()), e,
"fail to get index info from remote, indexName: %s, error message: %s",
getActualIndexName(indexTableName), e.getMessage()), e,
((ObTableEntryRefreshException) e).isConnectInactive());
} else {
throw new ObTableEntryRefreshException(format(
"fail to get index info from remote, indexTableName: %s, error message: %s",
indexTableName, e.getMessage()), e);
"fail to get index info from remote, indexName: %s, error message: %s",
getActualIndexName(indexTableName), e.getMessage()), e);
}
} finally {
try {
Expand Down