Skip to content

Commit 147be12

Browse files
authored
Add stopBalancer timeout; Retry setBalancerState; Improve logging (#1929) (#1943)
/cherry-pick Signed-off-by: Arnob kumar saha <arnob@appscode.com>
1 parent bfa14b3 commit 147be12

File tree

1 file changed

+65
-9
lines changed

1 file changed

+65
-9
lines changed

pkg/backup.go

Lines changed: 65 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -682,6 +682,7 @@ func getPrimaryNSecondaryMember(mongoDSN string) (primary, secondary string, err
682682
}
683683

684684
if secHost != primary {
685+
klog.Infof("Primary %s & Secondary %s found for mongoDSN %s \n", primary, secHost, mongoDSN)
685686
return primary, secHost, nil
686687
}
687688
}
@@ -698,10 +699,18 @@ func disabelBalancer(mongosHost string) error {
698699
"config",
699700
"--host", mongosHost,
700701
"--quiet",
701-
"--eval", "JSON.stringify(sh.stopBalancer())",
702+
"--eval", "JSON.stringify(sh.stopBalancer(600000,1000))",
702703
}, mongoCreds...)
703704
// disable balancer
704-
if err := sh.Command(MongoCMD, args...).Command("/usr/bin/tail", "-1").UnmarshalJSON(&v); err != nil {
705+
output, err := sh.Command(MongoCMD, args...).Output()
706+
if err != nil {
707+
klog.Errorf("Error while stopping balancer : %s ; output : %s \n", err.Error(), output)
708+
return err
709+
}
710+
711+
err = json.Unmarshal(output, &v)
712+
if err != nil {
713+
klog.Errorf("Unmarshal error while stopping balancer : %s ; output = %s \n", err.Error(), output)
705714
return err
706715
}
707716

@@ -717,8 +726,10 @@ func disabelBalancer(mongosHost string) error {
717726
"--eval", "while(sh.isBalancerRunning()){ print('waiting for balancer to stop...'); sleep(1000);}",
718727
}, mongoCreds...)
719728
if err := sh.Command(MongoCMD, args...).Command("/usr/bin/tail", "-1").Run(); err != nil {
729+
klog.Errorf("Error while waiting for the balancer to stop : %s \n", err.Error())
720730
return err
721731
}
732+
klog.Info("Balancer successfully Disabled.")
722733
return nil
723734
}
724735

@@ -734,14 +745,33 @@ func enableBalancer(mongosHost string) error {
734745
"--quiet",
735746
"--eval", "JSON.stringify(sh.setBalancerState(true))",
736747
}, mongoCreds...)
737-
if err := sh.Command(MongoCMD, args...).Command("/usr/bin/tail", "-1").UnmarshalJSON(&v); err != nil {
748+
749+
var (
750+
output []byte
751+
err error
752+
)
753+
cmd := sh.Command(MongoCMD, args...)
754+
for i := 0; i < 10; i++ {
755+
output, err = cmd.Output()
756+
if err != nil {
757+
klog.Errorf("Try #%d : Error on setBalancerState command : %s, output : %s .\n", i, err.Error(), output)
758+
time.Sleep(time.Second)
759+
} else {
760+
break
761+
}
762+
}
763+
764+
err = json.Unmarshal(output, &v)
765+
if err != nil {
766+
klog.Errorf("Unmarshal error while enabling balancer : %+v , output : %s \n", err.Error(), output)
738767
return err
739768
}
740769

741770
if val, ok := v["ok"].(float64); !ok || int(val) != 1 {
742-
return fmt.Errorf("unable to disable balancer. got response: %v", v)
771+
return fmt.Errorf("unable to enable balancer. got response: %v", v)
743772
}
744773

774+
klog.Info("Balancer successfully re-enabled.")
745775
return nil
746776
}
747777

@@ -760,7 +790,16 @@ func lockConfigServer(configSVRDSN, secondaryHost string) error {
760790
"--quiet",
761791
"--eval", "db.BackupControl.findAndModify({query: { _id: 'BackupControlDocument' }, update: { $inc: { counter : 1 } }, new: true, upsert: true, writeConcern: { w: 'majority', wtimeout: 15000 }});",
762792
}, mongoCreds...)
763-
if err := sh.Command(MongoCMD, args...).Command("/usr/bin/tail", "-1").UnmarshalJSON(&v); err != nil {
793+
794+
output, err := sh.Command(MongoCMD, args...).Output()
795+
if err != nil {
796+
klog.Errorf("Error while running findAndModify to lock configServer : %s ; output : %s \n", err.Error(), output)
797+
return err
798+
}
799+
800+
err = json.Unmarshal(output, &v)
801+
if err != nil {
802+
klog.Errorf("Unmarshal error while running findAndModify to lock configServer : %s \n", err.Error())
764803
return err
765804
}
766805
val, ok := v["counter"].(float64)
@@ -814,14 +853,23 @@ func lockSecondaryMember(mongohost string) error {
814853
"--quiet",
815854
"--eval", "JSON.stringify(db.fsyncLock())",
816855
}, mongoCreds...)
817-
if err := sh.Command(MongoCMD, args...).Command("/usr/bin/tail", "-1").UnmarshalJSON(&v); err != nil {
856+
857+
output, err := sh.Command(MongoCMD, args...).Output()
858+
if err != nil {
859+
klog.Errorf("Error while running fsyncLock on secondary : %s ; output : %s \n", err.Error(), output)
860+
return err
861+
}
862+
863+
err = json.Unmarshal(output, &v)
864+
if err != nil {
865+
klog.Errorf("Unmarshal error while running fsyncLock on secondary : %s \n", err.Error())
818866
return err
819867
}
820868

821869
if val, ok := v["ok"].(float64); !ok || int(val) != 1 {
822870
return fmt.Errorf("unable to lock the secondary host. got response: %v", v)
823871
}
824-
872+
klog.Infof("secondary %s locked.", mongohost)
825873
return nil
826874
}
827875

@@ -840,14 +888,22 @@ func unlockSecondaryMember(mongohost string) error {
840888
"--quiet",
841889
"--eval", "JSON.stringify(db.fsyncUnlock())",
842890
}, mongoCreds...)
843-
if err := sh.Command(MongoCMD, args...).Command("/usr/bin/tail", "-1").UnmarshalJSON(&v); err != nil {
891+
892+
output, err := sh.Command(MongoCMD, args...).Output()
893+
if err != nil {
894+
klog.Errorf("Error while running fsyncUnlock on secondary : %s ; output : %s \n", err.Error(), output)
895+
return err
896+
}
897+
err = json.Unmarshal(output, &v)
898+
if err != nil {
899+
klog.Errorf("Unmarshal error while running fsyncUnlock on secondary : %s \n", err.Error())
844900
return err
845901
}
846902

847903
if val, ok := v["ok"].(float64); !ok || int(val) != 1 {
848904
return fmt.Errorf("unable to lock the secondary host. got response: %v", v)
849905
}
850-
906+
klog.Infof("secondary %s unlocked.", mongohost)
851907
return nil
852908
}
853909

0 commit comments

Comments
 (0)