Skip to content
Merged
Show file tree
Hide file tree
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
4 changes: 2 additions & 2 deletions src/main/java/com/alipay/oceanbase/rpc/ObTableClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -2754,15 +2754,15 @@ public ObTableClientType getClientType(RunningMode runningMode) {
}
}

public void setReadConsistency(ObReadConsistency readConsistency) throws IllegalArgumentException {
public void setReadConsistency(ObReadConsistency readConsistency) {
tableRoute.setReadConsistency(readConsistency);
}

public String getReadConsistency() {
return tableRoute.getReadConsistency().name();
}

public void setRoutePolicy(ObRoutePolicy policy) throws IllegalArgumentException {
public void setRoutePolicy(ObRoutePolicy policy) {
tableRoute.setRoutePolicy(policy);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ public ObReadConsistency getReadConsistency() {
* Set read consistency level.
* @param readConsistency read consistency level
*/
public void setReadConsistency(ObReadConsistency readConsistency) throws IllegalArgumentException {
public void setReadConsistency(ObReadConsistency readConsistency) {
this.consistencyLevel = readConsistency;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -104,26 +104,38 @@ private ReplicaLocation getReadReplicaNoLdc(ObRoutePolicy routePolicy) {

private ReplicaLocation getReadReplicaByRoutePolicy(ObRoutePolicy routePolicy)
throws IllegalArgumentException {
// 路由策略优先:FOLLOWER_FIRST 优先选择 follower,FOLLOWER_ONLY 只能选择 follower
// 在满足路由策略的前提下,按就近原则选择(同机房 -> 同 region -> 其他 region)

// 优先在同机房找 follower
for (ReplicaLocation r : sameIdc) {
if (r.isValid()) {
if (r.isValid() && !r.isLeader()) {
return r;
}
}

// 如果同机房没有 follower,在同 region 找 follower
for (ReplicaLocation r : sameRegion) {
if (r.isValid()) {
if (r.isValid() && !r.isLeader()) {
return r;
}
}

// 如果同 region 没有 follower,在其他 region 找 follower
for (ReplicaLocation r : otherRegion) {
if (r.isValid()) {
if (r.isValid() && !r.isLeader()) {
return r;
}
}


// 如果都没有找到 follower
if (routePolicy == ObRoutePolicy.FOLLOWER_ONLY) {
// FOLLOWER_ONLY 必须选择 follower,没有就抛出异常
throw new IllegalArgumentException("No follower replica found for route policy: "
+ routePolicy);
+ routePolicy);
}

// 如果都没有找到,返回 leader(兜底)
return leader;
}

Expand Down
Loading