Skip to content

Commit 94df136

Browse files
tomekl007olim7t
authored andcommitted
JAVA-2582: Don't propagate a future into SchemaQueriesFactory (scylladb#23)
1 parent bb3848b commit 94df136

18 files changed

+39
-113
lines changed

changelog/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ This version brings in all functionality that was formerly only in the DataStax
88
such as the built-in support for reactive programming. Going forward, all new features will be
99
implemented in this single driver.
1010

11+
12+
- [improvement] JAVA-2582: Don't propagate a future into SchemaQueriesFactory
1113
- [documentation] JAVA-2542: JAVA-2542: Improve the javadocs of methods in CqlSession
1214
- [documentation] JAVA-2609: Add docs for proxy authentication to unified driver
1315
- [improvement] JAVA-2554: Improve efficiency of InsightsClient by improving supportsInsights check

core/src/main/java/com/datastax/oss/driver/internal/core/metadata/MetadataManager.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -432,9 +432,7 @@ private void startSchemaRequest(CompletableFuture<RefreshSchemaResult> refreshFu
432432
refreshFuture.completeExceptionally(agreementError);
433433
} else {
434434
schemaQueriesFactory
435-
.newInstance(
436-
// TODO remove this unused parameter (see JAVA-2582)
437-
null)
435+
.newInstance()
438436
.execute()
439437
.thenApplyAsync(this::parseAndApplySchemaRows, adminExecutor)
440438
.whenComplete(

core/src/main/java/com/datastax/oss/driver/internal/core/metadata/schema/queries/Cassandra21SchemaQueries.java

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,22 +16,16 @@
1616
package com.datastax.oss.driver.internal.core.metadata.schema.queries;
1717

1818
import com.datastax.oss.driver.api.core.config.DriverExecutionProfile;
19-
import com.datastax.oss.driver.api.core.metadata.Metadata;
2019
import com.datastax.oss.driver.api.core.metadata.Node;
2120
import com.datastax.oss.driver.internal.core.channel.DriverChannel;
2221
import java.util.Optional;
23-
import java.util.concurrent.CompletableFuture;
2422
import net.jcip.annotations.ThreadSafe;
2523

2624
@ThreadSafe
2725
public class Cassandra21SchemaQueries extends CassandraSchemaQueries {
2826
public Cassandra21SchemaQueries(
29-
DriverChannel channel,
30-
Node node,
31-
CompletableFuture<Metadata> refreshFuture,
32-
DriverExecutionProfile config,
33-
String logPrefix) {
34-
super(channel, node, refreshFuture, config, logPrefix);
27+
DriverChannel channel, Node node, DriverExecutionProfile config, String logPrefix) {
28+
super(channel, node, config, logPrefix);
3529
}
3630

3731
@Override

core/src/main/java/com/datastax/oss/driver/internal/core/metadata/schema/queries/Cassandra22SchemaQueries.java

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,22 +16,16 @@
1616
package com.datastax.oss.driver.internal.core.metadata.schema.queries;
1717

1818
import com.datastax.oss.driver.api.core.config.DriverExecutionProfile;
19-
import com.datastax.oss.driver.api.core.metadata.Metadata;
2019
import com.datastax.oss.driver.api.core.metadata.Node;
2120
import com.datastax.oss.driver.internal.core.channel.DriverChannel;
2221
import java.util.Optional;
23-
import java.util.concurrent.CompletableFuture;
2422
import net.jcip.annotations.ThreadSafe;
2523

2624
@ThreadSafe
2725
public class Cassandra22SchemaQueries extends CassandraSchemaQueries {
2826
public Cassandra22SchemaQueries(
29-
DriverChannel channel,
30-
Node node,
31-
CompletableFuture<Metadata> refreshFuture,
32-
DriverExecutionProfile config,
33-
String logPrefix) {
34-
super(channel, node, refreshFuture, config, logPrefix);
27+
DriverChannel channel, Node node, DriverExecutionProfile config, String logPrefix) {
28+
super(channel, node, config, logPrefix);
3529
}
3630

3731
@Override

core/src/main/java/com/datastax/oss/driver/internal/core/metadata/schema/queries/Cassandra3SchemaQueries.java

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,22 +16,16 @@
1616
package com.datastax.oss.driver.internal.core.metadata.schema.queries;
1717

1818
import com.datastax.oss.driver.api.core.config.DriverExecutionProfile;
19-
import com.datastax.oss.driver.api.core.metadata.Metadata;
2019
import com.datastax.oss.driver.api.core.metadata.Node;
2120
import com.datastax.oss.driver.internal.core.channel.DriverChannel;
2221
import java.util.Optional;
23-
import java.util.concurrent.CompletableFuture;
2422
import net.jcip.annotations.ThreadSafe;
2523

2624
@ThreadSafe
2725
public class Cassandra3SchemaQueries extends CassandraSchemaQueries {
2826
public Cassandra3SchemaQueries(
29-
DriverChannel channel,
30-
Node node,
31-
CompletableFuture<Metadata> refreshFuture,
32-
DriverExecutionProfile config,
33-
String logPrefix) {
34-
super(channel, node, refreshFuture, config, logPrefix);
27+
DriverChannel channel, Node node, DriverExecutionProfile config, String logPrefix) {
28+
super(channel, node, config, logPrefix);
3529
}
3630

3731
@Override

core/src/main/java/com/datastax/oss/driver/internal/core/metadata/schema/queries/Cassandra4SchemaQueries.java

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,22 +16,16 @@
1616
package com.datastax.oss.driver.internal.core.metadata.schema.queries;
1717

1818
import com.datastax.oss.driver.api.core.config.DriverExecutionProfile;
19-
import com.datastax.oss.driver.api.core.metadata.Metadata;
2019
import com.datastax.oss.driver.api.core.metadata.Node;
2120
import com.datastax.oss.driver.internal.core.channel.DriverChannel;
2221
import java.util.Optional;
23-
import java.util.concurrent.CompletableFuture;
2422
import net.jcip.annotations.ThreadSafe;
2523

2624
@ThreadSafe
2725
public class Cassandra4SchemaQueries extends Cassandra3SchemaQueries {
2826
public Cassandra4SchemaQueries(
29-
DriverChannel channel,
30-
Node node,
31-
CompletableFuture<Metadata> refreshFuture,
32-
DriverExecutionProfile config,
33-
String logPrefix) {
34-
super(channel, node, refreshFuture, config, logPrefix);
27+
DriverChannel channel, Node node, DriverExecutionProfile config, String logPrefix) {
28+
super(channel, node, config, logPrefix);
3529
}
3630

3731
@Override

core/src/main/java/com/datastax/oss/driver/internal/core/metadata/schema/queries/CassandraSchemaQueries.java

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717

1818
import com.datastax.oss.driver.api.core.config.DefaultDriverOption;
1919
import com.datastax.oss.driver.api.core.config.DriverExecutionProfile;
20-
import com.datastax.oss.driver.api.core.metadata.Metadata;
2120
import com.datastax.oss.driver.api.core.metadata.Node;
2221
import com.datastax.oss.driver.internal.core.adminrequest.AdminRequestHandler;
2322
import com.datastax.oss.driver.internal.core.adminrequest.AdminResult;
@@ -52,25 +51,17 @@ public abstract class CassandraSchemaQueries implements SchemaQueries {
5251
private final String whereClause;
5352
// The future we return from execute, completes when all the queries are done.
5453
private final CompletableFuture<SchemaRows> schemaRowsFuture = new CompletableFuture<>();
55-
// A future that completes later, when the whole refresh is done. We just store it here to pass it
56-
// down to the next step.
57-
public final CompletableFuture<Metadata> refreshFuture;
5854
private final long startTimeNs = System.nanoTime();
5955

6056
// All non-final fields are accessed exclusively on adminExecutor
6157
private CassandraSchemaRows.Builder schemaRowsBuilder;
6258
private int pendingQueries;
6359

6460
protected CassandraSchemaQueries(
65-
DriverChannel channel,
66-
Node node,
67-
CompletableFuture<Metadata> refreshFuture,
68-
DriverExecutionProfile config,
69-
String logPrefix) {
61+
DriverChannel channel, Node node, DriverExecutionProfile config, String logPrefix) {
7062
this.channel = channel;
7163
this.adminExecutor = channel.eventLoop();
7264
this.node = node;
73-
this.refreshFuture = refreshFuture;
7465
this.logPrefix = logPrefix;
7566
this.timeout = config.getDuration(DefaultDriverOption.METADATA_SCHEMA_REQUEST_TIMEOUT);
7667
this.pageSize = config.getInt(DefaultDriverOption.METADATA_SCHEMA_REQUEST_PAGE_SIZE);
@@ -130,7 +121,7 @@ public CompletionStage<SchemaRows> execute() {
130121
private void executeOnAdminExecutor() {
131122
assert adminExecutor.inEventLoop();
132123

133-
schemaRowsBuilder = new CassandraSchemaRows.Builder(node, refreshFuture, logPrefix);
124+
schemaRowsBuilder = new CassandraSchemaRows.Builder(node, logPrefix);
134125

135126
query(selectKeyspacesQuery() + whereClause, schemaRowsBuilder::withKeyspaces);
136127
query(selectTypesQuery() + whereClause, schemaRowsBuilder::withTypes);

core/src/main/java/com/datastax/oss/driver/internal/core/metadata/schema/queries/CassandraSchemaRows.java

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
import com.datastax.dse.driver.api.core.metadata.DseNodeProperties;
1919
import com.datastax.oss.driver.api.core.CqlIdentifier;
2020
import com.datastax.oss.driver.api.core.Version;
21-
import com.datastax.oss.driver.api.core.metadata.Metadata;
2221
import com.datastax.oss.driver.api.core.metadata.Node;
2322
import com.datastax.oss.driver.internal.core.adminrequest.AdminRow;
2423
import com.datastax.oss.driver.internal.core.metadata.schema.parsing.DataTypeClassNameParser;
@@ -33,7 +32,6 @@
3332
import java.util.LinkedHashMap;
3433
import java.util.List;
3534
import java.util.Map;
36-
import java.util.concurrent.CompletableFuture;
3735
import net.jcip.annotations.Immutable;
3836
import org.slf4j.Logger;
3937
import org.slf4j.LoggerFactory;
@@ -43,7 +41,6 @@ public class CassandraSchemaRows implements SchemaRows {
4341

4442
private final Node node;
4543
private final DataTypeParser dataTypeParser;
46-
private final CompletableFuture<Metadata> refreshFuture;
4744
private final List<AdminRow> keyspaces;
4845
private final List<AdminRow> virtualKeyspaces;
4946
private final Multimap<CqlIdentifier, AdminRow> tables;
@@ -58,7 +55,6 @@ public class CassandraSchemaRows implements SchemaRows {
5855

5956
private CassandraSchemaRows(
6057
Node node,
61-
CompletableFuture<Metadata> refreshFuture,
6258
DataTypeParser dataTypeParser,
6359
List<AdminRow> keyspaces,
6460
List<AdminRow> virtualKeyspaces,
@@ -73,7 +69,6 @@ private CassandraSchemaRows(
7369
Multimap<CqlIdentifier, AdminRow> aggregates) {
7470
this.node = node;
7571
this.dataTypeParser = dataTypeParser;
76-
this.refreshFuture = refreshFuture;
7772
this.keyspaces = keyspaces;
7873
this.virtualKeyspaces = virtualKeyspaces;
7974
this.tables = tables;
@@ -98,11 +93,6 @@ public DataTypeParser dataTypeParser() {
9893
return dataTypeParser;
9994
}
10095

101-
@Override
102-
public CompletableFuture<Metadata> refreshFuture() {
103-
return refreshFuture;
104-
}
105-
10696
@Override
10797
public List<AdminRow> keyspaces() {
10898
return keyspaces;
@@ -162,7 +152,6 @@ public static class Builder {
162152
private static final Logger LOG = LoggerFactory.getLogger(Builder.class);
163153

164154
private final Node node;
165-
private final CompletableFuture<Metadata> refreshFuture;
166155
private final DataTypeParser dataTypeParser;
167156
private final String tableNameColumn;
168157
private final String logPrefix;
@@ -187,9 +176,8 @@ public static class Builder {
187176
private final Map<CqlIdentifier, ImmutableMultimap.Builder<CqlIdentifier, AdminRow>>
188177
indexesBuilders = new LinkedHashMap<>();
189178

190-
public Builder(Node node, CompletableFuture<Metadata> refreshFuture, String logPrefix) {
179+
public Builder(Node node, String logPrefix) {
191180
this.node = node;
192-
this.refreshFuture = refreshFuture;
193181
this.logPrefix = logPrefix;
194182
if (isCassandraV3OrAbove(node)) {
195183
this.tableNameColumn = "table_name";
@@ -323,7 +311,6 @@ private void putByKeyspaceAndTable(
323311
public CassandraSchemaRows build() {
324312
return new CassandraSchemaRows(
325313
node,
326-
refreshFuture,
327314
dataTypeParser,
328315
keyspacesBuilder.build(),
329316
virtualKeyspacesBuilder.build(),

core/src/main/java/com/datastax/oss/driver/internal/core/metadata/schema/queries/DefaultSchemaQueriesFactory.java

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,9 @@
1818
import com.datastax.dse.driver.api.core.metadata.DseNodeProperties;
1919
import com.datastax.oss.driver.api.core.Version;
2020
import com.datastax.oss.driver.api.core.config.DriverExecutionProfile;
21-
import com.datastax.oss.driver.api.core.metadata.Metadata;
2221
import com.datastax.oss.driver.api.core.metadata.Node;
2322
import com.datastax.oss.driver.internal.core.channel.DriverChannel;
2423
import com.datastax.oss.driver.internal.core.context.InternalDriverContext;
25-
import java.util.concurrent.CompletableFuture;
2624
import net.jcip.annotations.ThreadSafe;
2725
import org.slf4j.Logger;
2826
import org.slf4j.LoggerFactory;
@@ -41,7 +39,7 @@ public DefaultSchemaQueriesFactory(InternalDriverContext context) {
4139
}
4240

4341
@Override
44-
public SchemaQueries newInstance(CompletableFuture<Metadata> refreshFuture) {
42+
public SchemaQueries newInstance() {
4543
DriverChannel channel = context.getControlConnection().channel();
4644
if (channel == null || channel.closeFuture().isDone()) {
4745
throw new IllegalStateException("Control channel not available, aborting schema refresh");
@@ -57,11 +55,10 @@ public SchemaQueries newInstance(CompletableFuture<Metadata> refreshFuture) {
5755
"Could not find control node metadata "
5856
+ channel.getEndPoint()
5957
+ ", aborting schema refresh"));
60-
return newInstance(node, channel, refreshFuture);
58+
return newInstance(node, channel);
6159
}
6260

63-
protected SchemaQueries newInstance(
64-
Node node, DriverChannel channel, CompletableFuture<Metadata> refreshFuture) {
61+
protected SchemaQueries newInstance(Node node, DriverChannel channel) {
6562

6663
DriverExecutionProfile config = context.getConfig().getDefaultProfile();
6764

@@ -73,13 +70,13 @@ protected SchemaQueries newInstance(
7370
"[{}] Sending schema queries to {} with DSE version {}", logPrefix, node, dseVersion);
7471
// 4.8 is the oldest version supported, which uses C* 2.1 schema
7572
if (dseVersion.compareTo(Version.V5_0_0) < 0) {
76-
return new Cassandra21SchemaQueries(channel, node, refreshFuture, config, logPrefix);
73+
return new Cassandra21SchemaQueries(channel, node, config, logPrefix);
7774
} else if (dseVersion.compareTo(Version.V6_7_0) < 0) {
7875
// 5.0 - 6.7 uses C* 3.0 schema
79-
return new Cassandra3SchemaQueries(channel, node, refreshFuture, config, logPrefix);
76+
return new Cassandra3SchemaQueries(channel, node, config, logPrefix);
8077
} else {
8178
// 6.7+ uses C* 4.0 schema
82-
return new Cassandra4SchemaQueries(channel, node, refreshFuture, config, logPrefix);
79+
return new Cassandra4SchemaQueries(channel, node, config, logPrefix);
8380
}
8481
} else {
8582
Version cassandraVersion = node.getCassandraVersion();
@@ -96,13 +93,13 @@ protected SchemaQueries newInstance(
9693
LOG.debug(
9794
"[{}] Sending schema queries to {} with version {}", logPrefix, node, cassandraVersion);
9895
if (cassandraVersion.compareTo(Version.V2_2_0) < 0) {
99-
return new Cassandra21SchemaQueries(channel, node, refreshFuture, config, logPrefix);
96+
return new Cassandra21SchemaQueries(channel, node, config, logPrefix);
10097
} else if (cassandraVersion.compareTo(Version.V3_0_0) < 0) {
101-
return new Cassandra22SchemaQueries(channel, node, refreshFuture, config, logPrefix);
98+
return new Cassandra22SchemaQueries(channel, node, config, logPrefix);
10299
} else if (cassandraVersion.compareTo(Version.V4_0_0) < 0) {
103-
return new Cassandra3SchemaQueries(channel, node, refreshFuture, config, logPrefix);
100+
return new Cassandra3SchemaQueries(channel, node, config, logPrefix);
104101
} else {
105-
return new Cassandra4SchemaQueries(channel, node, refreshFuture, config, logPrefix);
102+
return new Cassandra4SchemaQueries(channel, node, config, logPrefix);
106103
}
107104
}
108105
}

core/src/main/java/com/datastax/oss/driver/internal/core/metadata/schema/queries/SchemaQueriesFactory.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,6 @@
1515
*/
1616
package com.datastax.oss.driver.internal.core.metadata.schema.queries;
1717

18-
import com.datastax.oss.driver.api.core.metadata.Metadata;
19-
import java.util.concurrent.CompletableFuture;
20-
2118
public interface SchemaQueriesFactory {
22-
SchemaQueries newInstance(CompletableFuture<Metadata> refreshFuture);
19+
SchemaQueries newInstance();
2320
}

0 commit comments

Comments
 (0)