Skip to content

Commit 04b9bef

Browse files
committed
feat: adding in support for query performance factors on affected resources
1 parent 9e32874 commit 04b9bef

9 files changed

+61
-18
lines changed

go.mod

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,3 +66,5 @@ require (
6666
google.golang.org/protobuf v1.35.1 // indirect
6767
gopkg.in/yaml.v3 v3.0.1 // indirect
6868
)
69+
70+
replace github.com/RedisLabs/rediscloud-go-api => ../rediscloud-go-api

go.sum

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@ github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migc
44
github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM=
55
github.com/ProtonMail/go-crypto v1.1.0-alpha.2 h1:bkyFVUP+ROOARdgCiJzNQo2V2kiB97LyUpzH9P6Hrlg=
66
github.com/ProtonMail/go-crypto v1.1.0-alpha.2/go.mod h1:rA3QumHc/FZ8pAHreoekgiAbzpNsfQAosU5td4SnOrE=
7-
github.com/RedisLabs/rediscloud-go-api v0.22.0 h1:Tb3vMtCq7ks5kpniF/Rkod7TvHhcXZ2oYJJT3pMgyQ8=
8-
github.com/RedisLabs/rediscloud-go-api v0.22.0/go.mod h1:3/oVb71rv2OstFRYEc65QCIbfwnJTgZeQhtPCcdHook=
97
github.com/agext/levenshtein v1.2.2 h1:0S/Yg6LYmFJ5stwQeRp6EeOcCbj7xiqQSdNelsXvaqE=
108
github.com/agext/levenshtein v1.2.2/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558=
119
github.com/apparentlymart/go-textseg/v12 v12.0.0/go.mod h1:S/4uRK2UtaQttw1GenVJEynmyUenKwP++x/+DdGV/Ec=

provider/datasource_rediscloud_pro_database.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,12 @@ func dataSourceRedisCloudProDatabase() *schema.Resource {
5959
Type: schema.TypeFloat,
6060
Computed: true,
6161
},
62+
"query_performance_factor": {
63+
Description: "Query performance factor for this specific database",
64+
Type: schema.TypeString,
65+
Optional: true,
66+
Computed: true,
67+
},
6268
"support_oss_cluster_api": {
6369
Description: "Supports the Redis open-source (OSS) Cluster API",
6470
Type: schema.TypeBool,

provider/datasource_rediscloud_pro_database_test.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ func TestAccDataSourceRedisCloudProDatabase_basic(t *testing.T) {
4040
resource.TestCheckResourceAttrSet(dataSourceById, "public_endpoint"),
4141
resource.TestCheckResourceAttrSet(dataSourceById, "private_endpoint"),
4242
resource.TestCheckResourceAttr(dataSourceById, "enable_default_user", "true"),
43+
resource.TestCheckResourceAttr(dataSourceById, "query_performance_factor", "4x"),
4344

4445
resource.TestCheckResourceAttr(dataSourceByName, "name", "tf-database"),
4546
resource.TestCheckResourceAttr(dataSourceByName, "protocol", "redis"),
@@ -56,6 +57,7 @@ func TestAccDataSourceRedisCloudProDatabase_basic(t *testing.T) {
5657
resource.TestCheckResourceAttrSet(dataSourceByName, "public_endpoint"),
5758
resource.TestCheckResourceAttrSet(dataSourceByName, "private_endpoint"),
5859
resource.TestCheckResourceAttr(dataSourceByName, "enable_default_user", "true"),
60+
resource.TestCheckResourceAttr(dataSourceByName, "query_performance_factor", "4x"),
5961
),
6062
},
6163
},
@@ -105,6 +107,7 @@ resource "rediscloud_subscription_database" "example" {
105107
support_oss_cluster_api = true
106108
replication = false
107109
enable_default_user = true
110+
query_performance_factor = ""
108111
}
109112
110113
data "rediscloud_database" "example-by-id" {

provider/rediscloud_active_active_subscription_test.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ func TestAccResourceRedisCloudActiveActiveSubscription_CRUDI(t *testing.T) {
4343
resource.TestCheckResourceAttr(resourceName, "cloud_provider", "AWS"),
4444
resource.TestCheckResourceAttr(resourceName, "creation_plan.#", "1"),
4545
resource.TestCheckResourceAttr(resourceName, "creation_plan.0.memory_limit_in_gb", "1"),
46+
resource.TestCheckResourceAttr(resourceName, "creation_plan.0.query_performance_factor", "4x"),
4647
resource.TestCheckResourceAttr(resourceName, "creation_plan.0.quantity", "1"),
4748
resource.TestCheckResourceAttr(resourceName, "creation_plan.0.modules.#", "1"),
4849
resource.TestCheckResourceAttr(resourceName, "creation_plan.0.modules.0", "RedisJSON"),
@@ -168,6 +169,7 @@ func TestAccResourceRedisCloudActiveActiveSubscription_CRUDI(t *testing.T) {
168169
resource.TestCheckResourceAttr(resourceName, "cloud_provider", "AWS"),
169170
resource.TestCheckResourceAttr(resourceName, "creation_plan.#", "1"),
170171
resource.TestCheckResourceAttr(resourceName, "creation_plan.0.memory_limit_in_gb", "1"),
172+
resource.TestCheckResourceAttr(resourceName, "creation_plan.0.query_performance_factor", "4x"),
171173
resource.TestCheckResourceAttr(resourceName, "creation_plan.0.quantity", "1"),
172174
resource.TestCheckResourceAttr(resourceName, "creation_plan.0.modules.#", "1"),
173175
resource.TestCheckResourceAttr(resourceName, "creation_plan.0.modules.0", "RedisJSON"),
@@ -335,6 +337,7 @@ resource "rediscloud_active_active_subscription" "example" {
335337
336338
creation_plan {
337339
memory_limit_in_gb = 1
340+
query_performance_factor = "2x"
338341
modules = ["RedisJSON"]
339342
quantity = 1
340343
region {

provider/resource_rediscloud_active_active_database.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -419,6 +419,10 @@ func resourceRedisCloudActiveActiveDatabaseCreate(ctx context.Context, d *schema
419419
createDatabase.MemoryLimitInGB = redis.Float64(v.(float64))
420420
}
421421

422+
if v, ok := d.GetOk("query_performance_factor"); ok {
423+
createDatabase.QueryPerformanceFactor = redis.String(v.(string))
424+
}
425+
422426
if v, ok := d.GetOk("port"); ok {
423427
createDatabase.PortNumber = redis.Int(v.(int))
424428
}

provider/resource_rediscloud_active_active_subscription.go

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,11 @@ func resourceRedisCloudActiveActiveSubscription() *schema.Resource {
112112
Optional: true,
113113
ConflictsWith: []string{"creation_plan.0.memory_limit_in_gb"},
114114
},
115+
"query_performance_factor": {
116+
Description: "Query performance factor for this specific database",
117+
Type: schema.TypeString,
118+
Optional: true,
119+
},
115120
"quantity": {
116121
Description: "The planned number of databases",
117122
Type: schema.TypeInt,
@@ -647,14 +652,16 @@ func buildSubscriptionCreatePlanAADatabases(planMap map[string]interface{}) []*s
647652
createModules = append(createModules, createModule)
648653
}
649654

655+
queryPerformanceFactor := planMap["queryPerformanceFactor"].(string)
656+
650657
// create the remaining DBs with all other modules
651-
createDatabases = append(createDatabases, createAADatabase(dbName, &idx, localThroughputs, numDatabases, memoryLimitInGB, datasetSizeInGB, createModules)...)
658+
createDatabases = append(createDatabases, createAADatabase(dbName, &idx, localThroughputs, numDatabases, memoryLimitInGB, datasetSizeInGB, createModules, queryPerformanceFactor)...)
652659

653660
return createDatabases
654661
}
655662

656663
// createDatabase returns a CreateDatabase struct with the given parameters
657-
func createAADatabase(dbName string, idx *int, localThroughputs []*subscriptions.CreateLocalThroughput, numDatabases int, memoryLimitInGB float64, datasetSizeInGB float64, modules []*subscriptions.CreateModules) []*subscriptions.CreateDatabase {
664+
func createAADatabase(dbName string, idx *int, localThroughputs []*subscriptions.CreateLocalThroughput, numDatabases int, memoryLimitInGB float64, datasetSizeInGB float64, modules []*subscriptions.CreateModules, queryPerformanceFactor string) []*subscriptions.CreateDatabase {
658665
var dbs []*subscriptions.CreateDatabase
659666
for i := 0; i < numDatabases; i++ {
660667
createDatabase := subscriptions.CreateDatabase{
@@ -663,6 +670,7 @@ func createAADatabase(dbName string, idx *int, localThroughputs []*subscriptions
663670
LocalThroughputMeasurement: localThroughputs,
664671
Quantity: redis.Int(1),
665672
Modules: modules,
673+
QueryPerformanceFactor: redis.String(queryPerformanceFactor),
666674
}
667675
if datasetSizeInGB > 0 {
668676
createDatabase.DatasetSizeInGB = redis.Float64(datasetSizeInGB)

provider/resource_rediscloud_pro_database.go

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,12 @@ func resourceRedisCloudProDatabase() *schema.Resource {
9191
Computed: true,
9292
ExactlyOneOf: []string{"memory_limit_in_gb", "dataset_size_in_gb"},
9393
},
94+
"query_performance_factor": {
95+
Description: "Query performance factor for this specific database",
96+
Type: schema.TypeString,
97+
Optional: true,
98+
Computed: true,
99+
},
94100
"support_oss_cluster_api": {
95101
Description: "Support Redis open-source (OSS) Cluster API",
96102
Type: schema.TypeBool,
@@ -341,6 +347,7 @@ func resourceRedisCloudProDatabaseCreate(ctx context.Context, d *schema.Resource
341347
throughputMeasurementBy := d.Get("throughput_measurement_by").(string)
342348
throughputMeasurementValue := d.Get("throughput_measurement_value").(int)
343349
averageItemSizeInBytes := d.Get("average_item_size_in_bytes").(int)
350+
queryPerformanceFactor := d.Get("query_performance_factor").(string)
344351

345352
createModules := make([]*databases.Module, 0)
346353
modules := d.Get("modules").(*schema.Set)
@@ -383,9 +390,10 @@ func resourceRedisCloudProDatabaseCreate(ctx context.Context, d *schema.Resource
383390
By: redis.String(throughputMeasurementBy),
384391
Value: redis.Int(throughputMeasurementValue),
385392
},
386-
Modules: createModules,
387-
Alerts: createAlerts,
388-
RemoteBackup: buildBackupPlan(d.Get("remote_backup").([]interface{}), d.Get("periodic_backup_path")),
393+
Modules: createModules,
394+
Alerts: createAlerts,
395+
RemoteBackup: buildBackupPlan(d.Get("remote_backup").([]interface{}), d.Get("periodic_backup_path")),
396+
QueryPerformanceFactor: redis.String(queryPerformanceFactor),
389397
}
390398

391399
if password != "" {
@@ -659,12 +667,13 @@ func resourceRedisCloudProDatabaseUpdate(ctx context.Context, d *schema.Resource
659667
By: redis.String(d.Get("throughput_measurement_by").(string)),
660668
Value: redis.Int(d.Get("throughput_measurement_value").(int)),
661669
},
662-
DataPersistence: redis.String(d.Get("data_persistence").(string)),
663-
DataEvictionPolicy: redis.String(d.Get("data_eviction").(string)),
664-
SourceIP: setToStringSlice(d.Get("source_ips").(*schema.Set)),
665-
Alerts: &alerts,
666-
RemoteBackup: buildBackupPlan(d.Get("remote_backup").([]interface{}), d.Get("periodic_backup_path")),
667-
EnableDefaultUser: redis.Bool(d.Get("enable_default_user").(bool)),
670+
DataPersistence: redis.String(d.Get("data_persistence").(string)),
671+
DataEvictionPolicy: redis.String(d.Get("data_eviction").(string)),
672+
SourceIP: setToStringSlice(d.Get("source_ips").(*schema.Set)),
673+
Alerts: &alerts,
674+
RemoteBackup: buildBackupPlan(d.Get("remote_backup").([]interface{}), d.Get("periodic_backup_path")),
675+
EnableDefaultUser: redis.Bool(d.Get("enable_default_user").(bool)),
676+
QueryPerformanceFactor: redis.String(d.Get("query_performance_factor").(string)),
668677
}
669678

670679
// One of the following fields must be set, validation is handled in the schema (ExactlyOneOf)

provider/resource_rediscloud_pro_subscription.go

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -798,6 +798,11 @@ func buildSubscriptionCreatePlanDatabases(memoryStorage string, planMap map[stri
798798
datasetSizeInGB = v.(float64)
799799
}
800800

801+
queryPerformanceFactor := ""
802+
if v, ok := planMap["queryPerformanceFactor"]; ok && v != nil {
803+
queryPerformanceFactor = v.(string)
804+
}
805+
801806
var diags diag.Diagnostics
802807
if memoryStorage == databases.MemoryStorageRam && averageItemSizeInBytes != 0 {
803808
// TODO This should be changed to an error when releasing 2.0 of the provider
@@ -824,7 +829,7 @@ func buildSubscriptionCreatePlanDatabases(memoryStorage string, planMap map[stri
824829
for _, v := range planModules {
825830
modules = append(modules, &subscriptions.CreateModules{Name: v})
826831
}
827-
createDatabases = append(createDatabases, createDatabase(dbName, &idx, modules, throughputMeasurementBy, throughputMeasurementValue, memoryLimitInGB, datasetSizeInGB, averageItemSizeInBytes, supportOSSClusterAPI, replication, numDatabases)...)
832+
createDatabases = append(createDatabases, createDatabase(dbName, &idx, modules, throughputMeasurementBy, throughputMeasurementValue, memoryLimitInGB, datasetSizeInGB, averageItemSizeInBytes, supportOSSClusterAPI, replication, numDatabases, queryPerformanceFactor)...)
828833
} else {
829834
// make RedisGraph module the first module, then append the rest of the modules
830835
var modules []*subscriptions.CreateModules
@@ -835,20 +840,20 @@ func buildSubscriptionCreatePlanDatabases(memoryStorage string, planMap map[stri
835840
}
836841
}
837842
// create a DB with the RedisGraph module
838-
createDatabases = append(createDatabases, createDatabase(dbName, &idx, modules[:1], throughputMeasurementBy, throughputMeasurementValue, memoryLimitInGB, datasetSizeInGB, averageItemSizeInBytes, supportOSSClusterAPI, replication, 1)...)
843+
createDatabases = append(createDatabases, createDatabase(dbName, &idx, modules[:1], throughputMeasurementBy, throughputMeasurementValue, memoryLimitInGB, datasetSizeInGB, averageItemSizeInBytes, supportOSSClusterAPI, replication, 1, queryPerformanceFactor)...)
839844
if numDatabases == 1 {
840845
// create one extra DB with all other modules
841-
createDatabases = append(createDatabases, createDatabase(dbName, &idx, modules[1:], throughputMeasurementBy, throughputMeasurementValue, memoryLimitInGB, datasetSizeInGB, averageItemSizeInBytes, supportOSSClusterAPI, replication, 1)...)
846+
createDatabases = append(createDatabases, createDatabase(dbName, &idx, modules[1:], throughputMeasurementBy, throughputMeasurementValue, memoryLimitInGB, datasetSizeInGB, averageItemSizeInBytes, supportOSSClusterAPI, replication, 1, queryPerformanceFactor)...)
842847
} else if numDatabases > 1 {
843848
// create the remaining DBs with all other modules
844-
createDatabases = append(createDatabases, createDatabase(dbName, &idx, modules[1:], throughputMeasurementBy, throughputMeasurementValue, memoryLimitInGB, datasetSizeInGB, averageItemSizeInBytes, supportOSSClusterAPI, replication, numDatabases-1)...)
849+
createDatabases = append(createDatabases, createDatabase(dbName, &idx, modules[1:], throughputMeasurementBy, throughputMeasurementValue, memoryLimitInGB, datasetSizeInGB, averageItemSizeInBytes, supportOSSClusterAPI, replication, numDatabases-1, queryPerformanceFactor)...)
845850
}
846851
}
847852
return createDatabases, diags
848853
}
849854

850855
// createDatabase returns a CreateDatabase struct with the given parameters
851-
func createDatabase(dbName string, idx *int, modules []*subscriptions.CreateModules, throughputMeasurementBy string, throughputMeasurementValue int, memoryLimitInGB float64, datasetSizeInGB float64, averageItemSizeInBytes int, supportOSSClusterAPI bool, replication bool, numDatabases int) []*subscriptions.CreateDatabase {
856+
func createDatabase(dbName string, idx *int, modules []*subscriptions.CreateModules, throughputMeasurementBy string, throughputMeasurementValue int, memoryLimitInGB float64, datasetSizeInGB float64, averageItemSizeInBytes int, supportOSSClusterAPI bool, replication bool, numDatabases int, queryPerformanceFactor string) []*subscriptions.CreateDatabase {
852857
createThroughput := &subscriptions.CreateThroughput{
853858
By: redis.String(throughputMeasurementBy),
854859
Value: redis.Int(throughputMeasurementValue),
@@ -887,6 +892,11 @@ func createDatabase(dbName string, idx *int, modules []*subscriptions.CreateModu
887892
if memoryLimitInGB > 0 {
888893
createDatabase.MemoryLimitInGB = redis.Float64(memoryLimitInGB)
889894
}
895+
896+
if queryPerformanceFactor != "" {
897+
createDatabase.QueryPerformanceFactor = redis.String(queryPerformanceFactor)
898+
}
899+
890900
*idx++
891901
dbs = append(dbs, &createDatabase)
892902
}

0 commit comments

Comments
 (0)