Skip to content

Commit 3ecb629

Browse files
Michal-Leszczynskikarol-kokoszka
authored andcommitted
fix(repair): fix repair plan host filtering
Fixes #3736
1 parent 566343d commit 3ecb629

File tree

1 file changed

+15
-9
lines changed

1 file changed

+15
-9
lines changed

pkg/service/repair/plan.go

+15-9
Original file line numberDiff line numberDiff line change
@@ -49,26 +49,32 @@ func newPlan(ctx context.Context, target Target, client *scyllaclient.Client) (*
4949
}
5050

5151
skip := false
52-
for _, rep := range ring.ReplicaTokens {
53-
rtr := scyllaclient.ReplicaTokenRanges{
54-
ReplicaSet: filteredReplicaSet(rep.ReplicaSet, filtered, target.Host),
55-
Ranges: rep.Ranges,
52+
for _, rtr := range ring.ReplicaTokens {
53+
// Skip the whole keyspace based on repaired dcs only
54+
// (unless it's a single node cluster).
55+
replicas := 0
56+
for _, h := range rtr.ReplicaSet {
57+
if slice.ContainsString(target.DC, ring.HostDC[h]) {
58+
replicas++
59+
}
5660
}
57-
58-
// Don't add keyspace with some ranges not replicated in filtered hosts,
59-
// unless it's a single node cluster.
60-
if len(rtr.ReplicaSet) <= 1 && len(status) > 1 {
61+
if replicas <= 1 && len(status) > 1 {
6162
skip = true
6263
break
6364
}
65+
// Skip given replica sets based on all filtering factors
66+
rtr.ReplicaSet = filteredReplicaSet(rtr.ReplicaSet, filtered, target.Host)
67+
if len(rtr.ReplicaSet) <= 1 && len(status) > 1 {
68+
continue
69+
}
6470

6571
for _, r := range rtr.Ranges {
6672
kp.TokenRepIdx[r] = len(kp.Replicas)
6773
}
6874
kp.Replicas = append(kp.Replicas, rtr)
6975
}
7076

71-
if skip {
77+
if skip || len(kp.Replicas) == 0 {
7278
p.SkippedKeyspaces = append(p.SkippedKeyspaces, u.Keyspace)
7379
continue
7480
}

0 commit comments

Comments
 (0)