@@ -22,9 +22,6 @@ package backup
2222
2323import (
2424 "context"
25- "strings"
26-
27- "github.com/arangodb/kube-arangodb/pkg/util/globals"
2825
2926 clientBackup "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/typed/backup/v1"
3027
@@ -34,66 +31,68 @@ import (
3431 "github.com/arangodb/kube-arangodb/pkg/handlers/backup/state"
3532)
3633
37- var (
38- progressStates = []state.State {
39- backupApi .ArangoBackupStateScheduled ,
40- backupApi .ArangoBackupStateCreate ,
41- backupApi .ArangoBackupStateDownload ,
42- backupApi .ArangoBackupStateDownloading ,
43- backupApi .ArangoBackupStateUpload ,
44- backupApi .ArangoBackupStateUploading ,
34+ type backupStates []* backupApi.ArangoBackup
35+
36+ func (b backupStates ) filter (f func (b * backupApi.ArangoBackup ) bool ) backupStates {
37+ if f == nil {
38+ return nil
4539 }
46- )
4740
48- func inProgress (backup * backupApi.ArangoBackup ) bool {
49- for _ , state := range progressStates {
50- if state == backup .Status .State {
51- return true
41+ r := make (backupStates , 0 , len (b ))
42+
43+ for id := range b {
44+ if f (b [id ]) {
45+ r = append (r , b [id ])
5246 }
5347 }
5448
55- return false
49+ return r
5650}
5751
58- func isBackupRunning (backup * backupApi.ArangoBackup , client clientBackup.ArangoBackupInterface ) (bool , error ) {
52+ type backupStatesCount map [state.State ]backupStates
53+
54+ func (b backupStatesCount ) get (states ... state.State ) backupStates {
55+ i := 0
56+
57+ for _ , s := range states {
58+ i += len (b [s ])
59+ }
60+
61+ if i == 0 {
62+ return nil
63+ }
64+
65+ r := make (backupStates , 0 , i )
66+
67+ for _ , s := range states {
68+ r = append (r , b [s ]... )
69+ }
70+
71+ return r
72+ }
73+
74+ func countBackupStates (backup * backupApi.ArangoBackup , client clientBackup.ArangoBackupInterface ) (backupStatesCount , error ) {
5975 backups , err := client .List (context .Background (), meta.ListOptions {})
6076
6177 if err != nil {
62- return false , newTemporaryError (err )
78+ return nil , newTemporaryError (err )
6379 }
6480
65- currentUploads := 0
81+ ret := map [state. State ] backupStates {}
6682
6783 for _ , existingBackup := range backups .Items {
84+ // Skip same backup from count
6885 if existingBackup .Name == backup .Name {
6986 continue
7087 }
7188
72- // We can upload multiple uploads from same deployment in same time
73- if backup .Status .State == backupApi .ArangoBackupStateReady &&
74- (existingBackup .Status .State == backupApi .ArangoBackupStateUpload || existingBackup .Status .State == backupApi .ArangoBackupStateUploading ) {
75- currentUploads ++
76- if backupUpload := backup .Status .Backup ; backupUpload != nil {
77- if existingBackupUpload := existingBackup .Status .Backup ; existingBackupUpload != nil {
78- if strings .EqualFold (backupUpload .ID , existingBackupUpload .ID ) {
79- return true , nil
80- }
81- }
82- }
83- } else {
84- if existingBackup .Spec .Deployment .Name != backup .Spec .Deployment .Name {
85- continue
86- }
87-
88- if inProgress (& existingBackup ) {
89- return true , nil
90- }
89+ // Skip backups which are not on same deployment from count
90+ if existingBackup .Spec .Deployment .Name != backup .Spec .Deployment .Name {
91+ continue
9192 }
92- }
9393
94- if backup .Status .State == backupApi .ArangoBackupStateReady {
95- return currentUploads >= globals .GetGlobals ().Backup ().ConcurrentUploads ().Get (), nil
94+ ret [existingBackup .Status .State ] = append (ret [existingBackup .Status .State ], existingBackup .DeepCopy ())
9695 }
9796
98- return false , nil
97+ return ret , nil
9998}
0 commit comments