Skip to content

Commit 5083ab6

Browse files
committed
JCBC-2204 Add config option for disabling server-initiated topology change notifications
Motivation ---------- Stopgap while we improve how the SDK handles server-initiated cluster topology change notifications. Modifications ------------- Add client setting `io.configNotifications`. Default is true (preserve existing behavior). Change-Id: Ib0d1883aebdbe3b3a773d7280305ecd412d8454c Reviewed-on: https://review.couchbase.org/c/couchbase-jvm-clients/+/234727 Reviewed-by: Michael Reiche <[email protected]> Tested-by: Build Bot <[email protected]> (cherry picked from commit 10719d6) Reviewed-on: https://review.couchbase.org/c/couchbase-jvm-clients/+/234730 Reviewed-by: David Nault <[email protected]>
1 parent 228a50c commit 5083ab6

File tree

2 files changed

+34
-1
lines changed

2 files changed

+34
-1
lines changed

core-io/src/main/java/com/couchbase/client/core/endpoint/KeyValueEndpoint.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,10 +128,13 @@ private Set<ServerFeature> serverFeatures() {
128128
ServerFeature.GET_CLUSTER_CONFIG_WITH_KNOWN_VERSION,
129129
ServerFeature.DUPLEX,
130130
ServerFeature.DEDUPE_NOT_MY_VBUCKET_CLUSTERMAP,
131-
ServerFeature.CLUSTERMAP_CHANGE_NOTIFICATION_BRIEF,
132131
ServerFeature.SUBDOC_BINARY_XATTR
133132
);
134133

134+
if (ctx.environment().ioConfig().configNotifications()) {
135+
features.add(ServerFeature.CLUSTERMAP_CHANGE_NOTIFICATION_BRIEF);
136+
}
137+
135138
if (ctx.environment().ioConfig().mutationTokensEnabled()) {
136139
features.add(ServerFeature.MUTATION_SEQNO);
137140
}

core-io/src/main/java/com/couchbase/client/core/env/IoConfig.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,10 @@ public class IoConfig {
4848
public static final boolean DEFAULT_TCP_KEEPALIVE_ENABLED = true;
4949
public static final Duration DEFAULT_TCP_KEEPALIVE_TIME = Duration.ofSeconds(60);
5050
public static final Duration DEFAULT_CONFIG_POLL_INTERVAL = Duration.ofMillis(2500);
51+
52+
@Stability.Volatile
53+
public static final boolean DEFAULT_CONFIG_NOTIFICATIONS = true;
54+
5155
public static final NetworkResolution DEFAULT_NETWORK_RESOLUTION = NetworkResolution.AUTO;
5256
public static final int DEFAULT_NUM_KV_CONNECTIONS = 1;
5357
public static final int DEFAULT_MAX_HTTP_CONNECTIONS = AbstractPooledEndpointServiceConfig.DEFAULT_MAX_ENDPOINTS;
@@ -63,6 +67,7 @@ public class IoConfig {
6367

6468
private final boolean mutationTokensEnabled;
6569
private final Duration configPollInterval;
70+
private final boolean configNotifications;
6671
private final CircuitBreakerConfig kvCircuitBreakerConfig;
6772
private final CircuitBreakerConfig queryCircuitBreakerConfig;
6873
private final CircuitBreakerConfig viewCircuitBreakerConfig;
@@ -93,6 +98,7 @@ private IoConfig(Builder builder) {
9398
configPollInterval = Optional
9499
.ofNullable(builder.configPollInterval)
95100
.orElse(DEFAULT_CONFIG_POLL_INTERVAL);
101+
configNotifications = builder.configNotifications;
96102
kvCircuitBreakerConfig = builder.kvCircuitBreakerConfig.build();
97103
queryCircuitBreakerConfig = builder.queryCircuitBreakerConfig.build();
98104
viewCircuitBreakerConfig = builder.viewCircuitBreakerConfig.build();
@@ -377,6 +383,11 @@ public Duration configPollInterval() {
377383
return configPollInterval;
378384
}
379385

386+
@Stability.Volatile
387+
public boolean configNotifications() {
388+
return configNotifications;
389+
}
390+
380391
/**
381392
* Lists the services on which traffic should be captured.
382393
*
@@ -481,6 +492,7 @@ public static class Builder {
481492

482493
private boolean mutationTokensEnabled = DEFAULT_MUTATION_TOKENS_ENABLED;
483494
private Duration configPollInterval;
495+
private boolean configNotifications = DEFAULT_CONFIG_NOTIFICATIONS;
484496
private CircuitBreakerConfig.Builder kvCircuitBreakerConfig = CircuitBreakerConfig.builder().enabled(false);
485497
private CircuitBreakerConfig.Builder queryCircuitBreakerConfig = CircuitBreakerConfig.builder().enabled(false);
486498
private CircuitBreakerConfig.Builder viewCircuitBreakerConfig = CircuitBreakerConfig.builder().enabled(false);
@@ -576,6 +588,24 @@ public Builder configPollInterval(Duration configPollInterval) {
576588
return this;
577589
}
578590

591+
/**
592+
* Call this with a value of false to disable server-initiated
593+
* cluster topology change notifications.
594+
* <p>
595+
* This setting is independent of {@link #configPollInterval(Duration)},
596+
* which controls the interval of client-initiated topology change detection.
597+
* <p>
598+
* Please leave this setting at the default unless advised by
599+
* Couchbase Technical Support.
600+
* <p>
601+
* Defaults to true.
602+
*/
603+
@Stability.Volatile
604+
public Builder configNotifications(boolean enabled) {
605+
this.configNotifications = enabled;
606+
return this;
607+
}
608+
579609
/**
580610
* Configures whether mutation tokens will be returned from the server for all mutation operations.
581611
*

0 commit comments

Comments
 (0)