@@ -1006,27 +1006,20 @@ func (m *upgradeManager) processUpgradePlan(ctx context.Context, plan UpgradePla
1006
1006
return recordFailure (errors .Wrap (err , "Failed to restart dbserver" ))
1007
1007
}
1008
1008
1009
- m .log .Info ().Msg ("Disabling supervision" )
1010
- if err := m .disableSupervision (ctx ); err != nil {
1011
- return recordFailure (errors .Wrap (err , "Failed to disable supervision" ))
1012
- }
1013
- m .log .Info ().Msg ("Disabled supervision" )
1014
-
1015
- defer func () {
1016
- m .log .Info ().Msg ("Enabling supervision" )
1017
- if err := m .enableSupervision (ctx ); err != nil {
1018
- recordFailure (errors .Wrap (err , "Failed to enable supervision" ))
1009
+ if err := m .withMaintenance (ctx , recordFailure )(func () error {
1010
+ // Wait until dbserver restarted
1011
+ if err := m .waitUntilUpgradeServerStarted (ctx ); err != nil {
1012
+ return recordFailure (errors .Wrap (err , "DBServer restart in upgrade mode did not succeed" ))
1019
1013
}
1020
- }()
1021
1014
1022
- // Wait until dbserver restarted
1023
- if err := m .waitUntilUpgradeServerStarted (ctx ); err != nil {
1024
- return recordFailure (errors .Wrap (err , "DBServer restart in upgrade mode did not succeed " ))
1025
- }
1015
+ // Wait until all dbservers respond
1016
+ if err := m .waitUntil (ctx , m . areDBServersResponding , "DBServers are not yet all responding: %v" ); err != nil {
1017
+ return recordFailure (errors .Wrap (err , "Not all DBServers are responding in time " ))
1018
+ }
1026
1019
1027
- // Wait until all dbservers respond
1028
- if err := m . waitUntil ( ctx , m . areDBServersResponding , "DBServers are not yet all responding: %v" ); err != nil {
1029
- return recordFailure ( errors . Wrap ( err , "Not all DBServers are responding in time" ))
1020
+ return nil
1021
+ } ); err != nil {
1022
+ return err
1030
1023
}
1031
1024
1032
1025
// Wait until cluster healthy
@@ -1074,28 +1067,22 @@ func (m *upgradeManager) processUpgradePlan(ctx context.Context, plan UpgradePla
1074
1067
return recordFailure (errors .Wrap (err , "Failed to restart single server" ))
1075
1068
}
1076
1069
1077
- m .log .Info ().Msg ("Disabling supervision" )
1078
- if err := m .disableSupervision (ctx ); err != nil {
1079
- return recordFailure (errors .Wrap (err , "Failed to disable supervision" ))
1080
- }
1070
+ if err := m .withMaintenance (ctx , recordFailure )(func () error {
1071
+ // Wait until single server restarted
1072
+ if err := m .waitUntilUpgradeServerStarted (ctx ); err != nil {
1073
+ return recordFailure (errors .Wrap (err , "Single server restart in upgrade mode did not succeed" ))
1074
+ }
1081
1075
1082
- m .log .Info ().Msg ("Disabled supervision" )
1083
- defer func () {
1084
- m .log .Info ().Msg ("Enabling supervision" )
1085
- if err := m .enableSupervision (ctx ); err != nil {
1086
- recordFailure (errors .Wrap (err , "Failed to enable supervision" ))
1076
+ // Wait until all single servers respond
1077
+ if err := m .waitUntil (ctx , m .areSingleServersResponding , "Active failover single server is not yet responding: %v" ); err != nil {
1078
+ return recordFailure (errors .Wrap (err , "Not all single servers are responding in time" ))
1087
1079
}
1088
- }()
1089
1080
1090
- // Wait until single server restarted
1091
- if err := m . waitUntilUpgradeServerStarted ( ctx ); err != nil {
1092
- return recordFailure ( errors . Wrap ( err , "Single server restart in upgrade mode did not succeed" ))
1081
+ return nil
1082
+ } ); err != nil {
1083
+ return err
1093
1084
}
1094
1085
1095
- // Wait until all single servers respond
1096
- if err := m .waitUntil (ctx , m .areSingleServersResponding , "Active failover single server is not yet responding: %v" ); err != nil {
1097
- return recordFailure (errors .Wrap (err , "Not all single servers are responding in time" ))
1098
- }
1099
1086
return nil
1100
1087
}
1101
1088
if err := upgrade (); err != nil {
@@ -1160,6 +1147,26 @@ func (m *upgradeManager) processUpgradePlan(ctx context.Context, plan UpgradePla
1160
1147
return nil
1161
1148
}
1162
1149
1150
+ // withMaintenance wraps upgrade action with maintenance steps
1151
+ func (m * upgradeManager ) withMaintenance (ctx context.Context , recordFailure func (err error ) error ) func (func () error ) error {
1152
+ return func (f func () error ) error {
1153
+ m .log .Info ().Msg ("Disabling supervision" )
1154
+ if err := m .disableSupervision (ctx ); err != nil {
1155
+ return recordFailure (errors .Wrap (err , "Failed to disable supervision" ))
1156
+ }
1157
+
1158
+ m .log .Info ().Msg ("Disabled supervision" )
1159
+ defer func () {
1160
+ m .log .Info ().Msg ("Enabling supervision" )
1161
+ if err := m .enableSupervision (ctx ); err != nil {
1162
+ recordFailure (errors .Wrap (err , "Failed to enable supervision" ))
1163
+ }
1164
+ }()
1165
+
1166
+ return f ()
1167
+ }
1168
+ }
1169
+
1163
1170
// finishUpgradePlan is called at the end of the upgrade process.
1164
1171
// It shows the user that everything is ready & what versions we have now.
1165
1172
func (m * upgradeManager ) finishUpgradePlan (ctx context.Context , plan UpgradePlan ) error {
0 commit comments