in controllers/solrbackup_controller.go [249:309]
func reconcileSolrCollectionBackup(ctx context.Context, backup *solrv1beta1.SolrBackup, currentBackupStatus *solrv1beta1.IndividualSolrBackupStatus, solrCloud *solrv1beta1.SolrCloud, backupRepository *solrv1beta1.SolrBackupRepository, collection string, logger logr.Logger) (finished bool, err error) {
now := metav1.Now()
collectionBackupStatus := solrv1beta1.CollectionBackupStatus{}
collectionBackupStatus.Collection = collection
backupIndex := -1
// Get the backup status for this collection, if one exists
for i, status := range currentBackupStatus.CollectionBackupStatuses {
if status.Collection == collection {
collectionBackupStatus = status
backupIndex = i
}
}
// If the collection backup hasn't started, start it
if collectionBackupStatus.Finished {
return true, nil
} else if !collectionBackupStatus.InProgress {
// Start the backup by calling solr
var started bool
started, err = util.StartBackupForCollection(ctx, solrCloud, backupRepository, backup, collection, logger)
if err != nil {
return true, err
}
collectionBackupStatus.InProgress = started
if started && collectionBackupStatus.StartTime == nil {
collectionBackupStatus.StartTime = &now
}
collectionBackupStatus.BackupName = util.FullCollectionBackupName(collection, backup.Name)
} else if collectionBackupStatus.InProgress {
var successful bool
var asyncStatus string
// Check the state of the backup, when it is in progress, and update the state accordingly
finished, successful, asyncStatus, err = util.CheckBackupForCollection(ctx, solrCloud, collection, backup.Name, logger)
if err != nil {
return false, err
}
collectionBackupStatus.Finished = finished
if finished {
collectionBackupStatus.InProgress = false
if collectionBackupStatus.Successful == nil {
collectionBackupStatus.Successful = &successful
}
collectionBackupStatus.AsyncBackupStatus = ""
if collectionBackupStatus.FinishTime == nil {
collectionBackupStatus.FinishTime = &now
}
err = util.DeleteAsyncInfoForBackup(ctx, solrCloud, collection, backup.Name, logger)
} else {
collectionBackupStatus.AsyncBackupStatus = asyncStatus
}
}
if backupIndex < 0 {
currentBackupStatus.CollectionBackupStatuses = append(currentBackupStatus.CollectionBackupStatuses, collectionBackupStatus)
} else {
currentBackupStatus.CollectionBackupStatuses[backupIndex] = collectionBackupStatus
}
return collectionBackupStatus.Finished, err
}