()
| 1462 | } |
| 1463 | |
| 1464 | func (c *Cluster) syncDatabases() error { |
| 1465 | c.setProcessName("syncing databases") |
| 1466 | errors := make([]string, 0) |
| 1467 | createDatabases := make(map[string]string) |
| 1468 | alterOwnerDatabases := make(map[string]string) |
| 1469 | preparedDatabases := make([]string, 0) |
| 1470 | |
| 1471 | if err := c.initDbConn(); err != nil { |
| 1472 | return fmt.Errorf("could not init database connection") |
| 1473 | } |
| 1474 | defer func() { |
| 1475 | if err := c.closeDbConn(); err != nil { |
| 1476 | c.logger.Errorf("could not close database connection: %v", err) |
| 1477 | } |
| 1478 | }() |
| 1479 | |
| 1480 | currentDatabases, err := c.getDatabases() |
| 1481 | if err != nil { |
| 1482 | return fmt.Errorf("could not get current databases: %v", err) |
| 1483 | } |
| 1484 | |
| 1485 | // if no prepared databases are specified create a database named like the cluster |
| 1486 | if c.Spec.PreparedDatabases != nil && len(c.Spec.PreparedDatabases) == 0 { // TODO: add option to disable creating such a default DB |
| 1487 | c.Spec.PreparedDatabases = map[string]acidv1.PreparedDatabase{strings.Replace(c.Name, "-", "_", -1): {}} |
| 1488 | } |
| 1489 | for preparedDatabaseName := range c.Spec.PreparedDatabases { |
| 1490 | _, exists := currentDatabases[preparedDatabaseName] |
| 1491 | if !exists { |
| 1492 | createDatabases[preparedDatabaseName] = fmt.Sprintf("%s%s", preparedDatabaseName, constants.OwnerRoleNameSuffix) |
| 1493 | preparedDatabases = append(preparedDatabases, preparedDatabaseName) |
| 1494 | } |
| 1495 | } |
| 1496 | |
| 1497 | for databaseName, newOwner := range c.Spec.Databases { |
| 1498 | currentOwner, exists := currentDatabases[databaseName] |
| 1499 | if !exists { |
| 1500 | createDatabases[databaseName] = newOwner |
| 1501 | } else if currentOwner != newOwner { |
| 1502 | alterOwnerDatabases[databaseName] = newOwner |
| 1503 | } |
| 1504 | } |
| 1505 | |
| 1506 | if len(createDatabases)+len(alterOwnerDatabases) == 0 { |
| 1507 | return nil |
| 1508 | } |
| 1509 | |
| 1510 | for databaseName, owner := range createDatabases { |
| 1511 | if err = c.executeCreateDatabase(databaseName, owner); err != nil { |
| 1512 | errors = append(errors, err.Error()) |
| 1513 | } |
| 1514 | } |
| 1515 | for databaseName, owner := range alterOwnerDatabases { |
| 1516 | if err = c.executeAlterDatabaseOwner(databaseName, owner); err != nil { |
| 1517 | errors = append(errors, err.Error()) |
| 1518 | } |
| 1519 | } |
| 1520 | |
| 1521 | if len(createDatabases) > 0 { |
no test coverage detected