MCPcopy Index your code
hub / github.com/zalando/postgres-operator / syncDatabases

Method syncDatabases

pkg/cluster/sync.go:1464–1549  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

1462}
1463
1464func (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 {

Callers 3

SyncMethod · 0.95
CreateMethod · 0.95
UpdateMethod · 0.95

Calls 9

setProcessNameMethod · 0.95
initDbConnMethod · 0.95
closeDbConnMethod · 0.95
getDatabasesMethod · 0.95
executeCreateDatabaseMethod · 0.95
initDbConnWithNameMethod · 0.95
getOwnerRolesMethod · 0.95

Tested by

no test coverage detected