Skip to content

Commit 10e20c4

Browse files
committed
fix partition information not changed after alter table
1 parent 4fef9c0 commit 10e20c4

File tree

1 file changed

+21
-13
lines changed

1 file changed

+21
-13
lines changed

src/main/java/com/alipay/oceanbase/rpc/ObTableClient.java

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2047,7 +2047,7 @@ public List<ObPair<Long, ObTableParam>> getTables(String tableName, ObTableQuery
20472047
boolean refresh, boolean waitForRefresh)
20482048
throws Exception {
20492049
return getTables(tableName, query, start, startInclusive, end, endInclusive, refresh,
2050-
waitForRefresh, getRoute(false));
2050+
waitForRefresh, false, getRoute(false));
20512051
}
20522052

20532053
/**
@@ -2070,8 +2070,16 @@ public List<ObPair<Long, ObTableParam>> getTables(String tableName, ObTableQuery
20702070
boolean refresh, boolean waitForRefresh,
20712071
ObServerRoute route) throws Exception {
20722072

2073+
return getTables(tableName, query, start, startInclusive, end, endInclusive, refresh, waitForRefresh, false, route);
2074+
}
2075+
2076+
private List<ObPair<Long, ObTableParam>> getTables(String tableName, ObTableQuery query,
2077+
Object[] start, boolean startInclusive,
2078+
Object[] end, boolean endInclusive,
2079+
boolean refresh, boolean waitForRefresh,
2080+
boolean needFetchAll, ObServerRoute route) throws Exception {
20732081
// 1. get TableEntry information
2074-
TableEntry tableEntry = getOrRefreshTableEntry(tableName, refresh, waitForRefresh, false);
2082+
TableEntry tableEntry = getOrRefreshTableEntry(tableName, refresh, waitForRefresh, needFetchAll);
20752083

20762084
List<String> scanRangeColumns = query.getScanRangeColumns();
20772085
if (scanRangeColumns == null || scanRangeColumns.isEmpty()) {
@@ -2091,16 +2099,16 @@ public List<ObPair<Long, ObTableParam>> getTables(String tableName, ObTableQuery
20912099
// ensure the format of column names and values if the current table is a table with partition
20922100
if (tableEntry.isPartitionTable()) {
20932101
if ((scanRangeColumns == null || scanRangeColumns.isEmpty()) && start.length == 1
2094-
&& start[0] instanceof ObObj && ((ObObj) start[0]).isMinObj() && end.length == 1
2095-
&& end[0] instanceof ObObj && ((ObObj) end[0]).isMaxObj()) {
2102+
&& start[0] instanceof ObObj && ((ObObj) start[0]).isMinObj() && end.length == 1
2103+
&& end[0] instanceof ObObj && ((ObObj) end[0]).isMaxObj()) {
20962104
// for getPartition to query all partitions
20972105
scanRangeColumns = new ArrayList<String>(Collections.nCopies(start.length,
2098-
"partition"));
2106+
"partition"));
20992107
}
21002108
// scanRangeColumn may be longer than start/end in prefix scanning situation
21012109
if (scanRangeColumns == null || scanRangeColumns.size() < start.length) {
21022110
throw new IllegalArgumentException(
2103-
"length of key and scan range columns do not match, please use addRowKeyElement or set scan range columns");
2111+
"length of key and scan range columns do not match, please use addRowKeyElement or set scan range columns");
21042112
}
21052113
for (int i = 0; i < start.length; i++) {
21062114
startRow.add(scanRangeColumns.get(i), start[i]);
@@ -2109,7 +2117,7 @@ public List<ObPair<Long, ObTableParam>> getTables(String tableName, ObTableQuery
21092117
}
21102118

21112119
List<ObPair<Long, ReplicaLocation>> partIdWithReplicaList = getPartitionReplica(tableEntry,
2112-
startRow, startInclusive, endRow, endInclusive, route);
2120+
startRow, startInclusive, endRow, endInclusive, route);
21132121

21142122
// obTableParams -> List<Pair<logicId, obTableParams>>
21152123
List<ObPair<Long, ObTableParam>> obTableParams = new ArrayList<ObPair<Long, ObTableParam>>();
@@ -2121,9 +2129,9 @@ public List<ObPair<Long, ObTableParam>> getTables(String tableName, ObTableQuery
21212129
boolean addrExpired = addr.isExpired(serverAddressCachingTimeout);
21222130
if (addrExpired || obTable == null) {
21232131
logger
2124-
.warn(
2125-
"server address {} is expired={} or can not get ob table. So that will sync refresh metadata",
2126-
addr, addrExpired);
2132+
.warn(
2133+
"server address {} is expired={} or can not get ob table. So that will sync refresh metadata",
2134+
addr, addrExpired);
21272135
syncRefreshMetadata();
21282136
tableEntry = getOrRefreshTableEntry(tableName, true, waitForRefresh, false);
21292137
replica = getPartitionLocation(tableEntry, partId, route);
@@ -2141,7 +2149,7 @@ public List<ObPair<Long, ObTableParam>> getTables(String tableName, ObTableQuery
21412149
if (ObGlobal.obVsnMajor() >= 4) {
21422150
long partIdx = tableEntry.getPartIdx(partId);
21432151
partId = tableEntry.isPartitionTable() ? tableEntry.getPartitionInfo()
2144-
.getPartTabletIdMap().get(partIdx) : partId;
2152+
.getPartTabletIdMap().get(partIdx) : partId;
21452153
param.setLsId(tableEntry.getPartitionEntry().getLsId(partId));
21462154
}
21472155

@@ -3081,11 +3089,11 @@ private List<Partition> getAllPartitionInternal(String tableName, boolean refres
30813089
if (refresh) {
30823090
// List<ObPair<logic partId, obTableParam>>
30833091
allTables = getTables(tableName, new ObTableQuery(), new Object[]{ ObObj.getMin() }, true,
3084-
new Object[]{ ObObj.getMax() }, true, true, true, getRoute(false));
3092+
new Object[]{ ObObj.getMax() }, true, true, true, true, getRoute(false));
30853093
} else {
30863094
// List<ObPair<logic partId, obTableParam>>
30873095
allTables = getTables(tableName, new ObTableQuery(), new Object[]{ ObObj.getMin() }, true,
3088-
new Object[]{ ObObj.getMax() }, true, false, false, getRoute(false));
3096+
new Object[]{ ObObj.getMax() }, true, false, false, false, getRoute(false));
30893097
}
30903098
for (ObPair<Long, ObTableParam> table : allTables) {
30913099
ObTableParam tableParam = table.getRight();

0 commit comments

Comments
 (0)