Failover to switchover.
This commit is contained in:
parent
6d71ba72ba
commit
da2021e9ce
|
|
@ -12,7 +12,7 @@ import (
|
||||||
|
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
"k8s.io/api/apps/v1beta1"
|
"k8s.io/api/apps/v1beta1"
|
||||||
"k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
policybeta1 "k8s.io/api/policy/v1beta1"
|
policybeta1 "k8s.io/api/policy/v1beta1"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/types"
|
"k8s.io/apimachinery/pkg/types"
|
||||||
|
|
@ -877,7 +877,7 @@ func (c *Cluster) GetStatus() *ClusterStatus {
|
||||||
func (c *Cluster) Switchover(curMaster *v1.Pod, candidate spec.NamespacedName) error {
|
func (c *Cluster) Switchover(curMaster *v1.Pod, candidate spec.NamespacedName) error {
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
c.logger.Debugf("failing over from %q to %q", curMaster.Name, candidate)
|
c.logger.Debugf("switching over from %q to %q", curMaster.Name, candidate)
|
||||||
|
|
||||||
var wg sync.WaitGroup
|
var wg sync.WaitGroup
|
||||||
|
|
||||||
|
|
@ -903,12 +903,12 @@ func (c *Cluster) Switchover(curMaster *v1.Pod, candidate spec.NamespacedName) e
|
||||||
}()
|
}()
|
||||||
|
|
||||||
if err = c.patroni.Switchover(curMaster, candidate.Name); err == nil {
|
if err = c.patroni.Switchover(curMaster, candidate.Name); err == nil {
|
||||||
c.logger.Debugf("successfully failed over from %q to %q", curMaster.Name, candidate)
|
c.logger.Debugf("successfully switched over from %q to %q", curMaster.Name, candidate)
|
||||||
if err = <-podLabelErr; err != nil {
|
if err = <-podLabelErr; err != nil {
|
||||||
err = fmt.Errorf("could not get master pod label: %v", err)
|
err = fmt.Errorf("could not get master pod label: %v", err)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
err = fmt.Errorf("could not failover: %v", err)
|
err = fmt.Errorf("could not switch over: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// signal the role label waiting goroutine to close the shop and go home
|
// signal the role label waiting goroutine to close the shop and go home
|
||||||
|
|
|
||||||
|
|
@ -219,10 +219,10 @@ func (c *Cluster) MigrateMasterPod(podName spec.NamespacedName) error {
|
||||||
// We may not have a cached statefulset if the initial cluster sync has aborted, revert to the spec in that case.
|
// We may not have a cached statefulset if the initial cluster sync has aborted, revert to the spec in that case.
|
||||||
if *c.Statefulset.Spec.Replicas > 1 {
|
if *c.Statefulset.Spec.Replicas > 1 {
|
||||||
if masterCandidatePod, err = c.masterCandidate(oldMaster.Spec.NodeName); err != nil {
|
if masterCandidatePod, err = c.masterCandidate(oldMaster.Spec.NodeName); err != nil {
|
||||||
return fmt.Errorf("could not suitable replica candidate for failover: %v", err)
|
return fmt.Errorf("could not find suitable replica pod as candidate for failover: %v", err)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
c.logger.Warningf("migrating single pod cluster %q, migration will cause longer downtime of the postgres cluster until rescheduled", c.clusterName())
|
c.logger.Warningf("migrating single pod cluster %q, this will cause downtime of the Postgres cluster until pod is back", c.clusterName())
|
||||||
}
|
}
|
||||||
|
|
||||||
// there are two cases for each postgres cluster that has its master pod on the node to migrate from:
|
// there are two cases for each postgres cluster that has its master pod on the node to migrate from:
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue