Skip to content

Commit 2162067

Browse files
authored
[Bugfix] Partition information is not refresh after alter table schema (#260)
* fix error hbase table name because of the lack of indexTableName * fix partition information not changed after alter table
1 parent bf72ef4 commit 2162067

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
@@ -2048,7 +2048,7 @@ public List<ObPair<Long, ObTableParam>> getTables(String tableName, ObTableQuery
20482048
boolean refresh, boolean waitForRefresh)
20492049
throws Exception {
20502050
return getTables(tableName, query, start, startInclusive, end, endInclusive, refresh,
2051-
waitForRefresh, getRoute(false));
2051+
waitForRefresh, false, getRoute(false));
20522052
}
20532053

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

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

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

21122120
List<ObPair<Long, ReplicaLocation>> partIdWithReplicaList = getPartitionReplica(tableEntry,
2113-
startRow, startInclusive, endRow, endInclusive, route);
2121+
startRow, startInclusive, endRow, endInclusive, route);
21142122

21152123
// obTableParams -> List<Pair<logicId, obTableParams>>
21162124
List<ObPair<Long, ObTableParam>> obTableParams = new ArrayList<ObPair<Long, ObTableParam>>();
@@ -2122,9 +2130,9 @@ public List<ObPair<Long, ObTableParam>> getTables(String tableName, ObTableQuery
21222130
boolean addrExpired = addr.isExpired(serverAddressCachingTimeout);
21232131
if (addrExpired || obTable == null) {
21242132
logger
2125-
.warn(
2126-
"server address {} is expired={} or can not get ob table. So that will sync refresh metadata",
2127-
addr, addrExpired);
2133+
.warn(
2134+
"server address {} is expired={} or can not get ob table. So that will sync refresh metadata",
2135+
addr, addrExpired);
21282136
syncRefreshMetadata();
21292137
tableEntry = getOrRefreshTableEntry(tableName, true, waitForRefresh, false);
21302138
replica = getPartitionLocation(tableEntry, partId, route);
@@ -2142,7 +2150,7 @@ public List<ObPair<Long, ObTableParam>> getTables(String tableName, ObTableQuery
21422150
if (ObGlobal.obVsnMajor() >= 4) {
21432151
long partIdx = tableEntry.getPartIdx(partId);
21442152
partId = tableEntry.isPartitionTable() ? tableEntry.getPartitionInfo()
2145-
.getPartTabletIdMap().get(partIdx) : partId;
2153+
.getPartTabletIdMap().get(partIdx) : partId;
21462154
param.setLsId(tableEntry.getPartitionEntry().getLsId(partId));
21472155
}
21482156

@@ -3127,11 +3135,11 @@ private List<Partition> getAllPartitionInternal(String tableName, boolean refres
31273135
if (refresh) {
31283136
// List<ObPair<logic partId, obTableParam>>
31293137
allTables = getTables(tableName, new ObTableQuery(), new Object[]{ ObObj.getMin() }, true,
3130-
new Object[]{ ObObj.getMax() }, true, true, true, getRoute(false));
3138+
new Object[]{ ObObj.getMax() }, true, true, true, true, getRoute(false));
31313139
} else {
31323140
// List<ObPair<logic partId, obTableParam>>
31333141
allTables = getTables(tableName, new ObTableQuery(), new Object[]{ ObObj.getMin() }, true,
3134-
new Object[]{ ObObj.getMax() }, true, false, false, getRoute(false));
3142+
new Object[]{ ObObj.getMax() }, true, false, false, false, getRoute(false));
31353143
}
31363144
for (ObPair<Long, ObTableParam> table : allTables) {
31373145
ObTableParam tableParam = table.getRight();

0 commit comments

Comments
 (0)