Skip to content

Commit cb3c183

Browse files
ShyamsundarRBenamarMk
authored andcommitted
Check for metro policy using policy clusters
Current check for metro actions that use isMetroAction passed in the to and from clusters to check equivalence of region values. This would succeed when to and from clusters are the same, which can happen when the preferredCluster and the failoverCluster are the same (Deploy->Failover->Failover). As a result in a regional DR policy, such a state would enter processing or waiting for fencing to take effect before proceeding with the Failover. This commit switches to the policy based metro determination instead of the to and from clusters as before to resolve the issue. Signed-off-by: Shyamsundar Ranganathan <[email protected]> (cherry picked from commit b76fe12)
1 parent 93330bf commit cb3c183

File tree

2 files changed

+3
-33
lines changed

2 files changed

+3
-33
lines changed

controllers/drplacementcontrol.go

+2-32
Original file line numberDiff line numberDiff line change
@@ -476,7 +476,7 @@ func (d *DRPCInstance) checkFailoverPrerequisites(curHomeCluster string) (bool,
476476
err error
477477
)
478478

479-
if isMetroAction(d.drPolicy, d.drClusters, curHomeCluster, d.instance.Spec.FailoverCluster) {
479+
if metro, _ := dRPolicySupportsMetro(d.drPolicy, d.drClusters); metro {
480480
met, err = d.checkMetroFailoverPrerequisites(curHomeCluster)
481481
} else {
482482
met = d.checkRegionalFailoverPrerequisites()
@@ -1056,7 +1056,7 @@ func (d *DRPCInstance) validateAndSelectCurrentPrimary(preferredCluster string)
10561056
func (d *DRPCInstance) readyToSwitchOver(homeCluster string, preferredCluster string) bool {
10571057
d.log.Info(fmt.Sprintf("Checking if VRG Data is available on cluster %s", homeCluster))
10581058

1059-
if isMetroAction(d.drPolicy, d.drClusters, homeCluster, preferredCluster) {
1059+
if metro, _ := dRPolicySupportsMetro(d.drPolicy, d.drClusters); metro {
10601060
// check fencing status in the preferredCluster
10611061
fenced, err := d.checkClusterFenced(preferredCluster, d.drClusters)
10621062
if err != nil {
@@ -1593,36 +1593,6 @@ func dRPolicySupportsMetro(drpolicy *rmn.DRPolicy, drclusters []rmn.DRCluster) (
15931593
return supportsMetro, metroMap
15941594
}
15951595

1596-
func isMetroAction(drpolicy *rmn.DRPolicy, drClusters []rmn.DRCluster, from string, to string) bool {
1597-
var regionFrom, regionTo rmn.Region
1598-
1599-
for _, managedCluster := range rmnutil.DrpolicyClusterNames(drpolicy) {
1600-
if managedCluster == from {
1601-
regionFrom = drClusterRegion(drClusters, managedCluster)
1602-
}
1603-
1604-
if managedCluster == to {
1605-
regionTo = drClusterRegion(drClusters, managedCluster)
1606-
}
1607-
}
1608-
1609-
return regionFrom == regionTo
1610-
}
1611-
1612-
func drClusterRegion(drClusters []rmn.DRCluster, cluster string) (region rmn.Region) {
1613-
for _, drCluster := range drClusters {
1614-
if drCluster.Name != cluster {
1615-
continue
1616-
}
1617-
1618-
region = drCluster.Spec.Region
1619-
1620-
return
1621-
}
1622-
1623-
return
1624-
}
1625-
16261596
func (d *DRPCInstance) ensureNamespaceExistsOnManagedCluster(homeCluster string) error {
16271597
// verify namespace exists on target cluster
16281598
namespaceExists, err := d.namespaceExistsOnManagedCluster(homeCluster)

controllers/drplacementcontrol_controller.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -479,7 +479,7 @@ func DRPCsFailingOverToCluster(k8sclient client.Client, log logr.Logger, drclust
479479
}
480480

481481
// Skip if policy is of type metro, fake the from and to cluster
482-
if isMetroAction(&drpolicies.Items[drpolicyIdx], drClusters, drClusters[0].GetName(), drClusters[1].GetName()) {
482+
if metro, _ := dRPolicySupportsMetro(&drpolicies.Items[drpolicyIdx], drClusters); metro {
483483
log.Info("Sync DRPolicy detected, skipping!")
484484

485485
continue

0 commit comments

Comments
 (0)