Skip to content

Commit 90155a7

Browse files
authored
Remote compression scheme default to deflate (elastic#76580)
Currently the cluster.remote.*.transport.compression_scheme setting defaults to the transport.compression_scheme value. This commit modifies this to default to deflate (the existing compression scheme prior to 7.14) when cluster.remote.*.transport.compress is explicitly set. This will ensure that users do not accidentally change their compression scheme for 7.x.
1 parent c0e9899 commit 90155a7

File tree

3 files changed

+64
-5
lines changed

3 files changed

+64
-5
lines changed

docs/reference/modules/remote-clusters.asciidoc

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -301,8 +301,11 @@ separately.
301301
requests to a specific remote cluster. This setting impacts only requests
302302
sent to the remote cluster. If an inbound request is compressed, {es}
303303
compresses the response using the same compression scheme. The setting options
304-
are `deflate` and `lz4`. If unset, the global `transport.compression_scheme`
305-
is used as the fallback setting.
304+
are `deflate` and `lz4`. If unset, and
305+
`cluster.remote.<cluster_alias>.transport.compress` is explicitly set, defaults
306+
to `deflate`. If unset, and `cluster.remote.<cluster_alias>.transport.compress`
307+
is not explicitly set, `transport.compression_scheme` is used as the fallback
308+
setting.
306309

307310
[discrete]
308311
[[remote-cluster-sniff-settings]]

server/src/main/java/org/elasticsearch/transport/RemoteConnectionStrategy.java

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -121,12 +121,26 @@ public Writeable.Reader<RemoteConnectionInfo.ModeInfo> getReader() {
121121

122122
static ConnectionProfile buildConnectionProfile(String clusterAlias, Settings settings) {
123123
ConnectionStrategy mode = REMOTE_CONNECTION_MODE.getConcreteSettingForNamespace(clusterAlias).get(settings);
124+
final Setting<Compression.Enabled> compressionSetting = RemoteClusterService.REMOTE_CLUSTER_COMPRESS
125+
.getConcreteSettingForNamespace(clusterAlias);
126+
final Setting<Compression.Scheme> compressionSchemeSetting = RemoteClusterService.REMOTE_CLUSTER_COMPRESSION_SCHEME
127+
.getConcreteSettingForNamespace(clusterAlias);
128+
boolean compressionSettingExists = compressionSetting.exists(settings);
129+
final Compression.Scheme scheme;
130+
if (compressionSettingExists) {
131+
if (compressionSchemeSetting.exists(settings)) {
132+
scheme = compressionSchemeSetting.get(settings);
133+
} else {
134+
scheme = Compression.Scheme.DEFLATE;
135+
}
136+
} else {
137+
scheme = compressionSchemeSetting.get(settings);
138+
}
124139
ConnectionProfile.Builder builder = new ConnectionProfile.Builder()
125140
.setConnectTimeout(TransportSettings.CONNECT_TIMEOUT.get(settings))
126141
.setHandshakeTimeout(TransportSettings.CONNECT_TIMEOUT.get(settings))
127-
.setCompressionEnabled(RemoteClusterService.REMOTE_CLUSTER_COMPRESS.getConcreteSettingForNamespace(clusterAlias).get(settings))
128-
.setCompressionScheme(RemoteClusterService.REMOTE_CLUSTER_COMPRESSION_SCHEME
129-
.getConcreteSettingForNamespace(clusterAlias).get(settings))
142+
.setCompressionEnabled(compressionSetting.get(settings))
143+
.setCompressionScheme(scheme)
130144
.setPingInterval(RemoteClusterService.REMOTE_CLUSTER_PING_SCHEDULE.getConcreteSettingForNamespace(clusterAlias).get(settings))
131145
.addConnections(0, TransportRequestOptions.Type.BULK, TransportRequestOptions.Type.STATE,
132146
TransportRequestOptions.Type.RECOVERY, TransportRequestOptions.Type.PING)

server/src/test/java/org/elasticsearch/transport/RemoteConnectionStrategyTests.java

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,48 @@ public void testChangeInConnectionProfileMeansTheStrategyMustBeRebuilt() {
7575
assertTrue(first.shouldRebuildConnection(newBuilder.build()));
7676
}
7777

78+
public void testCompressionSchemeDefaults() {
79+
// Test explicit default
80+
Settings.Builder explicitBuilder = Settings.builder();
81+
explicitBuilder.put(RemoteConnectionStrategy.REMOTE_CONNECTION_MODE.getConcreteSettingForNamespace("cluster-alias").getKey(),
82+
"proxy");
83+
explicitBuilder.put(ProxyConnectionStrategy.PROXY_ADDRESS.getConcreteSettingForNamespace("cluster-alias").getKey(),
84+
"127.0.0.1:9300");
85+
explicitBuilder.put(RemoteClusterService.REMOTE_CLUSTER_COMPRESS.getConcreteSettingForNamespace("cluster-alias").getKey(),
86+
randomFrom("true", "indexing_data", "false"));
87+
explicitBuilder.put(TransportSettings.TRANSPORT_COMPRESSION_SCHEME.getKey(), "lz4");
88+
ConnectionProfile connectionProfileExplicit = FakeConnectionStrategy.buildConnectionProfile("cluster-alias",
89+
explicitBuilder.build());
90+
assertEquals(Compression.Scheme.DEFLATE, connectionProfileExplicit.getCompressionScheme());
91+
92+
// Test explicit set
93+
Settings.Builder explicit2Builder = Settings.builder();
94+
explicit2Builder.put(RemoteConnectionStrategy.REMOTE_CONNECTION_MODE.getConcreteSettingForNamespace("cluster-alias").getKey(),
95+
"proxy");
96+
explicit2Builder.put(ProxyConnectionStrategy.PROXY_ADDRESS.getConcreteSettingForNamespace("cluster-alias").getKey(),
97+
"127.0.0.1:9300");
98+
explicit2Builder.put(RemoteClusterService.REMOTE_CLUSTER_COMPRESS.getConcreteSettingForNamespace("cluster-alias").getKey(),
99+
randomFrom("true", "indexing_data", "false"));
100+
explicit2Builder.put(RemoteClusterService.REMOTE_CLUSTER_COMPRESSION_SCHEME
101+
.getConcreteSettingForNamespace("cluster-alias").getKey(), "lz4");
102+
explicit2Builder.put(TransportSettings.TRANSPORT_COMPRESSION_SCHEME.getKey(), "deflate");
103+
ConnectionProfile connectionProfileExplicit2 = FakeConnectionStrategy.buildConnectionProfile("cluster-alias",
104+
explicit2Builder.build());
105+
assertEquals(Compression.Scheme.LZ4, connectionProfileExplicit2.getCompressionScheme());
106+
107+
// Test implicit
108+
Settings.Builder implicitBuilder = Settings.builder();
109+
implicitBuilder.put(RemoteConnectionStrategy.REMOTE_CONNECTION_MODE.getConcreteSettingForNamespace("cluster-alias").getKey(),
110+
"proxy");
111+
implicitBuilder.put(ProxyConnectionStrategy.PROXY_ADDRESS.getConcreteSettingForNamespace("cluster-alias").getKey(),
112+
"127.0.0.1:9300");
113+
implicitBuilder.put(TransportSettings.TRANSPORT_COMPRESS.getKey(), randomFrom("true", "indexing_data", "false"));
114+
implicitBuilder.put(TransportSettings.TRANSPORT_COMPRESSION_SCHEME.getKey(), "lz4");
115+
ConnectionProfile connectionProfileImplicit = FakeConnectionStrategy.buildConnectionProfile("cluster-alias",
116+
implicitBuilder.build());
117+
assertEquals(Compression.Scheme.LZ4, connectionProfileImplicit.getCompressionScheme());
118+
}
119+
78120
public void testCorrectChannelNumber() {
79121
String clusterAlias = "cluster-alias";
80122

0 commit comments

Comments
 (0)