@ -280,23 +280,27 @@ public class Tablet extends MetaObject implements Writable {
|
||||
return map;
|
||||
}
|
||||
|
||||
// When a BE reports a missing version, lastFailedVersion is set. When a write fails on a replica,
|
||||
// lastFailedVersion is set.
|
||||
// for query
|
||||
public List<Replica> getQueryableReplicas(long visibleVersion, Map<Long, Set<Long>> backendAlivePathHashs,
|
||||
boolean allowFailedVersion) {
|
||||
boolean allowMissingVersion) {
|
||||
List<Replica> allQueryableReplica = Lists.newArrayListWithCapacity(replicas.size());
|
||||
List<Replica> auxiliaryReplica = Lists.newArrayListWithCapacity(replicas.size());
|
||||
List<Replica> deadPathReplica = Lists.newArrayList();
|
||||
List<Replica> mayMissingVersionReplica = Lists.newArrayList();
|
||||
List<Replica> notCatchupReplica = Lists.newArrayList();
|
||||
|
||||
for (Replica replica : replicas) {
|
||||
if (replica.isBad()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Skip the missing version replica
|
||||
if (replica.getLastFailedVersion() > 0 && !allowFailedVersion) {
|
||||
if (!replica.checkVersionCatchUp(visibleVersion, false)) {
|
||||
notCatchupReplica.add(replica);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!replica.checkVersionCatchUp(visibleVersion, false)) {
|
||||
if (replica.getLastFailedVersion() > 0) {
|
||||
mayMissingVersionReplica.add(replica);
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -322,6 +326,15 @@ public class Tablet extends MetaObject implements Writable {
|
||||
allQueryableReplica = deadPathReplica;
|
||||
}
|
||||
|
||||
if (allQueryableReplica.isEmpty()) {
|
||||
// If be misses a version, be would report failure.
|
||||
allQueryableReplica = mayMissingVersionReplica;
|
||||
}
|
||||
|
||||
if (allQueryableReplica.isEmpty() && allowMissingVersion) {
|
||||
allQueryableReplica = notCatchupReplica;
|
||||
}
|
||||
|
||||
if (Config.skip_compaction_slower_replica && allQueryableReplica.size() > 1) {
|
||||
long minVersionCount = allQueryableReplica.stream().mapToLong(Replica::getVisibleVersionCount)
|
||||
.filter(count -> count != -1).min().orElse(Long.MAX_VALUE);
|
||||
|
||||
Reference in New Issue
Block a user