@@ -1051,7 +1051,7 @@ DBUSERS:
10511051
10521052func (c * Cluster ) syncDatabases () error {
10531053 c .setProcessName ("syncing databases" )
1054-
1054+ errors := make ([] string , 0 )
10551055 createDatabases := make (map [string ]string )
10561056 alterOwnerDatabases := make (map [string ]string )
10571057 preparedDatabases := make ([]string , 0 )
@@ -1097,12 +1097,12 @@ func (c *Cluster) syncDatabases() error {
10971097
10981098 for databaseName , owner := range createDatabases {
10991099 if err = c .executeCreateDatabase (databaseName , owner ); err != nil {
1100- return err
1100+ errors = append ( errors , err . Error ())
11011101 }
11021102 }
11031103 for databaseName , owner := range alterOwnerDatabases {
11041104 if err = c .executeAlterDatabaseOwner (databaseName , owner ); err != nil {
1105- return err
1105+ errors = append ( errors , err . Error ())
11061106 }
11071107 }
11081108
@@ -1118,24 +1118,32 @@ func (c *Cluster) syncDatabases() error {
11181118 // set default privileges for prepared database
11191119 for _ , preparedDatabase := range preparedDatabases {
11201120 if err := c .initDbConnWithName (preparedDatabase ); err != nil {
1121- return fmt .Errorf ("could not init database connection to %s" , preparedDatabase )
1121+ errors = append (errors , fmt .Sprintf ("could not init database connection to %s" , preparedDatabase ))
1122+ continue
11221123 }
11231124
11241125 for _ , owner := range c .getOwnerRoles (preparedDatabase , c .Spec .PreparedDatabases [preparedDatabase ].DefaultUsers ) {
11251126 if err = c .execAlterGlobalDefaultPrivileges (owner , preparedDatabase ); err != nil {
1126- return err
1127+ errors = append ( errors , err . Error ())
11271128 }
11281129 }
11291130 }
11301131
1132+ if len (errors ) > 0 {
1133+ return fmt .Errorf ("error(s) while syncing databases: %v" , strings .Join (errors , `', '` ))
1134+ }
1135+
11311136 return nil
11321137}
11331138
11341139func (c * Cluster ) syncPreparedDatabases () error {
11351140 c .setProcessName ("syncing prepared databases" )
1141+ errors := make ([]string , 0 )
1142+
11361143 for preparedDbName , preparedDB := range c .Spec .PreparedDatabases {
11371144 if err := c .initDbConnWithName (preparedDbName ); err != nil {
1138- return fmt .Errorf ("could not init connection to database %s: %v" , preparedDbName , err )
1145+ errors = append (errors , fmt .Sprintf ("could not init connection to database %s: %v" , preparedDbName , err ))
1146+ continue
11391147 }
11401148
11411149 c .logger .Debugf ("syncing prepared database %q" , preparedDbName )
@@ -1145,24 +1153,30 @@ func (c *Cluster) syncPreparedDatabases() error {
11451153 preparedSchemas = map [string ]acidv1.PreparedSchema {"data" : {DefaultRoles : util .True ()}}
11461154 }
11471155 if err := c .syncPreparedSchemas (preparedDbName , preparedSchemas ); err != nil {
1148- return err
1156+ errors = append (errors , err .Error ())
1157+ continue
11491158 }
11501159
11511160 // install extensions
11521161 if err := c .syncExtensions (preparedDB .Extensions ); err != nil {
1153- return err
1162+ errors = append ( errors , err . Error ())
11541163 }
11551164
11561165 if err := c .closeDbConn (); err != nil {
11571166 c .logger .Errorf ("could not close database connection: %v" , err )
11581167 }
11591168 }
11601169
1170+ if len (errors ) > 0 {
1171+ return fmt .Errorf ("error(s) while syncing prepared databases: %v" , strings .Join (errors , `', '` ))
1172+ }
1173+
11611174 return nil
11621175}
11631176
11641177func (c * Cluster ) syncPreparedSchemas (databaseName string , preparedSchemas map [string ]acidv1.PreparedSchema ) error {
11651178 c .setProcessName ("syncing prepared schemas" )
1179+ errors := make ([]string , 0 )
11661180
11671181 currentSchemas , err := c .getSchemas ()
11681182 if err != nil {
@@ -1185,17 +1199,21 @@ func (c *Cluster) syncPreparedSchemas(databaseName string, preparedSchemas map[s
11851199 owner = dbOwner
11861200 }
11871201 if err = c .executeCreateDatabaseSchema (databaseName , schemaName , dbOwner , owner ); err != nil {
1188- return err
1202+ errors = append ( errors , err . Error ())
11891203 }
11901204 }
11911205 }
11921206
1207+ if len (errors ) > 0 {
1208+ return fmt .Errorf ("error(s) while syncing schemas of prepared databases: %v" , strings .Join (errors , `', '` ))
1209+ }
1210+
11931211 return nil
11941212}
11951213
11961214func (c * Cluster ) syncExtensions (extensions map [string ]string ) error {
11971215 c .setProcessName ("syncing database extensions" )
1198-
1216+ errors := make ([] string , 0 )
11991217 createExtensions := make (map [string ]string )
12001218 alterExtensions := make (map [string ]string )
12011219
@@ -1215,15 +1233,19 @@ func (c *Cluster) syncExtensions(extensions map[string]string) error {
12151233
12161234 for extName , schema := range createExtensions {
12171235 if err = c .executeCreateExtension (extName , schema ); err != nil {
1218- return err
1236+ errors = append ( errors , err . Error ())
12191237 }
12201238 }
12211239 for extName , schema := range alterExtensions {
12221240 if err = c .executeAlterExtension (extName , schema ); err != nil {
1223- return err
1241+ errors = append ( errors , err . Error ())
12241242 }
12251243 }
12261244
1245+ if len (errors ) > 0 {
1246+ return fmt .Errorf ("error(s) while syncing database extensions: %v" , strings .Join (errors , `', '` ))
1247+ }
1248+
12271249 return nil
12281250}
12291251
0 commit comments