Skip to content

Commit 1c914ae

Browse files
committed
Fixing mode=single upgrades
1 parent e2c23ac commit 1c914ae

File tree

3 files changed

+40
-19
lines changed

3 files changed

+40
-19
lines changed

service/server.go

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -589,6 +589,7 @@ func (s *httpServer) shutdownHandler(w http.ResponseWriter, r *http.Request) {
589589
func (s *httpServer) databaseAutoUpgradeHandler(w http.ResponseWriter, r *http.Request) {
590590
// IsRunningMaster returns if the starter is the running master.
591591
isRunningMaster, isRunning, masterURL := s.context.IsRunningMaster()
592+
_, _, mode := s.context.ClusterConfig()
592593

593594
if !isRunning {
594595
// We must have reached the running state before we can handle this kind of request
@@ -618,7 +619,15 @@ func (s *httpServer) databaseAutoUpgradeHandler(w http.ResponseWriter, r *http.R
618619
// Start the upgrade process
619620
force, _ := strconv.ParseBool(r.FormValue("force"))
620621

621-
if !isRunningMaster {
622+
if isRunningMaster || mode.IsSingleMode() {
623+
// We're the starter leader, process the request
624+
if err := s.context.UpgradeManager().StartDatabaseUpgrade(ctx, force); err != nil {
625+
handleError(w, err)
626+
} else {
627+
w.WriteHeader(http.StatusOK)
628+
w.Write([]byte("OK"))
629+
}
630+
} else {
622631
// We're not the starter leader.
623632
// Forward the request to the leader.
624633
c, err := createMasterClient()
@@ -633,14 +642,6 @@ func (s *httpServer) databaseAutoUpgradeHandler(w http.ResponseWriter, r *http.R
633642
w.Write([]byte("OK"))
634643
}
635644
}
636-
} else {
637-
// We're the starter leader, process the request
638-
if err := s.context.UpgradeManager().StartDatabaseUpgrade(ctx, force); err != nil {
639-
handleError(w, err)
640-
} else {
641-
w.WriteHeader(http.StatusOK)
642-
w.Write([]byte("OK"))
643-
}
644645
}
645646
case "PUT":
646647
// Retry the upgrade process

service/upgrade_manager.go

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -489,6 +489,11 @@ func (m *upgradeManager) AbortDatabaseUpgrade(ctx context.Context) error {
489489

490490
// Status returns the current status of the upgrade process.
491491
func (m *upgradeManager) Status(ctx context.Context) (client.UpgradeStatus, error) {
492+
_, _, mode := m.upgradeManagerContext.ClusterConfig()
493+
if !mode.HasAgency() {
494+
return client.UpgradeStatus{}, maskAny(client.NewPreconditionFailedError("Mode does not support agency based upgrades"))
495+
}
496+
492497
plan, err := m.readUpgradePlan(ctx)
493498
if agency.IsKeyNotFound(err) {
494499
// No plan, return not found error
@@ -596,7 +601,7 @@ func (m *upgradeManager) fetchBinaryDatabaseVersions(ctx context.Context) ([]dri
596601
// fetchRunningDatabaseVersions asks all arangod servers in the deployment for their version.
597602
// It returns all distinct versions.
598603
func (m *upgradeManager) fetchRunningDatabaseVersions(ctx context.Context) ([]driver.Version, error) {
599-
config, _, _ := m.upgradeManagerContext.ClusterConfig()
604+
config, _, mode := m.upgradeManagerContext.ClusterConfig()
600605
versionMap := make(map[driver.Version]struct{})
601606
var versionList []driver.Version
602607

@@ -623,17 +628,23 @@ func (m *upgradeManager) fetchRunningDatabaseVersions(ctx context.Context) ([]dr
623628
return nil
624629
}
625630

626-
if err := collect(config.GetAgentEndpoints, ConnectionTypeAgency); err != nil {
627-
return nil, maskAny(err)
628-
}
629-
if err := collect(config.GetCoordinatorEndpoints, ConnectionTypeDatabase); err != nil {
630-
return nil, maskAny(err)
631+
if mode.HasAgency() {
632+
if err := collect(config.GetAgentEndpoints, ConnectionTypeAgency); err != nil {
633+
return nil, maskAny(err)
634+
}
631635
}
632-
if err := collect(config.GetDBServerEndpoints, ConnectionTypeDatabase); err != nil {
633-
return nil, maskAny(err)
636+
if mode.IsClusterMode() {
637+
if err := collect(config.GetCoordinatorEndpoints, ConnectionTypeDatabase); err != nil {
638+
return nil, maskAny(err)
639+
}
640+
if err := collect(config.GetDBServerEndpoints, ConnectionTypeDatabase); err != nil {
641+
return nil, maskAny(err)
642+
}
634643
}
635-
if err := collect(config.GetAllSingleEndpoints, ConnectionTypeDatabase); err != nil {
636-
return nil, maskAny(err)
644+
if mode.IsSingleMode() || mode.IsActiveFailoverMode() {
645+
if err := collect(config.GetAllSingleEndpoints, ConnectionTypeDatabase); err != nil {
646+
return nil, maskAny(err)
647+
}
637648
}
638649

639650
return versionList, nil
@@ -722,6 +733,11 @@ func (m *upgradeManager) removeUpgradePlan(ctx context.Context) error {
722733
// RunWatchUpgradePlan keeps watching the upgrade plan in the agency.
723734
// Once it detects that this starter has to act, it does.
724735
func (m *upgradeManager) RunWatchUpgradePlan(ctx context.Context) {
736+
_, _, mode := m.upgradeManagerContext.ClusterConfig()
737+
if !mode.HasAgency() {
738+
// Nothing to do here without an agency
739+
return
740+
}
725741
for {
726742
delay := time.Second * 10
727743
plan, err := m.readUpgradePlan(ctx)

upgrade.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,10 @@ func runUpgrade(starterEndpoint string, force, retry bool) {
137137
status, err := c.UpgradeStatus(ctx)
138138
if err != nil {
139139
log.Info().Msgf("Database automatic upgrade has been %s", action)
140+
if client.IsPreconditionFailed(err) {
141+
log.Info().Msgf("Look at the Starter log to know when the upgrade has finished")
142+
return
143+
}
140144
} else {
141145
fromVersions := make([]string, 0, len(status.FromVersions))
142146
for _, v := range status.FromVersions {

0 commit comments

Comments
 (0)