Skip to content

Commit 80fee5b

Browse files
authored
continue syncing databases and extensions on err (#2262)
1 parent 6953f72 commit 80fee5b

File tree

1 file changed

+34
-12
lines changed

1 file changed

+34
-12
lines changed

pkg/cluster/sync.go

Lines changed: 34 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1051,7 +1051,7 @@ DBUSERS:
10511051

10521052
func (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

11341139
func (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

11641177
func (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

11961214
func (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

Comments
 (0)