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

@ -59,7 +59,7 @@ type PostgresSpec struct {
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"`
@ -92,7 +92,7 @@ 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"`
} }

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()