Repository: FoundationDB/fdb-kubernetes-operator
Pull request #1172 (2022-04-14 15:07:05)

role count fix
# Description

Fixes  #1150 #1151. 
If proxies are set to 0, then grv_proxies/commit_proxies will be used in the configure string correctly and vice versa. Defaults have been set for all cases and added some extra logic in normalization of the status to account for that so that reconciliation completes.

## Type of change

*Please select one of the options below.*

- Bug fix (non-breaking change which fixes an issue)

## Testing
Unit tests and local dev environment.


foundationdb-ci: 
### AWS CodeBuild CI Report for Linux CentOS 7

* CodeBuild project: fdb-kubernetes-operator-pr
* Commit ID: 1b32ec3ab4bb152a55844e95622ed74b94cbcc62
* Result: FAILED
* Error: `Error while executing command: make -C tests -kj prOperator. Reason: exit status 2`
* [Build Logs](https://d1e0l78xbkh3xa.cloudfront.net/build-logs/fdb-kubernetes-operator/fdb-kubernetes-operator-pr/fb85d578-d98d-483f-bac1-50f670e21472.gz) (available for 30 days)

foundationdb-ci: 
### AWS CodeBuild CI Report for Linux CentOS 7

* CodeBuild project: fdb-kubernetes-operator-pr
* Commit ID: 9812b21028a2c9d4f37bd5e4841026834951f9ca
* Result: FAILED
* Error: `Build has timed out. `
* [Build Logs](https://d1e0l78xbkh3xa.cloudfront.net) (available for 30 days)

foundationdb-ci: 
### AWS CodeBuild CI Report for Linux CentOS 7

* CodeBuild project: fdb-kubernetes-operator-pr
* Commit ID: b2fab00cbe9242851c799ba52a904a0239f96afd
* Result: SUCCEEDED
* Error: `N/A`
* [Build Logs](https://d1e0l78xbkh3xa.cloudfront.net/build-logs/fdb-kubernetes-operator/fdb-kubernetes-operator-pr/69ffd472-4a87-4452-b679-faa15b8960e7.gz) (available for 30 days)


Patch:
diff --git a/api/v1beta2/foundationdb_database_configuration.go b/api/v1beta2/foundationdb_database_configuration.go
index 239b8b35..ed6fe9a1 100644
--- a/api/v1beta2/foundationdb_database_configuration.go
+++ b/api/v1beta2/foundationdb_database_configuration.go
@@ -196,6 +196,31 @@ func (configuration DatabaseConfiguration) NormalizeConfiguration() DatabaseConf
 	return *result
 }
 
+// NormalizeConfigurationWithSeparatedProxies ensures a standardized
+// format and defaults when comparing database configuration in the
+// cluster spec with database configuration in the cluster status,
+// taking into account if the current running version of FDB supports
+// them and if we need them configured.
+//
+// This will fill in defaults of -1 for some fields that have a default
+// of 0, and will ensure that the region configuration is ordered
+// consistently.
+func (configuration DatabaseConfiguration) NormalizeConfigurationWithSeparatedProxies(version string, areSeparatedProxiesConfigured bool) DatabaseConfiguration {
+	result := configuration.NormalizeConfiguration()
+
+	parsedVersion, _ := ParseFdbVersion(version)
+	if parsedVersion.HasSeparatedProxies() {
+		if !areSeparatedProxiesConfigured {
+			result.GrvProxies = 0
+			result.CommitProxies = 0
+		} else {
+			result.Proxies = 0
+		}
+	}
+
+	return result
+}
+
 func (configuration DatabaseConfiguration) getRegion(id string, priority int) Region {
 	var matchingRegion Region
 
@@ -246,16 +271,24 @@ func (configuration *DatabaseConfiguration) GetRoleCountsWithDefaults(version Ve
 	if counts.Logs == 0 {
 		counts.Logs = 3
 	}
-	if counts.Proxies == 0 {
-		counts.Proxies = 3
-	}
+
 	if version.HasSeparatedProxies() {
-		if counts.CommitProxies == 0 {
-			counts.CommitProxies = 2
+		if counts.CommitProxies == 0 && counts.GrvProxies == 0 && counts.Proxies == 0 {
+			counts.Proxies = 3
+		} else if counts.Proxies == 0 {
+			if counts.GrvProxies == 0 {
+				counts.GrvProxies = 1
+			}
+			if counts.CommitProxies == 0 {
+				counts.CommitProxies = 2
+			}
 		}
-		if counts.GrvProxies == 0 {
-			counts.GrvProxies = 1
+	} else {
+		if counts.Proxies == 0 {
+			counts.Proxies = 3
 		}
+		counts.CommitProxies = 0
+		counts.GrvProxies = 0
 	}
 	if counts.Resolvers == 0 {
 		counts.Resolvers = 1
@@ -519,7 +552,7 @@ func (configuration DatabaseConfiguration) getRegionPriorities() map[string]int
 // to 0
 func (configuration DatabaseConfiguration) AreSeparatedProxiesConfigured() bool {
 	counts := configuration.RoleCounts
-	return counts.Proxies == 0 && (counts.GrvProxies > 0 && counts.CommitProxies > 0)
+	return counts.Proxies == 0 && (counts.GrvProxies > 0 || counts.CommitProxies > 0)
 }
 
 // GetProxiesString returns a string that contains the correct fdbcli
diff --git a/api/v1beta2/foundationdbcluster_types.go b/api/v1beta2/foundationdbcluster_types.go
index 96b2340c..0b05e35d 100644
--- a/api/v1beta2/foundationdbcluster_types.go
+++ b/api/v1beta2/foundationdbcluster_types.go
@@ -1060,12 +1060,11 @@ func (cluster *FoundationDBCluster) GetProcessCountsWithDefaults() (ProcessCount
 			return *processCounts, err
 		}
 
-		if fdbVersion.HasSeparatedProxies() {
+		if fdbVersion.HasSeparatedProxies() && cluster.Spec.DatabaseConfiguration.AreSeparatedProxiesConfigured() {
 			primaryStatelessCount += cluster.calculateProcessCountFromRole(roleCounts.GrvProxies, processCounts.GrvProxy)
 			primaryStatelessCount += cluster.calculateProcessCountFromRole(roleCounts.CommitProxies, processCounts.CommitProxy)
 		} else {
 			primaryStatelessCount += cluster.calculateProcessCountFromRole(roleCounts.Proxies, processCounts.Proxy)
-
 		}
 
 		processCounts.Stateless = cluster.calculateProcessCount(true,
@@ -1468,10 +1467,17 @@ func (config ImageConfig) Image() string {
 // DesiredDatabaseConfiguration builds the database configuration for the
 // cluster based on its spec.
 func (cluster *FoundationDBCluster) DesiredDatabaseConfiguration() DatabaseConfiguration {
-	configuration := cluster.Spec.DatabaseConfiguration.NormalizeConfiguration()
-
+	configuration := cluster.Spec.DatabaseConfiguration.NormalizeConfigurationWithSeparatedProxies(cluster.Spec.Version, cluster.Spec.DatabaseConfiguration.AreSeparatedProxiesConfigured())
 	configuration.RoleCounts = cluster.GetRoleCountsWithDefaults()
 	configuration.RoleCounts.Storage = 0
+
+	if cluster.Spec.DatabaseConfiguration.AreSeparatedProxiesConfigured() {
+		configuration.RoleCounts.Proxies = 0
+	} else {
+		configuration.RoleCounts.GrvProxies = 0
+		configuration.RoleCounts.CommitProxies = 0
+	}
+
 	if configuration.StorageEngine == StorageEngineSSD {
 		configuration.StorageEngine = StorageEngineSSD2
 	}
diff --git a/controllers/update_database_configuration.go b/controllers/update_database_configuration.go
index 35896ab4..4368e636 100644
--- a/controllers/update_database_configuration.go
+++ b/controllers/update_database_configuration.go
@@ -65,7 +65,7 @@ func (u updateDatabaseConfiguration) reconcile(ctx context.Context, r *Foundatio
 		return nil
 	}
 
-	currentConfiguration = status.Cluster.DatabaseConfiguration.NormalizeConfiguration()
+	currentConfiguration = status.Cluster.DatabaseConfiguration.NormalizeConfigurationWithSeparatedProxies(cluster.Spec.Version, cluster.Spec.DatabaseConfiguration.AreSeparatedProxiesConfigured())
 	cluster.ClearMissingVersionFlags(&currentConfiguration)
 	needsChange = initialConfig || !reflect.DeepEqual(desiredConfiguration, currentConfiguration)
 
diff --git a/controllers/update_status.go b/controllers/update_status.go
index 10b5dae8..139bbdf9 100644
--- a/controllers/update_status.go
+++ b/controllers/update_status.go
@@ -104,7 +104,7 @@ func (updateStatus) reconcile(ctx context.Context, r *FoundationDBClusterReconci
 	}
 
 	status.HasListenIPsForAllPods = cluster.NeedsExplicitListenAddress()
-	status.DatabaseConfiguration = databaseStatus.Cluster.DatabaseConfiguration.NormalizeConfiguration()
+	status.DatabaseConfiguration = databaseStatus.Cluster.DatabaseConfiguration.NormalizeConfigurationWithSeparatedProxies(cluster.Spec.Version, cluster.Spec.DatabaseConfiguration.AreSeparatedProxiesConfigured())
 	cluster.ClearMissingVersionFlags(&status.DatabaseConfiguration)
 	status.Configured = cluster.Status.Configured || (databaseStatus.Client.DatabaseStatus.Available && databaseStatus.Cluster.Layers.Error != "configurationMissing")
 


Test patch:
diff --git a/api/v1beta2/foundationdbcluster_types_test.go b/api/v1beta2/foundationdbcluster_types_test.go
index a64fd189..e6aa3458 100644
--- a/api/v1beta2/foundationdbcluster_types_test.go
+++ b/api/v1beta2/foundationdbcluster_types_test.go
@@ -140,8 +140,10 @@ var _ = Describe("[api] FoundationDBCluster", func() {
 		})
 
 		When("the version supports grv and commit proxies", func() {
-			It("should return the default role counts", func() {
-				cluster := &FoundationDBCluster{
+			var cluster *FoundationDBCluster
+
+			BeforeEach(func() {
+				cluster = &FoundationDBCluster{
 					ObjectMeta: metav1.ObjectMeta{
 						Name:      "foo",
 						Namespace: "default",
@@ -153,14 +155,16 @@ var _ = Describe("[api] FoundationDBCluster", func() {
 						Version: "7.0.0",
 					},
 				}
+			})
 
+			It("should return the default role counts", func() {
 				counts := cluster.GetRoleCountsWithDefaults()
 				Expect(counts).To(Equal(RoleCounts{
 					Storage:       3,
 					Logs:          3,
 					Proxies:       3,
-					CommitProxies: 2,
-					GrvProxies:    1,
+					CommitProxies: 0,
+					GrvProxies:    0,
 					Resolvers:     1,
 					RemoteLogs:    -1,
 					LogRouters:    -1,
@@ -171,8 +175,8 @@ var _ = Describe("[api] FoundationDBCluster", func() {
 					"resolvers":      1,
 					"remote_logs":    -1,
 					"log_routers":    -1,
-					"commit_proxies": 2,
-					"grv_proxies":    1,
+					"commit_proxies": 0,
+					"grv_proxies":    0,
 				}))
 				Expect(cluster.Spec.DatabaseConfiguration.RoleCounts).To(Equal(RoleCounts{}))
 
@@ -181,8 +185,8 @@ var _ = Describe("[api] FoundationDBCluster", func() {
 				Expect(counts).To(Equal(RoleCounts{
 					Storage:       3,
 					Logs:          3,
-					CommitProxies: 2,
-					GrvProxies:    1,
+					CommitProxies: 0,
+					GrvProxies:    0,
 					Proxies:       3,
 					Resolvers:     1,
 					RemoteLogs:    3,
@@ -194,8 +198,8 @@ var _ = Describe("[api] FoundationDBCluster", func() {
 					"resolvers":      1,
 					"remote_logs":    3,
 					"log_routers":    3,
-					"commit_proxies": 2,
-					"grv_proxies":    1,
+					"commit_proxies": 0,
+					"grv_proxies":    0,
 				}))
 
 				cluster.Spec.DatabaseConfiguration.RoleCounts = RoleCounts{
@@ -207,8 +211,8 @@ var _ = Describe("[api] FoundationDBCluster", func() {
 					Storage:       5,
 					Logs:          3,
 					Proxies:       3,
-					GrvProxies:    1,
-					CommitProxies: 2,
+					GrvProxies:    0,
+					CommitProxies: 0,
 					Resolvers:     1,
 					RemoteLogs:    3,
 					LogRouters:    3,
@@ -221,8 +225,8 @@ var _ = Describe("[api] FoundationDBCluster", func() {
 				Expect(counts).To(Equal(RoleCounts{
 					Storage:       3,
 					Logs:          8,
-					CommitProxies: 2,
-					GrvProxies:    1,
+					CommitProxies: 0,
+					GrvProxies:    0,
 					Proxies:       3,
 					Resolvers:     1,
 					RemoteLogs:    8,
@@ -239,19 +243,112 @@ var _ = Describe("[api] FoundationDBCluster", func() {
 					Storage:       3,
 					Logs:          4,
 					Proxies:       3,
-					GrvProxies:    1,
-					CommitProxies: 2,
+					GrvProxies:    0,
+					CommitProxies: 0,
 					Resolvers:     1,
 					RemoteLogs:    5,
 					LogRouters:    6,
 				}))
+
+			})
+
+			It("should return the correct counts when all proxies are unconfigured", func() {
+				cluster.Spec.DatabaseConfiguration.RoleCounts = RoleCounts{
+					Proxies:       0,
+					CommitProxies: 0,
+					GrvProxies:    0,
+				}
+				Expect(cluster.GetRoleCountsWithDefaults()).To(Equal(RoleCounts{
+					Storage:       3,
+					Logs:          3,
+					Proxies:       3,
+					GrvProxies:    0,
+					CommitProxies: 0,
+					Resolvers:     1,
+					RemoteLogs:    -1,
+					LogRouters:    -1,
+				}))
+			})
+
+			It("should return the correct counts when only proxies are configured", func() {
+				cluster.Spec.DatabaseConfiguration.RoleCounts = RoleCounts{
+					Proxies:       3,
+					CommitProxies: 0,
+					GrvProxies:    0,
+				}
+				Expect(cluster.GetRoleCountsWithDefaults()).To(Equal(RoleCounts{
+					Storage:       3,
+					Logs:          3,
+					Proxies:       3,
+					GrvProxies:    0,
+					CommitProxies: 0,
+					Resolvers:     1,
+					RemoteLogs:    -1,
+					LogRouters:    -1,
+				}))
+			})
+
+			It("should return the correct counts when only proxies are unconfigured and grv_proxies/commit_proxies are configured", func() {
+				cluster.Spec.DatabaseConfiguration.RoleCounts = RoleCounts{
+					Proxies:       0,
+					CommitProxies: 9,
+					GrvProxies:    4,
+				}
+				Expect(cluster.GetRoleCountsWithDefaults()).To(Equal(RoleCounts{
+					Storage:       3,
+					Logs:          3,
+					Proxies:       0,
+					GrvProxies:    4,
+					CommitProxies: 9,
+					Resolvers:     1,
+					RemoteLogs:    -1,
+					LogRouters:    -1,
+				}))
+			})
+
+			It("should return the correct counts when proxies, grv_proxies are unconfigured and commit_proxies configured", func() {
+				cluster.Spec.DatabaseConfiguration.RoleCounts = RoleCounts{
+					Proxies:       0,
+					CommitProxies: 3,
+					GrvProxies:    0,
+				}
+				Expect(cluster.GetRoleCountsWithDefaults()).To(Equal(RoleCounts{
+					Storage:       3,
+					Logs:          3,
+					Proxies:       0,
+					GrvProxies:    1,
+					CommitProxies: 3,
+					Resolvers:     1,
+					RemoteLogs:    -1,
+					LogRouters:    -1,
+				}))
+			})
+
+			It("should return the correct counts when proxies, commit_proxies are unconfigured and grv_proxies configured", func() {
+				cluster.Spec.DatabaseConfiguration.RoleCounts = RoleCounts{
+					Proxies:       0,
+					CommitProxies: 0,
+					GrvProxies:    5,
+				}
+				Expect(cluster.GetRoleCountsWithDefaults()).To(Equal(RoleCounts{
+					Storage:       3,
+					Logs:          3,
+					Proxies:       0,
+					GrvProxies:    5,
+					CommitProxies: 2,
+					Resolvers:     1,
+					RemoteLogs:    -1,
+					LogRouters:    -1,
+				}))
 			})
+
 		})
 	})
 
 	When("getting the default process counts", func() {
-		It("should return the default process counts", func() {
-			cluster := &FoundationDBCluster{
+		var cluster *FoundationDBCluster
+		BeforeEach(func() {
+			cluster = &FoundationDBCluster{
 				ObjectMeta: metav1.ObjectMeta{
 					Name:      "foo",
 					Namespace: "default",
@@ -271,7 +368,9 @@ var _ = Describe("[api] FoundationDBCluster", func() {
 					},
 				},
 			}
+		})
 
+		It("should return the default process counts", func() {
 			counts, err := cluster.GetProcessCountsWithDefaults()
 			Expect(err).NotTo(HaveOccurred())
 			Expect(counts).To(Equal(ProcessCounts{
@@ -332,6 +431,18 @@ var _ = Describe("[api] FoundationDBCluster", func() {
 			Expect(counts).To(Equal(ProcessCounts{
 				Storage:   5,
 				Log:       5,
+				Stateless: 9,
+			}))
+		})
+
+		It("should return the default process counts when proxies are unset", func() {
+			cluster.Spec.Version = "7.1.0-rc2"
+			cluster.Spec.DatabaseConfiguration.Proxies = 0
+			counts, err := cluster.GetProcessCountsWithDefaults()
+			Expect(err).NotTo(HaveOccurred())
+			Expect(counts).To(Equal(ProcessCounts{
+				Storage:   5,
+				Log:       4,
 				Stateless: 22,
 			}))
 		})
@@ -692,7 +803,7 @@ var _ = Describe("[api] FoundationDBCluster", func() {
 				}
 			})
 
-			It("should be parsed correctly", func() {
+			It("should be parsed correctly when proxies are set", func() {
 				Expect(cluster.DesiredDatabaseConfiguration()).To(Equal(DatabaseConfiguration{
 					RedundancyMode: RedundancyModeDouble,
 					StorageEngine:  StorageEngineSSD2,
@@ -700,8 +811,8 @@ var _ = Describe("[api] FoundationDBCluster", func() {
 					RoleCounts: RoleCounts{
 						Logs:          4,
 						Proxies:       5,
-						CommitProxies: 2,
-						GrvProxies:    1,
+						CommitProxies: 0,
+						GrvProxies:    0,
 						Resolvers:     1,
 						LogRouters:    -1,
 						RemoteLogs:    -1,
@@ -719,7 +830,63 @@ var _ = Describe("[api] FoundationDBCluster", func() {
 					RoleCounts: RoleCounts{
 						Logs:          3,
 						Proxies:       3,
+						CommitProxies: 0,
+						GrvProxies:    0,
+						Resolvers:     1,
+						LogRouters:    -1,
+						RemoteLogs:    -1,
+					},
+				}))
+			})
+
+			It("should be parsed correctly when no proxies are set", func() {
+				cluster.Spec.DatabaseConfiguration.RoleCounts.Proxies = 0
+				Expect(cluster.DesiredDatabaseConfiguration()).To(Equal(DatabaseConfiguration{
+					RedundancyMode: RedundancyModeDouble,
+					StorageEngine:  StorageEngineSSD2,
+					UsableRegions:  1,
+					RoleCounts: RoleCounts{
+						Logs:          4,
+						Proxies:       3,
+						CommitProxies: 0,
+						GrvProxies:    0,
+						Resolvers:     1,
+						LogRouters:    -1,
+						RemoteLogs:    -1,
+					},
+				}))
+			})
+
+			It("should be parsed correctly when only grv_proxies are set", func() {
+				cluster.Spec.DatabaseConfiguration.RoleCounts.Proxies = 0
+				cluster.Spec.DatabaseConfiguration.RoleCounts.GrvProxies = 4
+				Expect(cluster.DesiredDatabaseConfiguration()).To(Equal(DatabaseConfiguration{
+					RedundancyMode: RedundancyModeDouble,
+					StorageEngine:  StorageEngineSSD2,
+					UsableRegions:  1,
+					RoleCounts: RoleCounts{
+						Logs:          4,
+						Proxies:       0,
 						CommitProxies: 2,
+						GrvProxies:    4,
+						Resolvers:     1,
+						LogRouters:    -1,
+						RemoteLogs:    -1,
+					},
+				}))
+			})
+
+			It("should be parsed correctly when only grv_proxies are set", func() {
+				cluster.Spec.DatabaseConfiguration.RoleCounts.Proxies = 0
+				cluster.Spec.DatabaseConfiguration.RoleCounts.CommitProxies = 4
+				Expect(cluster.DesiredDatabaseConfiguration()).To(Equal(DatabaseConfiguration{
+					RedundancyMode: RedundancyModeDouble,
+					StorageEngine:  StorageEngineSSD2,
+					UsableRegions:  1,
+					RoleCounts: RoleCounts{
+						Logs:          4,
+						Proxies:       0,
+						CommitProxies: 4,
 						GrvProxies:    1,
 						Resolvers:     1,
 						LogRouters:    -1,
@@ -727,9 +894,29 @@ var _ = Describe("[api] FoundationDBCluster", func() {
 					},
 				}))
 			})
+
+			It("should be parsed correctly when both grv_proxies/commit_proxies are set", func() {
+				cluster.Spec.DatabaseConfiguration.RoleCounts.Proxies = 0
+				cluster.Spec.DatabaseConfiguration.RoleCounts.CommitProxies = 4
+				cluster.Spec.DatabaseConfiguration.RoleCounts.GrvProxies = 4
+				Expect(cluster.DesiredDatabaseConfiguration()).To(Equal(DatabaseConfiguration{
+					RedundancyMode: RedundancyModeDouble,
+					StorageEngine:  StorageEngineSSD2,
+					UsableRegions:  1,
+					RoleCounts: RoleCounts{
+						Logs:          4,
+						Proxies:       0,
+						CommitProxies: 4,
+						GrvProxies:    4,
+						Resolvers:     1,
+						LogRouters:    -1,
+						RemoteLogs:    -1,
+					},
+				}))
+			})
 		})
 
-		When("the version supports grv and commit proxies", func() {
+		When("the version does not support grv and commit proxies", func() {
 			BeforeEach(func() {
 				cluster = &FoundationDBCluster{
 					ObjectMeta: metav1.ObjectMeta{
@@ -2275,11 +2462,12 @@ var _ = Describe("[api] FoundationDBCluster", func() {
 	})
 
 	Context("Normalize cluster spec", func() {
+		version := "7.1.0"
 		When("log routers are missing", func() {
-			It("should set the correct value (-1) for og routers", func() {
+			It("should set the correct value (-1) for log routers", func() {
 				spec := DatabaseConfiguration{}
 				spec.RemoteLogs = 9
-				normalized := spec.NormalizeConfiguration()
+				normalized := spec.NormalizeConfigurationWithSeparatedProxies(version, false)
 				Expect(normalized.LogRouters).To(Equal(-1))
 				Expect(normalized.RemoteLogs).To(Equal(9))
 			})
@@ -2327,7 +2515,7 @@ var _ = Describe("[api] FoundationDBCluster", func() {
 						},
 					},
 				}
-				normalized := spec.NormalizeConfiguration()
+				normalized := spec.NormalizeConfigurationWithSeparatedProxies(version, false)
 				Expect(normalized.Regions).To(Equal([]Region{
 					{
 						DataCenters: []DataCenter{
@@ -2411,7 +2599,7 @@ var _ = Describe("[api] FoundationDBCluster", func() {
 						},
 					},
 				}
-				normalized := spec.NormalizeConfiguration()
+				normalized := spec.NormalizeConfigurationWithSeparatedProxies(version, false)
 				Expect(normalized.Regions).To(Equal([]Region{
 					{
 						DataCenters: []DataCenter{
@@ -2706,8 +2894,8 @@ var _ = Describe("[api] FoundationDBCluster", func() {
 								RoleCounts: RoleCounts{
 									Logs:          3,
 									Proxies:       3,
-									GrvProxies:    1,
-									CommitProxies: 2,
+									GrvProxies:    0,
+									CommitProxies: 0,
 									Resolvers:     1,
 									LogRouters:    -1,
 									RemoteLogs:    -1,
diff --git a/controllers/admin_client_test.go b/controllers/admin_client_test.go
index 52843866..6d995dde 100644
--- a/controllers/admin_client_test.go
+++ b/controllers/admin_client_test.go
@@ -91,8 +91,8 @@ var _ = Describe("admin_client_test", func() {
 						RoleCounts: fdbv1beta2.RoleCounts{
 							Logs:          3,
 							Proxies:       3,
-							CommitProxies: 2,
-							GrvProxies:    1,
+							CommitProxies: 0,
+							GrvProxies:    0,
 							Resolvers:     1,
 							LogRouters:    -1,
 							RemoteLogs:    -1,