Skip to content
Merged
119 changes: 119 additions & 0 deletions rest/api_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3532,3 +3532,122 @@ func TestDisableAllowStarChannel(t *testing.T) {
assert.Error(t, err, errResp)
base.DebugfCtx(t.Context(), base.KeySGTest, "additional logs")
}

func TestUnsupportedServerConfigOptions(t *testing.T) {
tests := []struct {
name string
expectedConnStr string
kvBuffer int
dcpBuffer int
serverless bool
params string
}{
{
name: "serverless-no_query_param-no_unsupported_options",
serverless: true,
expectedConnStr: "?dcp_buffer_size=1048576&idle_http_connection_timeout=90000&kv_buffer_size=1048576&kv_pool_size=1&max_idle_http_connections=64000&max_perhost_idle_http_connections=256",
},
{
name: "non_serverless-no_query_param_and_no_unsupported_options",
serverless: false,
expectedConnStr: "?idle_http_connection_timeout=90000&kv_pool_size=2&max_idle_http_connections=64000&max_perhost_idle_http_connections=256",
},
{
name: "serverless-no_query_param-unsupported_options",
serverless: true,
expectedConnStr: "?dcp_buffer_size=3000&idle_http_connection_timeout=90000&kv_buffer_size=2000&kv_pool_size=1&max_idle_http_connections=64000&max_perhost_idle_http_connections=256",
kvBuffer: 2000,
dcpBuffer: 3000,
},
{
name: "non_serverless-no_query_param-unsupported_options",
serverless: false,
expectedConnStr: "?dcp_buffer_size=3000&idle_http_connection_timeout=90000&kv_buffer_size=2000&kv_pool_size=2&max_idle_http_connections=64000&max_perhost_idle_http_connections=256",
kvBuffer: 2000,
dcpBuffer: 3000,
},
{
name: "serverless-dcp_buffer_query_param-kv_buffer_unsupported_option",
serverless: true,
params: "?dcp_buffer_size=20",
expectedConnStr: "?dcp_buffer_size=20&idle_http_connection_timeout=90000&kv_buffer_size=2000&kv_pool_size=1&max_idle_http_connections=64000&max_perhost_idle_http_connections=256",
kvBuffer: 2000,
},
{
name: "non_serverless-dcp_buffer_query_param-kv_buffer_unsupported_option",
serverless: false,
params: "?dcp_buffer_size=20",
expectedConnStr: "?dcp_buffer_size=20&idle_http_connection_timeout=90000&kv_buffer_size=2000&kv_pool_size=2&max_idle_http_connections=64000&max_perhost_idle_http_connections=256",
kvBuffer: 2000,
},
{
name: "serverless-dcp_buffer_query_param-dcp_buffer_unsupported_option",
serverless: true,
params: "?dcp_buffer_size=20",
expectedConnStr: "?dcp_buffer_size=20&idle_http_connection_timeout=90000&kv_buffer_size=1048576&kv_pool_size=1&max_idle_http_connections=64000&max_perhost_idle_http_connections=256",
dcpBuffer: 3000,
},
{
name: "non_serverless-dcp_buffer_query_param-dcp_buffer_unsupported_option",
serverless: false,
params: "?dcp_buffer_size=20",
expectedConnStr: "?dcp_buffer_size=20&idle_http_connection_timeout=90000&kv_pool_size=2&max_idle_http_connections=64000&max_perhost_idle_http_connections=256",
dcpBuffer: 3000,
},
{
name: "serverless-kv_buffer_query_param-kv_buffer_unsupported_option",
serverless: true,
params: "?kv_buffer_size=20",
expectedConnStr: "?dcp_buffer_size=1048576&idle_http_connection_timeout=90000&kv_buffer_size=20&kv_pool_size=1&max_idle_http_connections=64000&max_perhost_idle_http_connections=256",
kvBuffer: 2000,
},
{
name: "non_serverless-kv_buffer_query_param-kv_buffer_unsupported_option",
serverless: false,
params: "?kv_buffer_size=20",
expectedConnStr: "?idle_http_connection_timeout=90000&kv_buffer_size=20&kv_pool_size=2&max_idle_http_connections=64000&max_perhost_idle_http_connections=256",
kvBuffer: 2000,
},
{
name: "serverless-kv_buffer_query_param-dcp_buffer_unsupported_option",
serverless: true,
params: "?kv_buffer_size=20",
expectedConnStr: "?dcp_buffer_size=3000&idle_http_connection_timeout=90000&kv_buffer_size=20&kv_pool_size=1&max_idle_http_connections=64000&max_perhost_idle_http_connections=256",
dcpBuffer: 3000,
},
{
name: "non_serverless-kv_buffer_query_param-dcp_buffer_unsupported_option",
serverless: false,
params: "?kv_buffer_size=20",
expectedConnStr: "?dcp_buffer_size=3000&idle_http_connection_timeout=90000&kv_buffer_size=20&kv_pool_size=2&max_idle_http_connections=64000&max_perhost_idle_http_connections=256",
dcpBuffer: 3000,
},
}
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
ctx := base.TestCtx(t)
serverBase := "couchbases://example.com"
sc := &StartupConfig{
Bootstrap: BootstrapConfig{
Server: serverBase + test.params,
},
Unsupported: UnsupportedConfig{
Serverless: ServerlessConfig{
Enabled: base.Ptr(test.serverless),
},
},
}
dbConfig := &DatabaseConfig{
DbConfig: DbConfig{
Unsupported: &db.UnsupportedOptions{
KVBufferSize: test.kvBuffer,
DCPReadBuffer: test.dcpBuffer,
},
},
}
spec, err := GetBucketSpec(ctx, dbConfig, sc)
require.NoError(t, err)
require.Equal(t, serverBase+test.expectedConnStr, spec.Server)
})
}
}
10 changes: 8 additions & 2 deletions rest/server_context.go
Original file line number Diff line number Diff line change
Expand Up @@ -600,8 +600,14 @@ func GetBucketSpec(ctx context.Context, config *DatabaseConfig, serverConfig *St
} else {
server = serverConfig.Bootstrap.Server
}
if serverConfig.IsServerless() {
params := base.DefaultServerlessGoCBConnStringParams()

if strings.HasPrefix(server, "couchbase") {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
if strings.HasPrefix(server, "couchbase") {
if !base.ServerIsWalrus(server) {

var params *base.GoCBConnStringParams
if serverConfig.IsServerless() {
params = base.DefaultServerlessGoCBConnStringParams()
} else {
params = base.DefaultGoCBConnStringParams()
}
if config.Unsupported != nil {
if config.Unsupported.DCPReadBuffer != 0 {
params.DcpBufferSize = config.Unsupported.DCPReadBuffer
Expand Down
Loading