revert pointers for PreparedDatabases structs

This commit is contained in:
Felix Kunde 2020-12-18 09:52:45 +01:00
parent c0a4c83df1
commit f10c3ab77c
5 changed files with 36 additions and 52 deletions

View File

@ -53,27 +53,27 @@ type PostgresSpec struct {
// load balancers' source ranges are the same for master and replica services // load balancers' source ranges are the same for master and replica services
AllowedSourceRanges []string `json:"allowedSourceRanges"` AllowedSourceRanges []string `json:"allowedSourceRanges"`
NumberOfInstances int32 `json:"numberOfInstances"` NumberOfInstances int32 `json:"numberOfInstances"`
Users map[string]UserFlags `json:"users,omitempty"` Users map[string]UserFlags `json:"users,omitempty"`
MaintenanceWindows []MaintenanceWindow `json:"maintenanceWindows,omitempty"` MaintenanceWindows []MaintenanceWindow `json:"maintenanceWindows,omitempty"`
Clone *CloneDescription `json:"clone,omitempty"` Clone *CloneDescription `json:"clone,omitempty"`
ClusterName string `json:"-"` ClusterName string `json:"-"`
Databases map[string]string `json:"databases,omitempty"` Databases map[string]string `json:"databases,omitempty"`
PreparedDatabases map[string]*PreparedDatabase `json:"preparedDatabases,omitempty"` PreparedDatabases map[string]PreparedDatabase `json:"preparedDatabases,omitempty"`
SchedulerName *string `json:"schedulerName,omitempty"` SchedulerName *string `json:"schedulerName,omitempty"`
NodeAffinity *v1.NodeAffinity `json:"nodeAffinity,omitempty"` NodeAffinity *v1.NodeAffinity `json:"nodeAffinity,omitempty"`
Tolerations []v1.Toleration `json:"tolerations,omitempty"` Tolerations []v1.Toleration `json:"tolerations,omitempty"`
Sidecars []Sidecar `json:"sidecars,omitempty"` Sidecars []Sidecar `json:"sidecars,omitempty"`
InitContainers []v1.Container `json:"initContainers,omitempty"` InitContainers []v1.Container `json:"initContainers,omitempty"`
PodPriorityClassName string `json:"podPriorityClassName,omitempty"` PodPriorityClassName string `json:"podPriorityClassName,omitempty"`
ShmVolume *bool `json:"enableShmVolume,omitempty"` ShmVolume *bool `json:"enableShmVolume,omitempty"`
EnableLogicalBackup bool `json:"enableLogicalBackup,omitempty"` EnableLogicalBackup bool `json:"enableLogicalBackup,omitempty"`
LogicalBackupSchedule string `json:"logicalBackupSchedule,omitempty"` LogicalBackupSchedule string `json:"logicalBackupSchedule,omitempty"`
StandbyCluster *StandbyDescription `json:"standby,omitempty"` StandbyCluster *StandbyDescription `json:"standby,omitempty"`
PodAnnotations map[string]string `json:"podAnnotations,omitempty"` PodAnnotations map[string]string `json:"podAnnotations,omitempty"`
ServiceAnnotations map[string]string `json:"serviceAnnotations,omitempty"` ServiceAnnotations map[string]string `json:"serviceAnnotations,omitempty"`
TLS *TLSDescription `json:"tls,omitempty"` TLS *TLSDescription `json:"tls,omitempty"`
AdditionalVolumes []AdditionalVolume `json:"additionalVolumes,omitempty"` AdditionalVolumes []AdditionalVolume `json:"additionalVolumes,omitempty"`
// deprecated json tags // deprecated json tags
InitContainersOld []v1.Container `json:"init_containers,omitempty"` InitContainersOld []v1.Container `json:"init_containers,omitempty"`
@ -92,9 +92,9 @@ type PostgresqlList struct {
// PreparedDatabase describes elements to be bootstrapped // PreparedDatabase describes elements to be bootstrapped
type PreparedDatabase struct { type PreparedDatabase struct {
PreparedSchemas map[string]*PreparedSchema `json:"schemas,omitempty"` PreparedSchemas map[string]PreparedSchema `json:"schemas,omitempty"`
DefaultUsers bool `json:"defaultUsers,omitempty" defaults:"false"` DefaultUsers bool `json:"defaultUsers,omitempty" defaults:"false"`
Extensions map[string]string `json:"extensions,omitempty"` Extensions map[string]string `json:"extensions,omitempty"`
} }
// PreparedSchema describes elements to be bootstrapped per schema // PreparedSchema describes elements to be bootstrapped per schema

View File

@ -623,17 +623,9 @@ func (in *PostgresSpec) DeepCopyInto(out *PostgresSpec) {
} }
if in.PreparedDatabases != nil { if in.PreparedDatabases != nil {
in, out := &in.PreparedDatabases, &out.PreparedDatabases in, out := &in.PreparedDatabases, &out.PreparedDatabases
*out = make(map[string]*PreparedDatabase, len(*in)) *out = make(map[string]PreparedDatabase, len(*in))
for key, val := range *in { for key, val := range *in {
var outVal *PreparedDatabase (*out)[key] = *val.DeepCopy()
if val == nil {
(*out)[key] = nil
} else {
in, out := &val, &outVal
*out = new(PreparedDatabase)
(*in).DeepCopyInto(*out)
}
(*out)[key] = outVal
} }
} }
if in.SchedulerName != nil { if in.SchedulerName != nil {
@ -965,17 +957,9 @@ func (in *PreparedDatabase) DeepCopyInto(out *PreparedDatabase) {
*out = *in *out = *in
if in.PreparedSchemas != nil { if in.PreparedSchemas != nil {
in, out := &in.PreparedSchemas, &out.PreparedSchemas in, out := &in.PreparedSchemas, &out.PreparedSchemas
*out = make(map[string]*PreparedSchema, len(*in)) *out = make(map[string]PreparedSchema, len(*in))
for key, val := range *in { for key, val := range *in {
var outVal *PreparedSchema (*out)[key] = *val.DeepCopy()
if val == nil {
(*out)[key] = nil
} else {
in, out := &val, &outVal
*out = new(PreparedSchema)
(*in).DeepCopyInto(*out)
}
(*out)[key] = outVal
} }
} }
if in.Extensions != nil { if in.Extensions != nil {

View File

@ -975,7 +975,7 @@ func (c *Cluster) initSystemUsers() {
func (c *Cluster) initPreparedDatabaseRoles() error { func (c *Cluster) initPreparedDatabaseRoles() error {
if c.Spec.PreparedDatabases != nil && len(c.Spec.PreparedDatabases) == 0 { // TODO: add option to disable creating such a default DB if c.Spec.PreparedDatabases != nil && len(c.Spec.PreparedDatabases) == 0 { // TODO: add option to disable creating such a default DB
c.Spec.PreparedDatabases = map[string]*acidv1.PreparedDatabase{strings.Replace(c.Name, "-", "_", -1): {}} c.Spec.PreparedDatabases = map[string]acidv1.PreparedDatabase{strings.Replace(c.Name, "-", "_", -1): {}}
} }
// create maps with default roles/users as keys and their membership as values // create maps with default roles/users as keys and their membership as values
@ -994,7 +994,7 @@ func (c *Cluster) initPreparedDatabaseRoles() error {
// get list of prepared schemas to set in search_path // get list of prepared schemas to set in search_path
preparedSchemas := preparedDB.PreparedSchemas preparedSchemas := preparedDB.PreparedSchemas
if len(preparedDB.PreparedSchemas) == 0 { if len(preparedDB.PreparedSchemas) == 0 {
preparedSchemas = map[string]*acidv1.PreparedSchema{"data": {DefaultRoles: util.True()}} preparedSchemas = map[string]acidv1.PreparedSchema{"data": {DefaultRoles: util.True()}}
} }
var searchPath strings.Builder var searchPath strings.Builder

View File

@ -763,7 +763,7 @@ func TestInitSystemUsers(t *testing.T) {
func TestPreparedDatabases(t *testing.T) { func TestPreparedDatabases(t *testing.T) {
testName := "TestDefaultPreparedDatabase" testName := "TestDefaultPreparedDatabase"
cl.Spec.PreparedDatabases = map[string]*acidv1.PreparedDatabase{} cl.Spec.PreparedDatabases = map[string]acidv1.PreparedDatabase{}
cl.initPreparedDatabaseRoles() cl.initPreparedDatabaseRoles()
for _, role := range []string{"acid_test_owner", "acid_test_reader", "acid_test_writer", for _, role := range []string{"acid_test_owner", "acid_test_reader", "acid_test_writer",
@ -775,10 +775,10 @@ func TestPreparedDatabases(t *testing.T) {
testName = "TestPreparedDatabaseWithSchema" testName = "TestPreparedDatabaseWithSchema"
cl.Spec.PreparedDatabases = map[string]*acidv1.PreparedDatabase{ cl.Spec.PreparedDatabases = map[string]acidv1.PreparedDatabase{
"foo": { "foo": {
DefaultUsers: true, DefaultUsers: true,
PreparedSchemas: map[string]*acidv1.PreparedSchema{ PreparedSchemas: map[string]acidv1.PreparedSchema{
"bar": { "bar": {
DefaultUsers: true, DefaultUsers: true,
}, },

View File

@ -655,7 +655,7 @@ func (c *Cluster) syncDatabases() error {
// if no prepared databases are specified create a database named like the cluster // if no prepared databases are specified create a database named like the cluster
if c.Spec.PreparedDatabases != nil && len(c.Spec.PreparedDatabases) == 0 { // TODO: add option to disable creating such a default DB if c.Spec.PreparedDatabases != nil && len(c.Spec.PreparedDatabases) == 0 { // TODO: add option to disable creating such a default DB
c.Spec.PreparedDatabases = map[string]*acidv1.PreparedDatabase{strings.Replace(c.Name, "-", "_", -1): {}} c.Spec.PreparedDatabases = map[string]acidv1.PreparedDatabase{strings.Replace(c.Name, "-", "_", -1): {}}
} }
for preparedDatabaseName := range c.Spec.PreparedDatabases { for preparedDatabaseName := range c.Spec.PreparedDatabases {
_, exists := currentDatabases[preparedDatabaseName] _, exists := currentDatabases[preparedDatabaseName]
@ -710,7 +710,7 @@ func (c *Cluster) syncPreparedDatabases() error {
// now, prepare defined schemas // now, prepare defined schemas
preparedSchemas := preparedDB.PreparedSchemas preparedSchemas := preparedDB.PreparedSchemas
if len(preparedDB.PreparedSchemas) == 0 { if len(preparedDB.PreparedSchemas) == 0 {
preparedSchemas = map[string]*acidv1.PreparedSchema{"data": {DefaultRoles: util.True()}} preparedSchemas = map[string]acidv1.PreparedSchema{"data": {DefaultRoles: util.True()}}
} }
if err := c.syncPreparedSchemas(preparedDbName, preparedSchemas); err != nil { if err := c.syncPreparedSchemas(preparedDbName, preparedSchemas); err != nil {
return err return err
@ -729,7 +729,7 @@ func (c *Cluster) syncPreparedDatabases() error {
return nil return nil
} }
func (c *Cluster) syncPreparedSchemas(databaseName string, preparedSchemas map[string]*acidv1.PreparedSchema) error { func (c *Cluster) syncPreparedSchemas(databaseName string, preparedSchemas map[string]acidv1.PreparedSchema) error {
c.setProcessName("syncing prepared schemas") c.setProcessName("syncing prepared schemas")
currentSchemas, err := c.getSchemas() currentSchemas, err := c.getSchemas()