Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion controller/backup_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -802,7 +802,7 @@ func (bc *BackupController) checkMonitor(backup *longhorn.Backup, volume *longho
return nil, fmt.Errorf("waiting for attachment %v to be attached before enabling backup monitor", longhorn.GetAttachmentTicketID(longhorn.AttacherTypeBackupController, backup.Name))
}

engineClientProxy, backupTargetClient, err := getBackupTarget(bc.controllerID, backupTarget, bc.ds, bc.logger, bc.proxyConnCounter)
engineClientProxy, backupTargetClient, err := getBackupTarget(bc.controllerID, backupTarget, bc.ds, bc.logger, bc.proxyConnCounter, volume.Spec.DataEngine)
if err != nil {
return nil, err
}
Expand Down
26 changes: 18 additions & 8 deletions controller/backup_target_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -243,16 +243,24 @@ func getLoggerForBackupTarget(logger logrus.FieldLogger, backupTarget *longhorn.
)
}

func getBackupTarget(nodeID string, backupTarget *longhorn.BackupTarget, ds *datastore.DataStore, log logrus.FieldLogger, proxyConnCounter util.Counter) (engineClientProxy engineapi.EngineClientProxy, backupTargetClient *engineapi.BackupTargetClient, err error) {
func getBackupTarget(nodeID string, backupTarget *longhorn.BackupTarget, ds *datastore.DataStore, log logrus.FieldLogger, proxyConnCounter util.Counter, dataEngine longhorn.DataEngineType) (engineClientProxy engineapi.EngineClientProxy, backupTargetClient *engineapi.BackupTargetClient, err error) {
var instanceManager *longhorn.InstanceManager
errs := multierr.NewMultiError()
dataEngines := ds.GetDataEngines()
for dataEngine := range dataEngines {

if dataEngine == longhorn.DataEngineTypeAll {
dataEngines := ds.GetDataEngines()
for dataEngine := range dataEngines {
instanceManager, err = ds.GetRunningInstanceManagerByNodeRO(nodeID, dataEngine)
if err == nil {
break
}
errs.Append("errors", errors.Wrapf(err, "failed to get running instance manager for node %v and data engine %v", nodeID, dataEngine))
}
} else {
instanceManager, err = ds.GetRunningInstanceManagerByNodeRO(nodeID, dataEngine)
if err == nil {
break
if err != nil {
errs.Append("errors", errors.Wrapf(err, "failed to get running instance manager for node %v and data engine %v", nodeID, dataEngine))
}
errs.Append("errors", errors.Wrapf(err, "failed to get running instance manager for node %v and data engine %v", nodeID, dataEngine))
}
if instanceManager == nil {
return nil, nil, fmt.Errorf("failed to find a running instance manager for node %v: %v", nodeID, errs.Error())
Expand Down Expand Up @@ -508,7 +516,8 @@ func (btc *BackupTargetController) cleanUpAllBackupRelatedResources(backupTarget

func (btc *BackupTargetController) cleanUpAllMounts(backupTarget *longhorn.BackupTarget) (err error) {
log := getLoggerForBackupTarget(btc.logger, backupTarget)
engineClientProxy, backupTargetClient, err := getBackupTarget(btc.controllerID, backupTarget, btc.ds, log, btc.proxyConnCounter)
// The request can be executed by any instance manager since it is to clean up mount points.
engineClientProxy, backupTargetClient, err := getBackupTarget(btc.controllerID, backupTarget, btc.ds, log, btc.proxyConnCounter, longhorn.DataEngineTypeAll)
if err != nil {
return err
}
Expand All @@ -532,7 +541,8 @@ func (btc *BackupTargetController) getInfoFromBackupStore(backupTarget *longhorn
log := getLoggerForBackupTarget(btc.logger, backupTarget)

// Initialize a backup target client
engineClientProxy, backupTargetClient, err := getBackupTarget(btc.controllerID, backupTarget, btc.ds, log, btc.proxyConnCounter)
// The request can be executed by any instance manager since it is to get info from backupstore regardless of data engine.
engineClientProxy, backupTargetClient, err := getBackupTarget(btc.controllerID, backupTarget, btc.ds, log, btc.proxyConnCounter, longhorn.DataEngineTypeAll)
if err != nil {
return backupStoreInfo{}, errors.Wrap(err, "failed to init backup target clients")
}
Expand Down
6 changes: 4 additions & 2 deletions controller/backup_volume_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -232,7 +232,8 @@ func (bvc *BackupVolumeController) reconcile(backupVolumeName string) (err error
}
// Delete the backup volume from the remote backup target
if needsCleanupRemoteData {
engineClientProxy, backupTargetClient, err := getBackupTarget(bvc.controllerID, backupTarget, bvc.ds, log, bvc.proxyConnCounter)
// The request can be executed by any instance manager regardless of data engine.
engineClientProxy, backupTargetClient, err := getBackupTarget(bvc.controllerID, backupTarget, bvc.ds, log, bvc.proxyConnCounter, longhorn.DataEngineTypeAll)
if err != nil || engineClientProxy == nil {
log.WithError(err).Error("Failed to init backup target clients")
return nil // Ignore error to prevent enqueue
Expand Down Expand Up @@ -268,7 +269,8 @@ func (bvc *BackupVolumeController) reconcile(backupVolumeName string) (err error
return nil
}

engineClientProxy, backupTargetClient, err := getBackupTarget(bvc.controllerID, backupTarget, bvc.ds, log, bvc.proxyConnCounter)
// The request can be executed by any instance manager regardless of data engine.
engineClientProxy, backupTargetClient, err := getBackupTarget(bvc.controllerID, backupTarget, bvc.ds, log, bvc.proxyConnCounter, longhorn.DataEngineTypeAll)
if err != nil {
log.WithError(err).Error("Failed to init backup target clients")
return nil // Ignore error to prevent enqueue
Expand Down