Skip to content

Commit bec8870

Browse files
authored
CBG-4892: Add eccv to cluster_info endpoint (#7846)
1 parent 618bb6a commit bec8870

File tree

3 files changed

+83
-3
lines changed

3 files changed

+83
-3
lines changed

rest/admin_api.go

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2293,17 +2293,19 @@ type ClusterInfo struct {
22932293
}
22942294

22952295
type BucketInfo struct {
2296-
Registry GatewayRegistry `json:"registry"`
2296+
Registry *GatewayRegistry `json:"registry,omitempty"`
2297+
EnableCrossClusterVersioning bool `json:"enable_cross_cluster_versioning"`
22972298
}
22982299

22992300
// Get SG cluster information. Iterates over all buckets associated with the server, and returns cluster
23002301
// information (registry) for each
23012302
func (h *handler) handleGetClusterInfo() error {
23022303

23032304
clusterInfo := ClusterInfo{
2304-
LegacyConfig: true,
2305+
Buckets: make(map[string]BucketInfo),
23052306
}
23062307

2308+
eccv := h.server.getBucketCCVSettings()
23072309
if h.server.persistentConfig {
23082310

23092311
bucketNames, err := h.server.GetBucketNames()
@@ -2323,7 +2325,17 @@ func (h *handler) handleGetClusterInfo() error {
23232325
}
23242326

23252327
bucketInfo := BucketInfo{
2326-
Registry: *registry,
2328+
Registry: registry,
2329+
EnableCrossClusterVersioning: eccv[bucketName],
2330+
}
2331+
clusterInfo.Buckets[bucketName] = bucketInfo
2332+
}
2333+
} else {
2334+
clusterInfo.LegacyConfig = true
2335+
2336+
for bucketName, eccvVal := range eccv {
2337+
bucketInfo := BucketInfo{
2338+
EnableCrossClusterVersioning: eccvVal,
23272339
}
23282340
clusterInfo.Buckets[bucketName] = bucketInfo
23292341
}

rest/api_test.go

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3533,6 +3533,65 @@ func TestDisableAllowStarChannel(t *testing.T) {
35333533
base.DebugfCtx(t.Context(), base.KeySGTest, "additional logs")
35343534
}
35353535

3536+
// TestECCV validates if the ECCV value of the bucket is returned as a response
3537+
// for _cluster_info endpoint. ECCV value is returned for each bucket, if the
3538+
// bucket does not contain any SGW database, the value will be set to false
3539+
func TestECCV(t *testing.T) {
3540+
if base.UnitTestUrlIsWalrus() {
3541+
t.Skip("This test only works against Couchbase Server since it requires a gocb bucket")
3542+
}
3543+
3544+
tests := []struct {
3545+
name string
3546+
persistentConfig bool
3547+
dbName string
3548+
}{
3549+
{
3550+
name: "PersistentConfig=true",
3551+
persistentConfig: true,
3552+
dbName: "db1",
3553+
},
3554+
{
3555+
name: "PersistentConfig=false",
3556+
persistentConfig: false,
3557+
dbName: "db2",
3558+
},
3559+
}
3560+
3561+
for _, tests := range tests {
3562+
t.Run(tests.name, func(t *testing.T) {
3563+
rt := NewRestTester(t, &RestTesterConfig{
3564+
PersistentConfig: tests.persistentConfig,
3565+
})
3566+
defer rt.Close()
3567+
3568+
if tests.persistentConfig {
3569+
dbConfig := rt.NewDbConfig()
3570+
dbConfig.Name = tests.dbName
3571+
3572+
RequireStatus(t, rt.CreateDatabase(tests.dbName, dbConfig), http.StatusCreated)
3573+
}
3574+
3575+
resp := rt.SendAdminRequest(http.MethodGet, "/_cluster_info", "")
3576+
RequireStatus(t, resp, http.StatusOK)
3577+
3578+
bucketName := rt.GetDatabase().Bucket.GetName()
3579+
3580+
type BucketInfoResponse struct {
3581+
EnableCrossClusterVersioning bool `json:"enable_cross_cluster_versioning"`
3582+
}
3583+
type ClusterInfoResponse struct {
3584+
LegacyConfig bool `json:"legacy_config,omitempty"`
3585+
Buckets map[string]BucketInfoResponse `json:"buckets,omitempty"`
3586+
}
3587+
var clusterInfo ClusterInfoResponse
3588+
err := base.JSONUnmarshal(resp.Body.Bytes(), &clusterInfo)
3589+
require.NoError(t, err)
3590+
assert.True(t, clusterInfo.Buckets[bucketName].EnableCrossClusterVersioning)
3591+
})
3592+
}
3593+
}
3594+
35363595
func TestUnsupportedServerConfigOptions(t *testing.T) {
35373596
tests := []struct {
35383597
name string

rest/server_context.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2330,3 +2330,12 @@ func (sc *ServerContext) getClusterUUID(ctx context.Context) (string, error) {
23302330
}
23312331
return base.ParseClusterUUID(output)
23322332
}
2333+
2334+
func (sc *ServerContext) getBucketCCVSettings() map[string]bool {
2335+
bucketCCVSettings := make(map[string]bool)
2336+
for _, _db := range sc.databases_ {
2337+
bucketName := _db.BucketSpec.BucketName
2338+
bucketCCVSettings[bucketName] = _db.CachedCCVEnabled.Load()
2339+
}
2340+
return bucketCCVSettings
2341+
}

0 commit comments

Comments
 (0)