@@ -49,26 +49,32 @@ func newPlan(ctx context.Context, target Target, client *scyllaclient.Client) (*
49
49
}
50
50
51
51
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
+ }
56
60
}
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 {
61
62
skip = true
62
63
break
63
64
}
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
+ }
64
70
65
71
for _ , r := range rtr .Ranges {
66
72
kp .TokenRepIdx [r ] = len (kp .Replicas )
67
73
}
68
74
kp .Replicas = append (kp .Replicas , rtr )
69
75
}
70
76
71
- if skip {
77
+ if skip || len ( kp . Replicas ) == 0 {
72
78
p .SkippedKeyspaces = append (p .SkippedKeyspaces , u .Keyspace )
73
79
continue
74
80
}
0 commit comments