From e45d09e44bdcbeb0023691c866e66fcb2b30d839 Mon Sep 17 00:00:00 2001 From: Alexandre Dutra Date: Sat, 8 Aug 2020 10:28:58 +0200 Subject: [PATCH 001/112] Fix ProtocolBetaVersionTest --- .../driver/core/ProtocolBetaVersionTest.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/driver-core/src/test/java/com/datastax/driver/core/ProtocolBetaVersionTest.java b/driver-core/src/test/java/com/datastax/driver/core/ProtocolBetaVersionTest.java index da9cb4d13bf..96c84706608 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/ProtocolBetaVersionTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/ProtocolBetaVersionTest.java @@ -21,12 +21,22 @@ import static org.assertj.core.api.Assertions.fail; import com.datastax.driver.core.utils.CassandraVersion; +import org.testng.SkipException; +import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; /** Tests for the new USE_BETA flag introduced in protocol v5 and Cassandra 3.10. */ @CassandraVersion("3.10") public class ProtocolBetaVersionTest extends CCMTestsSupport { + @BeforeClass + public void checkNotCassandra4OrHigher() { + if (ccm().getCassandraVersion().getMajor() > 3) { + throw new SkipException( + "ProtocolBetaVersionTest should only be executed against C* versions >= 3.10 and < 4.0"); + } + } + /** * Verifies that the cluster builder fails when version is explicitly set and user attempts to set * beta flag. @@ -99,9 +109,12 @@ public void should_not_connect_when_beta_version_explicitly_required_and_flag_no * Verifies that the driver can connect to 3.10 with the following combination of options: Version * UNSET Flag SET Expected version: V5 * + *

Note: Since driver 3.10, and due to JAVA-2772, it is not possible anymore to connect with v5 + * to a Cassandra 3.x cluster. + * * @jira_ticket JAVA-1248 */ - @Test(groups = "short") + @Test(groups = "short", enabled = false) public void should_connect_with_beta_when_no_version_explicitly_required_and_flag_set() throws Exception { // Note: when the driver's ProtocolVersion.NEWEST_SUPPORTED will be incremented to V6 or higher From b7012f5a4934f2e11fc3ebc7fb873eaac9775788 Mon Sep 17 00:00:00 2001 From: Alexandre Dutra Date: Sat, 8 Aug 2020 11:00:27 +0200 Subject: [PATCH 002/112] Make client encryption non optional when enabling SSL in CCMBridge --- .../src/test/java/com/datastax/driver/core/CCMBridge.java | 1 + 1 file changed, 1 insertion(+) diff --git a/driver-core/src/test/java/com/datastax/driver/core/CCMBridge.java b/driver-core/src/test/java/com/datastax/driver/core/CCMBridge.java index f890b3447fd..1c7790e6189 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/CCMBridge.java +++ b/driver-core/src/test/java/com/datastax/driver/core/CCMBridge.java @@ -902,6 +902,7 @@ public Builder withoutNodes() { /** Enables SSL encryption. */ public Builder withSSL() { cassandraConfiguration.put("client_encryption_options.enabled", "true"); + cassandraConfiguration.put("client_encryption_options.optional", "false"); cassandraConfiguration.put( "client_encryption_options.keystore", DEFAULT_SERVER_KEYSTORE_FILE.getAbsolutePath()); cassandraConfiguration.put( From 218a5627c5b0a873ac64d247c3a35e53a46e9219 Mon Sep 17 00:00:00 2001 From: olim7t Date: Thu, 13 Aug 2020 10:14:22 -0700 Subject: [PATCH 003/112] JAVA-2860: Avoid NPE if channel initialization crashes --- changelog/README.md | 4 ++++ .../main/java/com/datastax/driver/core/Connection.java | 9 +++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/changelog/README.md b/changelog/README.md index 45cefceff26..d8965ce3db4 100644 --- a/changelog/README.md +++ b/changelog/README.md @@ -5,6 +5,10 @@ 3.x versions get published. --> +## 3.10.2 (in progress) + +- [bug] JAVA-2860: Avoid NPE if channel initialization crashes + ## 3.10.1 - [bug] JAVA-2857: Fix NPE when built statements without parameters are logged at TRACE level. diff --git a/driver-core/src/main/java/com/datastax/driver/core/Connection.java b/driver-core/src/main/java/com/datastax/driver/core/Connection.java index 974e2bdf6ed..92861dc9fe6 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/Connection.java +++ b/driver-core/src/main/java/com/datastax/driver/core/Connection.java @@ -193,8 +193,10 @@ ListenableFuture initAsync() { @Override public void operationComplete(ChannelFuture future) throws Exception { writer.decrementAndGet(); + // Note: future.channel() can be null in some error cases, so we need to guard against + // it in the rest of the code below. channel = future.channel(); - if (isClosed()) { + if (isClosed() && channel != null) { channel .close() .addListener( @@ -208,7 +210,9 @@ public void operationComplete(ChannelFuture future) throws Exception { } }); } else { - Connection.this.factory.allChannels.add(channel); + if (channel != null) { + Connection.this.factory.allChannels.add(channel); + } if (!future.isSuccess()) { if (logger.isDebugEnabled()) logger.debug( @@ -221,6 +225,7 @@ public void operationComplete(ChannelFuture future) throws Exception { new TransportException( Connection.this.endPoint, "Cannot connect", future.cause())); } else { + assert channel != null; logger.debug( "{} Connection established, initializing transport", Connection.this); channel.closeFuture().addListener(new ChannelCloseListener()); From 348797bd831d01a09109bff1e63be98715fafd73 Mon Sep 17 00:00:00 2001 From: Alexandre Dutra Date: Wed, 26 Aug 2020 15:19:41 +0200 Subject: [PATCH 004/112] [maven-release-plugin] prepare release 3.10.2 --- driver-core/pom.xml | 2 +- driver-dist/pom.xml | 2 +- driver-examples/pom.xml | 2 +- driver-extras/pom.xml | 2 +- driver-mapping/pom.xml | 2 +- driver-tests/osgi/pom.xml | 2 +- driver-tests/pom.xml | 2 +- driver-tests/shading/pom.xml | 2 +- driver-tests/shading/shaded/pom.xml | 2 +- driver-tests/shading/unshaded/pom.xml | 2 +- driver-tests/stress/pom.xml | 2 +- pom.xml | 4 ++-- 12 files changed, 13 insertions(+), 13 deletions(-) diff --git a/driver-core/pom.xml b/driver-core/pom.xml index 7ef14ab6440..f96155bfb60 100644 --- a/driver-core/pom.xml +++ b/driver-core/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.10.2-SNAPSHOT + 3.10.2 cassandra-driver-core diff --git a/driver-dist/pom.xml b/driver-dist/pom.xml index bf29b272439..e8ce8623245 100644 --- a/driver-dist/pom.xml +++ b/driver-dist/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.10.2-SNAPSHOT + 3.10.2 cassandra-driver-dist diff --git a/driver-examples/pom.xml b/driver-examples/pom.xml index 6c87fe41abd..ad94e740f18 100644 --- a/driver-examples/pom.xml +++ b/driver-examples/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.10.2-SNAPSHOT + 3.10.2 cassandra-driver-examples diff --git a/driver-extras/pom.xml b/driver-extras/pom.xml index 5fa6f6c7fb4..bcff1139ccd 100644 --- a/driver-extras/pom.xml +++ b/driver-extras/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.10.2-SNAPSHOT + 3.10.2 cassandra-driver-extras diff --git a/driver-mapping/pom.xml b/driver-mapping/pom.xml index 125ea4386e2..25df9f53826 100644 --- a/driver-mapping/pom.xml +++ b/driver-mapping/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.10.2-SNAPSHOT + 3.10.2 cassandra-driver-mapping diff --git a/driver-tests/osgi/pom.xml b/driver-tests/osgi/pom.xml index 584aa741073..ecd7f29bc61 100644 --- a/driver-tests/osgi/pom.xml +++ b/driver-tests/osgi/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-parent - 3.10.2-SNAPSHOT + 3.10.2 cassandra-driver-tests-osgi diff --git a/driver-tests/pom.xml b/driver-tests/pom.xml index e8387cd92dd..936eabcbeec 100644 --- a/driver-tests/pom.xml +++ b/driver-tests/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.10.2-SNAPSHOT + 3.10.2 cassandra-driver-tests-parent diff --git a/driver-tests/shading/pom.xml b/driver-tests/shading/pom.xml index 6b8460f28fa..72ba8be1ff8 100644 --- a/driver-tests/shading/pom.xml +++ b/driver-tests/shading/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-parent - 3.10.2-SNAPSHOT + 3.10.2 pom diff --git a/driver-tests/shading/shaded/pom.xml b/driver-tests/shading/shaded/pom.xml index 119f2666a03..41f80275ed3 100644 --- a/driver-tests/shading/shaded/pom.xml +++ b/driver-tests/shading/shaded/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-shading - 3.10.2-SNAPSHOT + 3.10.2 cassandra-driver-tests-shading-shaded diff --git a/driver-tests/shading/unshaded/pom.xml b/driver-tests/shading/unshaded/pom.xml index b95e1be3835..2af611ceaaa 100644 --- a/driver-tests/shading/unshaded/pom.xml +++ b/driver-tests/shading/unshaded/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-shading - 3.10.2-SNAPSHOT + 3.10.2 cassandra-driver-tests-shading-unshaded diff --git a/driver-tests/stress/pom.xml b/driver-tests/stress/pom.xml index 8bb8273e3a8..f51eae55ef1 100644 --- a/driver-tests/stress/pom.xml +++ b/driver-tests/stress/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-parent - 3.10.2-SNAPSHOT + 3.10.2 cassandra-driver-tests-stress diff --git a/pom.xml b/pom.xml index b0b6af5aef9..d0f6e7cd065 100644 --- a/pom.xml +++ b/pom.xml @@ -21,7 +21,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.10.2-SNAPSHOT + 3.10.2 pom DataStax Java Driver for Apache Cassandra @@ -1147,7 +1147,7 @@ limitations under the License. scm:git:git@github.com:datastax/java-driver.git scm:git:git@github.com:datastax/java-driver.git https://github.com/datastax/java-driver - HEAD + 3.10.2 From cab218e4a559a6888dd0e09ad88d22a52148065f Mon Sep 17 00:00:00 2001 From: Alexandre Dutra Date: Wed, 26 Aug 2020 15:19:50 +0200 Subject: [PATCH 005/112] [maven-release-plugin] prepare for next development iteration --- driver-core/pom.xml | 2 +- driver-dist/pom.xml | 2 +- driver-examples/pom.xml | 2 +- driver-extras/pom.xml | 2 +- driver-mapping/pom.xml | 2 +- driver-tests/osgi/pom.xml | 2 +- driver-tests/pom.xml | 2 +- driver-tests/shading/pom.xml | 2 +- driver-tests/shading/shaded/pom.xml | 2 +- driver-tests/shading/unshaded/pom.xml | 2 +- driver-tests/stress/pom.xml | 2 +- pom.xml | 4 ++-- 12 files changed, 13 insertions(+), 13 deletions(-) diff --git a/driver-core/pom.xml b/driver-core/pom.xml index f96155bfb60..a16af74b088 100644 --- a/driver-core/pom.xml +++ b/driver-core/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.10.2 + 3.10.3-SNAPSHOT cassandra-driver-core diff --git a/driver-dist/pom.xml b/driver-dist/pom.xml index e8ce8623245..d3ebba22797 100644 --- a/driver-dist/pom.xml +++ b/driver-dist/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.10.2 + 3.10.3-SNAPSHOT cassandra-driver-dist diff --git a/driver-examples/pom.xml b/driver-examples/pom.xml index ad94e740f18..8222ddaa145 100644 --- a/driver-examples/pom.xml +++ b/driver-examples/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.10.2 + 3.10.3-SNAPSHOT cassandra-driver-examples diff --git a/driver-extras/pom.xml b/driver-extras/pom.xml index bcff1139ccd..2676c7ce1dc 100644 --- a/driver-extras/pom.xml +++ b/driver-extras/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.10.2 + 3.10.3-SNAPSHOT cassandra-driver-extras diff --git a/driver-mapping/pom.xml b/driver-mapping/pom.xml index 25df9f53826..8477da9c8b0 100644 --- a/driver-mapping/pom.xml +++ b/driver-mapping/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.10.2 + 3.10.3-SNAPSHOT cassandra-driver-mapping diff --git a/driver-tests/osgi/pom.xml b/driver-tests/osgi/pom.xml index ecd7f29bc61..decb2e70c78 100644 --- a/driver-tests/osgi/pom.xml +++ b/driver-tests/osgi/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-parent - 3.10.2 + 3.10.3-SNAPSHOT cassandra-driver-tests-osgi diff --git a/driver-tests/pom.xml b/driver-tests/pom.xml index 936eabcbeec..208b2fa5f5a 100644 --- a/driver-tests/pom.xml +++ b/driver-tests/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.10.2 + 3.10.3-SNAPSHOT cassandra-driver-tests-parent diff --git a/driver-tests/shading/pom.xml b/driver-tests/shading/pom.xml index 72ba8be1ff8..f2f3edd969e 100644 --- a/driver-tests/shading/pom.xml +++ b/driver-tests/shading/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-parent - 3.10.2 + 3.10.3-SNAPSHOT pom diff --git a/driver-tests/shading/shaded/pom.xml b/driver-tests/shading/shaded/pom.xml index 41f80275ed3..bdc09dc32dd 100644 --- a/driver-tests/shading/shaded/pom.xml +++ b/driver-tests/shading/shaded/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-shading - 3.10.2 + 3.10.3-SNAPSHOT cassandra-driver-tests-shading-shaded diff --git a/driver-tests/shading/unshaded/pom.xml b/driver-tests/shading/unshaded/pom.xml index 2af611ceaaa..326dda89c06 100644 --- a/driver-tests/shading/unshaded/pom.xml +++ b/driver-tests/shading/unshaded/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-shading - 3.10.2 + 3.10.3-SNAPSHOT cassandra-driver-tests-shading-unshaded diff --git a/driver-tests/stress/pom.xml b/driver-tests/stress/pom.xml index f51eae55ef1..1074db44442 100644 --- a/driver-tests/stress/pom.xml +++ b/driver-tests/stress/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-parent - 3.10.2 + 3.10.3-SNAPSHOT cassandra-driver-tests-stress diff --git a/pom.xml b/pom.xml index d0f6e7cd065..39f5451d7ec 100644 --- a/pom.xml +++ b/pom.xml @@ -21,7 +21,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.10.2 + 3.10.3-SNAPSHOT pom DataStax Java Driver for Apache Cassandra @@ -1147,7 +1147,7 @@ limitations under the License. scm:git:git@github.com:datastax/java-driver.git scm:git:git@github.com:datastax/java-driver.git https://github.com/datastax/java-driver - 3.10.2 + HEAD From 6cb4d14bb322ea138337af27fc556d5cba83e961 Mon Sep 17 00:00:00 2001 From: Madhavan Date: Tue, 17 Nov 2020 08:26:05 -0500 Subject: [PATCH 006/112] Rebrand Apollo to Astra (#1507) Co-authored-by: Madhavan Sridharan --- README.md | 14 ++++---- .../AstraReadCassandraVersion.java} | 25 +++++++------- manual/cloud/README.md | 33 ++++++++----------- 3 files changed, 34 insertions(+), 38 deletions(-) rename driver-examples/src/main/java/com/datastax/driver/examples/{apollo/ApolloReadCassandraVersion.java => astra/AstraReadCassandraVersion.java} (79%) diff --git a/README.md b/README.md index 7d7d26cad85..db50f55c590 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ not yet have been released. You can find the documentation for the latest version through the [Java driver docs](http://docs.datastax.com/en/developer/java-driver/latest/index.html) or via the release tags, [e.g. -3.10.0](https://github.com/datastax/java-driver/tree/3.10.0).* +3.10.2](https://github.com/datastax/java-driver/tree/3.10.2).* A modern, [feature-rich](manual/) and highly tunable Java client library for Apache Cassandra (2.1+) and using exclusively Cassandra's binary protocol @@ -55,7 +55,7 @@ The driver contains the following modules: - API: https://docs.datastax.com/en/drivers/java/3.10 - GITHUB REPOSITORY: https://github.com/datastax/java-driver - [changelog](changelog/) -- [binary tarball](http://downloads.datastax.com/java-driver/cassandra-java-driver-3.10.0.tar.gz) +- [binary tarball](http://downloads.datastax.com/java-driver/cassandra-java-driver-3.10.2.tar.gz) ## Getting the driver @@ -67,7 +67,7 @@ using DataStax Enterprise, install the [DataStax Enterprise Java driver][dse-dri com.datastax.cassandra cassandra-driver-core - 3.10.0 + 3.10.2 ``` @@ -77,7 +77,7 @@ Note that the object mapper is published as a separate artifact: com.datastax.cassandra cassandra-driver-mapping - 3.10.0 + 3.10.2 ``` @@ -87,7 +87,7 @@ The 'extras' module is also published as a separate artifact: com.datastax.cassandra cassandra-driver-extras - 3.10.0 + 3.10.2 ``` @@ -96,12 +96,12 @@ We also provide a [shaded JAR](manual/shaded_jar/) to avoid the explicit dependency to Netty. If you can't use a dependency management tool, a -[binary tarball](http://downloads.datastax.com/java-driver/cassandra-java-driver-3.10.0.tar.gz) +[binary tarball](http://downloads.datastax.com/java-driver/cassandra-java-driver-3.10.2.tar.gz) is available for download. ## Compatibility -The Java client driver 3.10.0 ([branch 3.x](https://github.com/datastax/java-driver/tree/3.x)) is compatible with Apache +The Java client driver 3.10.2 ([branch 3.x](https://github.com/datastax/java-driver/tree/3.x)) is compatible with Apache Cassandra 2.1, 2.2 and 3.0+ (see [this page](http://docs.datastax.com/en/developer/java-driver/latest/manual/native_protocol/) for the most up-to-date compatibility information). diff --git a/driver-examples/src/main/java/com/datastax/driver/examples/apollo/ApolloReadCassandraVersion.java b/driver-examples/src/main/java/com/datastax/driver/examples/astra/AstraReadCassandraVersion.java similarity index 79% rename from driver-examples/src/main/java/com/datastax/driver/examples/apollo/ApolloReadCassandraVersion.java rename to driver-examples/src/main/java/com/datastax/driver/examples/astra/AstraReadCassandraVersion.java index 18ee0ae907d..59591aa2cf8 100644 --- a/driver-examples/src/main/java/com/datastax/driver/examples/apollo/ApolloReadCassandraVersion.java +++ b/driver-examples/src/main/java/com/datastax/driver/examples/astra/AstraReadCassandraVersion.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.datastax.driver.examples.apollo; +package com.datastax.driver.examples.astra; import com.datastax.driver.core.Cluster; import com.datastax.driver.core.ResultSet; @@ -23,27 +23,28 @@ import java.io.File; /** - * Connects to a DataStax Apollo cluster and extracts basic information from it. + * Connects to a DataStax Astra cluster and extracts basic information from it. * *

Preconditions: * *

* *

Side effects: none. * + * @see Creating an + * Astra Database * @see - * Creating an Apollo Database - * @see - * Providing access to Apollo databases - * @see - * Obtaining Apollo secure connect bundle + * href="https://docs.astra.datastax.com/docs/obtaining-database-credentials#sharing-your-secure-connect-bundle"> + * Providing access to Astra databases + * @see + * Obtaining Astra secure connect bundle * @see Java driver online manual */ -public class ApolloReadCassandraVersion { +public class AstraReadCassandraVersion { public static void main(String[] args) { @@ -58,7 +59,7 @@ public static void main(String[] args) { Cluster.builder() // Change the path here to the secure connect bundle location (see javadocs above) .withCloudSecureConnectBundle(new File("/path/to/secure-connect-database_name.zip")) - // Change the user_name and password here for the Apollo instance + // Change the user_name and password here for the Astra instance .withCredentials("user_name", "password") // Uncomment the next line to use a specific keyspace // .withKeyspace("keyspace_name") diff --git a/manual/cloud/README.md b/manual/cloud/README.md index 5b9268643a2..46f9ff0ae56 100644 --- a/manual/cloud/README.md +++ b/manual/cloud/README.md @@ -1,22 +1,20 @@ -## Connecting to Apollo (Cloud) +## Connecting to Astra (Cloud) -Using the DataStax Java Driver to connect to a DataStax Apollo database is almost identical to using +Using the DataStax Java Driver to connect to a DataStax Astra database is almost identical to using the driver to connect to any normal Apache Cassandra® database. The only differences are in how the driver is configured in an application and that you will need to obtain a `secure connect bundle`. -The following is a Quick Start guide to writing a simple application that can connect to an Apollo +The following is a Quick Start guide to writing a simple application that can connect to an Astra database. ### Prerequisites 1. [Download][Download Maven] and [install][Install Maven] Maven. -1. Create an Apollo database on [GCP][Create an Apollo database - GCP] or - [AWS][Create an Apollo database - AWS]; alternatively, have a team member provide access to their - Apollo database (instructions for [GCP][Access an Apollo database - GCP] and - [AWS][Access an Apollo database - AWS]) to obtain database connection details. +1. Create an Astra database on [GCP/AWS/Azure][Create an Astra database - GCP/AWS/Azure]; alternatively, + have a team member provide access to their Astra database (instructions for + [GCP/AWS/Azure][Access an Astra database - GCP/AWS/Azure]) to obtain database connection details. 1. Download the secure connect bundle (instructions for - [GCP][Download the secure connect bundle - GCP] and - [AWS][Download the secure connect bundle - AWS]) to obtain connection credentials for your + [GCP/AWS/Azure][Download the secure connect bundle - GCP/AWS/Azure]) to obtain connection credentials for your database. 1. Ensure you are using Java 8 or higher. The cloud connect api does not support java 6 or 7. @@ -36,11 +34,11 @@ database. ``` b. Copy the following code for your DataStax Driver into the `ConnectDatabase.java` file. - The following example implements a `ConnectDatabase` class to connect to your Apollo database, + The following example implements a `ConnectDatabase` class to connect to your Astra database, runs a CQL query, and prints the output to the console. **Note:** With the `Cluster.builder()` object, make sure to set the path to the secure - connect bundle for your Apollo database (**"/path/to/secure-connect-database_name.zip"**) in + connect bundle for your Astra database (**"/path/to/secure-connect-database_name.zip"**) in the `withCloudSecureConnectBundle()` method as shown in the following example. * DataStax Java Driver for Apache Cassandra 3.x @@ -81,9 +79,9 @@ database. c. Save and close the ConnectDatabase.java file. -### Apollo Differences +### Astra Differences -In most circumstances, the client code for interacting with an Apollo cluster will be the same as +In most circumstances, the client code for interacting with an Astra cluster will be the same as interacting with any other Cassandra cluster. The exceptions being: * An SSL connection will be established automatically. Manual SSL configuration is not necessary. @@ -97,10 +95,7 @@ interacting with any other Cassandra cluster. The exceptions being: [Download Maven]: https://maven.apache.org/download.cgi [Install Maven]: https://maven.apache.org/install.html -[Create an Apollo database - GCP]: https://helpdocs.datastax.com/gcp/dscloud/apollo/dscloudGettingStarted.html#dscloudCreateCluster -[Create an Apollo database - AWS]: https://helpdocs.datastax.com/aws/dscloud/apollo/dscloudGettingStarted.html#dscloudCreateCluster -[Access an Apollo database - GCP]: https://helpdocs.datastax.com/gcp/dscloud/apollo/dscloudShareClusterDetails.html -[Access an Apollo database - AWS]: https://helpdocs.datastax.com/aws/dscloud/apollo/dscloudShareClusterDetails.html -[Download the secure connect bundle - GCP]: https://helpdocs.datastax.com/gcp/dscloud/apollo/dscloudObtainingCredentials.html -[Download the secure connect bundle - AWS]: https://helpdocs.datastax.com/aws/dscloud/apollo/dscloudObtainingCredentials.html +[Create an Astra database - GCP/AWS/Azure]: https://docs.astra.datastax.com/docs/creating-your-astra-database#dscloudCreateCluster +[Access an Astra database - GCP/AWS/Azure]: https://docs.astra.datastax.com/docs/obtaining-database-credentials#sharing-your-secure-connect-bundle +[Download the secure connect bundle - GCP/AWS/Azure]: https://docs.astra.datastax.com/docs/obtaining-database-credentials [pom.xml dependency]: ../../#getting-the-driver From 18ef45530f99bae91b818e09471d372ab2790dab Mon Sep 17 00:00:00 2001 From: Sam Tunnicliffe Date: Wed, 17 Feb 2021 11:04:39 +0000 Subject: [PATCH 007/112] JAVA-2705: Remove protocol v5 beta status, add v6-beta (#1529) --- changelog/README.md | 4 ++++ .../java/com/datastax/driver/core/BatchStatement.java | 1 + .../java/com/datastax/driver/core/BoundStatement.java | 1 + .../main/java/com/datastax/driver/core/CodecUtils.java | 5 +++++ .../main/java/com/datastax/driver/core/Connection.java | 6 +++++- .../src/main/java/com/datastax/driver/core/Frame.java | 3 +++ .../main/java/com/datastax/driver/core/ProtocolEvent.java | 1 + .../java/com/datastax/driver/core/ProtocolFeature.java | 2 +- .../java/com/datastax/driver/core/ProtocolVersion.java | 7 ++++--- .../java/com/datastax/driver/core/RegularStatement.java | 1 + .../src/main/java/com/datastax/driver/core/Requests.java | 4 ++++ .../src/main/java/com/datastax/driver/core/Responses.java | 2 ++ .../java/com/datastax/driver/core/StreamIdGenerator.java | 1 + .../com/datastax/driver/core/ProtocolBetaVersionTest.java | 8 ++++---- .../driver/core/ProtocolVersionRenegotiationTest.java | 8 ++++---- 15 files changed, 41 insertions(+), 13 deletions(-) diff --git a/changelog/README.md b/changelog/README.md index 1b64f4aa38b..246eb753936 100644 --- a/changelog/README.md +++ b/changelog/README.md @@ -5,6 +5,10 @@ 3.x versions get published. --> +### 3.11.0 (in progress) + +- [improvement] JAVA-2705: Remove protocol v5 beta status, add v6-beta. + ## 3.10.2 - [bug] JAVA-2860: Avoid NPE if channel initialization crashes. diff --git a/driver-core/src/main/java/com/datastax/driver/core/BatchStatement.java b/driver-core/src/main/java/com/datastax/driver/core/BatchStatement.java index e5fc175fe62..e2b7a805483 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/BatchStatement.java +++ b/driver-core/src/main/java/com/datastax/driver/core/BatchStatement.java @@ -220,6 +220,7 @@ public int requestSizeInBytes(ProtocolVersion protocolVersion, CodecRegistry cod case V3: case V4: case V5: + case V6: size += CBUtil.sizeOfConsistencyLevel(getConsistencyLevel()); size += QueryFlag.serializedSize(protocolVersion); // Serial CL and default timestamp also depend on session-level defaults (QueryOptions). diff --git a/driver-core/src/main/java/com/datastax/driver/core/BoundStatement.java b/driver-core/src/main/java/com/datastax/driver/core/BoundStatement.java index 9b1c8d0a3d2..01c39dfc232 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/BoundStatement.java +++ b/driver-core/src/main/java/com/datastax/driver/core/BoundStatement.java @@ -321,6 +321,7 @@ public int requestSizeInBytes(ProtocolVersion protocolVersion, CodecRegistry cod case V3: case V4: case V5: + case V6: size += CBUtil.sizeOfConsistencyLevel(getConsistencyLevel()); size += QueryFlag.serializedSize(protocolVersion); if (wrapper.values.length > 0) { diff --git a/driver-core/src/main/java/com/datastax/driver/core/CodecUtils.java b/driver-core/src/main/java/com/datastax/driver/core/CodecUtils.java index 94295a0bb14..afaa7176bca 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/CodecUtils.java +++ b/driver-core/src/main/java/com/datastax/driver/core/CodecUtils.java @@ -64,6 +64,7 @@ public static int readSize(ByteBuffer input, ProtocolVersion version) { case V3: case V4: case V5: + case V6: return input.getInt(); default: throw version.unsupported(); @@ -92,6 +93,7 @@ public static void writeSize(ByteBuffer output, int size, ProtocolVersion versio case V3: case V4: case V5: + case V6: output.putInt(size); break; default: @@ -131,6 +133,7 @@ public static void writeValue(ByteBuffer output, ByteBuffer value, ProtocolVersi case V3: case V4: case V5: + case V6: if (value == null) { output.putInt(-1); } else { @@ -217,6 +220,7 @@ private static int sizeOfCollectionSize(ProtocolVersion version) { case V3: case V4: case V5: + case V6: return 4; default: throw version.unsupported(); @@ -237,6 +241,7 @@ private static int sizeOfValue(ByteBuffer value, ProtocolVersion version) { case V3: case V4: case V5: + case V6: return value == null ? 4 : 4 + value.remaining(); default: throw version.unsupported(); diff --git a/driver-core/src/main/java/com/datastax/driver/core/Connection.java b/driver-core/src/main/java/com/datastax/driver/core/Connection.java index 92861dc9fe6..b373fbec578 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/Connection.java +++ b/driver-core/src/main/java/com/datastax/driver/core/Connection.java @@ -394,6 +394,7 @@ public ListenableFuture apply(Message.Response response) throws Exception case V3: case V4: case V5: + case V6: return authenticateV2(authenticator, protocolVersion, initExecutor); default: throw defunct(protocolVersion.unsupported()); @@ -1659,6 +1660,8 @@ private static class Initializer extends ChannelInitializer { new Message.ProtocolEncoder(ProtocolVersion.V4); private static final Message.ProtocolEncoder messageEncoderV5 = new Message.ProtocolEncoder(ProtocolVersion.V5); + private static final Message.ProtocolEncoder messageEncoderV6 = + new Message.ProtocolEncoder(ProtocolVersion.V6); private static final Frame.Encoder frameEncoder = new Frame.Encoder(); private final ProtocolVersion protocolVersion; @@ -1756,6 +1759,8 @@ private Message.ProtocolEncoder messageEncoderFor(ProtocolVersion version) { return messageEncoderV4; case V5: return messageEncoderV5; + case V6: + return messageEncoderV6; default: throw new DriverInternalError("Unsupported protocol version " + protocolVersion); } @@ -1769,7 +1774,6 @@ private Message.ProtocolEncoder messageEncoderFor(ProtocolVersion version) { */ void switchToV5Framing() { assert factory.protocolVersion.compareTo(ProtocolVersion.V5) >= 0; - // We want to do this on the event loop, to make sure it doesn't race with incoming requests assert channel.eventLoop().inEventLoop(); diff --git a/driver-core/src/main/java/com/datastax/driver/core/Frame.java b/driver-core/src/main/java/com/datastax/driver/core/Frame.java index f0480e8efa1..392e09c7bf0 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/Frame.java +++ b/driver-core/src/main/java/com/datastax/driver/core/Frame.java @@ -106,6 +106,7 @@ private static int readStreamId(ByteBuf fullFrame, ProtocolVersion version) { case V3: case V4: case V5: + case V6: return fullFrame.readShort(); default: throw version.unsupported(); @@ -156,6 +157,7 @@ static int lengthFor(ProtocolVersion version) { case V3: case V4: case V5: + case V6: return 9; default: throw version.unsupported(); @@ -174,6 +176,7 @@ public void encodeInto(ByteBuf destination) { case V3: case V4: case V5: + case V6: destination.writeShort(streamId); break; default: diff --git a/driver-core/src/main/java/com/datastax/driver/core/ProtocolEvent.java b/driver-core/src/main/java/com/datastax/driver/core/ProtocolEvent.java index e72a11e7cdd..eb841598e3d 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/ProtocolEvent.java +++ b/driver-core/src/main/java/com/datastax/driver/core/ProtocolEvent.java @@ -155,6 +155,7 @@ static SchemaChange deserializeEvent(ByteBuf bb, ProtocolVersion version) { case V3: case V4: case V5: + case V6: change = CBUtil.readEnumValue(Change.class, bb); targetType = CBUtil.readEnumValue(SchemaElement.class, bb); targetKeyspace = CBUtil.readString(bb); diff --git a/driver-core/src/main/java/com/datastax/driver/core/ProtocolFeature.java b/driver-core/src/main/java/com/datastax/driver/core/ProtocolFeature.java index 57f9d6f79b9..fdbdbbe6ef6 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/ProtocolFeature.java +++ b/driver-core/src/main/java/com/datastax/driver/core/ProtocolFeature.java @@ -42,7 +42,7 @@ enum ProtocolFeature { boolean isSupportedBy(ProtocolVersion version) { switch (this) { case PREPARED_METADATA_CHANGES: - return version == ProtocolVersion.V5; + return version.compareTo(ProtocolVersion.V5) >= 0; case CUSTOM_PAYLOADS: return version.compareTo(ProtocolVersion.V4) >= 0; case CLIENT_TIMESTAMPS: diff --git a/driver-core/src/main/java/com/datastax/driver/core/ProtocolVersion.java b/driver-core/src/main/java/com/datastax/driver/core/ProtocolVersion.java index e165c6b17e7..fb0ad0bcff9 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/ProtocolVersion.java +++ b/driver-core/src/main/java/com/datastax/driver/core/ProtocolVersion.java @@ -26,13 +26,14 @@ public enum ProtocolVersion { V2("2.0.0", 2, V1), V3("2.1.0", 3, V2), V4("2.2.0", 4, V3), - V5("3.10.0", 5, V4); + V5("4.0.0", 5, V4), + V6("4.0.0", 6, V5); /** The most recent protocol version supported by the driver. */ - public static final ProtocolVersion NEWEST_SUPPORTED = V4; + public static final ProtocolVersion NEWEST_SUPPORTED = V5; /** The most recent beta protocol version supported by the driver. */ - public static final ProtocolVersion NEWEST_BETA = V5; + public static final ProtocolVersion NEWEST_BETA = V6; private final VersionNumber minCassandraVersion; diff --git a/driver-core/src/main/java/com/datastax/driver/core/RegularStatement.java b/driver-core/src/main/java/com/datastax/driver/core/RegularStatement.java index 27f08226e60..3a9e8fe90d7 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/RegularStatement.java +++ b/driver-core/src/main/java/com/datastax/driver/core/RegularStatement.java @@ -194,6 +194,7 @@ public int requestSizeInBytes(ProtocolVersion protocolVersion, CodecRegistry cod case V3: case V4: case V5: + case V6: size += CBUtil.sizeOfConsistencyLevel(getConsistencyLevel()); size += QueryFlag.serializedSize(protocolVersion); if (hasValues()) { diff --git a/driver-core/src/main/java/com/datastax/driver/core/Requests.java b/driver-core/src/main/java/com/datastax/driver/core/Requests.java index 3cd15773eb8..c9d8110c758 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/Requests.java +++ b/driver-core/src/main/java/com/datastax/driver/core/Requests.java @@ -388,6 +388,7 @@ void encode(ByteBuf dest, ProtocolVersion version) { case V3: case V4: case V5: + case V6: CBUtil.writeConsistencyLevel(consistency, dest); QueryFlag.serialize(flags, dest, version); if (flags.contains(QueryFlag.VALUES)) { @@ -425,6 +426,7 @@ int encodedSize(ProtocolVersion version) { case V3: case V4: case V5: + case V6: int size = 0; size += CBUtil.sizeOfConsistencyLevel(consistency); size += QueryFlag.serializedSize(version); @@ -596,6 +598,7 @@ void encode(ByteBuf dest, ProtocolVersion version) { case V3: case V4: case V5: + case V6: CBUtil.writeConsistencyLevel(consistency, dest); QueryFlag.serialize(flags, dest, version); if (flags.contains(QueryFlag.SERIAL_CONSISTENCY)) @@ -616,6 +619,7 @@ int encodedSize(ProtocolVersion version) { case V3: case V4: case V5: + case V6: int size = 0; size += CBUtil.sizeOfConsistencyLevel(consistency); size += QueryFlag.serializedSize(version); diff --git a/driver-core/src/main/java/com/datastax/driver/core/Responses.java b/driver-core/src/main/java/com/datastax/driver/core/Responses.java index b0245f2bfff..d9402f5b189 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/Responses.java +++ b/driver-core/src/main/java/com/datastax/driver/core/Responses.java @@ -605,6 +605,7 @@ private Metadata decodeResultMetadata( case V3: case V4: case V5: + case V6: return Rows.Metadata.decode(body, version, codecRegistry); default: throw version.unsupported(); @@ -679,6 +680,7 @@ public Result decode( case V3: case V4: case V5: + case V6: change = CBUtil.readEnumValue(Change.class, body); targetType = CBUtil.readEnumValue(SchemaElement.class, body); targetKeyspace = CBUtil.readString(body); diff --git a/driver-core/src/main/java/com/datastax/driver/core/StreamIdGenerator.java b/driver-core/src/main/java/com/datastax/driver/core/StreamIdGenerator.java index b7f613d569f..182c4ac3940 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/StreamIdGenerator.java +++ b/driver-core/src/main/java/com/datastax/driver/core/StreamIdGenerator.java @@ -47,6 +47,7 @@ private static int streamIdSizeFor(ProtocolVersion version) { case V3: case V4: case V5: + case V6: return 2; default: throw version.unsupported(); diff --git a/driver-core/src/test/java/com/datastax/driver/core/ProtocolBetaVersionTest.java b/driver-core/src/test/java/com/datastax/driver/core/ProtocolBetaVersionTest.java index 96c84706608..55b743775a8 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/ProtocolBetaVersionTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/ProtocolBetaVersionTest.java @@ -16,7 +16,7 @@ package com.datastax.driver.core; import static com.datastax.driver.core.ProtocolVersion.V4; -import static com.datastax.driver.core.ProtocolVersion.V5; +import static com.datastax.driver.core.ProtocolVersion.V6; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.fail; @@ -85,7 +85,7 @@ public void should_not_initialize_when_beta_flag_is_set_and_version_explicitly_r /** * Verifies that the driver CANNOT connect to 3.10 with the following combination of options: - * Version V5 Flag UNSET + * Version V6 Flag UNSET * * @jira_ticket JAVA-1248 */ @@ -96,7 +96,7 @@ public void should_not_connect_when_beta_version_explicitly_required_and_flag_no Cluster.builder() .addContactPoints(getContactPoints()) .withPort(ccm().getBinaryPort()) - .withProtocolVersion(V5) + .withProtocolVersion(V6) .build(); fail("Expected IllegalArgumentException"); } catch (IllegalArgumentException e) { @@ -127,7 +127,7 @@ public void should_connect_with_beta_when_no_version_explicitly_required_and_fla .allowBetaProtocolVersion() .build(); cluster.connect(); - assertThat(cluster.getConfiguration().getProtocolOptions().getProtocolVersion()).isEqualTo(V5); + assertThat(cluster.getConfiguration().getProtocolOptions().getProtocolVersion()).isEqualTo(V6); } /** diff --git a/driver-core/src/test/java/com/datastax/driver/core/ProtocolVersionRenegotiationTest.java b/driver-core/src/test/java/com/datastax/driver/core/ProtocolVersionRenegotiationTest.java index 927fbb89cac..c740f0d3f45 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/ProtocolVersionRenegotiationTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/ProtocolVersionRenegotiationTest.java @@ -17,7 +17,7 @@ import static com.datastax.driver.core.ProtocolVersion.V1; import static com.datastax.driver.core.ProtocolVersion.V4; -import static com.datastax.driver.core.ProtocolVersion.V5; +import static com.datastax.driver.core.ProtocolVersion.V6; import static org.assertj.core.api.Assertions.assertThat; import com.datastax.driver.core.exceptions.UnsupportedProtocolVersionException; @@ -67,11 +67,11 @@ public void should_fail_when_version_provided_and_too_high() throws Exception { /** @jira_ticket JAVA-1367 */ @Test(groups = "short") public void should_fail_when_beta_allowed_and_too_high() throws Exception { - if (ccm().getCassandraVersion().compareTo(VersionNumber.parse("3.10")) >= 0) { - throw new SkipException("Server supports protocol protocol V5 beta"); + if (ccm().getCassandraVersion().compareTo(VersionNumber.parse("4.0.0")) >= 0) { + throw new SkipException("Server supports protocol protocol V6 beta"); } UnsupportedProtocolVersionException e = connectWithUnsupportedBetaVersion(); - assertThat(e.getUnsupportedVersion()).isEqualTo(V5); + assertThat(e.getUnsupportedVersion()).isEqualTo(V6); } /** @jira_ticket JAVA-1367 */ From 1af7382fee4c4f0ea38abaedbb4ba0301a356265 Mon Sep 17 00:00:00 2001 From: Alexandre Dutra Date: Mon, 22 Feb 2021 17:52:58 +0100 Subject: [PATCH 008/112] Remove incorrect assertion It's legal for a client to not supply a specific version, e.g. not call Cluster.Builder::withProtocolVersion, in which case factory.protocolVersion is null. While v5 was marked beta this wasn't a problem as Cluster.Builder::allowProtocolVersion was required, but now this causes an NPE in the driver. --- .../src/main/java/com/datastax/driver/core/Connection.java | 1 - 1 file changed, 1 deletion(-) diff --git a/driver-core/src/main/java/com/datastax/driver/core/Connection.java b/driver-core/src/main/java/com/datastax/driver/core/Connection.java index b373fbec578..d953130cc6b 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/Connection.java +++ b/driver-core/src/main/java/com/datastax/driver/core/Connection.java @@ -1773,7 +1773,6 @@ private Message.ProtocolEncoder messageEncoderFor(ProtocolVersion version) { * v5. */ void switchToV5Framing() { - assert factory.protocolVersion.compareTo(ProtocolVersion.V5) >= 0; // We want to do this on the event loop, to make sure it doesn't race with incoming requests assert channel.eventLoop().inEventLoop(); From e035569df8b293c8912a513c6d43045fb7caddac Mon Sep 17 00:00:00 2001 From: Alexandre Dutra Date: Wed, 3 Mar 2021 12:31:19 +0100 Subject: [PATCH 009/112] Add support for Cassandra 4.0 to CCMBridge --- .../src/test/java/com/datastax/driver/core/CCMBridge.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/driver-core/src/test/java/com/datastax/driver/core/CCMBridge.java b/driver-core/src/test/java/com/datastax/driver/core/CCMBridge.java index 1c7790e6189..81a203fe63f 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/CCMBridge.java +++ b/driver-core/src/test/java/com/datastax/driver/core/CCMBridge.java @@ -799,8 +799,10 @@ public ProtocolVersion getProtocolVersion() { return ProtocolVersion.V2; } else if (version.compareTo(VersionNumber.parse("2.2")) < 0) { return ProtocolVersion.V3; - } else { + } else if (version.compareTo(VersionNumber.parse("4.0")) < 0) { return ProtocolVersion.V4; + } else { + return ProtocolVersion.V5; } } From 0b682c44461dc20a89033ec20ec625dba4b17f73 Mon Sep 17 00:00:00 2001 From: Alexandre Dutra Date: Wed, 3 Mar 2021 21:47:28 +0100 Subject: [PATCH 010/112] JAVA-2923: Detect and use Guava's new HostAndPort.getHost method (#1533) --- changelog/README.md | 3 ++- .../driver/core/CloudConfigFactory.java | 4 ++-- .../driver/core/GuavaCompatibility.java | 19 +++++++++++++++++++ 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/changelog/README.md b/changelog/README.md index 246eb753936..a6f9644a422 100644 --- a/changelog/README.md +++ b/changelog/README.md @@ -5,9 +5,10 @@ 3.x versions get published. --> -### 3.11.0 (in progress) +## 3.11.0 (in progress) - [improvement] JAVA-2705: Remove protocol v5 beta status, add v6-beta. +- [bug] JAVA-2923: Detect and use Guava's new HostAndPort.getHost method. ## 3.10.2 diff --git a/driver-core/src/main/java/com/datastax/driver/core/CloudConfigFactory.java b/driver-core/src/main/java/com/datastax/driver/core/CloudConfigFactory.java index 98faf16c956..f11b1fcecf4 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/CloudConfigFactory.java +++ b/driver-core/src/main/java/com/datastax/driver/core/CloudConfigFactory.java @@ -228,8 +228,8 @@ protected InetSocketAddress getSniProxyAddress(JsonNode proxyMetadata) { throw new IllegalStateException( "Invalid proxy metadata: missing port from field sni_proxy_address"); } - return InetSocketAddress.createUnresolved( - sniProxyHostAndPort.getHostText(), sniProxyHostAndPort.getPort()); + String host = GuavaCompatibility.INSTANCE.getHost(sniProxyHostAndPort); + return InetSocketAddress.createUnresolved(host, sniProxyHostAndPort.getPort()); } else { throw new IllegalStateException("Invalid proxy metadata: missing field sni_proxy_address"); } diff --git a/driver-core/src/main/java/com/datastax/driver/core/GuavaCompatibility.java b/driver-core/src/main/java/com/datastax/driver/core/GuavaCompatibility.java index a0e7fe8ec55..069f550b049 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/GuavaCompatibility.java +++ b/driver-core/src/main/java/com/datastax/driver/core/GuavaCompatibility.java @@ -19,6 +19,7 @@ import com.google.common.base.Function; import com.google.common.collect.BiMap; import com.google.common.collect.Maps; +import com.google.common.net.HostAndPort; import com.google.common.reflect.TypeToken; import com.google.common.util.concurrent.AsyncFunction; import com.google.common.util.concurrent.FutureCallback; @@ -180,6 +181,24 @@ public abstract ListenableFuture transformAsync( */ public abstract Executor sameThreadExecutor(); + /** + * Returns the portion of the given {@link HostAndPort} instance that should represent the + * hostname or IPv4/IPv6 literal. + * + *

The method {@code HostAndPort.getHostText} has been replaced with {@code + * HostAndPort.getHost} starting with Guava 20.0; it has been completely removed in Guava 22.0. + */ + @SuppressWarnings("JavaReflectionMemberAccess") + public String getHost(HostAndPort hostAndPort) { + try { + // Guava >= 20.0 + return (String) HostAndPort.class.getMethod("getHost").invoke(hostAndPort); + } catch (Exception e) { + // Guava < 22.0 + return hostAndPort.getHostText(); + } + } + private static GuavaCompatibility selectImplementation() { if (isGuava_19_0_OrHigher()) { logger.info("Detected Guava >= 19 in the classpath, using modern compatibility layer"); From 9ffe103124c1ba5c5cc91def514b9aeb98d4ebab Mon Sep 17 00:00:00 2001 From: Alexandre Dutra Date: Fri, 5 Mar 2021 15:55:39 +0100 Subject: [PATCH 011/112] Fix failing test against C* 4.0 --- .../driver/core/querybuilder/QueryBuilderExecutionTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/driver-core/src/test/java/com/datastax/driver/core/querybuilder/QueryBuilderExecutionTest.java b/driver-core/src/test/java/com/datastax/driver/core/querybuilder/QueryBuilderExecutionTest.java index 6267b357377..338db321996 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/querybuilder/QueryBuilderExecutionTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/querybuilder/QueryBuilderExecutionTest.java @@ -875,7 +875,7 @@ public void should_support_group_by() throws Exception { .groupBy("a", "clustering1")); fail("Expecting IQE"); } catch (InvalidQueryException e) { - assertThat(e.getMessage()).isEqualTo("Undefined column name clustering1"); + assertThat(e.getMessage()).startsWith("Undefined column name clustering1"); } try { @@ -890,7 +890,7 @@ public void should_support_group_by() throws Exception { .groupBy("a", "b", "z")); fail("Expecting IQE"); } catch (InvalidQueryException e) { - assertThat(e.getMessage()).isEqualTo("Undefined column name z"); + assertThat(e.getMessage()).startsWith("Undefined column name z"); } // Test with composite partition key From e20f79cf5c810317229f02afe45834fe3de0b72b Mon Sep 17 00:00:00 2001 From: Alexandre Dutra Date: Sat, 6 Mar 2021 19:49:45 +0100 Subject: [PATCH 012/112] JAVA-2922: Switch to modern framing format inside a channel handler (#1532) --- changelog/README.md | 1 + .../com/datastax/driver/core/Connection.java | 38 +-------- .../driver/core/FramingFormatHandler.java | 78 +++++++++++++++++++ 3 files changed, 81 insertions(+), 36 deletions(-) create mode 100644 driver-core/src/main/java/com/datastax/driver/core/FramingFormatHandler.java diff --git a/changelog/README.md b/changelog/README.md index a6f9644a422..e293d8628d9 100644 --- a/changelog/README.md +++ b/changelog/README.md @@ -9,6 +9,7 @@ - [improvement] JAVA-2705: Remove protocol v5 beta status, add v6-beta. - [bug] JAVA-2923: Detect and use Guava's new HostAndPort.getHost method. +- [bug] JAVA-2922: Switch to modern framing format inside a channel handler. ## 3.10.2 diff --git a/driver-core/src/main/java/com/datastax/driver/core/Connection.java b/driver-core/src/main/java/com/datastax/driver/core/Connection.java index d953130cc6b..7dea01a6080 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/Connection.java +++ b/driver-core/src/main/java/com/datastax/driver/core/Connection.java @@ -351,11 +351,6 @@ private AsyncFunction onStartupResponse( return new AsyncFunction() { @Override public ListenableFuture apply(Message.Response response) throws Exception { - - if (protocolVersion.compareTo(ProtocolVersion.V5) >= 0 && response.type != ERROR) { - switchToV5Framing(); - } - switch (response.type) { case READY: return checkClusterName(protocolVersion, initExecutor); @@ -1728,6 +1723,8 @@ protected void initChannel(SocketChannel channel) throws Exception { pipeline.addLast("frameDecoder", new Frame.Decoder()); pipeline.addLast("frameEncoder", frameEncoder); + pipeline.addLast("framingFormatHandler", new FramingFormatHandler(connection.factory)); + if (compressor != null // Frame-level compression is only done in legacy protocol versions. In V5 and above, it // happens at a higher level ("segment" that groups multiple frames), so never install @@ -1767,37 +1764,6 @@ private Message.ProtocolEncoder messageEncoderFor(ProtocolVersion version) { } } - /** - * Rearranges the pipeline to deal with the new framing structure in protocol v5 and above. This - * has to be done manually, because it only happens once we've confirmed that the server supports - * v5. - */ - void switchToV5Framing() { - // We want to do this on the event loop, to make sure it doesn't race with incoming requests - assert channel.eventLoop().inEventLoop(); - - ChannelPipeline pipeline = channel.pipeline(); - SegmentCodec segmentCodec = - new SegmentCodec( - channel.alloc(), factory.configuration.getProtocolOptions().getCompression()); - - // Outbound: "message -> segment -> bytes" instead of "message -> frame -> bytes" - Message.ProtocolEncoder requestEncoder = - (Message.ProtocolEncoder) pipeline.get("messageEncoder"); - pipeline.replace( - "messageEncoder", - "messageToSegmentEncoder", - new MessageToSegmentEncoder(channel.alloc(), requestEncoder)); - pipeline.replace( - "frameEncoder", "segmentToBytesEncoder", new SegmentToBytesEncoder(segmentCodec)); - - // Inbound: "frame <- segment <- bytes" instead of "frame <- bytes" - pipeline.replace( - "frameDecoder", "bytesToSegmentDecoder", new BytesToSegmentDecoder(segmentCodec)); - pipeline.addAfter( - "bytesToSegmentDecoder", "segmentToFrameDecoder", new SegmentToFrameDecoder()); - } - /** A component that "owns" a connection, and should be notified when it dies. */ interface Owner { void onConnectionDefunct(Connection connection); diff --git a/driver-core/src/main/java/com/datastax/driver/core/FramingFormatHandler.java b/driver-core/src/main/java/com/datastax/driver/core/FramingFormatHandler.java new file mode 100644 index 00000000000..91459a1ab34 --- /dev/null +++ b/driver-core/src/main/java/com/datastax/driver/core/FramingFormatHandler.java @@ -0,0 +1,78 @@ +/* + * Copyright DataStax, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.datastax.driver.core; + +import com.datastax.driver.core.Message.Response.Type; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelPipeline; +import io.netty.handler.codec.MessageToMessageDecoder; +import java.util.List; + +/** + * A handler to deal with different protocol framing formats. + * + *

This handler detects when a handshake is successful; then, if necessary, adapts the pipeline + * to the modern framing format introduced in protocol v5. + */ +public class FramingFormatHandler extends MessageToMessageDecoder { + + private final Connection.Factory factory; + + FramingFormatHandler(Connection.Factory factory) { + this.factory = factory; + } + + @Override + protected void decode(ChannelHandlerContext ctx, Frame frame, List out) throws Exception { + boolean handshakeSuccessful = + frame.header.opcode == Type.READY.opcode || frame.header.opcode == Type.AUTHENTICATE.opcode; + if (handshakeSuccessful) { + // By default, the pipeline is configured for legacy framing since this is the format used + // by all protocol versions until handshake; after handshake however, we need to switch to + // modern framing for protocol v5 and higher. + if (frame.header.version.compareTo(ProtocolVersion.V5) >= 0) { + switchToModernFraming(ctx); + } + // once the handshake is successful, the framing format cannot change anymore; + // we can safely remove ourselves from the pipeline. + ctx.pipeline().remove("framingFormatHandler"); + } + out.add(frame); + } + + private void switchToModernFraming(ChannelHandlerContext ctx) { + ChannelPipeline pipeline = ctx.pipeline(); + SegmentCodec segmentCodec = + new SegmentCodec( + ctx.channel().alloc(), factory.configuration.getProtocolOptions().getCompression()); + + // Outbound: "message -> segment -> bytes" instead of "message -> frame -> bytes" + Message.ProtocolEncoder requestEncoder = + (Message.ProtocolEncoder) pipeline.get("messageEncoder"); + pipeline.replace( + "messageEncoder", + "messageToSegmentEncoder", + new MessageToSegmentEncoder(ctx.channel().alloc(), requestEncoder)); + pipeline.replace( + "frameEncoder", "segmentToBytesEncoder", new SegmentToBytesEncoder(segmentCodec)); + + // Inbound: "frame <- segment <- bytes" instead of "frame <- bytes" + pipeline.replace( + "frameDecoder", "bytesToSegmentDecoder", new BytesToSegmentDecoder(segmentCodec)); + pipeline.addAfter( + "bytesToSegmentDecoder", "segmentToFrameDecoder", new SegmentToFrameDecoder()); + } +} From 3980cd017a58bcc93ced982a82aaa7c2122c3297 Mon Sep 17 00:00:00 2001 From: Alexandre Dutra Date: Sat, 6 Mar 2021 19:51:25 +0100 Subject: [PATCH 013/112] JAVA-2924: Consider protocol version unsupported when server requires USE_BETA flag for it (#1534) --- changelog/README.md | 1 + .../java/com/datastax/driver/core/Connection.java | 4 +++- .../core/ProtocolVersionRenegotiationTest.java | 15 ++++++++------- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/changelog/README.md b/changelog/README.md index e293d8628d9..7ad8de76e67 100644 --- a/changelog/README.md +++ b/changelog/README.md @@ -10,6 +10,7 @@ - [improvement] JAVA-2705: Remove protocol v5 beta status, add v6-beta. - [bug] JAVA-2923: Detect and use Guava's new HostAndPort.getHost method. - [bug] JAVA-2922: Switch to modern framing format inside a channel handler. +- [bug] JAVA-2924: Consider protocol version unsupported when server requires USE_BETA flag for it. ## 3.10.2 diff --git a/driver-core/src/main/java/com/datastax/driver/core/Connection.java b/driver-core/src/main/java/com/datastax/driver/core/Connection.java index 7dea01a6080..26ee6c91b0a 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/Connection.java +++ b/driver-core/src/main/java/com/datastax/driver/core/Connection.java @@ -572,7 +572,9 @@ private boolean isUnsupportedProtocolVersion(Responses.Error error) { // Testing for a specific string is a tad fragile but well, we don't have much choice // C* 2.1 reports a server error instead of protocol error, see CASSANDRA-9451 return (error.code == ExceptionCode.PROTOCOL_ERROR || error.code == ExceptionCode.SERVER_ERROR) - && error.message.contains("Invalid or unsupported protocol version"); + && (error.message.contains("Invalid or unsupported protocol version") + // JAVA-2924: server is behind driver and considers the proposed version as beta + || error.message.contains("Beta version of the protocol used")); } private UnsupportedProtocolVersionException unsupportedProtocolVersionException( diff --git a/driver-core/src/test/java/com/datastax/driver/core/ProtocolVersionRenegotiationTest.java b/driver-core/src/test/java/com/datastax/driver/core/ProtocolVersionRenegotiationTest.java index c740f0d3f45..d5e0862028a 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/ProtocolVersionRenegotiationTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/ProtocolVersionRenegotiationTest.java @@ -16,7 +16,7 @@ package com.datastax.driver.core; import static com.datastax.driver.core.ProtocolVersion.V1; -import static com.datastax.driver.core.ProtocolVersion.V4; +import static com.datastax.driver.core.ProtocolVersion.V5; import static com.datastax.driver.core.ProtocolVersion.V6; import static org.assertj.core.api.Assertions.assertThat; @@ -55,13 +55,14 @@ public void should_fail_when_version_provided_and_too_low_3_8_plus() throws Exce /** @jira_ticket JAVA-1367 */ @Test(groups = "short") public void should_fail_when_version_provided_and_too_high() throws Exception { - if (ccm().getCassandraVersion().compareTo(VersionNumber.parse("2.2")) >= 0) { - throw new SkipException("Server supports protocol V4"); + if (ccm().getCassandraVersion().compareTo(VersionNumber.parse("3.10")) >= 0) { + throw new SkipException("Server supports protocol V5"); } - UnsupportedProtocolVersionException e = connectWithUnsupportedVersion(V4); - assertThat(e.getUnsupportedVersion()).isEqualTo(V4); - // pre-CASSANDRA-11464: server replies with its own version - assertThat(e.getServerVersion()).isEqualTo(protocolVersion); + UnsupportedProtocolVersionException e = connectWithUnsupportedVersion(V5); + assertThat(e.getUnsupportedVersion()).isEqualTo(V5); + // see CASSANDRA-11464: for C* < 3.0.9 and 3.8, server replies with its own version; + // otherwise it replies with the client's version. + assertThat(e.getServerVersion()).isIn(V5, protocolVersion); } /** @jira_ticket JAVA-1367 */ From d340a9fe5f0e7ad7735297540e6d81736c2cb72f Mon Sep 17 00:00:00 2001 From: Alexandre Dutra Date: Wed, 3 Mar 2021 21:45:17 +0100 Subject: [PATCH 014/112] Minor improvements to CCM tests --- .../datastax/driver/core/AsyncQueryTest.java | 9 +--- .../driver/core/AuthenticationTest.java | 34 +++------------ .../com/datastax/driver/core/CCMAccess.java | 30 +++++++++---- .../com/datastax/driver/core/CCMBridge.java | 22 ++++++++++ .../com/datastax/driver/core/CCMCache.java | 7 +++ .../datastax/driver/core/CCMTestsSupport.java | 40 ++++++++++++----- .../driver/core/ClusterStressTest.java | 4 +- .../driver/core/ControlConnectionTest.java | 27 ++---------- .../core/EventDebouncerIntegrationTest.java | 7 +-- .../core/GettableDataIntegrationTest.java | 2 +- .../LoadBalancingPolicyBootstrapTest.java | 16 +------ .../datastax/driver/core/MetadataTest.java | 9 +--- .../com/datastax/driver/core/MetricsTest.java | 18 ++------ .../driver/core/MissingRpcAddressTest.java | 11 +---- .../driver/core/NettyOptionsTest.java | 4 +- .../core/NodeListRefreshDebouncerTest.java | 8 +--- .../driver/core/NodeRefreshDebouncerTest.java | 8 +--- .../PreparedStatementInvalidationTest.java | 14 ------ .../driver/core/PreparedStatementTest.java | 20 ++++----- .../driver/core/ProtocolBetaVersionTest.java | 33 ++++++-------- .../ProtocolVersionRenegotiationTest.java | 11 ++--- .../driver/core/QueryTimestampTest.java | 2 +- .../driver/core/RecommissionedNodeTest.java | 20 ++++----- .../driver/core/ReconnectionTest.java | 23 +++------- .../driver/core/RefreshConnectedHostTest.java | 5 +-- .../driver/core/SSLEncryptionTest.java | 13 +----- .../com/datastax/driver/core/SSLTestBase.java | 16 +------ .../driver/core/SchemaChangesCCTest.java | 16 +------ .../driver/core/SchemaChangesTest.java | 26 +++-------- .../core/SchemaRefreshDebouncerTest.java | 8 +--- .../datastax/driver/core/SessionLeakTest.java | 13 +----- .../driver/core/SessionStressTest.java | 4 +- .../driver/core/StatementWrapperTest.java | 2 +- .../com/datastax/driver/core/TestUtils.java | 43 +++++++++++++++++-- .../driver/core/TimeoutStressTest.java | 2 +- ...est.java => TransientReplicationTest.java} | 6 +-- ...decOverlappingJavaTypeIntegrationTest.java | 2 +- .../core/TypeCodecTupleIntegrationTest.java | 28 +++++------- .../core/TypeCodecUDTIntegrationTest.java | 13 ++---- .../driver/core/UnresolvedUserTypeTest.java | 13 ++---- .../datastax/driver/core/cloud/CloudTest.java | 27 ++++++++++-- .../CloseableLoadBalancingPolicyTest.java | 4 +- .../core/policies/TokenAwarePolicyTest.java | 4 +- .../extras/codecs/arrays/ArrayCodecsTest.java | 2 +- .../driver/mapping/MapperUDTTest.java | 17 +++----- .../driver/mapping/UDTFieldMapperTest.java | 28 ++---------- 46 files changed, 259 insertions(+), 412 deletions(-) rename driver-core/src/test/java/com/datastax/driver/core/{TransietReplicationTest.java => TransientReplicationTest.java} (95%) diff --git a/driver-core/src/test/java/com/datastax/driver/core/AsyncQueryTest.java b/driver-core/src/test/java/com/datastax/driver/core/AsyncQueryTest.java index fe52b343bfd..2a884937cce 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/AsyncQueryTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/AsyncQueryTest.java @@ -24,7 +24,6 @@ import com.datastax.driver.core.utils.CassandraVersion; import com.google.common.base.Function; import com.google.common.base.Throwables; -import com.google.common.collect.Lists; import com.google.common.util.concurrent.AsyncFunction; import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.Uninterruptibles; @@ -83,13 +82,7 @@ public void cancelled_query_should_release_the_connection() throws InterruptedEx public void should_init_cluster_and_session_if_needed() throws Exception { // For this test we need an uninitialized cluster, so we can't reuse the one provided by the // parent class. Rebuild a new one with the same (unique) host. - Host host = cluster().getMetadata().allHosts().iterator().next(); - - Cluster cluster2 = - register( - Cluster.builder() - .addContactPointsWithPorts(Lists.newArrayList(host.getEndPoint().resolve())) - .build()); + Cluster cluster2 = register(createClusterBuilder().build()); try { Session session2 = cluster2.newSession(); diff --git a/driver-core/src/test/java/com/datastax/driver/core/AuthenticationTest.java b/driver-core/src/test/java/com/datastax/driver/core/AuthenticationTest.java index 07f17101059..e3b7cba650c 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/AuthenticationTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/AuthenticationTest.java @@ -53,12 +53,7 @@ public void sleepIf12() { @Test(groups = "short") public void should_connect_with_credentials() { PlainTextAuthProvider authProvider = spy(new PlainTextAuthProvider("cassandra", "cassandra")); - Cluster cluster = - Cluster.builder() - .addContactPoints(getContactPoints()) - .withPort(ccm().getBinaryPort()) - .withAuthProvider(authProvider) - .build(); + Cluster cluster = createClusterBuilder().withAuthProvider(authProvider).build(); cluster.connect(); verify(authProvider, atLeastOnce()) .newAuthenticator( @@ -78,13 +73,7 @@ public void should_connect_with_credentials() { */ @Test(groups = "short") public void should_fail_to_connect_with_wrong_credentials() { - Cluster cluster = - register( - Cluster.builder() - .addContactPoints(getContactPoints()) - .withPort(ccm().getBinaryPort()) - .withCredentials("bogus", "bogus") - .build()); + Cluster cluster = register(createClusterBuilder().withCredentials("bogus", "bogus").build()); try { cluster.connect(); @@ -106,12 +95,7 @@ public void should_fail_to_connect_with_wrong_credentials() { @Test(groups = "short", expectedExceptions = AuthenticationException.class) public void should_fail_to_connect_without_credentials() { - Cluster cluster = - register( - Cluster.builder() - .addContactPoints(getContactPoints()) - .withPort(ccm().getBinaryPort()) - .build()); + Cluster cluster = register(createClusterBuilder().build()); cluster.connect(); } @@ -124,9 +108,7 @@ public void should_fail_to_connect_without_credentials() { @CCMConfig(dirtiesContext = true) public void should_connect_with_slow_server() { Cluster cluster = - Cluster.builder() - .addContactPoints(getContactPoints()) - .withPort(ccm().getBinaryPort()) + createClusterBuilder() .withAuthProvider(new SlowAuthProvider()) .withPoolingOptions(new PoolingOptions().setHeartbeatIntervalSeconds(1)) .build(); @@ -169,13 +151,7 @@ public void run() { @Test(groups = "short") public void should_not_create_pool_with_wrong_credentials() { PlainTextAuthProvider authProvider = new PlainTextAuthProvider("cassandra", "cassandra"); - Cluster cluster = - register( - Cluster.builder() - .addContactPoints(getContactPoints()) - .withPort(ccm().getBinaryPort()) - .withAuthProvider(authProvider) - .build()); + Cluster cluster = register(createClusterBuilder().withAuthProvider(authProvider).build()); cluster.init(); authProvider.setPassword("wrong"); Level previous = TestUtils.setLogLevel(Session.class, Level.WARN); diff --git a/driver-core/src/test/java/com/datastax/driver/core/CCMAccess.java b/driver-core/src/test/java/com/datastax/driver/core/CCMAccess.java index c3bcc00e8d5..b722025a266 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/CCMAccess.java +++ b/driver-core/src/test/java/com/datastax/driver/core/CCMAccess.java @@ -17,7 +17,9 @@ import java.io.Closeable; import java.io.File; +import java.net.InetAddress; import java.net.InetSocketAddress; +import java.util.List; import java.util.Map; public interface CCMAccess extends Closeable { @@ -41,8 +43,6 @@ enum Workload { * is assumed that this value is only used for representing the compatible Cassandra version for * that DSE version. * - *

- * * @return The version of this CCM cluster. */ VersionNumber getCassandraVersion(); @@ -50,8 +50,6 @@ enum Workload { /** * Returns the DSE version of this CCM cluster if this is a DSE cluster, otherwise null. * - *

- * * @return The version of this CCM cluster. */ VersionNumber getDSEVersion(); @@ -87,13 +85,29 @@ enum Workload { void setKeepLogs(boolean keepLogs); /** - * @return the node count for each datacenter, mapped in the corresponding cell of the returned - * int array. This is the count that was passed at initialization (that is, the argument to - * {@link CCMBridge.Builder#withNodes(int...)} or {@link CCMConfig#numberOfNodes()}). Note - * that it will NOT be updated dynamically if nodes are added or removed at runtime. + * Returns the node count for each datacenter, mapped in the corresponding cell of the returned + * int array. + * + *

This is the count that was passed at initialization (that is, the argument to {@link + * CCMBridge.Builder#withNodes(int...)} or {@link CCMConfig#numberOfNodes()}). Note that it will + * NOT be updated dynamically if nodes are added or removed at runtime. + * + * @return the node count for each datacenter. */ int[] getNodeCount(); + /** + * Returns the contact points to use to contact the CCM cluster. + * + *

This reflects the initial number of nodes in the cluster, as configured at initialization + * (that is, the argument to {@link CCMBridge.Builder#withNodes(int...)} or {@link + * CCMConfig#numberOfNodes()}). Note that it will NOT be updated dynamically if nodes are + * added or removed at runtime. + * + * @return the contact points to use to contact the CCM cluster. + */ + List getContactPoints(); + /** * Returns the address of the {@code nth} host in the CCM cluster (counting from 1, i.e., {@code * addressOfNode(1)} returns the address of the first node. diff --git a/driver-core/src/test/java/com/datastax/driver/core/CCMBridge.java b/driver-core/src/test/java/com/datastax/driver/core/CCMBridge.java index 81a203fe63f..1ca13e1c2e9 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/CCMBridge.java +++ b/driver-core/src/test/java/com/datastax/driver/core/CCMBridge.java @@ -35,11 +35,15 @@ import java.io.OutputStream; import java.io.PrintWriter; import java.io.StringWriter; +import java.net.InetAddress; import java.net.InetSocketAddress; +import java.net.UnknownHostException; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.LinkedHashSet; +import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.TimeUnit; @@ -367,6 +371,24 @@ public int[] getNodeCount() { return Arrays.copyOf(nodes, nodes.length); } + @Override + public List getContactPoints() { + List contactPoints = new ArrayList(); + int n = 1; + for (int dc = 1; dc <= nodes.length; dc++) { + int nodesInDc = nodes[dc - 1]; + for (int i = 0; i < nodesInDc; i++) { + try { + contactPoints.add(InetAddress.getByName(ipOfNode(n))); + } catch (UnknownHostException e) { + Throwables.propagate(e); + } + n++; + } + } + return contactPoints; + } + protected String ipOfNode(int n) { return ipPrefix + n; } diff --git a/driver-core/src/test/java/com/datastax/driver/core/CCMCache.java b/driver-core/src/test/java/com/datastax/driver/core/CCMCache.java index e8682003c7f..26bbaeed031 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/CCMCache.java +++ b/driver-core/src/test/java/com/datastax/driver/core/CCMCache.java @@ -23,8 +23,10 @@ import com.google.common.cache.RemovalNotification; import com.google.common.cache.Weigher; import java.io.File; +import java.net.InetAddress; import java.net.InetSocketAddress; import java.util.Iterator; +import java.util.List; import java.util.Map; import java.util.concurrent.ExecutionException; import java.util.concurrent.atomic.AtomicInteger; @@ -107,6 +109,11 @@ public int[] getNodeCount() { return ccm.getNodeCount(); } + @Override + public List getContactPoints() { + return ccm.getContactPoints(); + } + @Override public InetSocketAddress addressOfNode(int n) { return ccm.addressOfNode(n); diff --git a/driver-core/src/test/java/com/datastax/driver/core/CCMTestsSupport.java b/driver-core/src/test/java/com/datastax/driver/core/CCMTestsSupport.java index 8f695a42701..6bcb65fd88a 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/CCMTestsSupport.java +++ b/driver-core/src/test/java/com/datastax/driver/core/CCMTestsSupport.java @@ -23,6 +23,7 @@ import static org.assertj.core.api.Assertions.fail; import com.datastax.driver.core.CCMAccess.Workload; +import com.datastax.driver.core.Cluster.Builder; import com.datastax.driver.core.CreateCCM.TestMode; import com.datastax.driver.core.exceptions.InvalidQueryException; import com.google.common.base.Throwables; @@ -157,6 +158,11 @@ public int[] getNodeCount() { return delegate.getNodeCount(); } + @Override + public List getContactPoints() { + return delegate.getContactPoints(); + } + @Override public String checkForErrors() { return delegate.checkForErrors(); @@ -631,7 +637,7 @@ public void beforeTestClass(Object testInstance) throws Exception { } catch (Exception e) { LOGGER.error(e.getMessage(), e); errorOut(); - fail(e.getMessage()); + throw e; } } } @@ -706,18 +712,15 @@ public void afterTestClass() throws Exception { /** * Returns the cluster builder to use for this test. * - *

The default implementation returns a vanilla builder. - * - *

It's not required to call {@link - * com.datastax.driver.core.Cluster.Builder#addContactPointsWithPorts}, it will be done - * automatically. + *

The default implementation returns a vanilla builder with contact points and port that match + * the running CCM cluster. Therefore it's not required to call {@link + * Cluster.Builder#addContactPointsWithPorts}, it will be done automatically. * * @return The cluster builder to use for the tests. */ public Cluster.Builder createClusterBuilder() { - return Cluster.builder() - // use a different codec registry for each cluster instance - .withCodecRegistry(new CodecRegistry()); + Cluster.Builder builder = Cluster.builder(); + return configureClusterBuilder(builder); } /** @@ -730,7 +733,18 @@ public Cluster.Builder createClusterBuilder() { * @return The cluster builder to use for the tests. */ public Cluster.Builder createClusterBuilderNoDebouncing() { - return Cluster.builder().withQueryOptions(TestUtils.nonDebouncingQueryOptions()); + return createClusterBuilder().withQueryOptions(TestUtils.nonDebouncingQueryOptions()); + } + + /** + * Configures the builder with contact points and port that match the running CCM cluster. + * Therefore it's not required to call {@link Cluster.Builder#addContactPointsWithPorts}, it will + * be done automatically. + * + * @return The cluster builder (for method chaining). + */ + protected Builder configureClusterBuilder(Builder builder) { + return TestUtils.configureClusterBuilder(builder, ccm()); } /** @@ -963,6 +977,12 @@ protected void initTestCluster(Object testInstance) throws Exception { // add contact points only if the provided builder didn't do so if (builder.getContactPoints().isEmpty()) builder.addContactPoints(getContactPoints()); builder.withPort(ccm.getBinaryPort()); + if (ccm().getCassandraVersion().compareTo(VersionNumber.parse("3.10")) >= 0 + && ccm().getCassandraVersion().compareTo(VersionNumber.parse("4.0-beta5")) < 0) { + // prevent usage of protocol v5 for 3.10 and 3.11 since these versions have the beta + // version of it + builder.withProtocolVersion(ProtocolVersion.V4); + } cluster = register(builder.build()); cluster.init(); } diff --git a/driver-core/src/test/java/com/datastax/driver/core/ClusterStressTest.java b/driver-core/src/test/java/com/datastax/driver/core/ClusterStressTest.java index e7a62993b42..f50dac1fb4d 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/ClusterStressTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/ClusterStressTest.java @@ -174,9 +174,7 @@ private class CreateClusterAndCheckConnections CreateClusterAndCheckConnections(CountDownLatch startSignal) { this.startSignal = startSignal; this.cluster = - Cluster.builder() - .addContactPoints(getContactPoints()) - .withPort(ccm().getBinaryPort()) + createClusterBuilder() .withPoolingOptions( new PoolingOptions().setCoreConnectionsPerHost(HostDistance.LOCAL, 1)) .withNettyOptions(channelMonitor.nettyOptions()) diff --git a/driver-core/src/test/java/com/datastax/driver/core/ControlConnectionTest.java b/driver-core/src/test/java/com/datastax/driver/core/ControlConnectionTest.java index 06d5b711f38..a406bbf8e00 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/ControlConnectionTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/ControlConnectionTest.java @@ -19,7 +19,6 @@ import static com.datastax.driver.core.CreateCCM.TestMode.PER_METHOD; import static com.datastax.driver.core.ScassandraCluster.SELECT_PEERS; import static com.datastax.driver.core.ScassandraCluster.datacenter; -import static com.datastax.driver.core.TestUtils.nonDebouncingQueryOptions; import static com.datastax.driver.core.TestUtils.nonQuietClusterCloseOptions; import static com.google.common.collect.Lists.newArrayList; import static org.scassandra.http.client.PrimingRequest.then; @@ -79,9 +78,7 @@ public void should_prevent_simultaneous_reconnection_attempts() throws Interrupt // this host Cluster cluster = register( - Cluster.builder() - .addContactPoints(getContactPoints().get(0)) - .withPort(ccm().getBinaryPort()) + createClusterBuilder() .withReconnectionPolicy(reconnectionPolicy) .withLoadBalancingPolicy(loadBalancingPolicy) .build()); @@ -109,12 +106,7 @@ public void should_prevent_simultaneous_reconnection_attempts() throws Interrupt @CassandraVersion("2.1.0") public void should_parse_UDT_definitions_when_using_default_protocol_version() { // First driver instance: create UDT - Cluster cluster = - register( - Cluster.builder() - .addContactPoints(getContactPoints().get(0)) - .withPort(ccm().getBinaryPort()) - .build()); + Cluster cluster = register(createClusterBuilder().build()); Session session = cluster.connect(); session.execute( "create keyspace ks WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 1}"); @@ -122,12 +114,7 @@ public void should_parse_UDT_definitions_when_using_default_protocol_version() { cluster.close(); // Second driver instance: read UDT definition - Cluster cluster2 = - register( - Cluster.builder() - .addContactPoints(getContactPoints().get(0)) - .withPort(ccm().getBinaryPort()) - .build()); + Cluster cluster2 = register(createClusterBuilder().build()); UserType fooType = cluster2.getMetadata().getKeyspace("ks").getUserType("foo"); assertThat(fooType.getFieldNames()).containsExactly("i"); @@ -146,13 +133,7 @@ public void should_parse_UDT_definitions_when_using_default_protocol_version() { @CCMConfig(numberOfNodes = 3) public void should_reestablish_if_control_node_decommissioned() throws InterruptedException { InetSocketAddress firstHost = ccm().addressOfNode(1); - Cluster cluster = - register( - Cluster.builder() - .addContactPoints(firstHost.getAddress()) - .withPort(ccm().getBinaryPort()) - .withQueryOptions(nonDebouncingQueryOptions()) - .build()); + Cluster cluster = register(createClusterBuilderNoDebouncing().build()); cluster.init(); // Ensure the control connection host is that of the first node. diff --git a/driver-core/src/test/java/com/datastax/driver/core/EventDebouncerIntegrationTest.java b/driver-core/src/test/java/com/datastax/driver/core/EventDebouncerIntegrationTest.java index aa6e8c6bc30..5e1c1bc1561 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/EventDebouncerIntegrationTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/EventDebouncerIntegrationTest.java @@ -47,12 +47,7 @@ public void should_wait_until_load_balancing_policy_is_fully_initialized() throws InterruptedException { TestLoadBalancingPolicy policy = new TestLoadBalancingPolicy(); final Cluster cluster = - register( - createClusterBuilderNoDebouncing() - .addContactPoints(getContactPoints().get(0)) - .withPort(ccm().getBinaryPort()) - .withLoadBalancingPolicy(policy) - .build()); + register(createClusterBuilderNoDebouncing().withLoadBalancingPolicy(policy).build()); new Thread() { @Override public void run() { diff --git a/driver-core/src/test/java/com/datastax/driver/core/GettableDataIntegrationTest.java b/driver-core/src/test/java/com/datastax/driver/core/GettableDataIntegrationTest.java index 5872746cd61..e2a6a8860d0 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/GettableDataIntegrationTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/GettableDataIntegrationTest.java @@ -58,7 +58,7 @@ public void onTestContextInitialized() { @Override public Cluster.Builder createClusterBuilder() { - return Cluster.builder().withCodecRegistry(registry); + return super.createClusterBuilder().withCodecRegistry(registry); } @BeforeClass(groups = "short") diff --git a/driver-core/src/test/java/com/datastax/driver/core/LoadBalancingPolicyBootstrapTest.java b/driver-core/src/test/java/com/datastax/driver/core/LoadBalancingPolicyBootstrapTest.java index 26e319bb28e..8cb4d6c316c 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/LoadBalancingPolicyBootstrapTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/LoadBalancingPolicyBootstrapTest.java @@ -52,13 +52,7 @@ public class LoadBalancingPolicyBootstrapTest extends CCMTestsSupport { public void should_init_policy_with_up_contact_points() throws Exception { HistoryPolicy policy = new HistoryPolicy(new RoundRobinPolicy()); - Cluster cluster = - register( - Cluster.builder() - .addContactPoints(getContactPoints()) - .withPort(ccm().getBinaryPort()) - .withLoadBalancingPolicy(policy) - .build()); + Cluster cluster = register(createClusterBuilder().withLoadBalancingPolicy(policy).build()); try { cluster.init(); @@ -103,13 +97,7 @@ public void should_send_down_notifications_after_init_when_contact_points_are_do ccm().waitForDown(nodeToStop); HistoryPolicy policy = new HistoryPolicy(new RoundRobinPolicy()); - Cluster cluster = - register( - Cluster.builder() - .addContactPoints(getContactPoints()) - .withPort(ccm().getBinaryPort()) - .withLoadBalancingPolicy(policy) - .build()); + Cluster cluster = register(createClusterBuilder().withLoadBalancingPolicy(policy).build()); try { cluster.init(); diff --git a/driver-core/src/test/java/com/datastax/driver/core/MetadataTest.java b/driver-core/src/test/java/com/datastax/driver/core/MetadataTest.java index 44774cc59b3..26e88c5d87e 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/MetadataTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/MetadataTest.java @@ -17,7 +17,6 @@ import static com.datastax.driver.core.Assertions.assertThat; import static com.datastax.driver.core.CreateCCM.TestMode.PER_METHOD; -import static com.datastax.driver.core.TestUtils.nonDebouncingQueryOptions; import static com.datastax.driver.core.TestUtils.waitForUp; import com.google.common.collect.Maps; @@ -57,13 +56,7 @@ public class MetadataTest extends CCMTestsSupport { @Test(groups = "long") @CCMConfig(numberOfNodes = 3, dirtiesContext = true, createCluster = false) public void should_update_metadata_on_topology_change() { - Cluster cluster = - register( - Cluster.builder() - .addContactPoints(getContactPoints().get(0)) - .withPort(ccm().getBinaryPort()) - .withQueryOptions(nonDebouncingQueryOptions()) - .build()); + Cluster cluster = register(createClusterBuilderNoDebouncing().build()); Session session = cluster.connect(); String keyspace = "test"; diff --git a/driver-core/src/test/java/com/datastax/driver/core/MetricsTest.java b/driver-core/src/test/java/com/datastax/driver/core/MetricsTest.java index ead5fd52cd9..2c97550a7c9 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/MetricsTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/MetricsTest.java @@ -36,7 +36,7 @@ public class MetricsTest extends CCMTestsSupport { @Override public Cluster.Builder createClusterBuilder() { - return Cluster.builder() + return super.createClusterBuilder() .withRetryPolicy( new RetryPolicy() { @Override @@ -141,13 +141,7 @@ public void should_enable_metrics_and_jmx_by_default() throws Exception { */ @Test(groups = "short", expectedExceptions = InstanceNotFoundException.class) public void metrics_should_be_null_when_metrics_disabled() throws Exception { - Cluster cluster = - register( - Cluster.builder() - .addContactPoints(getContactPoints()) - .withPort(ccm().getBinaryPort()) - .withoutMetrics() - .build()); + Cluster cluster = register(createClusterBuilder().withoutMetrics().build()); try { cluster.init(); assertThat(cluster.getMetrics()).isNull(); @@ -169,13 +163,7 @@ public void metrics_should_be_null_when_metrics_disabled() throws Exception { */ @Test(groups = "short", expectedExceptions = InstanceNotFoundException.class) public void should_be_no_jmx_mbean_when_jmx_is_disabled() throws Exception { - Cluster cluster = - register( - Cluster.builder() - .addContactPoints(getContactPoints()) - .withPort(ccm().getBinaryPort()) - .withoutJMXReporting() - .build()); + Cluster cluster = register(createClusterBuilder().withoutJMXReporting().build()); try { cluster.init(); assertThat(cluster.getMetrics()).isNotNull(); diff --git a/driver-core/src/test/java/com/datastax/driver/core/MissingRpcAddressTest.java b/driver-core/src/test/java/com/datastax/driver/core/MissingRpcAddressTest.java index 8408bb701c4..f778ca94394 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/MissingRpcAddressTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/MissingRpcAddressTest.java @@ -40,12 +40,7 @@ public class MissingRpcAddressTest extends CCMTestsSupport { public void testMissingRpcAddressAtStartup() throws Exception { deleteNode2RpcAddressFromNode1(); // Use only one contact point to make sure that the control connection is on node1 - Cluster cluster = - register( - Cluster.builder() - .addContactPoints(getContactPoints().get(0)) - .withPort(ccm().getBinaryPort()) - .build()); + Cluster cluster = register(createClusterBuilder().build()); cluster.connect(); // Since node2's RPC address is unknown on our control host, it should have been ignored @@ -58,9 +53,7 @@ private void deleteNode2RpcAddressFromNode1() throws Exception { InetSocketAddress firstHost = ccm().addressOfNode(1); Cluster cluster = register( - Cluster.builder() - .addContactPoints(firstHost.getAddress()) - .withPort(ccm().getBinaryPort()) + createClusterBuilder() // ensure we will only connect to node1 .withLoadBalancingPolicy( new WhiteListPolicy( diff --git a/driver-core/src/test/java/com/datastax/driver/core/NettyOptionsTest.java b/driver-core/src/test/java/com/datastax/driver/core/NettyOptionsTest.java index 321c2878369..58b459199ac 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/NettyOptionsTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/NettyOptionsTest.java @@ -73,9 +73,7 @@ public Object answer(InvocationOnMock invocation) throws Throwable { .afterChannelInitialized(any(SocketChannel.class)); Cluster cluster = register( - Cluster.builder() - .addContactPoints(getContactPoints().get(0)) - .withPort(ccm().getBinaryPort()) + createClusterBuilder() .withPoolingOptions( new PoolingOptions() .setConnectionsPerHost( diff --git a/driver-core/src/test/java/com/datastax/driver/core/NodeListRefreshDebouncerTest.java b/driver-core/src/test/java/com/datastax/driver/core/NodeListRefreshDebouncerTest.java index b7445259f1a..aba127ecbf8 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/NodeListRefreshDebouncerTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/NodeListRefreshDebouncerTest.java @@ -42,13 +42,7 @@ public void setup() { queryOptions.setMaxPendingRefreshNodeListRequests(5); queryOptions.setRefreshSchemaIntervalMillis(0); // Create a separate cluster that will receive the schema events on its control connection. - cluster2 = - register( - Cluster.builder() - .addContactPoints(getContactPoints()) - .withPort(ccm().getBinaryPort()) - .withQueryOptions(queryOptions) - .build()); + cluster2 = register(createClusterBuilder().withQueryOptions(queryOptions).build()); cluster2.init(); diff --git a/driver-core/src/test/java/com/datastax/driver/core/NodeRefreshDebouncerTest.java b/driver-core/src/test/java/com/datastax/driver/core/NodeRefreshDebouncerTest.java index 6b2c1a87680..c59078d0aaf 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/NodeRefreshDebouncerTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/NodeRefreshDebouncerTest.java @@ -45,13 +45,7 @@ public void should_call_onAdd_with_bootstrap_stop_start() { int refreshNodeInterval = 30000; QueryOptions queryOptions = new QueryOptions().setRefreshNodeIntervalMillis(refreshNodeInterval); - Cluster cluster = - register( - Cluster.builder() - .addContactPoints(getContactPoints().get(0)) - .withPort(ccm().getBinaryPort()) - .withQueryOptions(queryOptions) - .build()); + Cluster cluster = register(createClusterBuilder().withQueryOptions(queryOptions).build()); cluster.connect(); Host.StateListener listener = mock(Host.StateListener.class); cluster.register(listener); diff --git a/driver-core/src/test/java/com/datastax/driver/core/PreparedStatementInvalidationTest.java b/driver-core/src/test/java/com/datastax/driver/core/PreparedStatementInvalidationTest.java index 7a72fc73fbf..86bc7c49648 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/PreparedStatementInvalidationTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/PreparedStatementInvalidationTest.java @@ -40,23 +40,9 @@ import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; -/** - * Note: at the time of writing, this test exercises features of an unreleased Cassandra version. To - * test against a local build, run with - * - *

- *   -Dcassandra.version=4.0.0 -Dcassandra.directory=/path/to/cassandra
- * 
- */ @CassandraVersion("4.0") public class PreparedStatementInvalidationTest extends CCMTestsSupport { - @Override - public Cluster.Builder createClusterBuilder() { - // TODO remove when protocol v5 is stable in C* 4 - return super.createClusterBuilderNoDebouncing().allowBetaProtocolVersion(); - } - @BeforeMethod(groups = "short", alwaysRun = true) public void setup() throws Exception { execute("CREATE TABLE prepared_statement_invalidation_test (a int PRIMARY KEY, b int, c int);"); diff --git a/driver-core/src/test/java/com/datastax/driver/core/PreparedStatementTest.java b/driver-core/src/test/java/com/datastax/driver/core/PreparedStatementTest.java index d53ad6bc6e9..c52db70f0df 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/PreparedStatementTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/PreparedStatementTest.java @@ -546,11 +546,7 @@ public void should_set_routing_key_on_case_sensitive_keyspace_and_table() { @Test(groups = "short", expectedExceptions = InvalidQueryException.class) public void should_fail_when_prepared_on_another_cluster() throws Exception { - Cluster otherCluster = - Cluster.builder() - .addContactPoints(getContactPoints()) - .withPort(ccm().getBinaryPort()) - .build(); + Cluster otherCluster = createClusterBuilder().build(); try { PreparedStatement pst = otherCluster.connect().prepare("select * from system.peers where inet = ?"); @@ -577,9 +573,7 @@ public void should_fail_when_prepared_on_another_cluster() throws Exception { public void should_not_allow_unbound_value_on_bound_statement_when_protocol_lesser_than_v4() { Cluster cluster = register( - Cluster.builder() - .addContactPoints(getContactPoints()) - .withPort(ccm().getBinaryPort()) + createClusterBuilder() .withProtocolVersion(ccm().getProtocolVersion(ProtocolVersion.V3)) .build()); Session session = cluster.connect(); @@ -592,6 +586,9 @@ public void should_not_allow_unbound_value_on_bound_statement_when_protocol_less fail("Should not have executed statement with UNSET values in protocol V3"); } catch (IllegalStateException e) { assertThat(e.getMessage()).contains("Unset value at index 1"); + } finally { + session.close(); + cluster.close(); } } @@ -609,9 +606,7 @@ public void should_not_allow_unbound_value_on_bound_statement_when_protocol_less public void should_not_allow_unbound_value_on_batch_statement_when_protocol_lesser_than_v4() { Cluster cluster = register( - Cluster.builder() - .addContactPoints(getContactPoints()) - .withPort(ccm().getBinaryPort()) + createClusterBuilder() .withProtocolVersion(ccm().getProtocolVersion(ProtocolVersion.V3)) .build()); Session session = cluster.connect(); @@ -625,6 +620,9 @@ public void should_not_allow_unbound_value_on_batch_statement_when_protocol_less fail("Should not have executed statement with UNSET values in protocol V3"); } catch (IllegalStateException e) { assertThat(e.getMessage()).contains("Unset value at index 1"); + } finally { + session.close(); + cluster.close(); } } diff --git a/driver-core/src/test/java/com/datastax/driver/core/ProtocolBetaVersionTest.java b/driver-core/src/test/java/com/datastax/driver/core/ProtocolBetaVersionTest.java index 55b743775a8..6c1111128ae 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/ProtocolBetaVersionTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/ProtocolBetaVersionTest.java @@ -27,6 +27,7 @@ /** Tests for the new USE_BETA flag introduced in protocol v5 and Cassandra 3.10. */ @CassandraVersion("3.10") +@CCMConfig(createCluster = false) public class ProtocolBetaVersionTest extends CCMTestsSupport { @BeforeClass @@ -44,8 +45,7 @@ public void checkNotCassandra4OrHigher() { * @jira_ticket JAVA-1248 */ @Test(groups = "short") - public void should_not_initialize_when_version_explicitly_required_and_beta_flag_is_set() - throws Exception { + public void should_not_initialize_when_version_explicitly_required_and_beta_flag_is_set() { try { Cluster.builder() .addContactPoints(getContactPoints()) @@ -67,8 +67,7 @@ public void should_not_initialize_when_version_explicitly_required_and_beta_flag * @jira_ticket JAVA-1248 */ @Test(groups = "short") - public void should_not_initialize_when_beta_flag_is_set_and_version_explicitly_required() - throws Exception { + public void should_not_initialize_when_beta_flag_is_set_and_version_explicitly_required() { try { Cluster.builder() .addContactPoints(getContactPoints()) @@ -90,8 +89,7 @@ public void should_not_initialize_when_beta_flag_is_set_and_version_explicitly_r * @jira_ticket JAVA-1248 */ @Test(groups = "short") - public void should_not_connect_when_beta_version_explicitly_required_and_flag_not_set() - throws Exception { + public void should_not_connect_when_beta_version_explicitly_required_and_flag_not_set() { try { Cluster.builder() .addContactPoints(getContactPoints()) @@ -101,7 +99,7 @@ public void should_not_connect_when_beta_version_explicitly_required_and_flag_no fail("Expected IllegalArgumentException"); } catch (IllegalArgumentException e) { assertThat(e.getMessage()) - .startsWith("Can not use V5 protocol version. Newest supported protocol version is: V4"); + .startsWith("Can not use V6 protocol version. Newest supported protocol version is: V5"); } } @@ -109,17 +107,10 @@ public void should_not_connect_when_beta_version_explicitly_required_and_flag_no * Verifies that the driver can connect to 3.10 with the following combination of options: Version * UNSET Flag SET Expected version: V5 * - *

Note: Since driver 3.10, and due to JAVA-2772, it is not possible anymore to connect with v5 - * to a Cassandra 3.x cluster. - * * @jira_ticket JAVA-1248 */ @Test(groups = "short", enabled = false) - public void should_connect_with_beta_when_no_version_explicitly_required_and_flag_set() - throws Exception { - // Note: when the driver's ProtocolVersion.NEWEST_SUPPORTED will be incremented to V6 or higher - // a renegotiation will start taking place here and will downgrade the version from V6 to V5, - // but the test should remain valid since it's executed against 3.10 exclusively + public void should_connect_with_beta_when_no_version_explicitly_required_and_flag_set() { Cluster cluster = Cluster.builder() .addContactPoints(getContactPoints()) @@ -134,15 +125,15 @@ public void should_connect_with_beta_when_no_version_explicitly_required_and_fla * Verifies that the driver can connect to 3.10 with the following combination of options: Version * UNSET Flag UNSET Expected version: V4 * + *

This test has been disabled as of driver 3.11 because v5 is not beta anymore in the driver. + * As a consequence, protocol negotiation without specifying an initial version is not possible + * anymore against C* >= 3.10 and < 4.0. + * * @jira_ticket JAVA-1248 */ - @Test(groups = "short") + @Test(groups = "short", enabled = false) public void - should_connect_after_renegotiation_when_no_version_explicitly_required_and_flag_not_set() - throws Exception { - // Note: when the driver's ProtocolVersion.NEWEST_SUPPORTED will be incremented to V6 or higher - // the renegotiation will start downgrading the version from V6 to V4 instead of V5 to V4, - // but the test should remain valid since it's executed against 3.10 exclusively + should_connect_after_renegotiation_when_no_version_explicitly_required_and_flag_not_set() { Cluster cluster = Cluster.builder() .addContactPoints(getContactPoints()) diff --git a/driver-core/src/test/java/com/datastax/driver/core/ProtocolVersionRenegotiationTest.java b/driver-core/src/test/java/com/datastax/driver/core/ProtocolVersionRenegotiationTest.java index d5e0862028a..913175bc353 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/ProtocolVersionRenegotiationTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/ProtocolVersionRenegotiationTest.java @@ -26,6 +26,7 @@ import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; +@CCMConfig(createCluster = false) public class ProtocolVersionRenegotiationTest extends CCMTestsSupport { private ProtocolVersion protocolVersion; @@ -37,7 +38,7 @@ public void setUp() { /** @jira_ticket JAVA-1367 */ @Test(groups = "short") - public void should_succeed_when_version_provided_and_matches() throws Exception { + public void should_succeed_when_version_provided_and_matches() { Cluster cluster = connectWithVersion(protocolVersion); assertThat(actualProtocolVersion(cluster)).isEqualTo(protocolVersion); } @@ -45,7 +46,7 @@ public void should_succeed_when_version_provided_and_matches() throws Exception /** @jira_ticket JAVA-1367 */ @Test(groups = "short") @CassandraVersion("3.8") - public void should_fail_when_version_provided_and_too_low_3_8_plus() throws Exception { + public void should_fail_when_version_provided_and_too_low_3_8_plus() { UnsupportedProtocolVersionException e = connectWithUnsupportedVersion(V1); assertThat(e.getUnsupportedVersion()).isEqualTo(V1); // post-CASSANDRA-11464: server replies with client's version @@ -54,7 +55,7 @@ public void should_fail_when_version_provided_and_too_low_3_8_plus() throws Exce /** @jira_ticket JAVA-1367 */ @Test(groups = "short") - public void should_fail_when_version_provided_and_too_high() throws Exception { + public void should_fail_when_version_provided_and_too_high() { if (ccm().getCassandraVersion().compareTo(VersionNumber.parse("3.10")) >= 0) { throw new SkipException("Server supports protocol V5"); } @@ -67,7 +68,7 @@ public void should_fail_when_version_provided_and_too_high() throws Exception { /** @jira_ticket JAVA-1367 */ @Test(groups = "short") - public void should_fail_when_beta_allowed_and_too_high() throws Exception { + public void should_fail_when_beta_allowed_and_too_high() { if (ccm().getCassandraVersion().compareTo(VersionNumber.parse("4.0.0")) >= 0) { throw new SkipException("Server supports protocol protocol V6 beta"); } @@ -78,7 +79,7 @@ public void should_fail_when_beta_allowed_and_too_high() throws Exception { /** @jira_ticket JAVA-1367 */ @Test(groups = "short") @CCMConfig(version = "2.1.16", createCluster = false) - public void should_negotiate_when_no_version_provided() throws Exception { + public void should_negotiate_when_no_version_provided() { if (protocolVersion.compareTo(ProtocolVersion.NEWEST_SUPPORTED) >= 0) { throw new SkipException("Server supports newest protocol version driver supports"); } diff --git a/driver-core/src/test/java/com/datastax/driver/core/QueryTimestampTest.java b/driver-core/src/test/java/com/datastax/driver/core/QueryTimestampTest.java index e4beebb14c1..f6ad7e08f78 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/QueryTimestampTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/QueryTimestampTest.java @@ -39,7 +39,7 @@ public void onTestContextInitialized() { public Cluster.Builder createClusterBuilder() { @SuppressWarnings("deprecation") Builder builder = - Cluster.builder() + super.createClusterBuilder() .withTimestampGenerator( new TimestampGenerator() { @Override diff --git a/driver-core/src/test/java/com/datastax/driver/core/RecommissionedNodeTest.java b/driver-core/src/test/java/com/datastax/driver/core/RecommissionedNodeTest.java index 31dafba37b4..3e9907c57aa 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/RecommissionedNodeTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/RecommissionedNodeTest.java @@ -55,9 +55,8 @@ public void should_ignore_recommissioned_node_on_reconnection_attempt() throws E // Now start the driver that will connect to node2 and node3, and consider node1 down mainCluster = - Cluster.builder() - .addContactPoints(mainCcm.addressOfNode(2).getAddress()) - .withPort(mainCcm.getBinaryPort()) + TestUtils.configureClusterBuilder( + Cluster.builder(), mainCcm, mainCcm.addressOfNode(2).getAddress()) .withQueryOptions(nonDebouncingQueryOptions()) .build(); mainCluster.connect(); @@ -89,9 +88,8 @@ public void should_ignore_recommissioned_node_on_control_connection_reconnect() // Start the driver, the control connection will be on node2 mainCluster = - Cluster.builder() - .addContactPoints(mainCcm.addressOfNode(2).getAddress()) - .withPort(mainCcm.getBinaryPort()) + TestUtils.configureClusterBuilder( + Cluster.builder(), mainCcm, mainCcm.addressOfNode(2).getAddress()) .withQueryOptions(nonDebouncingQueryOptions()) .build(); mainCluster.connect(); @@ -134,9 +132,8 @@ public void should_ignore_recommissioned_node_on_session_init() throws Exception // Start the driver, it should only connect to node 2 mainCluster = - Cluster.builder() - .addContactPoints(mainCcm.addressOfNode(2).getAddress()) - .withPort(mainCcm.getBinaryPort()) + TestUtils.configureClusterBuilder( + Cluster.builder(), mainCcm, mainCcm.addressOfNode(2).getAddress()) .withQueryOptions(nonDebouncingQueryOptions()) .build(); @@ -181,9 +178,8 @@ public void should_ignore_node_that_does_not_support_protocol_version_on_session // Start the driver, it should only connect to node 2 mainCluster = - Cluster.builder() - .addContactPoints(mainCcm.addressOfNode(2).getAddress()) - .withPort(mainCcm.getBinaryPort()) + TestUtils.configureClusterBuilder( + Cluster.builder(), mainCcm, mainCcm.addressOfNode(2).getAddress()) .withQueryOptions(nonDebouncingQueryOptions()) .build(); diff --git a/driver-core/src/test/java/com/datastax/driver/core/ReconnectionTest.java b/driver-core/src/test/java/com/datastax/driver/core/ReconnectionTest.java index c9733b7b078..bcf680fc976 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/ReconnectionTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/ReconnectionTest.java @@ -50,9 +50,7 @@ public class ReconnectionTest extends CCMTestsSupport { public void should_reconnect_after_full_connectivity_loss() throws InterruptedException { Cluster cluster = register( - Cluster.builder() - .addContactPoints(getContactPoints().get(0)) - .withPort(ccm().getBinaryPort()) + createClusterBuilder() .withReconnectionPolicy(new ConstantReconnectionPolicy(reconnectionDelayMillis)) .build()); cluster.connect(); @@ -92,9 +90,7 @@ public void should_keep_reconnecting_on_authentication_error() throws Interrupte CountingAuthProvider authProvider = new CountingAuthProvider("cassandra", "cassandra"); Cluster cluster = register( - Cluster.builder() - .addContactPoints(getContactPoints().get(0)) - .withPort(ccm().getBinaryPort()) + createClusterBuilder() // Start with the correct auth so that we can initialize the server .withAuthProvider(authProvider) .withReconnectionPolicy(reconnectionPolicy) @@ -141,12 +137,7 @@ public void should_cancel_reconnection_attempts() throws InterruptedException { new CountingReconnectionPolicy(new ConstantReconnectionPolicy(reconnectionDelayMillis)); Cluster cluster = - register( - Cluster.builder() - .addContactPoints(getContactPoints().get(0)) - .withPort(ccm().getBinaryPort()) - .withReconnectionPolicy(reconnectionPolicy) - .build()); + register(createClusterBuilder().withReconnectionPolicy(reconnectionPolicy).build()); cluster.connect(); // Stop a node and cancel the reconnection attempts to it @@ -173,9 +164,7 @@ public void should_trigger_one_time_reconnect() throws InterruptedException, IOE TogglabePolicy loadBalancingPolicy = new TogglabePolicy(new RoundRobinPolicy()); Cluster cluster = register( - Cluster.builder() - .addContactPointsWithPorts(ccm().addressOfNode(1)) - .withPort(ccm().getBinaryPort()) + createClusterBuilder() .withLoadBalancingPolicy(loadBalancingPolicy) .withReconnectionPolicy(new ConstantReconnectionPolicy(reconnectionDelayMillis)) .build()); @@ -230,9 +219,7 @@ public void should_use_connection_from_reconnection_in_pool() { SocketOptions socketOptions = spy(new SocketOptions()); Cluster cluster = register( - Cluster.builder() - .addContactPoints(getContactPoints().get(0)) - .withPort(ccm().getBinaryPort()) + createClusterBuilder() .withReconnectionPolicy(new ConstantReconnectionPolicy(5000)) .withLoadBalancingPolicy(loadBalancingPolicy) .withSocketOptions(socketOptions) diff --git a/driver-core/src/test/java/com/datastax/driver/core/RefreshConnectedHostTest.java b/driver-core/src/test/java/com/datastax/driver/core/RefreshConnectedHostTest.java index 4fe2a333037..52ec02163be 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/RefreshConnectedHostTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/RefreshConnectedHostTest.java @@ -40,13 +40,10 @@ public void should_refresh_single_connected_host() { PoolingOptions poolingOptions = Mockito.spy(new PoolingOptions()); Cluster cluster = register( - Cluster.builder() - .addContactPoints(getContactPoints().get(0)) - .withPort(ccm().getBinaryPort()) + createClusterBuilderNoDebouncing() .withPoolingOptions(poolingOptions) .withLoadBalancingPolicy(loadBalancingPolicy) .withReconnectionPolicy(new ConstantReconnectionPolicy(1000)) - .withQueryOptions(TestUtils.nonDebouncingQueryOptions()) .build()); Session session = cluster.connect(); diff --git a/driver-core/src/test/java/com/datastax/driver/core/SSLEncryptionTest.java b/driver-core/src/test/java/com/datastax/driver/core/SSLEncryptionTest.java index c9a01089363..b141837f272 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/SSLEncryptionTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/SSLEncryptionTest.java @@ -76,12 +76,7 @@ public void should_not_connect_with_ssl_without_trusting_server_cert( groups = "short", expectedExceptions = {NoHostAvailableException.class}) public void should_not_connect_without_ssl_but_node_uses_ssl() throws Exception { - Cluster cluster = - register( - Cluster.builder() - .addContactPoints(getContactPoints()) - .withPort(ccm().getBinaryPort()) - .build()); + Cluster cluster = register(createClusterBuilder().build()); cluster.connect(); } @@ -99,11 +94,7 @@ public void should_reconnect_with_ssl_on_node_up(SslImplementation sslImplementa throws Exception { Cluster cluster = register( - Cluster.builder() - .addContactPoints(this.getContactPoints()) - .withPort(ccm().getBinaryPort()) - .withSSL(getSSLOptions(sslImplementation, true, true)) - .build()); + createClusterBuilder().withSSL(getSSLOptions(sslImplementation, true, true)).build()); cluster.connect(); diff --git a/driver-core/src/test/java/com/datastax/driver/core/SSLTestBase.java b/driver-core/src/test/java/com/datastax/driver/core/SSLTestBase.java index 97a9434938d..645c03bf7b3 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/SSLTestBase.java +++ b/driver-core/src/test/java/com/datastax/driver/core/SSLTestBase.java @@ -51,13 +51,7 @@ public static Object[][] sslImplementation() { * be raised here if connection cannot be established. */ protected void connectWithSSLOptions(SSLOptions sslOptions) throws Exception { - Cluster cluster = - register( - Cluster.builder() - .addContactPoints(getContactPoints()) - .withPort(ccm().getBinaryPort()) - .withSSL(sslOptions) - .build()); + Cluster cluster = register(createClusterBuilder().withSSL(sslOptions).build()); cluster.connect(); } @@ -69,13 +63,7 @@ protected void connectWithSSLOptions(SSLOptions sslOptions) throws Exception { * be raised here if connection cannot be established. */ protected void connectWithSSL() throws Exception { - Cluster cluster = - register( - Cluster.builder() - .addContactPoints(getContactPoints()) - .withPort(ccm().getBinaryPort()) - .withSSL() - .build()); + Cluster cluster = register(createClusterBuilder().withSSL().build()); cluster.connect(); } diff --git a/driver-core/src/test/java/com/datastax/driver/core/SchemaChangesCCTest.java b/driver-core/src/test/java/com/datastax/driver/core/SchemaChangesCCTest.java index 972f668eba5..2340b45678b 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/SchemaChangesCCTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/SchemaChangesCCTest.java @@ -58,22 +58,10 @@ public class SchemaChangesCCTest extends CCMTestsSupport { public void should_receive_changes_made_while_control_connection_is_down_on_reconnect() throws Exception { ToggleablePolicy lbPolicy = new ToggleablePolicy(Policies.defaultLoadBalancingPolicy()); - Cluster cluster = - register( - Cluster.builder() - .withLoadBalancingPolicy(lbPolicy) - .addContactPoints(getContactPoints().get(0)) - .withPort(ccm().getBinaryPort()) - .build()); + Cluster cluster = register(createClusterBuilder().withLoadBalancingPolicy(lbPolicy).build()); // Put cluster2 control connection on node 2 so it doesn't go down (to prevent noise for // debugging). - Cluster cluster2 = - register( - Cluster.builder() - .withLoadBalancingPolicy(lbPolicy) - .addContactPoints(getContactPoints().get(1)) - .withPort(ccm().getBinaryPort()) - .build()); + Cluster cluster2 = register(createClusterBuilder().withLoadBalancingPolicy(lbPolicy).build()); SchemaChangeListener listener = mock(SchemaChangeListener.class); cluster.init(); diff --git a/driver-core/src/test/java/com/datastax/driver/core/SchemaChangesTest.java b/driver-core/src/test/java/com/datastax/driver/core/SchemaChangesTest.java index 7015ea6ce91..679efcbc943 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/SchemaChangesTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/SchemaChangesTest.java @@ -81,23 +81,11 @@ public class SchemaChangesTest extends CCMTestsSupport { @BeforeClass(groups = "short") public void setup() throws InterruptedException { - cluster1 = - Cluster.builder() - .addContactPoints(getContactPoints()) - .withPort(ccm().getBinaryPort()) - .withQueryOptions(nonDebouncingQueryOptions()) - .build(); - cluster2 = - Cluster.builder() - .addContactPoints(getContactPoints()) - .withPort(ccm().getBinaryPort()) - .withQueryOptions(nonDebouncingQueryOptions()) - .build(); + cluster1 = createClusterBuilderNoDebouncing().build(); + cluster2 = createClusterBuilderNoDebouncing().build(); schemaDisabledCluster = spy( - Cluster.builder() - .addContactPoints(getContactPoints()) - .withPort(ccm().getBinaryPort()) + createClusterBuilder() .withClusterName("schema-disabled") .withQueryOptions(nonDebouncingQueryOptions().setMetadataEnabled(false)) .build()); @@ -660,9 +648,7 @@ public void should_notify_of_keyspace_drop(String keyspace) throws InterruptedEx @Test(groups = "short", expectedExceptions = IllegalStateException.class) public void should_throw_illegal_state_exception_on_newToken_with_metadata_disabled() { Cluster cluster = - Cluster.builder() - .addContactPoints(getContactPoints()) - .withPort(ccm().getBinaryPort()) + createClusterBuilder() .withQueryOptions(nonDebouncingQueryOptions().setMetadataEnabled(false)) .build(); @@ -684,9 +670,7 @@ public void should_throw_illegal_state_exception_on_newToken_with_metadata_disab @Test(groups = "short", expectedExceptions = IllegalStateException.class) public void should_throw_illegal_state_exception_on_newTokenRange_with_metadata_disabled() { Cluster cluster = - Cluster.builder() - .addContactPoints(getContactPoints()) - .withPort(ccm().getBinaryPort()) + createClusterBuilder() .withQueryOptions(nonDebouncingQueryOptions().setMetadataEnabled(false)) .build(); diff --git a/driver-core/src/test/java/com/datastax/driver/core/SchemaRefreshDebouncerTest.java b/driver-core/src/test/java/com/datastax/driver/core/SchemaRefreshDebouncerTest.java index 65c3a727f13..ca091f7f33a 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/SchemaRefreshDebouncerTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/SchemaRefreshDebouncerTest.java @@ -59,13 +59,7 @@ public void setup() { queryOptions.setRefreshSchemaIntervalMillis(DEBOUNCE_TIME); queryOptions.setMaxPendingRefreshSchemaRequests(5); // Create a separate cluster that will receive the schema events on its control connection. - cluster2 = - register( - Cluster.builder() - .addContactPoints(getContactPoints()) - .withPort(ccm().getBinaryPort()) - .withQueryOptions(queryOptions) - .build()); + cluster2 = register(createClusterBuilder().withQueryOptions(queryOptions).build()); session2 = cluster2.connect(); // Create a spy of the Cluster's control connection and replace it with the spy. diff --git a/driver-core/src/test/java/com/datastax/driver/core/SessionLeakTest.java b/driver-core/src/test/java/com/datastax/driver/core/SessionLeakTest.java index cc6940575af..aa0f5737954 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/SessionLeakTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/SessionLeakTest.java @@ -17,7 +17,6 @@ import static com.datastax.driver.core.Assertions.assertThat; import static com.datastax.driver.core.CreateCCM.TestMode.PER_METHOD; -import static com.datastax.driver.core.TestUtils.nonDebouncingQueryOptions; import static com.google.common.collect.Lists.newArrayList; import static java.util.concurrent.TimeUnit.MINUTES; import static org.assertj.core.api.Assertions.fail; @@ -40,11 +39,8 @@ public void connectionLeakTest() throws Exception { channelMonitor.reportAtFixedInterval(1, TimeUnit.SECONDS); Cluster cluster = register( - Cluster.builder() - .addContactPoints(getContactPoints().get(0)) - .withPort(ccm().getBinaryPort()) + createClusterBuilderNoDebouncing() .withNettyOptions(channelMonitor.nettyOptions()) - .withQueryOptions(nonDebouncingQueryOptions()) .build()); cluster.init(); @@ -102,12 +98,7 @@ public void should_not_leak_session_when_wrong_keyspace() throws Exception { channelMonitor = new SocketChannelMonitor(); channelMonitor.reportAtFixedInterval(1, TimeUnit.SECONDS); Cluster cluster = - register( - Cluster.builder() - .addContactPoints(getContactPoints().get(0)) - .withPort(ccm().getBinaryPort()) - .withNettyOptions(channelMonitor.nettyOptions()) - .build()); + register(createClusterBuilder().withNettyOptions(channelMonitor.nettyOptions()).build()); cluster.init(); assertThat(cluster.manager.sessions.size()).isEqualTo(0); try { diff --git a/driver-core/src/test/java/com/datastax/driver/core/SessionStressTest.java b/driver-core/src/test/java/com/datastax/driver/core/SessionStressTest.java index b80ba5e2182..25fde7d5df2 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/SessionStressTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/SessionStressTest.java @@ -99,9 +99,7 @@ public void sessions_should_not_leak_connections() { // override inherited field with a new cluster object and ensure 0 sessions and connections channelMonitor.reportAtFixedInterval(1, TimeUnit.SECONDS); stressCluster = - Cluster.builder() - .addContactPoints(getContactPoints()) - .withPort(ccm().getBinaryPort()) + createClusterBuilder() .withPoolingOptions( new PoolingOptions().setCoreConnectionsPerHost(HostDistance.LOCAL, 1)) .withNettyOptions(channelMonitor.nettyOptions()) diff --git a/driver-core/src/test/java/com/datastax/driver/core/StatementWrapperTest.java b/driver-core/src/test/java/com/datastax/driver/core/StatementWrapperTest.java index 82416c567f4..06d539bb606 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/StatementWrapperTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/StatementWrapperTest.java @@ -50,7 +50,7 @@ public void onTestContextInitialized() { @Override public Cluster.Builder createClusterBuilder() { - return Cluster.builder() + return super.createClusterBuilder() .withLoadBalancingPolicy(loadBalancingPolicy) .withSpeculativeExecutionPolicy(speculativeExecutionPolicy) .withRetryPolicy(retryPolicy); diff --git a/driver-core/src/test/java/com/datastax/driver/core/TestUtils.java b/driver-core/src/test/java/com/datastax/driver/core/TestUtils.java index 751d4189ada..7656cbe1684 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/TestUtils.java +++ b/driver-core/src/test/java/com/datastax/driver/core/TestUtils.java @@ -19,6 +19,7 @@ import static java.util.concurrent.TimeUnit.MINUTES; import static java.util.concurrent.TimeUnit.SECONDS; +import com.datastax.driver.core.Cluster.Builder; import com.datastax.driver.core.policies.RoundRobinPolicy; import com.datastax.driver.core.policies.WhiteListPolicy; import com.google.common.base.Predicate; @@ -815,13 +816,41 @@ public static Cluster buildControlCluster(Cluster cluster, CCMAccess ccm) { Host controlHost = cluster.manager.controlConnection.connectedHost(); List singleAddress = Collections.singletonList(controlHost.getEndPoint().resolve()); - return Cluster.builder() - .addContactPoints(controlHost.getEndPoint().resolve().getAddress()) - .withPort(ccm.getBinaryPort()) + return configureClusterBuilder(Cluster.builder(), ccm) .withLoadBalancingPolicy(new WhiteListPolicy(new RoundRobinPolicy(), singleAddress)) .build(); } + /** + * Configures the builder with one contact point and port matching the given CCM cluster. + * Therefore it's not required to call {@link Cluster.Builder#addContactPoints}, it will be done + * automatically. + * + * @return The cluster builder (for method chaining). + */ + public static Builder configureClusterBuilder(Builder builder, CCMAccess ccm) { + // add only one contact point to force node1 to become the control host; some tests rely on + // that. + return configureClusterBuilder(builder, ccm, ccm.getContactPoints().get(0)); + } + + /** + * Configures the builder with binary port matching the given CCM cluster and with the given + * contact points. Therefore it's not required to call {@link Cluster.Builder#addContactPoints}, + * it will be done automatically. + * + * @return The cluster builder (for method chaining). + */ + public static Builder configureClusterBuilder( + Builder builder, CCMAccess ccm, InetAddress... contactPoints) { + builder + // use a different codec registry for each cluster instance + .withCodecRegistry(new CodecRegistry()) + .addContactPoints(contactPoints) + .withPort(ccm.getBinaryPort()); + return builder; + } + /** @return a {@link QueryOptions} that disables debouncing by setting intervals to 0ms. */ public static QueryOptions nonDebouncingQueryOptions() { return new QueryOptions() @@ -868,6 +897,8 @@ public static void executeNoFail(Callable task, boolean logException) { task.call(); } catch (Exception e) { if (logException) logger.error(e.getMessage(), e); + } catch (AssertionError e) { + if (logException) logger.error(e.getMessage(), e); } } @@ -981,7 +1012,7 @@ public static Level setLogLevel(String logger, Level newLevel) { /** * Throws a {@link SkipException} if the input {@link CCMAccess} does not support compact storage - * (C* 4.0+) + * (C* 4.0+ or DSE 6.0+). * * @param ccm cluster to check against */ @@ -990,5 +1021,9 @@ public static void compactStorageSupportCheck(CCMAccess ccm) { throw new SkipException( "Compact tables are not allowed in Cassandra starting with 4.0 version"); } + if (ccm.getDSEVersion() != null + && ccm.getDSEVersion().compareTo(VersionNumber.parse("6.0")) >= 0) { + throw new SkipException("Compact tables are not allowed in DSE starting with 6.0 version"); + } } } diff --git a/driver-core/src/test/java/com/datastax/driver/core/TimeoutStressTest.java b/driver-core/src/test/java/com/datastax/driver/core/TimeoutStressTest.java index ecf36c2e87b..8278adb8d44 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/TimeoutStressTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/TimeoutStressTest.java @@ -63,7 +63,7 @@ public Cluster.Builder createClusterBuilder() { channelMonitor = register(new SocketChannelMonitor()); PoolingOptions poolingOptions = new PoolingOptions().setConnectionsPerHost(HostDistance.LOCAL, 8, 8); - return Cluster.builder() + return super.createClusterBuilder() .withPoolingOptions(poolingOptions) .withNettyOptions(channelMonitor.nettyOptions()) .withReconnectionPolicy(new ConstantReconnectionPolicy(1000)); diff --git a/driver-core/src/test/java/com/datastax/driver/core/TransietReplicationTest.java b/driver-core/src/test/java/com/datastax/driver/core/TransientReplicationTest.java similarity index 95% rename from driver-core/src/test/java/com/datastax/driver/core/TransietReplicationTest.java rename to driver-core/src/test/java/com/datastax/driver/core/TransientReplicationTest.java index 849d8f99a49..4a0521228a8 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/TransietReplicationTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/TransientReplicationTest.java @@ -28,11 +28,9 @@ import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; -@CassandraVersion( - value = "4.0.0-alpha1", - description = "Transient Replication is for Cassandra 4.0+") +@CassandraVersion(value = "4.0.0", description = "Transient Replication is for Cassandra 4.0+") @CCMConfig(config = "enable_transient_replication:true") -public class TransietReplicationTest extends CCMTestsSupport { +public class TransientReplicationTest extends CCMTestsSupport { private static final String TRANSIENT_REPLICATION_KEYSPACE = "transient_rep_ks"; diff --git a/driver-core/src/test/java/com/datastax/driver/core/TypeCodecOverlappingJavaTypeIntegrationTest.java b/driver-core/src/test/java/com/datastax/driver/core/TypeCodecOverlappingJavaTypeIntegrationTest.java index 3b25b25adc7..874893fb351 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/TypeCodecOverlappingJavaTypeIntegrationTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/TypeCodecOverlappingJavaTypeIntegrationTest.java @@ -46,7 +46,7 @@ public void onTestContextInitialized() { } public Cluster.Builder createClusterBuilder() { - return Cluster.builder() + return super.createClusterBuilder() .withCodecRegistry(new CodecRegistry().register(new IntToStringCodec())); } diff --git a/driver-core/src/test/java/com/datastax/driver/core/TypeCodecTupleIntegrationTest.java b/driver-core/src/test/java/com/datastax/driver/core/TypeCodecTupleIntegrationTest.java index 3d7a68f7133..fecc7579403 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/TypeCodecTupleIntegrationTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/TypeCodecTupleIntegrationTest.java @@ -97,17 +97,13 @@ public void should_handle_partial_tuples_with_default_codecs() { @Test(groups = "short") public void should_handle_tuples_with_custom_codecs() { - CodecRegistry codecRegistry = new CodecRegistry(); - Cluster cluster = - register( - Cluster.builder() - .addContactPoints(getContactPoints()) - .withPort(ccm().getBinaryPort()) - .withCodecRegistry(codecRegistry) - .build()); + Cluster cluster = register(createClusterBuilder().build()); Session session = cluster.connect(keyspace); setUpTupleTypes(cluster); - codecRegistry.register(new LocationCodec(TypeCodec.tuple(locationType))); + cluster + .getConfiguration() + .getCodecRegistry() + .register(new LocationCodec(TypeCodec.tuple(locationType))); session.execute(insertQuery, uuid, "John Doe", locationValue); ResultSet rows = session.execute(selectQuery, uuid); Row row = rows.one(); @@ -129,17 +125,13 @@ public void should_handle_tuples_with_custom_codecs() { @Test(groups = "short") public void should_handle_partial_tuples_with_custom_codecs() { - CodecRegistry codecRegistry = new CodecRegistry(); - Cluster cluster = - register( - Cluster.builder() - .addContactPoints(getContactPoints()) - .withPort(ccm().getBinaryPort()) - .withCodecRegistry(codecRegistry) - .build()); + Cluster cluster = register(createClusterBuilder().build()); Session session = cluster.connect(keyspace); setUpTupleTypes(cluster); - codecRegistry.register(new LocationCodec(TypeCodec.tuple(locationType))); + cluster + .getConfiguration() + .getCodecRegistry() + .register(new LocationCodec(TypeCodec.tuple(locationType))); session.execute(insertQuery, uuid, "John Doe", partialLocationValueInserted); ResultSet rows = session.execute(selectQuery, uuid); Row row = rows.one(); diff --git a/driver-core/src/test/java/com/datastax/driver/core/TypeCodecUDTIntegrationTest.java b/driver-core/src/test/java/com/datastax/driver/core/TypeCodecUDTIntegrationTest.java index c92580782d3..d3d14966edb 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/TypeCodecUDTIntegrationTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/TypeCodecUDTIntegrationTest.java @@ -74,19 +74,14 @@ public void should_handle_udts_with_default_codecs() { @Test(groups = "short") public void should_handle_udts_with_custom_codecs() { - CodecRegistry codecRegistry = new CodecRegistry(); - Cluster cluster = - register( - Cluster.builder() - .addContactPoints(getContactPoints()) - .withPort(ccm().getBinaryPort()) - .withCodecRegistry(codecRegistry) - .build()); + Cluster cluster = register(createClusterBuilder().build()); Session session = cluster.connect(keyspace); setUpUserTypes(cluster); TypeCodec addressTypeCodec = TypeCodec.userType(addressType); TypeCodec phoneTypeCodec = TypeCodec.userType(phoneType); - codecRegistry + cluster + .getConfiguration() + .getCodecRegistry() .register(new AddressCodec(addressTypeCodec, Address.class)) .register(new PhoneCodec(phoneTypeCodec, Phone.class)); session.execute(insertQuery, uuid, "John Doe", address); diff --git a/driver-core/src/test/java/com/datastax/driver/core/UnresolvedUserTypeTest.java b/driver-core/src/test/java/com/datastax/driver/core/UnresolvedUserTypeTest.java index 5ce5355197d..eb9faa03923 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/UnresolvedUserTypeTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/UnresolvedUserTypeTest.java @@ -104,19 +104,12 @@ Creates the following acyclic graph (edges directed upwards public void should_resolve_nested_user_types() throws ExecutionException, InterruptedException { // Each CREATE TYPE statement in getTableDefinitions() has triggered a partial schema refresh - // that - // should have used previous UDT definitions for dependencies. + // that should have used previous UDT definitions for dependencies. checkUserTypes(cluster().getMetadata()); // Create a different Cluster instance to force a full refresh where all UDTs are loaded at - // once. - // The parsing logic should sort them to make sure they are loaded in the right order. - Cluster newCluster = - register( - Cluster.builder() - .addContactPoints(getContactPoints()) - .withPort(ccm().getBinaryPort()) - .build()); + // once. The parsing logic should sort them to make sure they are loaded in the right order. + Cluster newCluster = register(createClusterBuilder().build()); checkUserTypes(newCluster.getMetadata()); } diff --git a/driver-core/src/test/java/com/datastax/driver/core/cloud/CloudTest.java b/driver-core/src/test/java/com/datastax/driver/core/cloud/CloudTest.java index edf41534221..cfbe0a4f6d9 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/cloud/CloudTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/cloud/CloudTest.java @@ -26,6 +26,7 @@ import com.datastax.driver.core.Cluster; import com.datastax.driver.core.EndPoint; import com.datastax.driver.core.PlainTextAuthProvider; +import com.datastax.driver.core.ProtocolVersion; import com.datastax.driver.core.ResultSet; import com.datastax.driver.core.Session; import com.datastax.driver.core.exceptions.AuthenticationException; @@ -73,6 +74,7 @@ public void should_connect_to_proxy_using_absolute_path() { Session session = Cluster.builder() .withCloudSecureConnectBundle(proxy.getSecureBundleFile()) + .withProtocolVersion(ProtocolVersion.V4) .build() .connect(); ResultSet set = session.execute("select * from system.local"); @@ -84,7 +86,11 @@ public void should_connect_to_proxy_using_non_normalized_path() { String path = String.format("%s/%s", proxy.getProxyRootPath(), "certs/bundles/../bundles/creds-v1.zip"); Session session = - Cluster.builder().withCloudSecureConnectBundle(new File(path)).build().connect(); + Cluster.builder() + .withCloudSecureConnectBundle(new File(path)) + .withProtocolVersion(ProtocolVersion.V4) + .build() + .connect(); ResultSet set = session.execute("select * from system.local"); assertThat(set).isNotNull(); } @@ -104,7 +110,12 @@ public void should_connect_to_proxy_using_file_provided_by_the_http_URL() throws new URL(String.format("http://localhost:%d%s", wireMockServer.port(), CERTS_BUNDLE_SUFFIX)); // when - Session session = Cluster.builder().withCloudSecureConnectBundle(configFile).build().connect(); + Session session = + Cluster.builder() + .withCloudSecureConnectBundle(configFile) + .withProtocolVersion(ProtocolVersion.V4) + .build() + .connect(); // then ResultSet set = session.execute("select * from system.local"); @@ -127,7 +138,11 @@ public void should_connect_to_proxy_using_file_provided_by_input_stream() throws // when Session session = - Cluster.builder().withCloudSecureConnectBundle(configFile.openStream()).build().connect(); + Cluster.builder() + .withCloudSecureConnectBundle(configFile.openStream()) + .withProtocolVersion(ProtocolVersion.V4) + .build() + .connect(); // then ResultSet set = session.execute("select * from system.local"); @@ -140,6 +155,7 @@ public void should_connect_to_proxy_using_auth_provider() { Cluster.builder() .withCloudSecureConnectBundle(proxy.getSecureBundleNoCredsPath()) .withAuthProvider(new PlainTextAuthProvider("cassandra", "cassandra")) + .withProtocolVersion(ProtocolVersion.V4) .build() .connect(); ResultSet set = session.execute("select * from system.local"); @@ -152,6 +168,7 @@ public void should_not_connect_to_proxy_bad_creds() { Session session = Cluster.builder() .withCloudSecureConnectBundle(proxy.getSecureBundleNoCredsPath()) + .withProtocolVersion(ProtocolVersion.V4) .build() .connect(); fail("Expected an AuthenticationException"); @@ -166,6 +183,7 @@ public void should_not_connect_to_proxy() { Session session = Cluster.builder() .withCloudSecureConnectBundle(proxy.getSecureBundleUnreachable()) + .withProtocolVersion(ProtocolVersion.V4) .build() .connect(); fail("Expected an IllegalStateException"); @@ -182,6 +200,7 @@ public void should_not_allow_contact_points_and_cloud() { .addContactPoint("127.0.0.1") .withCloudSecureConnectBundle(proxy.getSecureBundleNoCredsPath()) .withCredentials("cassandra", "cassandra") + .withProtocolVersion(ProtocolVersion.V4) .build() .connect(); fail("Expected an IllegalStateException"); @@ -200,6 +219,7 @@ public void should_not_allow_cloud_with_contact_points_string() { .withCloudSecureConnectBundle(proxy.getSecureBundleNoCredsPath()) .addContactPoint("127.0.0.1") .withCredentials("cassandra", "cassandra") + .withProtocolVersion(ProtocolVersion.V4) .build() .connect(); fail("Expected an IllegalStateException"); @@ -224,6 +244,7 @@ public InetSocketAddress resolve() { } }) .withCredentials("cassandra", "cassandra") + .withProtocolVersion(ProtocolVersion.V4) .build() .connect(); fail("Expected an IllegalStateException"); diff --git a/driver-core/src/test/java/com/datastax/driver/core/policies/CloseableLoadBalancingPolicyTest.java b/driver-core/src/test/java/com/datastax/driver/core/policies/CloseableLoadBalancingPolicyTest.java index 475d5b2b153..26a5409490f 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/policies/CloseableLoadBalancingPolicyTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/policies/CloseableLoadBalancingPolicyTest.java @@ -40,9 +40,7 @@ public void should_be_invoked_at_shutdown() { @Override public Cluster.Builder createClusterBuilder() { policy = new CloseMonitoringPolicy(Policies.defaultLoadBalancingPolicy()); - return Cluster.builder() - .addContactPoints(getContactPoints().get(0)) - .withLoadBalancingPolicy(policy); + return super.createClusterBuilder().withLoadBalancingPolicy(policy); } static class CloseMonitoringPolicy extends DelegatingLoadBalancingPolicy { diff --git a/driver-core/src/test/java/com/datastax/driver/core/policies/TokenAwarePolicyTest.java b/driver-core/src/test/java/com/datastax/driver/core/policies/TokenAwarePolicyTest.java index 2bc7ff201be..cdd17ffade0 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/policies/TokenAwarePolicyTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/policies/TokenAwarePolicyTest.java @@ -508,9 +508,7 @@ public void should_properly_generate_and_use_routing_key_for_composite_partition ccm.start(); Cluster cluster = - Cluster.builder() - .addContactPoints(ccm.addressOfNode(1).getAddress()) - .withPort(ccm.getBinaryPort()) + TestUtils.configureClusterBuilder(Cluster.builder(), ccm) .withNettyOptions(nonQuietClusterCloseOptions) .withLoadBalancingPolicy(new TokenAwarePolicy(new RoundRobinPolicy())) .build(); diff --git a/driver-extras/src/test/java/com/datastax/driver/extras/codecs/arrays/ArrayCodecsTest.java b/driver-extras/src/test/java/com/datastax/driver/extras/codecs/arrays/ArrayCodecsTest.java index d541fc1ed7c..762791feddf 100644 --- a/driver-extras/src/test/java/com/datastax/driver/extras/codecs/arrays/ArrayCodecsTest.java +++ b/driver-extras/src/test/java/com/datastax/driver/extras/codecs/arrays/ArrayCodecsTest.java @@ -63,7 +63,7 @@ public void onTestContextInitialized() { @Override public Cluster.Builder createClusterBuilder() { - return Cluster.builder() + return super.createClusterBuilder() .withCodecRegistry( new CodecRegistry() .register(IntArrayCodec.instance) diff --git a/driver-mapping/src/test/java/com/datastax/driver/mapping/MapperUDTTest.java b/driver-mapping/src/test/java/com/datastax/driver/mapping/MapperUDTTest.java index ac075a1f4e6..12fb9b4f4b5 100644 --- a/driver-mapping/src/test/java/com/datastax/driver/mapping/MapperUDTTest.java +++ b/driver-mapping/src/test/java/com/datastax/driver/mapping/MapperUDTTest.java @@ -338,12 +338,7 @@ public void testAccessor() throws Exception { public void should_be_able_to_use_udtCodec_standalone() { // Create a separate Cluster/Session to start with a CodecRegistry from scratch (so not already // registered). - Cluster cluster = - register( - Cluster.builder() - .addContactPoints(getContactPoints()) - .withPort(ccm().getBinaryPort()) - .build()); + Cluster cluster = register(createClusterBuilder().build()); CodecRegistry registry = cluster.getConfiguration().getCodecRegistry(); Session session = cluster.connect(keyspace); @@ -557,7 +552,7 @@ public void should_throw_error_when_table_is_altered_and_is_not_compatible_anymo } catch (InvalidQueryException e) { // Error message varies by C* version. assertThat(e.getMessage()) - .isIn("Unknown identifier mainaddress", "Undefined column name mainaddress"); + .matches("(Unknown identifier mainaddress|Undefined column name mainaddress.*)"); } try { mapper.get(user.getUserId()); @@ -565,17 +560,15 @@ public void should_throw_error_when_table_is_altered_and_is_not_compatible_anymo } catch (InvalidQueryException e) { // Error message varies by C* version. assertThat(e.getMessage()) - .isIn( - "Undefined name mainaddress in selection clause", - "Undefined column name mainaddress"); + .matches( + "(Undefined name mainaddress in selection clause|Undefined column name mainaddress.*)"); } // trying to use a new mapper try { manager.mapper(User.class); fail("Expected IllegalArgumentException"); } catch (IllegalArgumentException e) { - assertThat(e.getMessage()) - .isIn(String.format("Column mainaddress does not exist in table \"%s\".users", keyspace)); + assertThat(e.getMessage()).startsWith("Column mainaddress does not exist"); } } diff --git a/driver-mapping/src/test/java/com/datastax/driver/mapping/UDTFieldMapperTest.java b/driver-mapping/src/test/java/com/datastax/driver/mapping/UDTFieldMapperTest.java index 9256f7f74d4..f66b4a5708a 100644 --- a/driver-mapping/src/test/java/com/datastax/driver/mapping/UDTFieldMapperTest.java +++ b/driver-mapping/src/test/java/com/datastax/driver/mapping/UDTFieldMapperTest.java @@ -38,12 +38,7 @@ public class UDTFieldMapperTest extends CCMTestsSupport { @Test(groups = "short") public void udt_and_tables_with_ks_created_in_another_session_should_be_mapped() { - Cluster cluster1 = - register( - Cluster.builder() - .addContactPoints(getContactPoints().get(0)) - .withPort(ccm().getBinaryPort()) - .build()); + Cluster cluster1 = register(createClusterBuilder().build()); Session session1 = cluster1.connect(); // Create type and table session1.execute( @@ -57,12 +52,7 @@ public void udt_and_tables_with_ks_created_in_another_session_should_be_mapped() cluster1.close(); // Create entities with another connection - Cluster cluster2 = - register( - Cluster.builder() - .addContactPoints(getContactPoints().get(0)) - .withPort(ccm().getBinaryPort()) - .build()); + Cluster cluster2 = register(createClusterBuilder().build()); Session session2 = cluster2.newSession(); Mapper hashMapper = new MappingManager(session2).mapper(MyHashWithKeyspace.class); @@ -81,12 +71,7 @@ public void udt_and_tables_with_ks_created_in_another_session_should_be_mapped() @Test(groups = "short") public void udt_and_tables_without_ks_created_in_another_session_should_be_mapped() { - Cluster cluster1 = - register( - Cluster.builder() - .addContactPoints(getContactPoints().get(0)) - .withPort(ccm().getBinaryPort()) - .build()); + Cluster cluster1 = register(createClusterBuilder().build()); Session session1 = cluster1.connect(); session1.execute( "create keyspace if not exists java_509b " @@ -100,12 +85,7 @@ public void udt_and_tables_without_ks_created_in_another_session_should_be_mappe cluster1.close(); // Create entities with another connection - Cluster cluster2 = - register( - Cluster.builder() - .addContactPoints(getContactPoints().get(0)) - .withPort(ccm().getBinaryPort()) - .build()); + Cluster cluster2 = register(createClusterBuilder().build()); Session session2 = cluster2.newSession(); session2.execute("use java_509b"); From 46efef05b4db9c958e94da7a106a1d033be0afaa Mon Sep 17 00:00:00 2001 From: Alexandre Dutra Date: Thu, 11 Mar 2021 14:54:47 +0100 Subject: [PATCH 015/112] Update version in docs --- README.md | 16 +++--- changelog/README.md | 10 ++-- faq/README.md | 4 +- faq/osgi/README.md | 2 +- manual/README.md | 30 +++++------ manual/address_resolution/README.md | 4 +- manual/async/README.md | 8 +-- manual/auth/README.md | 8 +-- manual/compression/README.md | 2 +- manual/control_connection/README.md | 2 +- manual/custom_codecs/README.md | 38 +++++++------- manual/custom_codecs/extras/README.md | 48 ++++++++--------- manual/custom_payloads/README.md | 4 +- manual/idempotence/README.md | 6 +-- manual/load_balancing/README.md | 34 ++++++------ manual/logging/README.md | 10 ++-- manual/metadata/README.md | 38 +++++++------- manual/metrics/README.md | 12 ++--- manual/native_protocol/README.md | 10 ++-- manual/object_mapper/README.md | 2 +- manual/object_mapper/creating/README.md | 26 +++++----- manual/object_mapper/custom_codecs/README.md | 6 +-- manual/object_mapper/using/README.md | 18 +++---- manual/paging/README.md | 8 +-- manual/pooling/README.md | 26 +++++----- manual/query_timestamps/README.md | 8 +-- manual/reconnection/README.md | 8 +-- manual/retries/README.md | 54 ++++++++++---------- manual/shaded_jar/README.md | 8 +-- manual/socket_options/README.md | 24 ++++----- manual/speculative_execution/README.md | 22 ++++---- manual/ssl/README.md | 10 ++-- manual/statements/README.md | 16 +++--- manual/statements/batch/README.md | 6 +-- manual/statements/built/README.md | 10 ++-- manual/statements/prepared/README.md | 12 ++--- manual/statements/simple/README.md | 2 +- manual/tuples/README.md | 8 +-- manual/udts/README.md | 4 +- pom.xml | 2 +- 40 files changed, 285 insertions(+), 281 deletions(-) diff --git a/README.md b/README.md index db50f55c590..6eaa9c43305 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ not yet have been released. You can find the documentation for the latest version through the [Java driver docs](http://docs.datastax.com/en/developer/java-driver/latest/index.html) or via the release tags, [e.g. -3.10.2](https://github.com/datastax/java-driver/tree/3.10.2).* +3.11.0](https://github.com/datastax/java-driver/tree/3.11.0).* A modern, [feature-rich](manual/) and highly tunable Java client library for Apache Cassandra (2.1+) and using exclusively Cassandra's binary protocol @@ -50,12 +50,12 @@ The driver contains the following modules: driver releases and important announcements (low frequency). [@DataStaxEng](https://twitter.com/datastaxeng) has more news including other drivers, Cassandra, and DSE. -- DOCS: the [manual](http://docs.datastax.com/en/developer/java-driver/3.10/manual/) has quick +- DOCS: the [manual](http://docs.datastax.com/en/developer/java-driver/3.11/manual/) has quick start material and technical details about the driver and its features. -- API: https://docs.datastax.com/en/drivers/java/3.10 +- API: https://docs.datastax.com/en/drivers/java/3.11 - GITHUB REPOSITORY: https://github.com/datastax/java-driver - [changelog](changelog/) -- [binary tarball](http://downloads.datastax.com/java-driver/cassandra-java-driver-3.10.2.tar.gz) +- [binary tarball](http://downloads.datastax.com/java-driver/cassandra-java-driver-3.11.0.tar.gz) ## Getting the driver @@ -77,7 +77,7 @@ Note that the object mapper is published as a separate artifact: com.datastax.cassandra cassandra-driver-mapping - 3.10.2 + 3.11.0 ``` @@ -87,7 +87,7 @@ The 'extras' module is also published as a separate artifact: com.datastax.cassandra cassandra-driver-extras - 3.10.2 + 3.11.0 ``` @@ -96,12 +96,12 @@ We also provide a [shaded JAR](manual/shaded_jar/) to avoid the explicit dependency to Netty. If you can't use a dependency management tool, a -[binary tarball](http://downloads.datastax.com/java-driver/cassandra-java-driver-3.10.2.tar.gz) +[binary tarball](http://downloads.datastax.com/java-driver/cassandra-java-driver-3.11.0.tar.gz) is available for download. ## Compatibility -The Java client driver 3.10.2 ([branch 3.x](https://github.com/datastax/java-driver/tree/3.x)) is compatible with Apache +The Java client driver 3.11.0 ([branch 3.x](https://github.com/datastax/java-driver/tree/3.x)) is compatible with Apache Cassandra 2.1, 2.2 and 3.0+ (see [this page](http://docs.datastax.com/en/developer/java-driver/latest/manual/native_protocol/) for the most up-to-date compatibility information). diff --git a/changelog/README.md b/changelog/README.md index 7ad8de76e67..a91d0e1a917 100644 --- a/changelog/README.md +++ b/changelog/README.md @@ -5,26 +5,30 @@ 3.x versions get published. --> -## 3.11.0 (in progress) +## 3.11.0 - [improvement] JAVA-2705: Remove protocol v5 beta status, add v6-beta. - [bug] JAVA-2923: Detect and use Guava's new HostAndPort.getHost method. - [bug] JAVA-2922: Switch to modern framing format inside a channel handler. - [bug] JAVA-2924: Consider protocol version unsupported when server requires USE_BETA flag for it. + ## 3.10.2 - [bug] JAVA-2860: Avoid NPE if channel initialization crashes. + ## 3.10.1 - [bug] JAVA-2857: Fix NPE when built statements without parameters are logged at TRACE level. - [bug] JAVA-2843: Successfully parse DSE table schema in OSS driver. + ## 3.10.0 -- [improvement] JAVA-2676: Don't reschedule flusher after empty runs -- [new feature] JAVA-2772: Support new protocol v5 message format +- [improvement] JAVA-2676: Don't reschedule flusher after empty runs. +- [new feature] JAVA-2772: Support new protocol v5 message format. + ## 3.9.0 diff --git a/faq/README.md b/faq/README.md index 8ef0dd017b6..d806a414f71 100644 --- a/faq/README.md +++ b/faq/README.md @@ -35,7 +35,7 @@ row.getBool(0); // this is equivalent row.getBool("applied") Note that, unlike manual inspection, `wasApplied` does not consume the first row. -[wasApplied]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/ResultSet.html#wasApplied-- +[wasApplied]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/ResultSet.html#wasApplied-- ### What is a parameterized statement and how can I use it? @@ -289,7 +289,7 @@ version is available, you may want to reach out to the maintainer of that tool t an update with compatibility to this driver version. -[Blobs.java]: https://github.com/datastax/java-driver/tree/3.10.0/driver-examples/src/main/java/com/datastax/driver/examples/datatypes/Blobs.java +[Blobs.java]: https://github.com/datastax/java-driver/tree/3.11.0/driver-examples/src/main/java/com/datastax/driver/examples/datatypes/Blobs.java [CASSANDRA-7304]: https://issues.apache.org/jira/browse/CASSANDRA-7304 [Parameters and Binding]: ../manual/statements/prepared/#parameters-and-binding [Mapper options]: ../manual/object_mapper/using/#mapper-options diff --git a/faq/osgi/README.md b/faq/osgi/README.md index dd01626e2db..a2b17b676d3 100644 --- a/faq/osgi/README.md +++ b/faq/osgi/README.md @@ -157,7 +157,7 @@ it is also normal to see the following log lines when starting the driver: [BND]:http://bnd.bndtools.org/ [Maven bundle plugin]:https://cwiki.apache.org/confluence/display/FELIX/Apache+Felix+Maven+Bundle+Plugin+%28BND%29 [OSGi examples repository]:https://github.com/datastax/java-driver-examples-osgi -[without metrics]:https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/Cluster.Builder.html#withoutMetrics-- +[without metrics]:https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/Cluster.Builder.html#withoutMetrics-- [SLF4J]:http://www.slf4j.org/ [Logback]:http://logback.qos.ch/ [Tycho]:https://eclipse.org/tycho/ diff --git a/manual/README.md b/manual/README.md index 1635e1219f4..aebd1c91673 100644 --- a/manual/README.md +++ b/manual/README.md @@ -209,7 +209,7 @@ String firstName = row.getString("first_name"); blob getBytes java.nio.ByteBuffer boolean getBool boolean counter getLong long - date getDate LocalDate + date getDate LocalDate decimal getDecimal java.math.BigDecimal double getDouble double float getFloat float @@ -291,17 +291,17 @@ menu on the left hand side to navigate sub-sections. If you're [browsing the sou github.com](https://github.com/datastax/java-driver/tree/3.x/manual), simply navigate to each sub-directory. -[Cluster]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/Cluster.html -[Cluster.Builder]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/Cluster.Builder.html -[Initializer]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/Cluster.Initializer.html -[Session]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/Session.html -[ResultSet]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/ResultSet.html -[Row]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/Row.html -[NettyOptions]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/NettyOptions.html -[QueryOptions]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/QueryOptions.html -[SocketOptions]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/SocketOptions.html -[Host.StateListener]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/Host.StateListener.html -[LatencyTracker]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/LatencyTracker.html -[SchemaChangeListener]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/SchemaChangeListener.html -[NoHostAvailableException]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/exceptions/NoHostAvailableException.html -[LocalDate]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/LocalDate.html \ No newline at end of file +[Cluster]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/Cluster.html +[Cluster.Builder]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/Cluster.Builder.html +[Initializer]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/Cluster.Initializer.html +[Session]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/Session.html +[ResultSet]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/ResultSet.html +[Row]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/Row.html +[NettyOptions]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/NettyOptions.html +[QueryOptions]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/QueryOptions.html +[SocketOptions]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/SocketOptions.html +[Host.StateListener]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/Host.StateListener.html +[LatencyTracker]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/LatencyTracker.html +[SchemaChangeListener]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/SchemaChangeListener.html +[NoHostAvailableException]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/exceptions/NoHostAvailableException.html +[LocalDate]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/LocalDate.html \ No newline at end of file diff --git a/manual/address_resolution/README.md b/manual/address_resolution/README.md index 8f0ffd33740..0662ab92295 100644 --- a/manual/address_resolution/README.md +++ b/manual/address_resolution/README.md @@ -102,8 +102,8 @@ private/public switch automatically based on location). -[AddressTranslator]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/policies/AddressTranslator.html -[EC2MultiRegionAddressTranslator]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/policies/EC2MultiRegionAddressTranslator.html +[AddressTranslator]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/policies/AddressTranslator.html +[EC2MultiRegionAddressTranslator]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/policies/EC2MultiRegionAddressTranslator.html [cassandra.yaml]: https://docs.datastax.com/en/cassandra/3.x/cassandra/configuration/configCassandra_yaml.html [rpc_address]: https://docs.datastax.com/en/cassandra/3.x/cassandra/configuration/configCassandra_yaml.html?scroll=configCassandra_yaml__rpc_address diff --git a/manual/async/README.md b/manual/async/README.md index 21a70f7b767..43523cd548c 100644 --- a/manual/async/README.md +++ b/manual/async/README.md @@ -51,8 +51,8 @@ to the current page, and [fetchMoreResults] to get a future to the next page (see also the section on [paging](../paging/)). Here is a full example: -[getAvailableWithoutFetching]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/ResultSet.html#getAvailableWithoutFetching-- -[fetchMoreResults]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/ResultSet.html#fetchMoreResults-- +[getAvailableWithoutFetching]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/ResultSet.html#getAvailableWithoutFetching-- +[fetchMoreResults]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/ResultSet.html#fetchMoreResults-- ```java Statement statement = new SimpleStatement("select * from foo").setFetchSize(20); @@ -134,5 +134,5 @@ There are still a few places where the driver will block internally hasn't been fetched already. [ListenableFuture]: https://github.com/google/guava/wiki/ListenableFutureExplained -[init]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/Cluster.html#init-- -[query trace]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/QueryTrace.html +[init]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/Cluster.html#init-- +[query trace]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/QueryTrace.html diff --git a/manual/auth/README.md b/manual/auth/README.md index c8fc021b6f9..22838a4836d 100644 --- a/manual/auth/README.md +++ b/manual/auth/README.md @@ -28,7 +28,7 @@ You can also write your own provider; it must implement [AuthProvider]. [SASL]: https://en.wikipedia.org/wiki/Simple_Authentication_and_Security_Layer -[Cluster.Builder.withCredentials]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/Cluster.Builder.html#withCredentials-java.lang.String-java.lang.String- -[AuthProvider]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/AuthProvider.html -[Cluster.Builder.withAuthProvider]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/Cluster.Builder.html#withAuthProvider-com.datastax.driver.core.AuthProvider- -[PlainTextAuthProvider]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/PlainTextAuthProvider.html +[Cluster.Builder.withCredentials]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/Cluster.Builder.html#withCredentials-java.lang.String-java.lang.String- +[AuthProvider]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/AuthProvider.html +[Cluster.Builder.withAuthProvider]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/Cluster.Builder.html#withAuthProvider-com.datastax.driver.core.AuthProvider- +[PlainTextAuthProvider]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/PlainTextAuthProvider.html diff --git a/manual/compression/README.md b/manual/compression/README.md index d8563834180..ab96172418e 100644 --- a/manual/compression/README.md +++ b/manual/compression/README.md @@ -88,4 +88,4 @@ cluster = Cluster.builder() .build(); ``` -[pom]: https://repo1.maven.org/maven2/com/datastax/cassandra/cassandra-driver-parent/3.10.0/cassandra-driver-parent-3.10.0.pom +[pom]: https://repo1.maven.org/maven2/com/datastax/cassandra/cassandra-driver-parent/3.11.0/cassandra-driver-parent-3.11.0.pom diff --git a/manual/control_connection/README.md b/manual/control_connection/README.md index eb610627941..189ba31b82b 100644 --- a/manual/control_connection/README.md +++ b/manual/control_connection/README.md @@ -18,4 +18,4 @@ used exclusively for administrative requests. It is included in [Session.State.g as well as the `open-connections` [metric](../metrics); for example, if you've configured a pool size of 2, the control node will have 3 connections. -[Session.State.getOpenConnections]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/Session.State.html#getOpenConnections-com.datastax.driver.core.Host- \ No newline at end of file +[Session.State.getOpenConnections]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/Session.State.html#getOpenConnections-com.datastax.driver.core.Host- \ No newline at end of file diff --git a/manual/custom_codecs/README.md b/manual/custom_codecs/README.md index 108d7dab1d4..3d586a028f8 100644 --- a/manual/custom_codecs/README.md +++ b/manual/custom_codecs/README.md @@ -447,26 +447,26 @@ Beware that in these cases, the lookup performs in average 10x worse. If perform consider using prepared statements all the time. [JAVA-721]: https://datastax-oss.atlassian.net/browse/JAVA-721 -[TypeCodec]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/TypeCodec.html -[LocalDate]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/LocalDate.html +[TypeCodec]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/TypeCodec.html +[LocalDate]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/LocalDate.html [ByteBuffer]: http://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html -[serialize]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/TypeCodec.html#serialize-T-com.datastax.driver.core.ProtocolVersion- -[deserialize]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/TypeCodec.html#deserialize-java.nio.ByteBuffer-com.datastax.driver.core.ProtocolVersion- -[TypeCodec.format]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/TypeCodec.html#format-T- -[TypeCodec.parse]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/TypeCodec.html#parse-java.lang.String- -[accepts]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/TypeCodec.html#accepts-com.datastax.driver.core.DataType- -[CodecRegistry]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/CodecRegistry.html -[CodecNotFoundException]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/exceptions/CodecNotFoundException.html +[serialize]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/TypeCodec.html#serialize-T-com.datastax.driver.core.ProtocolVersion- +[deserialize]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/TypeCodec.html#deserialize-java.nio.ByteBuffer-com.datastax.driver.core.ProtocolVersion- +[TypeCodec.format]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/TypeCodec.html#format-T- +[TypeCodec.parse]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/TypeCodec.html#parse-java.lang.String- +[accepts]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/TypeCodec.html#accepts-com.datastax.driver.core.DataType- +[CodecRegistry]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/CodecRegistry.html +[CodecNotFoundException]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/exceptions/CodecNotFoundException.html [Jackson]: https://github.com/FasterXML/jackson [AbstractType]: https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/db/marshal/AbstractType.java -[UserType]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/UserType.html -[UDTValue]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/UDTValue.html -[TupleType]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/TupleType.html -[TupleValue]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/TupleValue.html -[CustomType]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/DataType.CustomType.html +[UserType]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/UserType.html +[UDTValue]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/UDTValue.html +[TupleType]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/TupleType.html +[TupleValue]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/TupleValue.html +[CustomType]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/DataType.CustomType.html [TypeToken]: https://google.github.io/guava/releases/19.0/api/docs/com/google/common/reflect/TypeToken.html -[SimpleStatement]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/SimpleStatement.html -[BuiltStatement]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/querybuilder/BuiltStatement.html -[setList]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/SettableByIndexData.html#setList-int-java.util.List- -[setSet]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/SettableByIndexData.html#setSet-int-java.util.Set- -[setMap]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/SettableByIndexData.html#setMap-int-java.util.Map- +[SimpleStatement]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/SimpleStatement.html +[BuiltStatement]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/querybuilder/BuiltStatement.html +[setList]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/SettableByIndexData.html#setList-int-java.util.List- +[setSet]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/SettableByIndexData.html#setSet-int-java.util.Set- +[setMap]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/SettableByIndexData.html#setMap-int-java.util.Map- diff --git a/manual/custom_codecs/extras/README.md b/manual/custom_codecs/extras/README.md index 25c7a606920..9e253aa60e3 100644 --- a/manual/custom_codecs/extras/README.md +++ b/manual/custom_codecs/extras/README.md @@ -10,7 +10,7 @@ The module is published as a separate Maven artifact: com.datastax.cassandra cassandra-driver-extras - 3.10.0 + 3.11.0 ``` @@ -73,12 +73,12 @@ session.execute("INSERT INTO example (id, t) VALUES (1, ?)", ZoneId.of("GMT+07:00")); ``` -[InstantCodec]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/extras/codecs/jdk8/InstantCodec.html -[LocalDateCodec]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/extras/codecs/jdk8/LocalDateCodec.html -[LocalDateTimeCodec]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/extras/codecs/jdk8/LocalDateTimeCodec.html -[LocalTimeCodec]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/extras/codecs/jdk8/LocalTimeCodec.html -[ZonedDateTimeCodec]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/extras/codecs/jdk8/ZonedDateTimeCodec.html -[ZoneIdCodec]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/extras/codecs/jdk8/ZoneIdCodec.html +[InstantCodec]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/extras/codecs/jdk8/InstantCodec.html +[LocalDateCodec]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/extras/codecs/jdk8/LocalDateCodec.html +[LocalDateTimeCodec]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/extras/codecs/jdk8/LocalDateTimeCodec.html +[LocalTimeCodec]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/extras/codecs/jdk8/LocalTimeCodec.html +[ZonedDateTimeCodec]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/extras/codecs/jdk8/ZonedDateTimeCodec.html +[ZoneIdCodec]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/extras/codecs/jdk8/ZoneIdCodec.html [Instant]: https://docs.oracle.com/javase/8/docs/api/java/time/Instant.html [LocalDate]: https://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html [LocalDateTime]: https://docs.oracle.com/javase/8/docs/api/java/time/LocalDateTime.html @@ -130,10 +130,10 @@ session.execute("INSERT INTO example (id, t) VALUES (1, ?)", DateTime.parse("2010-06-30T01:20:47.999+01:00")); ``` -[InstantCodec_joda]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/extras/codecs/joda/InstantCodec.html -[LocalDateCodec_joda]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/extras/codecs/joda/LocalDateCodec.html -[LocalTimeCodec_joda]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/extras/codecs/joda/LocalTimeCodec.html -[DateTimeCodec]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/extras/codecs/joda/DateTimeCodec.html +[InstantCodec_joda]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/extras/codecs/joda/InstantCodec.html +[LocalDateCodec_joda]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/extras/codecs/joda/LocalDateCodec.html +[LocalTimeCodec_joda]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/extras/codecs/joda/LocalTimeCodec.html +[DateTimeCodec]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/extras/codecs/joda/DateTimeCodec.html [DateTime]: http://www.joda.org/joda-time/apidocs/org/joda/time/DateTime.html [Instant_joda]: http://www.joda.org/joda-time/apidocs/org/joda/time/Instant.html [LocalDate_joda]: http://www.joda.org/joda-time/apidocs/org/joda/time/LocalDate.html @@ -151,8 +151,8 @@ Time can also be expressed as simple durations: There is no extra codec for `time`, because by default the driver already maps that type to a `long` representing the number of nanoseconds since midnight. -[SimpleTimestampCodec]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/extras/codecs/date/SimpleTimestampCodec.html -[SimpleDateCodec]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/extras/codecs/date/SimpleDateCodec.html +[SimpleTimestampCodec]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/extras/codecs/date/SimpleTimestampCodec.html +[SimpleDateCodec]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/extras/codecs/date/SimpleDateCodec.html ### Enums @@ -190,8 +190,8 @@ Note that if you registered an `EnumNameCodec` and an `EnumOrdinalCodec` _for th In practice, this is unlikely to happen, because you'll probably stick to a single CQL type for a given enum type; however, if you ever run into that issue, the workaround is to use [prepared statements](../../statements/prepared/), for which the driver knows the CQL type and can pick the exact codec. -[EnumNameCodec]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/extras/codecs/enums/EnumNameCodec.html -[EnumOrdinalCodec]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/extras/codecs/enums/EnumOrdinalCodec.html +[EnumNameCodec]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/extras/codecs/enums/EnumNameCodec.html +[EnumOrdinalCodec]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/extras/codecs/enums/EnumOrdinalCodec.html [name]: https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html#name-- [ordinal]: https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html#ordinal-- @@ -236,7 +236,7 @@ session.execute("insert into example (id, owner) values (1, ?)", // owner saved as '{"id":1,"name":"root"}' ``` -[JacksonJsonCodec]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/extras/codecs/json/JacksonJsonCodec.html +[JacksonJsonCodec]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/extras/codecs/json/JacksonJsonCodec.html [Jackson]: https://github.com/FasterXML/jackson @@ -275,7 +275,7 @@ session.execute("insert into example (id, owner) values (1, ?)", ``` -[Jsr353JsonCodec]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/extras/codecs/json/Jsr353JsonCodec.html +[Jsr353JsonCodec]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/extras/codecs/json/Jsr353JsonCodec.html [JsonStructure]: https://docs.oracle.com/javaee/7/tutorial/jsonp002.htm @@ -328,7 +328,7 @@ For the same reason, we need to give a type hint when setting "v", in the form o anonymous inner class; we recommend storing these tokens as constants in a utility class, to avoid creating them too often. -[OptionalCodec]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/extras/codecs/jdk8/OptionalCodec.html +[OptionalCodec]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/extras/codecs/jdk8/OptionalCodec.html [Optional]: https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html [TypeToken]: http://google.github.io/guava/releases/19.0/api/docs/com/google/common/reflect/TypeToken.html @@ -372,7 +372,7 @@ session.execute(pst.bind() See the JDK8 Optional section above for explanations about [TypeToken]. -[OptionalCodec_guava]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/extras/codecs/guava/OptionalCodec.html +[OptionalCodec_guava]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/extras/codecs/guava/OptionalCodec.html [Optional_guava]: http://google.github.io/guava/releases/19.0/api/docs/com/google/common/base/Optional.html @@ -397,9 +397,9 @@ session.execute("insert into example (i, l) values (1, ?)", Package [com.datastax.driver.extras.codecs.arrays][arrays] contains similar codecs for all primitive types, and [ObjectArrayCodec] to map arrays of objects. -[IntArrayCodec]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/extras/codecs/arrays/IntArrayCodec.html -[ObjectArrayCodec]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/extras/codecs/arrays/ObjectArrayCodec.html -[arrays]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/extras/codecs/arrays/package-summary.html +[IntArrayCodec]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/extras/codecs/arrays/IntArrayCodec.html +[ObjectArrayCodec]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/extras/codecs/arrays/ObjectArrayCodec.html +[arrays]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/extras/codecs/arrays/package-summary.html ### Abstract utilities @@ -429,5 +429,5 @@ These two classes are convenient, but since they perform conversions in two step optimal approach. If performance is paramount, it's better to start from scratch and convert your objects to `ByteBuffer` directly. -[MappingCodec]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/extras/codecs/MappingCodec.html -[ParsingCodec]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/extras/codecs/ParsingCodec.html +[MappingCodec]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/extras/codecs/MappingCodec.html +[ParsingCodec]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/extras/codecs/ParsingCodec.html diff --git a/manual/custom_payloads/README.md b/manual/custom_payloads/README.md index a31cee5161b..7a4e726b9cd 100644 --- a/manual/custom_payloads/README.md +++ b/manual/custom_payloads/README.md @@ -241,8 +241,8 @@ The log message contains a pretty-printed version of the payload itself, and its [CASSANDRA-8553]: https://issues.apache.org/jira/browse/CASSANDRA-8553 [v4spec]: https://github.com/apache/cassandra/blob/trunk/doc/native_protocol_v4.spec [qh]: https://issues.apache.org/jira/browse/CASSANDRA-6659 -[nhae]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/exceptions/NoHostAvailableException.html +[nhae]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/exceptions/NoHostAvailableException.html [chm]: https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentHashMap.html [immutablemap]: http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/ImmutableMap.html -[ufe]:https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/exceptions/UnsupportedFeatureException.html +[ufe]:https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/exceptions/UnsupportedFeatureException.html diff --git a/manual/idempotence/README.md b/manual/idempotence/README.md index 71246748735..6894d5e889a 100644 --- a/manual/idempotence/README.md +++ b/manual/idempotence/README.md @@ -125,8 +125,8 @@ broke linearizability by doing a transparent retry at step 6. If linearizability is important for you, you should ensure that lightweight transactions are appropriately flagged as not idempotent. -[isIdempotent]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/Statement.html#isIdempotent-- -[setDefaultIdempotence]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/QueryOptions.html#setDefaultIdempotence-boolean- -[QueryBuilder]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/querybuilder/QueryBuilder.html +[isIdempotent]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/Statement.html#isIdempotent-- +[setDefaultIdempotence]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/QueryOptions.html#setDefaultIdempotence-boolean- +[QueryBuilder]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/querybuilder/QueryBuilder.html [linearizability]: https://en.wikipedia.org/wiki/Linearizability#Definition_of_linearizability \ No newline at end of file diff --git a/manual/load_balancing/README.md b/manual/load_balancing/README.md index dad615adeb8..4568c8025b5 100644 --- a/manual/load_balancing/README.md +++ b/manual/load_balancing/README.md @@ -277,11 +277,11 @@ For any host, the distance returned by the policy is always the same as its chil Query plans are based on the child policy's, except that hosts that are currently excluded for being too slow are moved to the end of the plan. -[withExclusionThreshold]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/policies/LatencyAwarePolicy.Builder.html#withExclusionThreshold-double- -[withMininumMeasurements]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/policies/LatencyAwarePolicy.Builder.html#withMininumMeasurements-int- -[withRetryPeriod]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/policies/LatencyAwarePolicy.Builder.html#withRetryPeriod-long-java.util.concurrent.TimeUnit- -[withScale]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/policies/LatencyAwarePolicy.Builder.html#withScale-long-java.util.concurrent.TimeUnit- -[withUpdateRate]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/policies/LatencyAwarePolicy.Builder.html#withUpdateRate-long-java.util.concurrent.TimeUnit- +[withExclusionThreshold]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/policies/LatencyAwarePolicy.Builder.html#withExclusionThreshold-double- +[withMininumMeasurements]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/policies/LatencyAwarePolicy.Builder.html#withMininumMeasurements-int- +[withRetryPeriod]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/policies/LatencyAwarePolicy.Builder.html#withRetryPeriod-long-java.util.concurrent.TimeUnit- +[withScale]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/policies/LatencyAwarePolicy.Builder.html#withScale-long-java.util.concurrent.TimeUnit- +[withUpdateRate]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/policies/LatencyAwarePolicy.Builder.html#withUpdateRate-long-java.util.concurrent.TimeUnit- ### Filtering policies @@ -299,15 +299,15 @@ studying the existing implementations first: `RoundRobinPolicy` is a good place complex ones like `DCAwareRoundRobinPolicy`. -[LoadBalancingPolicy]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/policies/LoadBalancingPolicy.html -[RoundRobinPolicy]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/policies/RoundRobinPolicy.html -[DCAwareRoundRobinPolicy]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/policies/DCAwareRoundRobinPolicy.html -[TokenAwarePolicy]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/policies/TokenAwarePolicy.html -[LatencyAwarePolicy]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/policies/LatencyAwarePolicy.html -[HostFilterPolicy]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/policies/HostFilterPolicy.html -[WhiteListPolicy]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/policies/WhiteListPolicy.html -[HostDistance]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/HostDistance.html -[refreshConnectedHosts]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/PoolingOptions.html#refreshConnectedHosts-- -[setMetadataEnabled]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/QueryOptions.html#setMetadataEnabled-boolean- -[Statement#getKeyspace]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/Statement.html#getKeyspace-- -[Statement#getRoutingKey]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/Statement.html#getRoutingKey-- +[LoadBalancingPolicy]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/policies/LoadBalancingPolicy.html +[RoundRobinPolicy]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/policies/RoundRobinPolicy.html +[DCAwareRoundRobinPolicy]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/policies/DCAwareRoundRobinPolicy.html +[TokenAwarePolicy]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/policies/TokenAwarePolicy.html +[LatencyAwarePolicy]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/policies/LatencyAwarePolicy.html +[HostFilterPolicy]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/policies/HostFilterPolicy.html +[WhiteListPolicy]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/policies/WhiteListPolicy.html +[HostDistance]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/HostDistance.html +[refreshConnectedHosts]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/PoolingOptions.html#refreshConnectedHosts-- +[setMetadataEnabled]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/QueryOptions.html#setMetadataEnabled-boolean- +[Statement#getKeyspace]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/Statement.html#getKeyspace-- +[Statement#getRoutingKey]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/Statement.html#getRoutingKey-- diff --git a/manual/logging/README.md b/manual/logging/README.md index d68f0c2d45c..a421be520ad 100644 --- a/manual/logging/README.md +++ b/manual/logging/README.md @@ -208,12 +208,12 @@ Aggregation query used without partition key ``` These -[query warnings](https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/ExecutionInfo.html#getWarnings--) +[query warnings](https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/ExecutionInfo.html#getWarnings--) are available programmatically from the -[ExecutionInfo](https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/ExecutionInfo.html) +[ExecutionInfo](https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/ExecutionInfo.html) via -[ResultSet](https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/ResultSet.html)'s -[getExecutionInfo()](https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/PagingIterable.html#getExecutionInfo--) +[ResultSet](https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/ResultSet.html)'s +[getExecutionInfo()](https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/PagingIterable.html#getExecutionInfo--) method. They are also logged by the driver: ``` @@ -340,4 +340,4 @@ It also turns on slow query tracing as described above. ``` -[query_logger]:https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/QueryLogger.html +[query_logger]:https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/QueryLogger.html diff --git a/manual/metadata/README.md b/manual/metadata/README.md index fd65ed90e4e..93dc169d9b4 100644 --- a/manual/metadata/README.md +++ b/manual/metadata/README.md @@ -4,7 +4,7 @@ The driver maintains global information about the Cassandra cluster it is connected to. It is available via [Cluster#getMetadata()][getMetadata]. -[getMetadata]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/Cluster.html#getMetadata-- +[getMetadata]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/Cluster.html#getMetadata-- ### Schema metadata @@ -12,8 +12,8 @@ Use [getKeyspace(String)][getKeyspace] or [getKeyspaces()][getKeyspaces] to get keyspace-level metadata. From there you can access the keyspace's objects (tables, and UDTs and UDFs if relevant). -[getKeyspace]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/Metadata.html#getKeyspace-java.lang.String- -[getKeyspaces]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/Metadata.html#getKeyspaces-- +[getKeyspace]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/Metadata.html#getKeyspace-java.lang.String- +[getKeyspaces]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/Metadata.html#getKeyspaces-- #### Refreshes @@ -47,8 +47,8 @@ Note that it is preferable to register a listener only *after* the cluster is fu otherwise the listener could be notified with a great deal of "Added" events as the driver builds the schema metadata from scratch for the first time. -[SchemaChangeListener]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/SchemaChangeListener.html -[registerListener]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/Cluster.html#register-com.datastax.driver.core.SchemaChangeListener- +[SchemaChangeListener]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/SchemaChangeListener.html +[registerListener]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/Cluster.html#register-com.datastax.driver.core.SchemaChangeListener- #### Schema agreement @@ -135,9 +135,9 @@ custom executor). Check out the API docs for the features in this section: -* [withMaxSchemaAgreementWaitSeconds(int)](https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/Cluster.Builder.html#withMaxSchemaAgreementWaitSeconds-int-) -* [isSchemaInAgreement()](https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/ExecutionInfo.html#isSchemaInAgreement--) -* [checkSchemaAgreement()](https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/Metadata.html#checkSchemaAgreement--) +* [withMaxSchemaAgreementWaitSeconds(int)](https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/Cluster.Builder.html#withMaxSchemaAgreementWaitSeconds-int-) +* [isSchemaInAgreement()](https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/ExecutionInfo.html#isSchemaInAgreement--) +* [checkSchemaAgreement()](https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/Metadata.html#checkSchemaAgreement--) ### Token metadata @@ -181,14 +181,14 @@ Starting with Cassandra 2.1.5, this information is available in a system table (see [CASSANDRA-7688](https://issues.apache.org/jira/browse/CASSANDRA-7688)). -[metadata]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/Metadata.html -[getTokenRanges]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/Metadata.html#getTokenRanges-- -[getTokenRanges2]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/Metadata.html#getTokenRanges-java.lang.String-com.datastax.driver.core.Host- -[getReplicas]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/Metadata.html#getReplicas-java.lang.String-com.datastax.driver.core.TokenRange- -[newToken]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/Metadata.html#newToken-java.lang.String- -[newTokenRange]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/Metadata.html#newTokenRange-com.datastax.driver.core.Token-com.datastax.driver.core.Token- -[TokenRange]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/TokenRange.html -[getTokens]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/Host.html#getTokens-- -[setToken]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/BoundStatement.html#setToken-int-com.datastax.driver.core.Token- -[getToken]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/Row.html#getToken-int- -[getPKToken]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/Row.html#getPartitionKeyToken-- +[metadata]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/Metadata.html +[getTokenRanges]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/Metadata.html#getTokenRanges-- +[getTokenRanges2]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/Metadata.html#getTokenRanges-java.lang.String-com.datastax.driver.core.Host- +[getReplicas]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/Metadata.html#getReplicas-java.lang.String-com.datastax.driver.core.TokenRange- +[newToken]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/Metadata.html#newToken-java.lang.String- +[newTokenRange]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/Metadata.html#newTokenRange-com.datastax.driver.core.Token-com.datastax.driver.core.Token- +[TokenRange]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/TokenRange.html +[getTokens]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/Host.html#getTokens-- +[setToken]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/BoundStatement.html#setToken-int-com.datastax.driver.core.Token- +[getToken]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/Row.html#getToken-int- +[getPKToken]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/Row.html#getPartitionKeyToken-- diff --git a/manual/metrics/README.md b/manual/metrics/README.md index 4f1d376d275..e751bcf5bcf 100644 --- a/manual/metrics/README.md +++ b/manual/metrics/README.md @@ -38,7 +38,7 @@ To do this in a maven project: com.datastax.cassandra cassandra-driver-core - 3.10.0 + 3.11.0 io.dropwizard.metrics @@ -146,8 +146,8 @@ reporter.start(); [Reporters]: http://metrics.dropwizard.io/3.2.2/manual/core.html#reporters [MetricRegistry]: http://metrics.dropwizard.io/3.2.2/apidocs/com/codahale/metrics/MetricRegistry.html [MXBeans]: https://docs.oracle.com/javase/tutorial/jmx/mbeans/mxbeans.html -[withClusterName]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/Cluster.Builder.html#withClusterName-java.lang.String- -[withoutMetrics]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/Cluster.Builder.html#withoutMetrics-- -[withoutJMXReporting]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/Cluster.Builder.html#withoutJMXReporting-- -[getMetrics]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/Cluster.html#getMetrics-- -[Metrics]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/Metrics.html +[withClusterName]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/Cluster.Builder.html#withClusterName-java.lang.String- +[withoutMetrics]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/Cluster.Builder.html#withoutMetrics-- +[withoutJMXReporting]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/Cluster.Builder.html#withoutJMXReporting-- +[getMetrics]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/Cluster.html#getMetrics-- +[Metrics]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/Metrics.html diff --git a/manual/native_protocol/README.md b/manual/native_protocol/README.md index e07ff9fe8bd..2a99eb73704 100644 --- a/manual/native_protocol/README.md +++ b/manual/native_protocol/README.md @@ -64,7 +64,7 @@ All host(s) tried for query failed [/127.0.0.1:9042] Host /127.0.0.1:9042 does not support protocol version V3 but V2)) ``` -[gpv]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/ProtocolOptions.html#getProtocolVersion-- +[gpv]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/ProtocolOptions.html#getProtocolVersion-- #### Protocol version with mixed clusters @@ -95,19 +95,19 @@ To avoid this issue, you can use one the following workarounds: #### v1 to v2 * bound variables in simple statements - ([Session#execute(String, Object...)](https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/Session.html#execute-java.lang.String-java.lang.Object...-)) -* [batch statements](https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/BatchStatement.html) + ([Session#execute(String, Object...)](https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/Session.html#execute-java.lang.String-java.lang.Object...-)) +* [batch statements](https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/BatchStatement.html) * [query paging](../paging/) #### v2 to v3 * the number of stream ids per connection goes from 128 to 32768 (see [Connection pooling](../pooling/)) -* [serial consistency on batch statements](https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/BatchStatement.html#setSerialConsistencyLevel-com.datastax.driver.core.ConsistencyLevel-) +* [serial consistency on batch statements](https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/BatchStatement.html#setSerialConsistencyLevel-com.datastax.driver.core.ConsistencyLevel-) * [client-side timestamps](../query_timestamps/) #### v3 to v4 -* [query warnings](https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/ExecutionInfo.html#getWarnings--) +* [query warnings](https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/ExecutionInfo.html#getWarnings--) * allowed unset values in bound statements * [Custom payloads](../custom_payloads/) diff --git a/manual/object_mapper/README.md b/manual/object_mapper/README.md index 617c324b304..4884383b8d6 100644 --- a/manual/object_mapper/README.md +++ b/manual/object_mapper/README.md @@ -11,7 +11,7 @@ The mapper is published as a separate Maven artifact: com.datastax.cassandra cassandra-driver-mapping - 3.10.0 + 3.11.0 ``` diff --git a/manual/object_mapper/creating/README.md b/manual/object_mapper/creating/README.md index dbd5fc5b826..c91b2a9c92e 100644 --- a/manual/object_mapper/creating/README.md +++ b/manual/object_mapper/creating/README.md @@ -149,9 +149,9 @@ User user = new User() .setName("John Doe"); ``` -[table]:https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/mapping/annotations/Table.html +[table]:https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/mapping/annotations/Table.html [case-sensitive]:http://docs.datastax.com/en/cql/3.3/cql/cql_reference/ucase-lcase_r.html -[consistency level]:https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/ConsistencyLevel.html +[consistency level]:https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/ConsistencyLevel.html [java-beans]:https://docs.oracle.com/javase/tutorial/javabeans/writing/properties.html [set-accessible]:https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/AccessibleObject.html#setAccessible-boolean- @@ -189,7 +189,7 @@ CREATE TABLE users(id uuid PRIMARY KEY, "userName" text); private String userName; ``` -[column]:https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/mapping/annotations/Column.html +[column]:https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/mapping/annotations/Column.html #### Primary key fields @@ -213,8 +213,8 @@ private String areaCode; The order of the indices must match that of the columns in the table declaration. -[pk]:https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/mapping/annotations/PartitionKey.html -[cc]:https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/mapping/annotations/ClusteringColumn.html +[pk]:https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/mapping/annotations/PartitionKey.html +[cc]:https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/mapping/annotations/ClusteringColumn.html [pks]:http://thelastpickle.com/blog/2013/01/11/primary-keys-in-cql.html #### Computed fields @@ -250,7 +250,7 @@ version (see [JAVA-832](https://datastax-oss.atlassian.net/browse/JAVA-832)). [User Defined Functions]:http://www.planetcassandra.org/blog/user-defined-functions-in-cassandra-3-0/ -[computed]:https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/mapping/annotations/Computed.html +[computed]:https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/mapping/annotations/Computed.html #### Transient properties @@ -259,7 +259,7 @@ to table columns. [@Transient][transient] can be used to prevent a field or a Java bean property from being mapped. Like other column-level annotations, it should be placed on either the field declaration or the property getter method. -[transient]:https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/mapping/annotations/Transient.html +[transient]:https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/mapping/annotations/Transient.html ### Mapping User Types @@ -322,8 +322,8 @@ This also works with UDTs inside collections or other UDTs, with any arbitrary nesting level. [User Defined Types]: ../../udts/ -[udt]:https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/mapping/annotations/UDT.html -[field]:https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/mapping/annotations/Field.html +[udt]:https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/mapping/annotations/UDT.html +[field]:https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/mapping/annotations/Field.html ### Mapping collections @@ -381,10 +381,10 @@ to figure out how to appropriately handle UDT conversion, i.e.: mappingManager.udtCodec(Address.class); ``` -[frozen]:https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/mapping/annotations/Frozen.html -[frozenkey]:https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/mapping/annotations/FrozenKey.html -[frozenvalue]:https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/mapping/annotations/FrozenValue.html -[udtCodec]:https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/mapping/MappingManager.html#udtCodec-java.lang.Class- +[frozen]:https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/mapping/annotations/Frozen.html +[frozenkey]:https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/mapping/annotations/FrozenKey.html +[frozenvalue]:https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/mapping/annotations/FrozenValue.html +[udtCodec]:https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/mapping/MappingManager.html#udtCodec-java.lang.Class- #### Prefer Frozen Collections diff --git a/manual/object_mapper/custom_codecs/README.md b/manual/object_mapper/custom_codecs/README.md index c68f59ba67f..821e1f619e4 100644 --- a/manual/object_mapper/custom_codecs/README.md +++ b/manual/object_mapper/custom_codecs/README.md @@ -98,9 +98,9 @@ instance (one per column) and cache it for future use. This also works with [@Field][field] and [@Param][param] annotations. -[column]:https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/mapping/annotations/Column.html -[field]:https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/mapping/annotations/Field.html -[param]:https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/mapping/annotations/Param.html +[column]:https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/mapping/annotations/Column.html +[field]:https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/mapping/annotations/Field.html +[param]:https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/mapping/annotations/Param.html ## Implicit UDT codecs diff --git a/manual/object_mapper/using/README.md b/manual/object_mapper/using/README.md index f6367ecf203..4587f983d77 100644 --- a/manual/object_mapper/using/README.md +++ b/manual/object_mapper/using/README.md @@ -28,9 +28,9 @@ Mapper mapper = manager.mapper(User.class); calling `manager#mapper` more than once for the same class will return the previously generated mapper. -[Mapper]:https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/mapping/Mapper.html -[MappingManager]:https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/mapping/MappingManager.html -[Session]:https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/Session.html +[Mapper]:https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/mapping/Mapper.html +[MappingManager]:https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/mapping/MappingManager.html +[Session]:https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/Session.html #### Basic CRUD operations @@ -179,7 +179,7 @@ It provides methods `one()`, `all()`, `iterator()`, `getExecutionInfo()` and `isExhausted()`. Note that iterating the `Result` will consume the `ResultSet`, and vice-versa. -[Result]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/mapping/Result.html +[Result]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/mapping/Result.html ### Accessors @@ -229,7 +229,7 @@ corresponds to which marker: ResultSet insert(@Param("u") UUID userId, @Param("n") String name); ``` -[param]:https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/mapping/annotations/Param.html +[param]:https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/mapping/annotations/Param.html If a method argument is a Java enumeration, it must be annotated with `@Enumerated` to indicate how to convert it to a CQL type (the rules are @@ -301,7 +301,7 @@ query with the annotation [@QueryParameters]. Then, options like public ListenableFuture> getAllAsync(); ``` -[@QueryParameters]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/mapping/annotations/QueryParameters.html +[@QueryParameters]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/mapping/annotations/QueryParameters.html ### Mapping configuration @@ -345,6 +345,6 @@ PropertyMapper propertyMapper = new DefaultPropertyMapper() There is more to `DefaultPropertyMapper`; see the Javadocs and implementation for details. -[MappingConfiguration]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/mapping/MappingConfiguration.html -[PropertyMapper]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/mapping/PropertyMapper.html -[DefaultPropertyMapper]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/mapping/DefaultPropertyMapper.html +[MappingConfiguration]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/mapping/MappingConfiguration.html +[PropertyMapper]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/mapping/PropertyMapper.html +[DefaultPropertyMapper]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/mapping/DefaultPropertyMapper.html diff --git a/manual/paging/README.md b/manual/paging/README.md index d3628cbfaa8..15343d3c7f0 100644 --- a/manual/paging/README.md +++ b/manual/paging/README.md @@ -176,8 +176,8 @@ if (nextPage != null) { } ``` -[result_set]:https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/ResultSet.html -[paging_state]:https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/PagingState.html +[result_set]:https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/ResultSet.html +[paging_state]:https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/PagingState.html Due to internal implementation details, `PagingState` instances are not @@ -239,8 +239,8 @@ There are two situations where you might want to use the unsafe API: implementing your own validation logic (for example, signing the raw state with a private key). -[gpsu]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/ExecutionInfo.html#getPagingStateUnsafe-- -[spsu]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/Statement.html#setPagingStateUnsafe-byte:A- +[gpsu]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/ExecutionInfo.html#getPagingStateUnsafe-- +[spsu]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/Statement.html#setPagingStateUnsafe-byte:A- ### Offset queries diff --git a/manual/pooling/README.md b/manual/pooling/README.md index ab13653b481..3b2e8b0218b 100644 --- a/manual/pooling/README.md +++ b/manual/pooling/README.md @@ -285,16 +285,16 @@ either: [newConnectionThreshold][nct] so that enough connections are added by the time you reach the bottleneck. -[result_set_future]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/ResultSetFuture.html -[pooling_options]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/PoolingOptions.html -[lbp]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/policies/LoadBalancingPolicy.html -[nct]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/PoolingOptions.html#setNewConnectionThreshold-com.datastax.driver.core.HostDistance-int- -[mrpc]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/PoolingOptions.html#setMaxRequestsPerConnection-com.datastax.driver.core.HostDistance-int- -[sits]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/PoolingOptions.html#setIdleTimeoutSeconds-int- -[rtm]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/SocketOptions.html#getReadTimeoutMillis-- -[smqs]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/PoolingOptions.html#setMaxQueueSize-int- -[sptm]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/PoolingOptions.html#setPoolTimeoutMillis-int- -[nhae]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/exceptions/NoHostAvailableException.html -[getErrors]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/exceptions/NoHostAvailableException.html#getErrors-- -[get_state]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/Session.html#getState-- -[BusyPoolException]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/exceptions/BusyPoolException.html +[result_set_future]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/ResultSetFuture.html +[pooling_options]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/PoolingOptions.html +[lbp]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/policies/LoadBalancingPolicy.html +[nct]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/PoolingOptions.html#setNewConnectionThreshold-com.datastax.driver.core.HostDistance-int- +[mrpc]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/PoolingOptions.html#setMaxRequestsPerConnection-com.datastax.driver.core.HostDistance-int- +[sits]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/PoolingOptions.html#setIdleTimeoutSeconds-int- +[rtm]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/SocketOptions.html#getReadTimeoutMillis-- +[smqs]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/PoolingOptions.html#setMaxQueueSize-int- +[sptm]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/PoolingOptions.html#setPoolTimeoutMillis-int- +[nhae]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/exceptions/NoHostAvailableException.html +[getErrors]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/exceptions/NoHostAvailableException.html#getErrors-- +[get_state]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/Session.html#getState-- +[BusyPoolException]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/exceptions/BusyPoolException.html diff --git a/manual/query_timestamps/README.md b/manual/query_timestamps/README.md index 20f4e9c6a47..fb24690ad95 100644 --- a/manual/query_timestamps/README.md +++ b/manual/query_timestamps/README.md @@ -140,10 +140,10 @@ following: Steps 2 and 3 only apply if native protocol v3 or above is in use. -[TimestampGenerator]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/TimestampGenerator.html -[AtomicMonotonicTimestampGenerator]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/AtomicMonotonicTimestampGenerator.html -[ThreadLocalMonotonicTimestampGenerator]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/ThreadLocalMonotonicTimestampGenerator.html -[ServerSideTimestampGenerator]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/ServerSideTimestampGenerator.html +[TimestampGenerator]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/TimestampGenerator.html +[AtomicMonotonicTimestampGenerator]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/AtomicMonotonicTimestampGenerator.html +[ThreadLocalMonotonicTimestampGenerator]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/ThreadLocalMonotonicTimestampGenerator.html +[ServerSideTimestampGenerator]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/ServerSideTimestampGenerator.html [gettimeofday]: http://man7.org/linux/man-pages/man2/settimeofday.2.html [JNR]: https://github.com/jnr/jnr-ffi diff --git a/manual/reconnection/README.md b/manual/reconnection/README.md index f99be3ef99f..a3a4733f0b4 100644 --- a/manual/reconnection/README.md +++ b/manual/reconnection/README.md @@ -29,7 +29,7 @@ You can also write your own policy; it must implement [ReconnectionPolicy]. For best results, use reasonable values: very low values (for example a constant delay of 10 milliseconds) will quickly saturate your system. -[ReconnectionPolicy]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/policies/ReconnectionPolicy.html -[Cluster.Builder.withReconnectionPolicy]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/Cluster.Builder.html#withReconnectionPolicy-com.datastax.driver.core.policies.ReconnectionPolicy- -[ExponentialReconnectionPolicy]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/policies/ExponentialReconnectionPolicy.html -[ConstantReconnectionPolicy]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/policies/ConstantReconnectionPolicy.html +[ReconnectionPolicy]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/policies/ReconnectionPolicy.html +[Cluster.Builder.withReconnectionPolicy]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/Cluster.Builder.html#withReconnectionPolicy-com.datastax.driver.core.policies.ReconnectionPolicy- +[ExponentialReconnectionPolicy]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/policies/ExponentialReconnectionPolicy.html +[ConstantReconnectionPolicy]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/policies/ConstantReconnectionPolicy.html diff --git a/manual/retries/README.md b/manual/retries/README.md index 231707022c9..1770cd71cf9 100644 --- a/manual/retries/README.md +++ b/manual/retries/README.md @@ -146,33 +146,33 @@ implementations to handle idempotence (the new behavior is equivalent to what yo `IdempotenceAwareRetryPolicy` before). -[RetryDecision]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/policies/RetryPolicy.RetryDecision.html -[retry()]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/policies/RetryPolicy.RetryDecision.html#retry-com.datastax.driver.core.ConsistencyLevel- -[tryNextHost()]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/policies/RetryPolicy.RetryDecision.html#tryNextHost-com.datastax.driver.core.ConsistencyLevel- -[rethrow()]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/policies/RetryPolicy.RetryDecision.html#rethrow-- -[ignore()]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/policies/RetryPolicy.RetryDecision.html#ignore-- -[NoHostAvailableException]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/exceptions/NoHostAvailableException.html -[getErrors()]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/exceptions/NoHostAvailableException.html#getErrors-- -[RetryPolicy]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/policies/RetryPolicy.html -[DefaultRetryPolicy]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/policies/DefaultRetryPolicy.html -[onReadTimeout]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/policies/DefaultRetryPolicy.html#onReadTimeout-com.datastax.driver.core.Statement-com.datastax.driver.core.ConsistencyLevel-int-int-boolean-int- -[onWriteTimeout]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/policies/DefaultRetryPolicy.html#onWriteTimeout-com.datastax.driver.core.Statement-com.datastax.driver.core.ConsistencyLevel-com.datastax.driver.core.WriteType-int-int-int- -[onUnavailable]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/policies/DefaultRetryPolicy.html#onUnavailable-com.datastax.driver.core.Statement-com.datastax.driver.core.ConsistencyLevel-int-int-int- -[onRequestError]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/policies/DefaultRetryPolicy.html#onRequestError-com.datastax.driver.core.Statement-com.datastax.driver.core.ConsistencyLevel-com.datastax.driver.core.exceptions.DriverException-int- -[UnavailableException]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/exceptions/UnavailableException.html -[ReadTimeoutException]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/exceptions/ReadTimeoutException.html -[WriteTimeoutException]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/exceptions/WriteTimeoutException.html -[OverloadedException]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/exceptions/OverloadedException.html -[ServerError]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/exceptions/ServerError.html -[OperationTimedOutException]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/exceptions/OperationTimedOutException.html -[ConnectionException]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/exceptions/ConnectionException.html -[QueryValidationException]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/exceptions/QueryValidationException.html -[InvalidQueryException]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/exceptions/InvalidQueryException.html -[InvalidConfigurationInQueryException]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/exceptions/InvalidConfigurationInQueryException.html -[UnauthorizedException]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/exceptions/UnauthorizedException.html -[SyntaxError]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/exceptions/SyntaxError.html -[AlreadyExistsException]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/exceptions/AlreadyExistsException.html -[TruncateException]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/exceptions/TruncateException.html +[RetryDecision]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/policies/RetryPolicy.RetryDecision.html +[retry()]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/policies/RetryPolicy.RetryDecision.html#retry-com.datastax.driver.core.ConsistencyLevel- +[tryNextHost()]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/policies/RetryPolicy.RetryDecision.html#tryNextHost-com.datastax.driver.core.ConsistencyLevel- +[rethrow()]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/policies/RetryPolicy.RetryDecision.html#rethrow-- +[ignore()]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/policies/RetryPolicy.RetryDecision.html#ignore-- +[NoHostAvailableException]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/exceptions/NoHostAvailableException.html +[getErrors()]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/exceptions/NoHostAvailableException.html#getErrors-- +[RetryPolicy]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/policies/RetryPolicy.html +[DefaultRetryPolicy]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/policies/DefaultRetryPolicy.html +[onReadTimeout]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/policies/DefaultRetryPolicy.html#onReadTimeout-com.datastax.driver.core.Statement-com.datastax.driver.core.ConsistencyLevel-int-int-boolean-int- +[onWriteTimeout]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/policies/DefaultRetryPolicy.html#onWriteTimeout-com.datastax.driver.core.Statement-com.datastax.driver.core.ConsistencyLevel-com.datastax.driver.core.WriteType-int-int-int- +[onUnavailable]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/policies/DefaultRetryPolicy.html#onUnavailable-com.datastax.driver.core.Statement-com.datastax.driver.core.ConsistencyLevel-int-int-int- +[onRequestError]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/policies/DefaultRetryPolicy.html#onRequestError-com.datastax.driver.core.Statement-com.datastax.driver.core.ConsistencyLevel-com.datastax.driver.core.exceptions.DriverException-int- +[UnavailableException]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/exceptions/UnavailableException.html +[ReadTimeoutException]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/exceptions/ReadTimeoutException.html +[WriteTimeoutException]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/exceptions/WriteTimeoutException.html +[OverloadedException]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/exceptions/OverloadedException.html +[ServerError]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/exceptions/ServerError.html +[OperationTimedOutException]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/exceptions/OperationTimedOutException.html +[ConnectionException]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/exceptions/ConnectionException.html +[QueryValidationException]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/exceptions/QueryValidationException.html +[InvalidQueryException]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/exceptions/InvalidQueryException.html +[InvalidConfigurationInQueryException]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/exceptions/InvalidConfigurationInQueryException.html +[UnauthorizedException]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/exceptions/UnauthorizedException.html +[SyntaxError]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/exceptions/SyntaxError.html +[AlreadyExistsException]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/exceptions/AlreadyExistsException.html +[TruncateException]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/exceptions/TruncateException.html [query plan]: ../load_balancing/#query-plan [connection pool]: ../pooling/ diff --git a/manual/shaded_jar/README.md b/manual/shaded_jar/README.md index 4346bc7dbfb..91ae8f440b8 100644 --- a/manual/shaded_jar/README.md +++ b/manual/shaded_jar/README.md @@ -12,7 +12,7 @@ package name: com.datastax.cassandra cassandra-driver-core - 3.10.0 + 3.11.0 shaded @@ -32,7 +32,7 @@ non-shaded JAR: com.datastax.cassandra cassandra-driver-core - 3.10.0 + 3.11.0 shaded @@ -44,7 +44,7 @@ non-shaded JAR: com.datastax.cassandra cassandra-driver-mapping - 3.10.0 + 3.11.0 com.datastax.cassandra @@ -74,5 +74,5 @@ detects that shaded Netty classes are being used: Detected shaded Netty classes in the classpath; native epoll transport will not work properly, defaulting to NIO. -[NettyOptions]:https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/NettyOptions.html +[NettyOptions]:https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/NettyOptions.html [Netty native transports]:http://netty.io/wiki/native-transports.html diff --git a/manual/socket_options/README.md b/manual/socket_options/README.md index 3edd9a74718..4b79fd684dc 100644 --- a/manual/socket_options/README.md +++ b/manual/socket_options/README.md @@ -117,15 +117,15 @@ To clarify: We might rename `SocketOptions.setReadTimeoutMillis` in a future version to clear up any confusion. -[SocketOptions]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/SocketOptions.html -[setReadTimeoutMillis]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/SocketOptions.html#setReadTimeoutMillis-int- -[setConnectTimeoutMillis]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/SocketOptions.html#setConnectTimeoutMillis-int- -[setKeepAlive]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/SocketOptions.html#setKeepAlive-boolean- -[setReceiveBufferSize]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/SocketOptions.html#setReceiveBufferSize-int- -[setReuseAddress]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/SocketOptions.html#setReuseAddress-boolean- -[setSendBufferSize]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/SocketOptions.html#setSendBufferSize-int- -[setSoLinger]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/SocketOptions.html#setSoLinger-int- -[setTcpNoDelay]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/SocketOptions.html#setTcpNoDelay-boolean- -[onReadTimeout]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/policies/RetryPolicy.html#onReadTimeout-com.datastax.driver.core.Statement-com.datastax.driver.core.ConsistencyLevel-int-int-boolean-int- -[onRequestError]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/policies/RetryPolicy.html#onRequestError-com.datastax.driver.core.Statement-com.datastax.driver.core.ConsistencyLevel-com.datastax.driver.core.exceptions.DriverException-int- -[OperationTimedOutException]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/exceptions/OperationTimedOutException.html \ No newline at end of file +[SocketOptions]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/SocketOptions.html +[setReadTimeoutMillis]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/SocketOptions.html#setReadTimeoutMillis-int- +[setConnectTimeoutMillis]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/SocketOptions.html#setConnectTimeoutMillis-int- +[setKeepAlive]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/SocketOptions.html#setKeepAlive-boolean- +[setReceiveBufferSize]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/SocketOptions.html#setReceiveBufferSize-int- +[setReuseAddress]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/SocketOptions.html#setReuseAddress-boolean- +[setSendBufferSize]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/SocketOptions.html#setSendBufferSize-int- +[setSoLinger]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/SocketOptions.html#setSoLinger-int- +[setTcpNoDelay]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/SocketOptions.html#setTcpNoDelay-boolean- +[onReadTimeout]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/policies/RetryPolicy.html#onReadTimeout-com.datastax.driver.core.Statement-com.datastax.driver.core.ConsistencyLevel-int-int-boolean-int- +[onRequestError]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/policies/RetryPolicy.html#onRequestError-com.datastax.driver.core.Statement-com.datastax.driver.core.ConsistencyLevel-com.datastax.driver.core.exceptions.DriverException-int- +[OperationTimedOutException]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/exceptions/OperationTimedOutException.html \ No newline at end of file diff --git a/manual/speculative_execution/README.md b/manual/speculative_execution/README.md index 3ef65f60242..7a1fe5b4007 100644 --- a/manual/speculative_execution/README.md +++ b/manual/speculative_execution/README.md @@ -73,7 +73,7 @@ Speculative executions are controlled by an instance of `Cluster`. This policy defines the threshold after which a new speculative execution will be triggered. -[SpeculativeExecutionPolicy]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/policies/SpeculativeExecutionPolicy.html +[SpeculativeExecutionPolicy]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/policies/SpeculativeExecutionPolicy.html Two implementations are provided with the driver: @@ -101,7 +101,7 @@ way: * if no response has been received at t0 + 1000 milliseconds, start another speculative execution on a third node. -[ConstantSpeculativeExecutionPolicy]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/policies/ConstantSpeculativeExecutionPolicy.html +[ConstantSpeculativeExecutionPolicy]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/policies/ConstantSpeculativeExecutionPolicy.html #### [PercentileSpeculativeExecutionPolicy] @@ -160,10 +160,10 @@ Note that `PercentileTracker` may also be used with a slow query logger (see the [Logging](../logging/) section). In that case, you would create a single tracker object and share it with both components. -[PercentileSpeculativeExecutionPolicy]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/policies/PercentileSpeculativeExecutionPolicy.html -[PercentileTracker]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/PercentileTracker.html -[ClusterWidePercentileTracker]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/ClusterWidePercentileTracker.html -[PerHostPercentileTracker]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/PerHostPercentileTracker.html +[PercentileSpeculativeExecutionPolicy]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/policies/PercentileSpeculativeExecutionPolicy.html +[PercentileTracker]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/PercentileTracker.html +[ClusterWidePercentileTracker]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/ClusterWidePercentileTracker.html +[PerHostPercentileTracker]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/PerHostPercentileTracker.html [hdr]: http://hdrhistogram.github.io/HdrHistogram/ #### Using your own @@ -210,7 +210,7 @@ client driver exec1 exec2 The only impact is that all executions of the same query always share the same query plan, so each host will be used by at most one execution. -[retry_policy]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/policies/RetryPolicy.html +[retry_policy]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/policies/RetryPolicy.html ### Tuning and practical details @@ -225,8 +225,8 @@ You can monitor how many speculative executions were triggered with the It should only be a few percents of the total number of requests ([cluster.getMetrics().getRequestsTimer().getCount()][request_metric]). -[se_metric]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/Metrics.Errors.html#getSpeculativeExecutions-- -[request_metric]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/Metrics.html#getRequestsTimer-- +[se_metric]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/Metrics.Errors.html#getSpeculativeExecutions-- +[request_metric]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/Metrics.html#getRequestsTimer-- #### Stream id exhaustion @@ -255,8 +255,8 @@ sustained. If you're unsure of which native protocol version you're using, you can check with [cluster.getConfiguration().getProtocolOptions().getProtocolVersion()][protocol_version]. -[session_state]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/Session.State.html -[protocol_version]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/ProtocolOptions.html#getProtocolVersion-- +[session_state]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/Session.State.html +[protocol_version]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/ProtocolOptions.html#getProtocolVersion-- #### Request ordering and client timestamps diff --git a/manual/ssl/README.md b/manual/ssl/README.md index 9fb628bacd5..47dbd5f9863 100644 --- a/manual/ssl/README.md +++ b/manual/ssl/README.md @@ -207,8 +207,8 @@ Cluster cluster = Cluster.builder() .build(); ``` -[RemoteEndpointAwareSSLOptions]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/RemoteEndpointAwareSSLOptions.html -[RemoteEndpointAwareJdkSSLOptions]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/RemoteEndpointAwareJdkSSLOptions.html -[newSSLEngine]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/RemoteEndpointAwareJdkSSLOptions.html#newSSLEngine-io.netty.channel.socket.SocketChannel-java.net.InetSocketAddress- -[RemoteEndpointAwareNettySSLOptions]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/RemoteEndpointAwareNettySSLOptions.html -[NettyOptions]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/NettyOptions.html +[RemoteEndpointAwareSSLOptions]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/RemoteEndpointAwareSSLOptions.html +[RemoteEndpointAwareJdkSSLOptions]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/RemoteEndpointAwareJdkSSLOptions.html +[newSSLEngine]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/RemoteEndpointAwareJdkSSLOptions.html#newSSLEngine-io.netty.channel.socket.SocketChannel-java.net.InetSocketAddress- +[RemoteEndpointAwareNettySSLOptions]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/RemoteEndpointAwareNettySSLOptions.html +[NettyOptions]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/NettyOptions.html diff --git a/manual/statements/README.md b/manual/statements/README.md index 865818796d0..18164778039 100644 --- a/manual/statements/README.md +++ b/manual/statements/README.md @@ -32,11 +32,11 @@ If you use custom policies ([RetryPolicy], [LoadBalancingPolicy], properties that influence statement execution. To achieve this, you can wrap your statements in a custom [StatementWrapper] implementation. -[Statement]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/Statement.html -[QueryBuilder]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/querybuilder/QueryBuilder.html -[StatementWrapper]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/StatementWrapper.html -[RetryPolicy]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/policies/RetryPolicy.html -[LoadBalancingPolicy]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/policies/LoadBalancingPolicy.html -[SpeculativeExecutionPolicy]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/policies/SpeculativeExecutionPolicy.html -[execute]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/Session.html#execute-com.datastax.driver.core.Statement- -[executeAsync]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/Session.html#executeAsync-com.datastax.driver.core.Statement- +[Statement]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/Statement.html +[QueryBuilder]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/querybuilder/QueryBuilder.html +[StatementWrapper]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/StatementWrapper.html +[RetryPolicy]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/policies/RetryPolicy.html +[LoadBalancingPolicy]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/policies/LoadBalancingPolicy.html +[SpeculativeExecutionPolicy]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/policies/SpeculativeExecutionPolicy.html +[execute]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/Session.html#execute-com.datastax.driver.core.Statement- +[executeAsync]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/Session.html#executeAsync-com.datastax.driver.core.Statement- diff --git a/manual/statements/batch/README.md b/manual/statements/batch/README.md index e6db824424a..d54d79589d0 100644 --- a/manual/statements/batch/README.md +++ b/manual/statements/batch/README.md @@ -34,9 +34,9 @@ In addition, simple statements with named parameters are currently not supported due to a [protocol limitation][CASSANDRA-10246] that will be fixed in a future version). If you try to execute such a batch, an `IllegalArgumentException` is thrown. -[BatchStatement]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/BatchStatement.html +[BatchStatement]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/BatchStatement.html [batch_dse]: http://docs.datastax.com/en/dse/5.1/cql/cql/cql_using/useBatch.html -[LOGGED]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/BatchStatement.Type.html#LOGGED -[UNLOGGED]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/BatchStatement.Type.html#UNLOGGED +[LOGGED]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/BatchStatement.Type.html#LOGGED +[UNLOGGED]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/BatchStatement.Type.html#UNLOGGED [batch_size_fail_threshold]: https://docs.datastax.com/en/cassandra/3.x/cassandra/configuration/configCassandra_yaml.html#configCassandra_yaml__batch_size_fail_threshold_in_kb [CASSANDRA-10246]: https://issues.apache.org/jira/browse/CASSANDRA-10246 diff --git a/manual/statements/built/README.md b/manual/statements/built/README.md index d54f6e30faa..eb1a51cb5cb 100644 --- a/manual/statements/built/README.md +++ b/manual/statements/built/README.md @@ -76,7 +76,7 @@ BuiltStatement ttlAndWriteTime = QueryBuilder.select().column("id").column("t") ``` You can also cast the value of the given column to another type by using the `cast` function, -[specifying](https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/querybuilder/QueryBuilder.html#cast-java.lang.Object-com.datastax.driver.core.DataType-) +[specifying](https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/querybuilder/QueryBuilder.html#cast-java.lang.Object-com.datastax.driver.core.DataType-) the column for which it should be performed, and to what type it should be casted. #### Specifying conditions @@ -92,7 +92,7 @@ BuiltStatement selectOne = QueryBuilder.select().from("test", "test") The `where` function accepts the `Clause` object that is generated by calling `QueryBuilder`'s -[functions](https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/querybuilder/QueryBuilder.html#eq-java.lang.Iterable-java.lang.Iterable-), +[functions](https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/querybuilder/QueryBuilder.html#eq-java.lang.Iterable-java.lang.Iterable-), such as, `eq`, `ne`, `lt`, `in`, `contains`, `notNull`, etc. In most cases, these functions receive 2 arguments: the name of the column, and the value to compare, but there are also variants that receive 2 iterables for columns and values correspondingly. @@ -263,6 +263,6 @@ Note: the call to these functions changes the object type from `BuiltStatement` -[QueryBuilder]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/querybuilder/QueryBuilder.html -[TableMetadata]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/TableMetadata.html -[SchemaBuilder]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/schemabuilder/SchemaBuilder.html +[QueryBuilder]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/querybuilder/QueryBuilder.html +[TableMetadata]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/TableMetadata.html +[SchemaBuilder]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/schemabuilder/SchemaBuilder.html diff --git a/manual/statements/prepared/README.md b/manual/statements/prepared/README.md index d9dd7fee278..ff1dca78057 100644 --- a/manual/statements/prepared/README.md +++ b/manual/statements/prepared/README.md @@ -256,11 +256,11 @@ relying on `SELECT *`. This will be addressed in a future release of both Cassandra and the driver. Follow [CASSANDRA-10786] and [JAVA-1196] for more information. -[PreparedStatement]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/PreparedStatement.html -[BoundStatement]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/BoundStatement.html -[setPrepareOnAllHosts]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/QueryOptions.html#setPrepareOnAllHosts-boolean- -[setReprepareOnUp]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/QueryOptions.html#setReprepareOnUp-boolean- -[execute]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/Session.html#execute-com.datastax.driver.core.Statement- -[executeAsync]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/Session.html#executeAsync-com.datastax.driver.core.Statement- +[PreparedStatement]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/PreparedStatement.html +[BoundStatement]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/BoundStatement.html +[setPrepareOnAllHosts]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/QueryOptions.html#setPrepareOnAllHosts-boolean- +[setReprepareOnUp]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/QueryOptions.html#setReprepareOnUp-boolean- +[execute]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/Session.html#execute-com.datastax.driver.core.Statement- +[executeAsync]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/Session.html#executeAsync-com.datastax.driver.core.Statement- [CASSANDRA-10786]: https://issues.apache.org/jira/browse/CASSANDRA-10786 [JAVA-1196]: https://datastax-oss.atlassian.net/browse/JAVA-1196 diff --git a/manual/statements/simple/README.md b/manual/statements/simple/README.md index 1144ba64c83..b08adc7b018 100644 --- a/manual/statements/simple/README.md +++ b/manual/statements/simple/README.md @@ -128,4 +128,4 @@ session.execute( 1, bytes); ``` -[SimpleStatement]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/SimpleStatement.html +[SimpleStatement]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/SimpleStatement.html diff --git a/manual/tuples/README.md b/manual/tuples/README.md index b8842082c99..f0b9f0061b8 100644 --- a/manual/tuples/README.md +++ b/manual/tuples/README.md @@ -96,7 +96,7 @@ bs.setList("l", Arrays.asList(oneTimeUsageTuple.newValue("1", "1"), oneTimeUsage session.execute(bs); ``` -[TupleType]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/TupleType.html -[TupleValue]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/TupleValue.html -[newValueVararg]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/TupleType.html#newValue-java.lang.Object...- -[newValue]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/TupleType.html#newValue-- +[TupleType]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/TupleType.html +[TupleValue]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/TupleValue.html +[newValueVararg]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/TupleType.html#newValue-java.lang.Object...- +[newValue]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/TupleType.html#newValue-- diff --git a/manual/udts/README.md b/manual/udts/README.md index f2f4d514496..892a5a95b1b 100644 --- a/manual/udts/README.md +++ b/manual/udts/README.md @@ -95,5 +95,5 @@ session.execute(bs); [cql_doc]: https://docs.datastax.com/en/cql/3.3/cql/cql_reference/cqlRefUDType.html -[UDTValue]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/UDTValue.html -[UserType]: https://docs.datastax.com/en/drivers/java/3.10/com/datastax/driver/core/UserType.html +[UDTValue]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/UDTValue.html +[UserType]: https://docs.datastax.com/en/drivers/java/3.11/com/datastax/driver/core/UserType.html diff --git a/pom.xml b/pom.xml index 39f5451d7ec..508dd581934 100644 --- a/pom.xml +++ b/pom.xml @@ -641,7 +641,7 @@ - 3.10.1 + 3.10.2 ../clirr-ignores.xml com/datastax/shaded/** From 196c1a09409ec4ae2014697583ae97f82c2f5441 Mon Sep 17 00:00:00 2001 From: Alexandre Dutra Date: Thu, 11 Mar 2021 15:03:01 +0100 Subject: [PATCH 016/112] [maven-release-plugin] prepare release 3.11.0 --- driver-core/pom.xml | 2 +- driver-dist/pom.xml | 2 +- driver-examples/pom.xml | 2 +- driver-extras/pom.xml | 2 +- driver-mapping/pom.xml | 2 +- driver-tests/osgi/pom.xml | 2 +- driver-tests/pom.xml | 2 +- driver-tests/shading/pom.xml | 2 +- driver-tests/shading/shaded/pom.xml | 2 +- driver-tests/shading/unshaded/pom.xml | 2 +- driver-tests/stress/pom.xml | 2 +- pom.xml | 4 ++-- 12 files changed, 13 insertions(+), 13 deletions(-) diff --git a/driver-core/pom.xml b/driver-core/pom.xml index a16af74b088..7e98c1c29c7 100644 --- a/driver-core/pom.xml +++ b/driver-core/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.10.3-SNAPSHOT + 3.11.0 cassandra-driver-core diff --git a/driver-dist/pom.xml b/driver-dist/pom.xml index d3ebba22797..6aa2bed3536 100644 --- a/driver-dist/pom.xml +++ b/driver-dist/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.10.3-SNAPSHOT + 3.11.0 cassandra-driver-dist diff --git a/driver-examples/pom.xml b/driver-examples/pom.xml index 8222ddaa145..c01fed9354a 100644 --- a/driver-examples/pom.xml +++ b/driver-examples/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.10.3-SNAPSHOT + 3.11.0 cassandra-driver-examples diff --git a/driver-extras/pom.xml b/driver-extras/pom.xml index 2676c7ce1dc..fc3cafb37ef 100644 --- a/driver-extras/pom.xml +++ b/driver-extras/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.10.3-SNAPSHOT + 3.11.0 cassandra-driver-extras diff --git a/driver-mapping/pom.xml b/driver-mapping/pom.xml index 8477da9c8b0..dba41e84286 100644 --- a/driver-mapping/pom.xml +++ b/driver-mapping/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.10.3-SNAPSHOT + 3.11.0 cassandra-driver-mapping diff --git a/driver-tests/osgi/pom.xml b/driver-tests/osgi/pom.xml index decb2e70c78..03e7a3d25e1 100644 --- a/driver-tests/osgi/pom.xml +++ b/driver-tests/osgi/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-parent - 3.10.3-SNAPSHOT + 3.11.0 cassandra-driver-tests-osgi diff --git a/driver-tests/pom.xml b/driver-tests/pom.xml index 208b2fa5f5a..54ac6236f4f 100644 --- a/driver-tests/pom.xml +++ b/driver-tests/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.10.3-SNAPSHOT + 3.11.0 cassandra-driver-tests-parent diff --git a/driver-tests/shading/pom.xml b/driver-tests/shading/pom.xml index f2f3edd969e..2ff768f95de 100644 --- a/driver-tests/shading/pom.xml +++ b/driver-tests/shading/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-parent - 3.10.3-SNAPSHOT + 3.11.0 pom diff --git a/driver-tests/shading/shaded/pom.xml b/driver-tests/shading/shaded/pom.xml index bdc09dc32dd..a7cb377be4b 100644 --- a/driver-tests/shading/shaded/pom.xml +++ b/driver-tests/shading/shaded/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-shading - 3.10.3-SNAPSHOT + 3.11.0 cassandra-driver-tests-shading-shaded diff --git a/driver-tests/shading/unshaded/pom.xml b/driver-tests/shading/unshaded/pom.xml index 326dda89c06..5507a7c4047 100644 --- a/driver-tests/shading/unshaded/pom.xml +++ b/driver-tests/shading/unshaded/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-shading - 3.10.3-SNAPSHOT + 3.11.0 cassandra-driver-tests-shading-unshaded diff --git a/driver-tests/stress/pom.xml b/driver-tests/stress/pom.xml index 1074db44442..a11e2a4775e 100644 --- a/driver-tests/stress/pom.xml +++ b/driver-tests/stress/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-parent - 3.10.3-SNAPSHOT + 3.11.0 cassandra-driver-tests-stress diff --git a/pom.xml b/pom.xml index 508dd581934..b8e7112e081 100644 --- a/pom.xml +++ b/pom.xml @@ -21,7 +21,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.10.3-SNAPSHOT + 3.11.0 pom DataStax Java Driver for Apache Cassandra @@ -1147,7 +1147,7 @@ limitations under the License. scm:git:git@github.com:datastax/java-driver.git scm:git:git@github.com:datastax/java-driver.git https://github.com/datastax/java-driver - HEAD + 3.11.0 From 3c45e327b3a00c59dbbc4f6b0268eb8a1e9c91bc Mon Sep 17 00:00:00 2001 From: Alexandre Dutra Date: Thu, 11 Mar 2021 15:03:12 +0100 Subject: [PATCH 017/112] [maven-release-plugin] prepare for next development iteration --- driver-core/pom.xml | 2 +- driver-dist/pom.xml | 2 +- driver-examples/pom.xml | 2 +- driver-extras/pom.xml | 2 +- driver-mapping/pom.xml | 2 +- driver-tests/osgi/pom.xml | 2 +- driver-tests/pom.xml | 2 +- driver-tests/shading/pom.xml | 2 +- driver-tests/shading/shaded/pom.xml | 2 +- driver-tests/shading/unshaded/pom.xml | 2 +- driver-tests/stress/pom.xml | 2 +- pom.xml | 4 ++-- 12 files changed, 13 insertions(+), 13 deletions(-) diff --git a/driver-core/pom.xml b/driver-core/pom.xml index 7e98c1c29c7..5117aadb2b0 100644 --- a/driver-core/pom.xml +++ b/driver-core/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.0 + 3.11.1-SNAPSHOT cassandra-driver-core diff --git a/driver-dist/pom.xml b/driver-dist/pom.xml index 6aa2bed3536..3545491a439 100644 --- a/driver-dist/pom.xml +++ b/driver-dist/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.0 + 3.11.1-SNAPSHOT cassandra-driver-dist diff --git a/driver-examples/pom.xml b/driver-examples/pom.xml index c01fed9354a..d1bb15958f9 100644 --- a/driver-examples/pom.xml +++ b/driver-examples/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.0 + 3.11.1-SNAPSHOT cassandra-driver-examples diff --git a/driver-extras/pom.xml b/driver-extras/pom.xml index fc3cafb37ef..eac090745c7 100644 --- a/driver-extras/pom.xml +++ b/driver-extras/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.0 + 3.11.1-SNAPSHOT cassandra-driver-extras diff --git a/driver-mapping/pom.xml b/driver-mapping/pom.xml index dba41e84286..8f3496f47be 100644 --- a/driver-mapping/pom.xml +++ b/driver-mapping/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.0 + 3.11.1-SNAPSHOT cassandra-driver-mapping diff --git a/driver-tests/osgi/pom.xml b/driver-tests/osgi/pom.xml index 03e7a3d25e1..293951d4c35 100644 --- a/driver-tests/osgi/pom.xml +++ b/driver-tests/osgi/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-parent - 3.11.0 + 3.11.1-SNAPSHOT cassandra-driver-tests-osgi diff --git a/driver-tests/pom.xml b/driver-tests/pom.xml index 54ac6236f4f..38aaea38c68 100644 --- a/driver-tests/pom.xml +++ b/driver-tests/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.0 + 3.11.1-SNAPSHOT cassandra-driver-tests-parent diff --git a/driver-tests/shading/pom.xml b/driver-tests/shading/pom.xml index 2ff768f95de..440f31064f0 100644 --- a/driver-tests/shading/pom.xml +++ b/driver-tests/shading/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-parent - 3.11.0 + 3.11.1-SNAPSHOT pom diff --git a/driver-tests/shading/shaded/pom.xml b/driver-tests/shading/shaded/pom.xml index a7cb377be4b..14f19b31ae2 100644 --- a/driver-tests/shading/shaded/pom.xml +++ b/driver-tests/shading/shaded/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-shading - 3.11.0 + 3.11.1-SNAPSHOT cassandra-driver-tests-shading-shaded diff --git a/driver-tests/shading/unshaded/pom.xml b/driver-tests/shading/unshaded/pom.xml index 5507a7c4047..e98fc0d581e 100644 --- a/driver-tests/shading/unshaded/pom.xml +++ b/driver-tests/shading/unshaded/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-shading - 3.11.0 + 3.11.1-SNAPSHOT cassandra-driver-tests-shading-unshaded diff --git a/driver-tests/stress/pom.xml b/driver-tests/stress/pom.xml index a11e2a4775e..f5520ece9a1 100644 --- a/driver-tests/stress/pom.xml +++ b/driver-tests/stress/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-parent - 3.11.0 + 3.11.1-SNAPSHOT cassandra-driver-tests-stress diff --git a/pom.xml b/pom.xml index b8e7112e081..e3fbf2ac979 100644 --- a/pom.xml +++ b/pom.xml @@ -21,7 +21,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.0 + 3.11.1-SNAPSHOT pom DataStax Java Driver for Apache Cassandra @@ -1147,7 +1147,7 @@ limitations under the License. scm:git:git@github.com:datastax/java-driver.git scm:git:git@github.com:datastax/java-driver.git https://github.com/datastax/java-driver - 3.11.0 + HEAD From 0e80e4cc5622a71efd15ca895399adba935aeac9 Mon Sep 17 00:00:00 2001 From: Alexandre Dutra Date: Thu, 11 Mar 2021 17:53:38 +0100 Subject: [PATCH 018/112] Fix wrong version in POM snippet --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6eaa9c43305..2847a53356d 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ using DataStax Enterprise, install the [DataStax Enterprise Java driver][dse-dri com.datastax.cassandra cassandra-driver-core - 3.10.2 + 3.11.0 ``` From a7c8497d45f666487f8fbd766d791ed3a76d8dd4 Mon Sep 17 00:00:00 2001 From: Alexandre Dutra Date: Thu, 11 Mar 2021 18:30:54 +0100 Subject: [PATCH 019/112] Update protocol versions compatibility matrix --- manual/native_protocol/README.md | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/manual/native_protocol/README.md b/manual/native_protocol/README.md index 2a99eb73704..bccbcaa9e48 100644 --- a/manual/native_protocol/README.md +++ b/manual/native_protocol/README.md @@ -16,17 +16,23 @@ Cassandra when the first connection is established. Both sides are backward-compatible with older versions: - - - - - + + + + + + + + + + +
Driver VersionCassandra: 1.2.x
(DSE 3.2)
2.0.x
(DSE 4.0 to 4.6) -
2.1.x
(DSE 4.7)
2.2.x3.0.x & 3.x
(DSE 5.0+)
1.0.x v1 v1 v1 v1 Unsupported (1)
2.0.x to 2.1.1 v1 v2 v2 v2 Unsupported (1)
2.1.2 to 2.1.x v1 v2 v3 v3 Unsupported (2)
3.x v1 v2 v3 v4 v4
Driver VersionCassandra 1.2.x
(DSE 3.2)
Cassandra 2.0.x
(DSE 4.0 to 4.6)
Cassandra 2.1.x
(DSE 4.7)
Cassandra 2.2.xCassandra 3.0.x & 3.x
(DSE 5.0+)
Cassandra 4.0+
1.0.x v1 v1 v1 v1 Unsupported (1)Unsupported (1)
2.0.x to 2.1.1 v1 v2 v2 v2Unsupported (1) Unsupported (1)
2.1.2 to 2.1.x v1 v2 v3 v3Unsupported (2)Unsupported (2)
3.x v1 v2 v3 v4 v4 v5
-*(1) Cassandra 3.0 does not support protocol versions v1 and v2* +*(1) Cassandra 3.0+ does not support protocol versions v1 and v2* -*(2) There is a matching protocol version (v3), but the driver 2.1.x can't read the new system table format of Cassandra 3.0* +*(2) There is a matching protocol version (v3), but the driver 2.1.x can't read the new system table +format of Cassandra 3.0+* For example, if you use version 2.1.5 of the driver to connect to Cassandra 2.0.9, the maximum version you can use (and the one you'll get From a8eacec84a69acfa0056011d3a8758d62c7d50b7 Mon Sep 17 00:00:00 2001 From: Alexandre Dutra Date: Thu, 11 Mar 2021 18:32:16 +0100 Subject: [PATCH 020/112] Fix broken link to driver 3.x manual page --- README.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 2847a53356d..838ad0dded2 100644 --- a/README.md +++ b/README.md @@ -4,9 +4,8 @@ for the development version and that some features described here might not yet have been released. You can find the documentation for the latest version through the [Java driver -docs](http://docs.datastax.com/en/developer/java-driver/latest/index.html) or via the release tags, -[e.g. -3.11.0](https://github.com/datastax/java-driver/tree/3.11.0).* +docs](http://docs.datastax.com/en/developer/java-driver/3.11/index.html) or via the release tags, +[e.g. 3.11.0](https://github.com/datastax/java-driver/tree/3.11.0).* A modern, [feature-rich](manual/) and highly tunable Java client library for Apache Cassandra (2.1+) and using exclusively Cassandra's binary protocol @@ -102,7 +101,7 @@ is available for download. ## Compatibility The Java client driver 3.11.0 ([branch 3.x](https://github.com/datastax/java-driver/tree/3.x)) is compatible with Apache -Cassandra 2.1, 2.2 and 3.0+ (see [this page](http://docs.datastax.com/en/developer/java-driver/latest/manual/native_protocol/) for +Cassandra 2.1, 2.2 and 3.0+ (see [this page](http://docs.datastax.com/en/developer/java-driver/3.11/manual/native_protocol/) for the most up-to-date compatibility information). UDT and tuple support is available only when using Apache Cassandra 2.1 or higher (see [CQL improvements in Cassandra 2.1](http://www.datastax.com/dev/blog/cql-in-2-1)). From 673720f15578fc1b517e551d2be5c1d7f118437b Mon Sep 17 00:00:00 2001 From: Alexandre Dutra Date: Thu, 11 Mar 2021 18:36:14 +0100 Subject: [PATCH 021/112] Minor change to HTML table layout --- manual/native_protocol/README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/manual/native_protocol/README.md b/manual/native_protocol/README.md index bccbcaa9e48..d2ad6212847 100644 --- a/manual/native_protocol/README.md +++ b/manual/native_protocol/README.md @@ -20,13 +20,13 @@ backward-compatible with older versions: Cassandra 2.0.x
(DSE 4.0 to 4.6)Cassandra 2.1.x
(DSE 4.7) Cassandra 2.2.x Cassandra 3.0.x & 3.x
(DSE 5.0+)Cassandra 4.0+ -1.0.x v1 v1 v1 v1 Unsupported (1) +1.0.x v1 v1 v1 v1 Unsupported (1) Unsupported (1) -2.0.x to 2.1.1 v1 v2 v2 v2 +2.0.x to 2.1.1 v1 v2 v2 v2 Unsupported (1) Unsupported (1) -2.1.2 to 2.1.x v1 v2 v3 v3 +2.1.2 to 2.1.x v1 v2 v3 v3 Unsupported (2)Unsupported (2) -3.x v1 v2 v3 v4 v4 v5 +3.x v1 v2 v3 v4 v4 v5 *(1) Cassandra 3.0+ does not support protocol versions v1 and v2* From edbccdeaa60b3328b8bfe09fbc8401e44b68ef9f Mon Sep 17 00:00:00 2001 From: Alexandre Dutra Date: Thu, 11 Mar 2021 19:53:19 +0100 Subject: [PATCH 022/112] Remove broken link to binary tarball --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 838ad0dded2..267a710eb9b 100644 --- a/README.md +++ b/README.md @@ -54,7 +54,6 @@ The driver contains the following modules: - API: https://docs.datastax.com/en/drivers/java/3.11 - GITHUB REPOSITORY: https://github.com/datastax/java-driver - [changelog](changelog/) -- [binary tarball](http://downloads.datastax.com/java-driver/cassandra-java-driver-3.11.0.tar.gz) ## Getting the driver From 0df59d9ca5a3b4c834198fe5474e2df4ca728011 Mon Sep 17 00:00:00 2001 From: Ankit Barsainya <71305148+AnkitBarsainyaPSL@users.noreply.github.com> Date: Wed, 18 Aug 2021 15:14:06 +0530 Subject: [PATCH 023/112] Update log message to inform about incorrect CL for read repair (#1568) --- .../datastax/driver/core/exceptions/ReadTimeoutException.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/driver-core/src/main/java/com/datastax/driver/core/exceptions/ReadTimeoutException.java b/driver-core/src/main/java/com/datastax/driver/core/exceptions/ReadTimeoutException.java index b2bf6f3f416..71a266fdd19 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/exceptions/ReadTimeoutException.java +++ b/driver-core/src/main/java/com/datastax/driver/core/exceptions/ReadTimeoutException.java @@ -42,7 +42,8 @@ public ReadTimeoutException( super( endPoint, String.format( - "Cassandra timeout during read query at consistency %s (%s)", + "Cassandra timeout during read query at consistency %s (%s). " + + "In case this was generated during read repair, the consistency level is not representative of the actual consistency.", consistency, formatDetails(received, required, dataPresent)), consistency, received, From 7d58f9dbc613a2d4d6cf2732212ab3a2c249077a Mon Sep 17 00:00:00 2001 From: Bret McGuire Date: Thu, 7 Oct 2021 10:40:14 -0500 Subject: [PATCH 024/112] JAVA-2967: Support native_transport_(address|port) + native_transport_port_ssl for DSE 6.8 (#1573) --- .../driver/core/ControlConnection.java | 28 +- .../driver/core/DefaultEndPointFactory.java | 10 + .../driver/core/ControlConnectionTest.java | 299 ++++++++++++++++++ .../driver/core/ScassandraCluster.java | 16 + .../core/exceptions/ExceptionsTest.java | 4 +- 5 files changed, 354 insertions(+), 3 deletions(-) diff --git a/driver-core/src/main/java/com/datastax/driver/core/ControlConnection.java b/driver-core/src/main/java/com/datastax/driver/core/ControlConnection.java index 3558f006d9d..24f7b815c23 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/ControlConnection.java +++ b/driver-core/src/main/java/com/datastax/driver/core/ControlConnection.java @@ -611,6 +611,17 @@ private static void updateInfo( InetAddress nativeAddress = row.getInet("native_address"); int nativePort = row.getInt("native_port"); broadcastRpcAddress = new InetSocketAddress(nativeAddress, nativePort); + } else if (row.getColumnDefinitions().contains("native_transport_address")) { + // DSE 6.8 introduced native_transport_address and native_transport_port for the + // listen address. Also included is native_transport_port_ssl (in case users + // want to setup a different port for SSL and non-SSL conns). + InetAddress nativeAddress = row.getInet("native_transport_address"); + int nativePort = row.getInt("native_transport_port"); + if (cluster.getCluster().getConfiguration().getProtocolOptions().getSSLOptions() != null + && !row.isNull("native_transport_port_ssl")) { + nativePort = row.getInt("native_transport_port_ssl"); + } + broadcastRpcAddress = new InetSocketAddress(nativeAddress, nativePort); } else if (row.getColumnDefinitions().contains("rpc_address")) { InetAddress rpcAddress = row.getInet("rpc_address"); broadcastRpcAddress = new InetSocketAddress(rpcAddress, cluster.connectionFactory.getPort()); @@ -831,6 +842,14 @@ private void refreshNodeListAndTokenMap( InetAddress nativeAddress = row.getInet("native_address"); int nativePort = row.getInt("native_port"); broadcastRpcAddress = new InetSocketAddress(nativeAddress, nativePort); + } else if (row.getColumnDefinitions().contains("native_transport_address")) { + InetAddress nativeAddress = row.getInet("native_transport_address"); + int nativePort = row.getInt("native_transport_port"); + if (cluster.getCluster().getConfiguration().getProtocolOptions().getSSLOptions() != null + && !row.isNull("native_transport_port_ssl")) { + nativePort = row.getInt("native_transport_port_ssl"); + } + broadcastRpcAddress = new InetSocketAddress(nativeAddress, nativePort); } else { InetAddress rpcAddress = row.getInet("rpc_address"); broadcastRpcAddress = @@ -956,7 +975,11 @@ private boolean isValidPeer(Row peerRow, boolean logIfInvalid) { && !peerRow.isNull("native_port"); } else { isValid &= - peerRow.getColumnDefinitions().contains("rpc_address") && !peerRow.isNull("rpc_address"); + (peerRow.getColumnDefinitions().contains("rpc_address") && !peerRow.isNull("rpc_address")) + || (peerRow.getColumnDefinitions().contains("native_transport_address") + && peerRow.getColumnDefinitions().contains("native_transport_port") + && !peerRow.isNull("native_transport_address") + && !peerRow.isNull("native_transport_port")); } if (EXTENDED_PEER_CHECK) { @@ -984,6 +1007,9 @@ private String formatInvalidPeer(Row peerRow) { formatMissingOrNullColumn(peerRow, "native_address", sb); formatMissingOrNullColumn(peerRow, "native_port", sb); } else { + formatMissingOrNullColumn(peerRow, "native_transport_address", sb); + formatMissingOrNullColumn(peerRow, "native_transport_port", sb); + formatMissingOrNullColumn(peerRow, "native_transport_port_ssl", sb); formatMissingOrNullColumn(peerRow, "rpc_address", sb); } if (EXTENDED_PEER_CHECK) { diff --git a/driver-core/src/main/java/com/datastax/driver/core/DefaultEndPointFactory.java b/driver-core/src/main/java/com/datastax/driver/core/DefaultEndPointFactory.java index c1378abf27d..b9caa3ea1a4 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/DefaultEndPointFactory.java +++ b/driver-core/src/main/java/com/datastax/driver/core/DefaultEndPointFactory.java @@ -49,6 +49,16 @@ public EndPoint create(Row peersRow) { InetSocketAddress translateAddress = cluster.manager.translateAddress(new InetSocketAddress(nativeAddress, nativePort)); return new TranslatedAddressEndPoint(translateAddress); + } else if (peersRow.getColumnDefinitions().contains("native_transport_address")) { + InetAddress nativeAddress = peersRow.getInet("native_transport_address"); + int nativePort = peersRow.getInt("native_transport_port"); + if (cluster.getConfiguration().getProtocolOptions().getSSLOptions() != null + && !peersRow.isNull("native_transport_port_ssl")) { + nativePort = peersRow.getInt("native_transport_port_ssl"); + } + InetSocketAddress translateAddress = + cluster.manager.translateAddress(new InetSocketAddress(nativeAddress, nativePort)); + return new TranslatedAddressEndPoint(translateAddress); } else { InetAddress broadcastAddress = peersRow.getInet("peer"); InetAddress rpcAddress = peersRow.getInet("rpc_address"); diff --git a/driver-core/src/test/java/com/datastax/driver/core/ControlConnectionTest.java b/driver-core/src/test/java/com/datastax/driver/core/ControlConnectionTest.java index a406bbf8e00..83f54e7861a 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/ControlConnectionTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/ControlConnectionTest.java @@ -17,7 +17,10 @@ import static com.datastax.driver.core.Assertions.assertThat; import static com.datastax.driver.core.CreateCCM.TestMode.PER_METHOD; +import static com.datastax.driver.core.ScassandraCluster.SELECT_LOCAL; import static com.datastax.driver.core.ScassandraCluster.SELECT_PEERS; +import static com.datastax.driver.core.ScassandraCluster.SELECT_PEERS_DSE68; +import static com.datastax.driver.core.ScassandraCluster.SELECT_PEERS_V2; import static com.datastax.driver.core.ScassandraCluster.datacenter; import static com.datastax.driver.core.TestUtils.nonQuietClusterCloseOptions; import static com.google.common.collect.Lists.newArrayList; @@ -30,6 +33,8 @@ import com.datastax.driver.core.policies.ReconnectionPolicy; import com.datastax.driver.core.utils.CassandraVersion; import com.google.common.base.Function; +import com.google.common.base.Optional; +import com.google.common.collect.Collections2; import com.google.common.collect.HashMultiset; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; @@ -41,11 +46,16 @@ import java.util.HashSet; import java.util.Iterator; import java.util.Map; +import java.util.Random; import java.util.Set; +import java.util.UUID; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import org.apache.log4j.Level; +import org.junit.Ignore; +import org.scassandra.http.client.PrimingClient; import org.scassandra.http.client.PrimingRequest; +import org.scassandra.http.client.Result; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.testng.annotations.DataProvider; @@ -560,6 +570,295 @@ public void should_connect_when_peers_v2_table_not_present() { } } + /** + * Cassandra 4.0 supports native_address and native_port columns in system.peers_v2. We want to + * validate our ability to build correct metadata when drawing data from these tables. + */ + @Test(groups = "short") + @CCMConfig(createCcm = false) + public void should_extract_hosts_using_native_address_port_from_peersv2() + throws UnknownHostException { + + InetAddress expectedAddress = InetAddress.getByName("4.3.2.1"); + int expectedPort = 2409; + PeerRowState state = + PeerRowState.builder() + .peersV2("native_address", expectedAddress) + .peersV2("native_port", expectedPort) + .expectedAddress(expectedAddress) + .expectedPort(expectedPort) + .build(); + runPeerTest(state); + } + + /** DSE 6.8 includes native_transport_address and native_transport_port in system.peers. */ + @Test(groups = "short") + @CCMConfig(createCcm = false) + public void should_extract_hosts_using_native_transport_address_port_from_peers() + throws UnknownHostException { + + InetAddress expectedAddress = InetAddress.getByName("4.3.2.1"); + int expectedPort = 2409; + PeerRowState state = + PeerRowState.builder() + .peers("native_transport_address", expectedAddress) + .peers("native_transport_port", expectedPort) + .expectedAddress(expectedAddress) + .expectedPort(expectedPort) + .build(); + runPeerTest(state); + } + + /** + * If both native_transport_port and native_transport_port_ssl are present we expect the latter to + * be selected if the Cluster is created with SSL support (i.e. if {@link + * Cluster.Builder#withSSL()} is used). + */ + @Test(groups = "short") + @CCMConfig(createCcm = false) + @Ignore("Requires SSL support in scassandra") + public void should_extract_hosts_using_native_transport_address_port_ssl_from_peers() + throws UnknownHostException { + + InetAddress expectedAddress = InetAddress.getByName("4.3.2.1"); + int expectedPort = 2409; + PeerRowState state = + PeerRowState.builder() + .peers("native_transport_address", expectedAddress) + .peers("native_transport_port", expectedPort - 100) + .peers("native_transport_port_ssl", expectedPort) + .expectedAddress(expectedAddress) + .expectedPort(expectedPort) + .build(); + runPeerTest(state); + } + + /** + * The default case. If we can't get native_address/port out of system.peers_v2 or + * native_transport_address/port out of system.peers the fall back to rpc_address + a default port + */ + @Test(groups = "short") + @CCMConfig(createCcm = false) + public void should_extract_hosts_using_rpc_address_from_peers() throws UnknownHostException { + + InetAddress expectedAddress = InetAddress.getByName("4.3.2.1"); + PeerRowState state = + PeerRowState.builder() + .peers("rpc_address", expectedAddress) + /* DefaultEndPointFactory isn't happy if we don't have a value for + * both peer and rpc_address */ + .peers("peer", InetAddress.getByName("1.2.3.4")) + .expectedAddress(expectedAddress) + .build(); + runPeerTest(state); + } + + private void runPeerTest(PeerRowState state) { + + ScassandraCluster scassandras = + ScassandraCluster.builder().withNodes(2).withPeersV2(state.usePeersV2()).build(); + scassandras.init(); + + Cluster cluster = null; + try { + + scassandras.node(1).primingClient().clearAllPrimes(); + + PrimingClient primingClient = scassandras.node(1).primingClient(); + + /* Note that we always prime system.local; ControlConnection.refreshNodeAndTokenMap() gets angry + * if this is empty */ + primingClient.prime( + PrimingRequest.queryBuilder() + .withQuery("SELECT * FROM system.local WHERE key='local'") + .withThen(then().withColumnTypes(SELECT_LOCAL).withRows(state.getLocalRow()).build()) + .build()); + + if (state.shouldPrimePeers()) { + + primingClient.prime( + PrimingRequest.queryBuilder() + .withQuery("SELECT * FROM system.peers") + .withThen( + then() + .withColumnTypes(state.isDse68() ? SELECT_PEERS_DSE68 : SELECT_PEERS) + .withRows(state.getPeersRow()) + .build()) + .build()); + } + if (state.shouldPrimePeersV2()) { + + primingClient.prime( + PrimingRequest.queryBuilder() + .withQuery("SELECT * FROM system.peers_v2") + .withThen( + then().withColumnTypes(SELECT_PEERS_V2).withRows(state.getPeersV2Row()).build()) + .build()); + } else { + + /* Must return an error code in this case in order to trigger the driver's downgrade to system.peers */ + primingClient.prime( + PrimingRequest.queryBuilder() + .withQuery("SELECT * FROM system.peers_v2") + .withThen(then().withResult(Result.invalid).build())); + } + + cluster = + Cluster.builder() + .addContactPoints(scassandras.address(1).getAddress()) + .withPort(scassandras.getBinaryPort()) + .withNettyOptions(nonQuietClusterCloseOptions) + .build(); + cluster.connect(); + + Collection hostEndPoints = + Collections2.transform( + cluster.getMetadata().allHosts(), + new Function() { + public EndPoint apply(Host host) { + return host.getEndPoint(); + } + }); + assertThat(hostEndPoints).contains(state.getExpectedEndPoint(scassandras)); + } finally { + if (cluster != null) cluster.close(); + scassandras.stop(); + } + } + + static class PeerRowState { + + private final ImmutableMap peers; + private final ImmutableMap peersV2; + private final ImmutableMap local; + + private final InetAddress expectedAddress; + private final Optional expectedPort; + + private final boolean shouldPrimePeers; + private final boolean shouldPrimePeersV2; + + private PeerRowState( + ImmutableMap peers, + ImmutableMap peersV2, + ImmutableMap local, + InetAddress expectedAddress, + Optional expectedPort, + boolean shouldPrimePeers, + boolean shouldPrimePeersV2) { + this.peers = peers; + this.peersV2 = peersV2; + this.local = local; + + this.expectedAddress = expectedAddress; + this.expectedPort = expectedPort; + + this.shouldPrimePeers = shouldPrimePeers; + this.shouldPrimePeersV2 = shouldPrimePeersV2; + } + + public static Builder builder() { + return new Builder(); + } + + public boolean usePeersV2() { + return !this.peersV2.isEmpty(); + } + + public boolean isDse68() { + return this.peers.containsKey("native_transport_address") + || this.peers.containsKey("native_transport_port") + || this.peers.containsKey("native_transport_port_ssl"); + } + + public boolean shouldPrimePeers() { + return this.shouldPrimePeers; + } + + public boolean shouldPrimePeersV2() { + return this.shouldPrimePeersV2; + } + + public ImmutableMap getPeersRow() { + return this.peers; + } + + public ImmutableMap getPeersV2Row() { + return this.peersV2; + } + + public ImmutableMap getLocalRow() { + return this.local; + } + + public EndPoint getExpectedEndPoint(ScassandraCluster cluster) { + return new TranslatedAddressEndPoint( + new InetSocketAddress( + this.expectedAddress, this.expectedPort.or(cluster.getBinaryPort()))); + } + + static class Builder { + + private ImmutableMap.Builder peers = this.basePeerRow(); + private ImmutableMap.Builder peersV2 = this.basePeerRow(); + private ImmutableMap.Builder local = this.basePeerRow(); + + private InetAddress expectedAddress; + private Optional expectedPort = Optional.absent(); + + private boolean shouldPrimePeers = false; + private boolean shouldPrimePeersV2 = false; + + public PeerRowState build() { + return new PeerRowState( + this.peers.build(), + this.peersV2.build(), + this.local.build(), + this.expectedAddress, + this.expectedPort, + this.shouldPrimePeers, + this.shouldPrimePeersV2); + } + + public Builder peers(String name, Object val) { + this.peers.put(name, val); + this.shouldPrimePeers = true; + return this; + } + + public Builder peersV2(String name, Object val) { + this.peersV2.put(name, val); + this.shouldPrimePeersV2 = true; + return this; + } + + public Builder local(String name, Object val) { + this.local.put(name, val); + return this; + } + + public Builder expectedAddress(InetAddress address) { + this.expectedAddress = address; + return this; + } + + public Builder expectedPort(int port) { + this.expectedPort = Optional.of(port); + return this; + } + + private ImmutableMap.Builder basePeerRow() { + return ImmutableMap.builder() + /* Required to support Metadata.addIfAbsent(Host) which is used by host loading code */ + .put("host_id", UUID.randomUUID()) + /* Elements below required to pass peer row validation */ + .put("data_center", datacenter(1)) + .put("rack", "rack1") + .put("tokens", ImmutableSet.of(Long.toString(new Random().nextLong()))); + } + } + } + static class QueryPlanCountingPolicy extends DelegatingLoadBalancingPolicy { final AtomicInteger counter = new AtomicInteger(); diff --git a/driver-core/src/test/java/com/datastax/driver/core/ScassandraCluster.java b/driver-core/src/test/java/com/datastax/driver/core/ScassandraCluster.java index e281720f8a5..62bd2ece358 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/ScassandraCluster.java +++ b/driver-core/src/test/java/com/datastax/driver/core/ScassandraCluster.java @@ -619,6 +619,22 @@ private Object getPeerInfo(int dc, int node, String property, Object defaultValu column("schema_version", UUID) }; + /* system.peers was re-worked for DSE 6.8 */ + public static final org.scassandra.http.client.types.ColumnMetadata[] SELECT_PEERS_DSE68 = { + column("peer", INET), + column("rpc_address", INET), + column("data_center", TEXT), + column("rack", TEXT), + column("release_version", TEXT), + column("tokens", set(TEXT)), + column("host_id", UUID), + column("graph", BOOLEAN), + column("schema_version", UUID), + column("native_transport_address", INET), + column("native_transport_port", INT), + column("native_transport_port_ssl", INT) + }; + public static final org.scassandra.http.client.types.ColumnMetadata[] SELECT_PEERS_V2 = { column("peer", INET), column("peer_port", INT), diff --git a/driver-core/src/test/java/com/datastax/driver/core/exceptions/ExceptionsTest.java b/driver-core/src/test/java/com/datastax/driver/core/exceptions/ExceptionsTest.java index 31f3c958227..3d913b81f92 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/exceptions/ExceptionsTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/exceptions/ExceptionsTest.java @@ -283,7 +283,7 @@ public void should_create_proper_unprepared_exception() { public void should_create_proper_read_timeout_exception() { ReadTimeoutException e = new ReadTimeoutException(endPoint1, LOCAL_QUORUM, 2, 3, true); assertThat(e.getMessage()) - .isEqualTo( + .contains( "Cassandra timeout during read query at consistency LOCAL_QUORUM (3 responses were required but only 2 replica responded)"); assertThat(e.getConsistencyLevel()).isEqualTo(LOCAL_QUORUM); assertThat(e.getReceivedAcknowledgements()).isEqualTo(2); @@ -292,7 +292,7 @@ public void should_create_proper_read_timeout_exception() { assertThat(e.getEndPoint()).isEqualTo(endPoint1); e = e.copy(endPoint2); assertThat(e.getMessage()) - .isEqualTo( + .contains( "Cassandra timeout during read query at consistency LOCAL_QUORUM (3 responses were required but only 2 replica responded)"); assertThat(e.getConsistencyLevel()).isEqualTo(LOCAL_QUORUM); assertThat(e.getReceivedAcknowledgements()).isEqualTo(2); From 3d96eed950fd52b2a15f6d7d1dd2b6c118148217 Mon Sep 17 00:00:00 2001 From: Laura Novich Date: Tue, 12 Oct 2021 13:34:59 +0300 Subject: [PATCH 025/112] Upgrades Sphinx Theme to version 1.x --- .github/workflows/docs-pages@v2.yaml | 31 ++++++++++++++++++++++ .github/workflows/docs-pr@v1.yaml | 28 ++++++++++++++++++++ .github/workflows/pages.yml | 39 ---------------------------- docs/Makefile | 8 ++++++ docs/pyproject.toml | 2 +- docs/source/conf.py | 7 +---- 6 files changed, 69 insertions(+), 46 deletions(-) create mode 100644 .github/workflows/docs-pages@v2.yaml create mode 100644 .github/workflows/docs-pr@v1.yaml delete mode 100644 .github/workflows/pages.yml diff --git a/.github/workflows/docs-pages@v2.yaml b/.github/workflows/docs-pages@v2.yaml new file mode 100644 index 00000000000..8b86773d983 --- /dev/null +++ b/.github/workflows/docs-pages@v2.yaml @@ -0,0 +1,31 @@ +name: "Publish docs to GitHub Pages" + +on: + push: + branches: + - master + paths: + - "docs/**" +jobs: + release: + name: Build + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + persist-credentials: false + fetch-depth: 0 + - name: Set up Python + uses: actions/setup-python@v1 + with: + python-version: 3.7 + - name: Build docs + run: | + export PATH=$PATH:~/.local/bin + cd docs + make multiversion + - name: Deploy + run: ./docs/_utils/deploy.sh + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/docs-pr@v1.yaml b/.github/workflows/docs-pr@v1.yaml new file mode 100644 index 00000000000..fe7c0028aa0 --- /dev/null +++ b/.github/workflows/docs-pr@v1.yaml @@ -0,0 +1,28 @@ +name: "Build docs on pull requests" + +on: + pull_request: + branches: + - master + paths: + - "docs/**" + +jobs: + release: + name: Build + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + persist-credentials: false + fetch-depth: 0 + - name: Set up Python + uses: actions/setup-python@v1 + with: + python-version: 3.7 + - name: Build docs + run: | + export PATH=$PATH:~/.local/bin + cd docs + make test diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml deleted file mode 100644 index 27ebb4ce1bf..00000000000 --- a/.github/workflows/pages.yml +++ /dev/null @@ -1,39 +0,0 @@ -name: "CI Docs" - -on: - push: - branches: - - scylla-3.x - paths: - - 'docs/**' - - 'faq/**' - - 'manual/**' - - 'changelog/**' - - 'upgrade_guide/**' -jobs: - release: - name: Build - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v2 - with: - persist-credentials: false - fetch-depth: 0 - - name: Set up Python - uses: actions/setup-python@v1 - with: - python-version: 3.7 - - name: Set up JDK 1.8 - uses: actions/setup-java@v1 - with: - java-version: 1.8 - - name: Build Sphinx docs - run: | - export PATH=$PATH:~/.local/bin - cd docs - make multiversion - - name: Deploy - run : ./docs/_utils/deploy.sh - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/docs/Makefile b/docs/Makefile index 79bbe97a0dc..2cebd73728e 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -10,6 +10,8 @@ SOURCE_DIR = _source PAPEROPT_a4 = -D latex_paper_size=a4 PAPEROPT_letter = -D latex_paper_size=letter ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) $(SOURCE_DIR) +TESTSPHINXOPTS = $(ALLSPHINXOPTS) -W --keep-going + # the i18n builder cannot share the environment and doctrees with the others I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . @@ -79,3 +81,9 @@ multiversion: setup .PHONY: multiversionpreview multiversionpreview: multiversion $(POETRY) run python3 -m http.server 5500 --directory $(BUILDDIR)/dirhtml + +.PHONY: test +test: setup + $(SPHINXBUILD) -b dirhtml $(TESTSPHINXOPTS) $(BUILDDIR)/dirhtml + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." \ No newline at end of file diff --git a/docs/pyproject.toml b/docs/pyproject.toml index bb5778d26da..170bdbf9364 100644 --- a/docs/pyproject.toml +++ b/docs/pyproject.toml @@ -9,7 +9,7 @@ python = "^3.7" pyyaml = "5.3" pygments = "2.2.0" recommonmark = "0.5.0" -sphinx-scylladb-theme = "~0.1.12" +sphinx-scylladb-theme = "~1.0.0" sphinx-sitemap = "2.1.0" sphinx-autobuild = "0.7.1" Sphinx = "2.4.4" diff --git a/docs/source/conf.py b/docs/source/conf.py index 2a1ca68daea..cdeed4943c5 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -145,13 +145,8 @@ class DitaaLexer(BashLexer): # html_theme_options = { 'branch_substring_removed': 'scylla-', - 'header_links': [ - ('Scylla Java Driver', 'https://java-driver.docs.scylladb.com/'), - ('Scylla Cloud', 'https://docs.scylladb.com/scylla-cloud/'), - ('Scylla University', 'https://university.scylladb.com/'), - ('ScyllaDB Home', 'https://www.scylladb.com/')], 'github_issues_repository': 'scylladb/java-driver', - 'show_sidebar_index': True, + 'hide_sidebar_index': 'False', 'hide_version_dropdown': ['scylla-3.x'], } From 687213e77aa7dc737b1fc9aee8c108fe748e035c Mon Sep 17 00:00:00 2001 From: Laura Novich <36125151+lauranovich@users.noreply.github.com> Date: Wed, 13 Oct 2021 12:28:08 +0300 Subject: [PATCH 026/112] Update .github/workflows/docs-pages@v2.yaml Co-authored-by: David Garcia --- .github/workflows/docs-pages@v2.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/docs-pages@v2.yaml b/.github/workflows/docs-pages@v2.yaml index 8b86773d983..ca3f531f496 100644 --- a/.github/workflows/docs-pages@v2.yaml +++ b/.github/workflows/docs-pages@v2.yaml @@ -20,6 +20,10 @@ jobs: uses: actions/setup-python@v1 with: python-version: 3.7 + - name: Set up JDK 1.8 + uses: actions/setup-java@v1 + with: + java-version: 1.8 - name: Build docs run: | export PATH=$PATH:~/.local/bin From 31593cc6b4e3f09eb60ee322927bba94597f95ad Mon Sep 17 00:00:00 2001 From: Laura Novich <36125151+lauranovich@users.noreply.github.com> Date: Wed, 13 Oct 2021 12:28:16 +0300 Subject: [PATCH 027/112] Update .github/workflows/docs-pr@v1.yaml Co-authored-by: David Garcia --- .github/workflows/docs-pr@v1.yaml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/docs-pr@v1.yaml b/.github/workflows/docs-pr@v1.yaml index fe7c0028aa0..e69a02e84b7 100644 --- a/.github/workflows/docs-pr@v1.yaml +++ b/.github/workflows/docs-pr@v1.yaml @@ -3,9 +3,13 @@ name: "Build docs on pull requests" on: pull_request: branches: - - master + - scylla-3.x paths: - - "docs/**" + - 'docs/**' + - 'faq/**' + - 'manual/**' + - 'changelog/**' + - 'upgrade_guide/**' jobs: release: From b9ea29e5784c84ef162092849985689fe98be840 Mon Sep 17 00:00:00 2001 From: Laura Novich <36125151+lauranovich@users.noreply.github.com> Date: Wed, 13 Oct 2021 12:28:23 +0300 Subject: [PATCH 028/112] Update .github/workflows/docs-pages@v2.yaml Co-authored-by: David Garcia --- .github/workflows/docs-pages@v2.yaml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/docs-pages@v2.yaml b/.github/workflows/docs-pages@v2.yaml index ca3f531f496..18b41ca9677 100644 --- a/.github/workflows/docs-pages@v2.yaml +++ b/.github/workflows/docs-pages@v2.yaml @@ -3,9 +3,13 @@ name: "Publish docs to GitHub Pages" on: push: branches: - - master + - scylla-3.x paths: - - "docs/**" + - 'docs/**' + - 'faq/**' + - 'manual/**' + - 'changelog/**' + - 'upgrade_guide/**' jobs: release: name: Build From e0d6565d77c7520a4de41b579ef807b1e5d3f619 Mon Sep 17 00:00:00 2001 From: Laura Novich <36125151+lauranovich@users.noreply.github.com> Date: Wed, 13 Oct 2021 13:57:15 +0300 Subject: [PATCH 029/112] Update docs/source/conf.py Co-authored-by: David Garcia --- docs/source/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index cdeed4943c5..7c40c83176e 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -146,7 +146,7 @@ class DitaaLexer(BashLexer): html_theme_options = { 'branch_substring_removed': 'scylla-', 'github_issues_repository': 'scylladb/java-driver', - 'hide_sidebar_index': 'False', + 'hide_sidebar_index': 'false', 'hide_version_dropdown': ['scylla-3.x'], } From 186bc6fa35a8baeb320b90e69bf85d04ace368ec Mon Sep 17 00:00:00 2001 From: David Garcia Date: Fri, 22 Oct 2021 12:22:11 +0100 Subject: [PATCH 030/112] Lint docs workflows --- .github/workflows/docs-pages@v2.yaml | 46 +++++++++++++--------------- .github/workflows/docs-pr@v1.yaml | 29 ++++++++---------- 2 files changed, 35 insertions(+), 40 deletions(-) diff --git a/.github/workflows/docs-pages@v2.yaml b/.github/workflows/docs-pages@v2.yaml index 18b41ca9677..64e135149a2 100644 --- a/.github/workflows/docs-pages@v2.yaml +++ b/.github/workflows/docs-pages@v2.yaml @@ -1,4 +1,4 @@ -name: "Publish docs to GitHub Pages" +name: "Docs / Publish" on: push: @@ -10,30 +10,28 @@ on: - 'manual/**' - 'changelog/**' - 'upgrade_guide/**' + workflow_dispatch: + jobs: release: - name: Build runs-on: ubuntu-latest steps: - - name: Checkout - uses: actions/checkout@v2 - with: - persist-credentials: false - fetch-depth: 0 - - name: Set up Python - uses: actions/setup-python@v1 - with: - python-version: 3.7 - - name: Set up JDK 1.8 - uses: actions/setup-java@v1 - with: - java-version: 1.8 - - name: Build docs - run: | - export PATH=$PATH:~/.local/bin - cd docs - make multiversion - - name: Deploy - run: ./docs/_utils/deploy.sh - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Checkout + uses: actions/checkout@v2 + with: + persist-credentials: false + fetch-depth: 0 + - name: Set up Python + uses: actions/setup-python@v1 + with: + python-version: 3.7 + - name: Set up JDK 1.8 + uses: actions/setup-java@v1 + with: + java-version: 1.8 + - name: Build docs + run: make -C docs multiversion + - name: Deploy + run: ./docs/_utils/deploy.sh + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/docs-pr@v1.yaml b/.github/workflows/docs-pr@v1.yaml index e69a02e84b7..1d1d9730d9e 100644 --- a/.github/workflows/docs-pr@v1.yaml +++ b/.github/workflows/docs-pr@v1.yaml @@ -1,4 +1,4 @@ -name: "Build docs on pull requests" +name: "Docs / Build PR" on: pull_request: @@ -12,21 +12,18 @@ on: - 'upgrade_guide/**' jobs: - release: + build: name: Build runs-on: ubuntu-latest steps: - - name: Checkout - uses: actions/checkout@v2 - with: - persist-credentials: false - fetch-depth: 0 - - name: Set up Python - uses: actions/setup-python@v1 - with: - python-version: 3.7 - - name: Build docs - run: | - export PATH=$PATH:~/.local/bin - cd docs - make test + - name: Checkout + uses: actions/checkout@v2 + with: + persist-credentials: false + fetch-depth: 0 + - name: Set up Python + uses: actions/setup-python@v1 + with: + python-version: 3.7 + - name: Build docs + run: make -C docs test \ No newline at end of file From 3950c97df25945c2c8a628fd3c69af7caed3b300 Mon Sep 17 00:00:00 2001 From: David Garcia Date: Fri, 22 Oct 2021 12:22:18 +0100 Subject: [PATCH 031/112] Add contribute button --- docs/source/conf.py | 160 +++++++++----------------------------------- 1 file changed, 32 insertions(+), 128 deletions(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index 7c40c83176e..71dbea88832 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -11,8 +11,6 @@ from recommonmark.parser import CommonMarkParser, splitext, urlparse from sphinx_scylladb_theme.utils import multiversion_regex_builder -logger = logging.getLogger(__name__) - # -- General configuration ------------------------------------------------ # Add any Sphinx extension'¡' module names here, as strings. They can be @@ -89,23 +87,10 @@ def setup(app): copyright = str(date.today().year) + ', ScyllaDB. All rights reserved.' author = u'Scylla Project Contributors' -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -# -# The short X.Y version. -version = u'3.7.1' -# The full version, including alpha/beta/rc tags. -release = u'3.7.1' - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -language = None - # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This patterns also effect to html_static_path and html_extra_path -exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store', 'lib', 'lib64','**/_common/*', 'README.md', '.git', '.github', '_utils', '_templates', 'rst_include'] +exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store', '_utils'] # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'sphinx' @@ -113,69 +98,6 @@ def setup(app): # If true, `todo` and `todoList` produce output, else they produce nothing. todo_include_todos = True -# Custom lexer -from pygments.lexers.shell import BashLexer -from sphinx.highlighting import lexers - -class DitaaLexer(BashLexer): - pass -lexers['ditaa'] = DitaaLexer(startinline=True) - -# Adds version variables for monitoring and manager versions when used in inline text - -rst_epilog = """ -.. |mon_version| replace:: 3.1 -.. |man_version| replace:: 2.0 -.. |mon_root| replace:: :doc:`Scylla Monitoring Stack ` -""" - -# -- Options for HTML output ---------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -# -html_theme = 'sphinx_scylladb_theme' -# html_theme_path = ["../.."] - -html_style = '' - -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -# -html_theme_options = { - 'branch_substring_removed': 'scylla-', - 'github_issues_repository': 'scylladb/java-driver', - 'hide_sidebar_index': 'false', - 'hide_version_dropdown': ['scylla-3.x'], -} - -extlinks = { - 'manager': ('/operating-scylla/manager/%s/',''), - 'manager_lst': ('/operating-scylla/manager/2.0/%s/',''), - 'monitor': ('/operating-scylla/monitoring/%s/',''), - 'monitor_lst': ('/operating-scylla/monitoring/3.1/%s/','') -} - -# If not None, a 'Last updated on:' timestamp is inserted at every page -# bottom, using the given strftime format. -# The empty string is equivalent to '%b %d, %Y'. -# -html_last_updated_fmt = '%d %B %Y' - -# Custom sidebar templates, maps document names to template names. -# -html_sidebars = {'**': ['side-nav.html']} - -# Output file base name for HTML help builder. -htmlhelp_basename = 'ScyllaDocumentationdoc' - -# URL which points to the root of the HTML documentation. -html_baseurl = 'https://java-driver.docs.scylladb.com' - -# Dictionary of values to pass into the template engine’s context for all pages -html_context = {'html_baseurl': html_baseurl} - # -- Options for not found extension ------------------------------------------- # Template used to render the 404.html generated by this extension. @@ -208,61 +130,43 @@ class DitaaLexer(BashLexer): # Format for versioned output directories inside the build directory smv_outputdir_format = '{ref.name}' -# -- Options for LaTeX output --------------------------------------------- -latex_elements = { - # The paper size ('letterpaper' or 'a4paper'). - # - # 'papersize': 'letterpaper', - - # The font size ('10pt', '11pt' or '12pt'). - # - # 'pointsize': '10pt', +# -- Options for HTML output ---------------------------------------------- - # Additional stuff for the LaTeX preamble. - # - # 'preamble': '', +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +html_theme = 'sphinx_scylladb_theme' - # Latex figure (float) alignment - # - # 'figure_align': 'htbp', +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +# +html_theme_options = { + 'conf_py_path': 'docs/source/', + 'branch_substring_removed': 'scylla-', + 'github_repository': 'scylladb/java-driver', + 'github_issues_repository': 'scylladb/java-driver', + 'hide_edit_this_page_button': 'false', + 'hide_sidebar_index': 'false', + 'hide_version_dropdown': ['scylla-3.x'], } -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, -# author, documentclass [howto, manual, or own class]). -latex_documents = [ - (master_doc, 'ScyllaDocumentation.tex', u'Scylla Documentation Documentation', - u'Scylla Project Contributors', 'manual'), -] - -# -- Options for manual page output --------------------------------------- - -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -man_pages = [ - (master_doc, 'scylladocumentation', u'Scylla Documentation Documentation', - [author], 1) -] - -# -- Options for Texinfo output ------------------------------------------- +# If not None, a 'Last updated on:' timestamp is inserted at every page +# bottom, using the given strftime format. +# The empty string is equivalent to '%b %d, %Y'. +# +html_last_updated_fmt = '%d %B %Y' -# Grouping the document tree into Texinfo files. List of tuples -# (source start file, target name, title, author, -# dir menu entry, description, category) -texinfo_documents = [ - (master_doc, 'ScyllaDocumentation', u'Scylla Documentation Documentation', - author, 'ScyllaDocumentation', 'One line description of project.', - 'Miscellaneous'), -] +# Custom sidebar templates, maps document names to template names. +# +html_sidebars = {'**': ['side-nav.html']} -# -- Options for Epub output ---------------------------------------------- +# Output file base name for HTML help builder. +htmlhelp_basename = 'ScyllaDocumentationdoc' -# Bibliographic Dublin Core info. -epub_title = project -epub_author = author -epub_publisher = author -epub_copyright = copyright +# URL which points to the root of the HTML documentation. +html_baseurl = 'https://java-driver.docs.scylladb.com' -# A list of files that should not be packed into the epub file. -epub_exclude_files = ['search.html'] +# Dictionary of values to pass into the template engine’s context for all pages +html_context = {'html_baseurl': html_baseurl} From 47e1f4d61652dd22c41ffdfb22811bf496ea40f4 Mon Sep 17 00:00:00 2001 From: jianghua Date: Thu, 27 Aug 2020 20:22:24 +0800 Subject: [PATCH 032/112] Fix borrowConnection handling of missing connection to a shard Previously, if there was no connection to a shard and host.convictionPolicy.canReconnectNow() was true, method would wait for the new connection to be established. This is not correct because we would like to use connection to a different shard if available. This change fixes the problem. --- .../main/java/com/datastax/driver/core/HostConnectionPool.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/driver-core/src/main/java/com/datastax/driver/core/HostConnectionPool.java b/driver-core/src/main/java/com/datastax/driver/core/HostConnectionPool.java index 67ca642eb31..8811cc9fa5e 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/HostConnectionPool.java +++ b/driver-core/src/main/java/com/datastax/driver/core/HostConnectionPool.java @@ -421,14 +421,12 @@ ListenableFuture borrowConnection( if (host.convictionPolicy.canReconnectNow()) { if (connectionsPerShard == 0) { maybeSpawnNewConnection(shardId); - return enqueue(timeout, unit, maxQueueSize, shardId); } else if (scheduledForCreation[shardId].compareAndSet(0, connectionsPerShard)) { for (int i = 0; i < connectionsPerShard; i++) { // We don't respect MAX_SIMULTANEOUS_CREATION here because it's only to // protect against creating connection in excess of core too quickly manager.blockingExecutor().submit(new ConnectionTask(shardId)); } - return enqueue(timeout, unit, maxQueueSize, shardId); } } // connections for this shard are still being initialized so pick connection for any shard From bdcc1660114a1f7e8a96b8c504506c7400d1fe98 Mon Sep 17 00:00:00 2001 From: jianghua Date: Thu, 27 Aug 2020 20:22:24 +0800 Subject: [PATCH 033/112] Limit the rate at which HostConnectionPool opens connections Changed test: New reconnection mechanism caused one test to fail. Test needed to be changed, because missing connections will now be spawned by the reconnection mechanism - no need to send requests to schedule connection creation. --- .../driver/core/HostConnectionPool.java | 94 ++++++++++++------- .../driver/core/HostConnectionPoolTest.java | 15 +-- 2 files changed, 65 insertions(+), 44 deletions(-) diff --git a/driver-core/src/main/java/com/datastax/driver/core/HostConnectionPool.java b/driver-core/src/main/java/com/datastax/driver/core/HostConnectionPool.java index 8811cc9fa5e..5a3fc264074 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/HostConnectionPool.java +++ b/driver-core/src/main/java/com/datastax/driver/core/HostConnectionPool.java @@ -110,15 +110,10 @@ public static class ConnectionTasksSharedState { private int tasksInFlight = 0; private Map connectionsToClose = new HashMap(); - public Connection registerTask(int shardId) { - Connection c = null; + public void registerTask() { synchronized (lock) { - c = connectionsToClose.remove(shardId); - if (c == null) { - ++tasksInFlight; - } + ++tasksInFlight; } - return c; } public void unregisterTask() { @@ -137,6 +132,12 @@ public void unregisterTask() { } } + public Connection getConnection(int shardId) { + synchronized (lock) { + return connectionsToClose.remove(shardId); + } + } + public Connection addConnectionToClose(int shardId, Connection c) { Connection res = null; boolean close = false; @@ -157,18 +158,44 @@ public Connection addConnectionToClose(int shardId, Connection c) { private final ConnectionTasksSharedState connectionTasksSharedState = new ConnectionTasksSharedState(); + private void scheduleConnectionTask(final ConnectionTask task) { + timeoutsExecutor.schedule( + new Runnable() { + public void run() { + manager.blockingExecutor().submit(task); + } + }, + 100, + TimeUnit.MILLISECONDS); + } + + private enum ConnectionResult { + SUCCESS, + SHOULD_RETRY, + FAILED, + } + private class ConnectionTask implements Runnable { private final int shardId; public ConnectionTask(int shardId) { this.shardId = shardId; + connectionTasksSharedState.registerTask(); } @Override public void run() { - addConnectionIfUnderMaximum(shardId, connectionTasksSharedState); - scheduledForCreation[shardId].decrementAndGet(); + switch (addConnectionIfUnderMaximum(shardId, connectionTasksSharedState)) { + case SUCCESS: + case FAILED: + connectionTasksSharedState.unregisterTask(); + scheduledForCreation[shardId].decrementAndGet(); + break; + case SHOULD_RETRY: + scheduleConnectionTask(this); + break; + } } } @@ -648,19 +675,20 @@ private void doTrashConnection(Connection connection) { trash[connection.shardId()].add(connection); } - private boolean addConnectionIfUnderMaximum(int shardId, ConnectionTasksSharedState sharedState) { + private ConnectionResult addConnectionIfUnderMaximum( + int shardId, ConnectionTasksSharedState sharedState) { // First, make sure we don't cross the allowed limit of open connections for (; ; ) { int opened = open[shardId].get(); - if (opened >= maxConnectionsPerShard) return false; + if (opened >= maxConnectionsPerShard) return ConnectionResult.FAILED; if (open[shardId].compareAndSet(opened, opened + 1)) break; } if (phase.get() != Phase.READY) { open[shardId].decrementAndGet(); - return false; + return ConnectionResult.FAILED; } // Now really open the connection @@ -669,22 +697,20 @@ private boolean addConnectionIfUnderMaximum(int shardId, ConnectionTasksSharedSt if (newConnection == null) { if (!host.convictionPolicy.canReconnectNow()) { open[shardId].decrementAndGet(); - return false; + return ConnectionResult.SHOULD_RETRY; } logger.debug("Creating new connection on busy pool to {}", host); - newConnection = sharedState.registerTask(shardId); + newConnection = sharedState.getConnection(shardId); if (newConnection == null) { - try { - do { - newConnection = manager.connectionFactory().open(this); - if (newConnection.shardId() == shardId) { - newConnection.setKeyspace(manager.poolsState.keyspace); - } else { - newConnection = sharedState.addConnectionToClose(shardId, newConnection); - } - } while (newConnection == null); - } finally { - sharedState.unregisterTask(); + newConnection = manager.connectionFactory().open(this); + if (newConnection.shardId() == shardId) { + newConnection.setKeyspace(manager.poolsState.keyspace); + } else { + newConnection = sharedState.addConnectionToClose(shardId, newConnection); + if (newConnection == null) { + open[shardId].decrementAndGet(); + return ConnectionResult.SHOULD_RETRY; + } } } } @@ -697,40 +723,40 @@ private boolean addConnectionIfUnderMaximum(int shardId, ConnectionTasksSharedSt if (isClosed() && !newConnection.isClosed()) { close(newConnection); open[shardId].decrementAndGet(); - return false; + return ConnectionResult.FAILED; } dequeue(newConnection); - return true; + return ConnectionResult.SUCCESS; } catch (InterruptedException e) { Thread.currentThread().interrupt(); // Skip the open but ignore otherwise open[shardId].decrementAndGet(); - return false; + return ConnectionResult.FAILED; } catch (ConnectionException e) { open[shardId].decrementAndGet(); logger.debug("Connection error to {} while creating additional connection", host); - return false; + return ConnectionResult.FAILED; } catch (AuthenticationException e) { // This shouldn't really happen in theory open[shardId].decrementAndGet(); logger.error( "Authentication error while creating additional connection (error is: {})", e.getMessage()); - return false; + return ConnectionResult.FAILED; } catch (UnsupportedProtocolVersionException e) { // This shouldn't happen since we shouldn't have been able to connect in the first place open[shardId].decrementAndGet(); logger.error( "UnsupportedProtocolVersionException error while creating additional connection (error is: {})", e.getMessage()); - return false; + return ConnectionResult.FAILED; } catch (ClusterNameMismatchException e) { open[shardId].decrementAndGet(); logger.error( "ClusterNameMismatchException error while creating additional connection (error is: {})", e.getMessage()); - return false; + return ConnectionResult.FAILED; } } @@ -763,7 +789,7 @@ private void maybeSpawnNewConnection(int shardId) { if (scheduledForCreation[shardId].compareAndSet(inCreation, inCreation + 1)) break; } - manager.blockingExecutor().submit(new ConnectionTask(shardId)); + scheduleConnectionTask(new ConnectionTask(shardId)); } @Override @@ -930,7 +956,7 @@ void ensureCoreConnections() { // We don't respect MAX_SIMULTANEOUS_CREATION here because it's only to // protect against creating connection in excess of core too quickly scheduledForCreation[shardId].incrementAndGet(); - manager.blockingExecutor().submit(new ConnectionTask(shardId)); + scheduleConnectionTask(new ConnectionTask(shardId)); } } } diff --git a/driver-core/src/test/java/com/datastax/driver/core/HostConnectionPoolTest.java b/driver-core/src/test/java/com/datastax/driver/core/HostConnectionPoolTest.java index 6f242ae1592..40fb196e980 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/HostConnectionPoolTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/HostConnectionPoolTest.java @@ -1197,16 +1197,11 @@ public void should_not_mark_host_down_if_some_connections_fail_on_init() throws Uninterruptibles.sleepUninterruptibly(reconnectInterval, TimeUnit.MILLISECONDS); - // Should open up to core connections, however it will only spawn up to 1 connection - // per request, so we need to make enough requests to make up the deficit. Additionally - // we need to wait for connections to be established between requests for the pool - // to spawn new connections (since it only allows one simultaneous creation). - for (int i = 5; i <= 8; i++) { - allRequests.add(MockRequest.send(pool)); - verify(factory, timeout(readTimeout)).open(any(HostConnectionPool.class)); - reset(factory); - assertPoolSize(pool, i); - } + // Reconnection mechanism should fill missing connections by now. + verify(factory, timeout(readTimeout).times(4)) + .open(any(HostConnectionPool.class)); + reset(factory); + assertPoolSize(pool, 8); } finally { MockRequest.completeAll(allRequests); cluster.close(); From 3381588545a71990c04f2364650a6df3c01fd5e1 Mon Sep 17 00:00:00 2001 From: jianghua Date: Fri, 28 Aug 2020 16:45:11 +0800 Subject: [PATCH 034/112] Make it possible to create connection using different server port This will be used to establish connection to the shard-aware port. --- .../com/datastax/driver/core/Connection.java | 20 +++++++++++++++++-- .../driver/core/HostConnectionPoolTest.java | 10 +++++----- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/driver-core/src/main/java/com/datastax/driver/core/Connection.java b/driver-core/src/main/java/com/datastax/driver/core/Connection.java index 5b0fb2cac3c..9f245e5a14f 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/Connection.java +++ b/driver-core/src/main/java/com/datastax/driver/core/Connection.java @@ -73,6 +73,7 @@ import io.netty.util.TimerTask; import io.netty.util.concurrent.GlobalEventExecutor; import java.lang.ref.WeakReference; +import java.net.InetSocketAddress; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; @@ -169,6 +170,10 @@ protected Connection(String name, EndPoint endPoint, Factory factory, Owner owne } ListenableFuture initAsync() { + return initAsync(0); + } + + ListenableFuture initAsync(int serverPort) { if (factory.isShutdown) return Futures.immediateFailedFuture( new ConnectionException(endPoint, "Connection factory is shut down")); @@ -195,7 +200,12 @@ ListenableFuture initAsync() { ? factory.manager.metrics : null)); - ChannelFuture future = bootstrap.connect(endPoint.resolve()); + InetSocketAddress serverAddress = + (serverPort == 0) + ? endPoint.resolve() + : new InetSocketAddress(endPoint.resolve().getAddress(), serverPort); + + ChannelFuture future = bootstrap.connect(serverAddress); writer.incrementAndGet(); future.addListener( @@ -1116,11 +1126,17 @@ Connection open(Host host) Connection open(HostConnectionPool pool) throws ConnectionException, InterruptedException, UnsupportedProtocolVersionException, ClusterNameMismatchException { + return open(pool, 0); + } + + Connection open(HostConnectionPool pool, int serverPort) + throws ConnectionException, InterruptedException, UnsupportedProtocolVersionException, + ClusterNameMismatchException { pool.host.convictionPolicy.signalConnectionsOpening(1); Connection connection = new Connection(buildConnectionName(pool.host), pool.host.getEndPoint(), this, pool); try { - connection.initAsync().get(); + connection.initAsync(serverPort).get(); return connection; } catch (ExecutionException e) { throw launderAsyncInitException(e); diff --git a/driver-core/src/test/java/com/datastax/driver/core/HostConnectionPoolTest.java b/driver-core/src/test/java/com/datastax/driver/core/HostConnectionPoolTest.java index 40fb196e980..7d281b88990 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/HostConnectionPoolTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/HostConnectionPoolTest.java @@ -27,6 +27,7 @@ import static com.google.common.collect.Lists.newArrayList; import static java.util.concurrent.TimeUnit.MILLISECONDS; import static java.util.concurrent.TimeUnit.SECONDS; +import static org.mockito.Matchers.anyInt; import static org.mockito.Mockito.after; import static org.mockito.Mockito.any; import static org.mockito.Mockito.doReturn; @@ -511,7 +512,7 @@ public void variable_size_pool_should_fill_its_connections_and_then_reject() thr allRequests.add(MockRequest.send(pool)); // Allow time for new connection to be spawned. - verify(factory, after(2000).times(1)).open(any(HostConnectionPool.class)); + verify(factory, after(2000).times(1)).open(any(HostConnectionPool.class), anyInt()); assertPoolSize(pool, 2); // Borrow more and ensure the connection returned is a non-core connection. @@ -562,7 +563,7 @@ public void should_add_extra_connection_when_core_full() throws Exception { allRequests.add(MockRequest.send(pool)); // Reaching the threshold should have triggered the creation of an extra one - verify(factory, after(2000).times(1)).open(any(HostConnectionPool.class)); + verify(factory, after(2000).times(1)).open(any(HostConnectionPool.class), anyInt()); assertPoolSize(pool, 2); } finally { MockRequest.completeAll(allRequests); @@ -795,7 +796,7 @@ public void should_trash_on_returning_connection_with_insufficient_streams() thr allRequests.addAll(requests); allRequests.add(MockRequest.send(pool)); - verify(factory, after(2000).times(1)).open(any(HostConnectionPool.class)); + verify(factory, after(2000).times(1)).open(any(HostConnectionPool.class), anyInt()); assertThat(pool.connections[0]).hasSize(2); // Grab the new non-core connection and replace it with a spy. @@ -1198,8 +1199,7 @@ public void should_not_mark_host_down_if_some_connections_fail_on_init() throws Uninterruptibles.sleepUninterruptibly(reconnectInterval, TimeUnit.MILLISECONDS); // Reconnection mechanism should fill missing connections by now. - verify(factory, timeout(readTimeout).times(4)) - .open(any(HostConnectionPool.class)); + verify(factory, timeout(readTimeout).times(4)).open(any(HostConnectionPool.class), anyInt()); reset(factory); assertPoolSize(pool, 8); } finally { From 54547252476514eebb2d447d89a6ef5c5afd85e9 Mon Sep 17 00:00:00 2001 From: jianghua Date: Fri, 28 Aug 2020 16:45:11 +0800 Subject: [PATCH 035/112] Fetch server ports with advanced shard awareness support Driver needs to fetch shard-aware port on first connection to node, so that subsequent connection can be shard aware. There is a separate shard-aware port for SSL connections, just as there is one for non shard-aware connections. ShardingInfo needs to expose the right port, depending on whether SSL is enabled or not. --- .../datastax/driver/core/ShardingInfo.java | 36 +++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/driver-core/src/main/java/com/datastax/driver/core/ShardingInfo.java b/driver-core/src/main/java/com/datastax/driver/core/ShardingInfo.java index 192070b4aa7..319a9ec6589 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/ShardingInfo.java +++ b/driver-core/src/main/java/com/datastax/driver/core/ShardingInfo.java @@ -25,18 +25,29 @@ public class ShardingInfo { private static final String SCYLLA_PARTITIONER = "SCYLLA_PARTITIONER"; private static final String SCYLLA_SHARDING_ALGORITHM = "SCYLLA_SHARDING_ALGORITHM"; private static final String SCYLLA_SHARDING_IGNORE_MSB = "SCYLLA_SHARDING_IGNORE_MSB"; + private static final String SCYLLA_SHARD_AWARE_PORT = "SCYLLA_SHARD_AWARE_PORT"; + private static final String SCYLLA_SHARD_AWARE_PORT_SSL = "SCYLLA_SHARD_AWARE_PORT_SSL"; private final int shardsCount; private final String partitioner; private final String shardingAlgorithm; private final int shardingIgnoreMSB; + private final int shardAwarePort; + private final int shardAwarePortSSL; private ShardingInfo( - int shardsCount, String partitioner, String shardingAlgorithm, int shardingIgnoreMSB) { + int shardsCount, + String partitioner, + String shardingAlgorithm, + int shardingIgnoreMSB, + int shardAwarePort, + int shardAwarePortSSL) { this.shardsCount = shardsCount; this.partitioner = partitioner; this.shardingAlgorithm = shardingAlgorithm; this.shardingIgnoreMSB = shardingIgnoreMSB; + this.shardAwarePort = shardAwarePort; + this.shardAwarePortSSL = shardAwarePortSSL; } public int getShardsCount() { @@ -55,6 +66,10 @@ public int shardId(Token t) { return (int) (sum >>> 32); } + public int getShardAwarePort(boolean isSSLUsed) { + return isSSLUsed ? shardAwarePortSSL : shardAwarePort; + } + public static class ConnectionShardingInfo { public final int shardId; public final ShardingInfo shardingInfo; @@ -71,6 +86,8 @@ public static ConnectionShardingInfo parseShardingInfo(Map> String partitioner = parseString(params, SCYLLA_PARTITIONER); String shardingAlgorithm = parseString(params, SCYLLA_SHARDING_ALGORITHM); Integer shardingIgnoreMSB = parseInt(params, SCYLLA_SHARDING_IGNORE_MSB); + Integer shardAwarePort = parseInt(params, SCYLLA_SHARD_AWARE_PORT); + Integer shardAwarePortSSL = parseInt(params, SCYLLA_SHARD_AWARE_PORT_SSL); if (shardId == null || shardsCount == null || partitioner == null @@ -80,8 +97,23 @@ public static ConnectionShardingInfo parseShardingInfo(Map> || !shardingAlgorithm.equals("biased-token-round-robin")) { return null; } + if (shardAwarePort == null) { + shardAwarePort = 0; + } + + if (shardAwarePortSSL == null) { + shardAwarePortSSL = 0; + } + return new ConnectionShardingInfo( - shardId, new ShardingInfo(shardsCount, partitioner, shardingAlgorithm, shardingIgnoreMSB)); + shardId, + new ShardingInfo( + shardsCount, + partitioner, + shardingAlgorithm, + shardingIgnoreMSB, + shardAwarePort, + shardAwarePortSSL)); } private static String parseString(Map> params, String key) { From 661069bddd3e8452a44c1b4b5635ee6306ba1e62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karol=20Bary=C5=82a?= Date: Thu, 9 Sep 2021 11:45:11 +0200 Subject: [PATCH 036/112] Make advanced shard awareness configurable Create public API to configure port-based shard awareness. User can disable it with Cluster.Builder.withoutAdvancedShardAwareness() and set range of local ports used with Cluster.Builder.withLocalPortRange(int low, int high). --- .../com/datastax/driver/core/Cluster.java | 46 +++++++++++++- .../datastax/driver/core/ProtocolOptions.java | 61 +++++++++++++++++++ 2 files changed, 106 insertions(+), 1 deletion(-) diff --git a/driver-core/src/main/java/com/datastax/driver/core/Cluster.java b/driver-core/src/main/java/com/datastax/driver/core/Cluster.java index 6c6b2c00552..4849985d076 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/Cluster.java +++ b/driver-core/src/main/java/com/datastax/driver/core/Cluster.java @@ -748,6 +748,9 @@ public static class Builder implements Initializer { private boolean allowBetaProtocolVersion = false; private boolean noCompact = false; private boolean isCloud = false; + private boolean useAdvancedShardAwareness = true; + private int localPortLow = ProtocolOptions.DEFAULT_LOCAL_PORT_LOW; + private int localPortHigh = ProtocolOptions.DEFAULT_LOCAL_PORT_HIGH; private Collection listeners; @@ -1473,6 +1476,44 @@ public Builder withCloudSecureConnectBundle(InputStream cloudConfigInputStream) return addCloudConfigToBuilder(cloudConfig); } + /** + * Disables advanced shard awareness. By default, this driver chooses local port while making a + * connection to node, to signal which shard it wants to connect to. This allows driver to + * estabilish connection pool faster, especially when there are multiple clients connecting + * concurrently. If this causes any issues, you can disable it using this method. The most + * common issues are the NAT between client and node (which messes up client port numbers) and + * shard aware port (default: 19042) blocked by firewall. + * + * @return this builder. + */ + public Builder withoutAdvancedShardAwareness() { + this.useAdvancedShardAwareness = false; + return this; + } + + /** + * Sets local port range for use by advanced shard awareness. Driver will use ports from this + * range as local ports when connecting to cluster. If {@link #withoutAdvancedShardAwareness()} + * was called, then setting this range does not affect anything. + * + * @param low Lower bound of range, inclusive. + * @param high Upper bound of range, inclusive. + * @return this builder. + */ + public Builder withLocalPortRange(int low, int high) { + if (low < 1 || 65535 < low || high < 1 || 65535 < high) { + throw new IllegalArgumentException("Port numbers must be between 1 and 65535"); + } + + if (high - low < 1000) { + throw new IllegalArgumentException("Port range should be sufficiently large"); + } + + this.localPortLow = low; + this.localPortHigh = high; + return this; + } + private Builder addCloudConfigToBuilder(CloudConfig cloudConfig) { Builder builder = withEndPointFactory(new SniEndPointFactory(cloudConfig.getProxyAddress())) @@ -1519,7 +1560,10 @@ public Configuration getConfiguration() { maxSchemaAgreementWaitSeconds, sslOptions, authProvider, - noCompact) + noCompact, + useAdvancedShardAwareness, + localPortLow, + localPortHigh) .setCompression(compression); MetricsOptions metricsOptions = new MetricsOptions(metricsEnabled, jmxEnabled); diff --git a/driver-core/src/main/java/com/datastax/driver/core/ProtocolOptions.java b/driver-core/src/main/java/com/datastax/driver/core/ProtocolOptions.java index 4d4d215a049..f78ea495595 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/ProtocolOptions.java +++ b/driver-core/src/main/java/com/datastax/driver/core/ProtocolOptions.java @@ -71,6 +71,9 @@ public String toString() { /** The default value for {@link #getMaxSchemaAgreementWaitSeconds()}: 10. */ public static final int DEFAULT_MAX_SCHEMA_AGREEMENT_WAIT_SECONDS = 10; + public static final int DEFAULT_LOCAL_PORT_LOW = 10000; + public static final int DEFAULT_LOCAL_PORT_HIGH = 60000; + private volatile Cluster.Manager manager; private final int port; @@ -85,6 +88,10 @@ public String toString() { private volatile Compression compression = Compression.NONE; + private final boolean useAdvancedShardAwarness; + private final int localPortLow; + private final int localPortHigh; + /** * Creates a new {@code ProtocolOptions} instance using the {@code DEFAULT_PORT} (and without * SSL). @@ -144,12 +151,53 @@ public ProtocolOptions( SSLOptions sslOptions, AuthProvider authProvider, boolean noCompact) { + this( + port, + protocolVersion, + maxSchemaAgreementWaitSeconds, + sslOptions, + authProvider, + noCompact, + true, + DEFAULT_LOCAL_PORT_LOW, + DEFAULT_LOCAL_PORT_HIGH); + } + + /** + * Creates a new {@code ProtocolOptions} instance using the provided port and SSL context. + * + * @param port the port to use for the binary protocol. + * @param protocolVersion the protocol version to use. This can be {@code null}, in which case the + * version used will be the biggest version supported by the first node the driver + * connects to. See {@link Cluster.Builder#withProtocolVersion} for more details. + * @param sslOptions the SSL options to use. Use {@code null} if SSL is not to be used. + * @param authProvider the {@code AuthProvider} to use for authentication against the Cassandra + * nodes. + * @param noCompact whether or not to include the NO_COMPACT startup option. + * @param useAdvancedShardAwarness should the advanced shard awarness (choosing shard to connect + * to by client-side port) be used. + * @param portLow lower bound (inclusive) of ports to use for advanced shard awareness. + * @param portHigh upper bound (inclusive) of ports to use for advanced shard awareness. + */ + public ProtocolOptions( + int port, + ProtocolVersion protocolVersion, + int maxSchemaAgreementWaitSeconds, + SSLOptions sslOptions, + AuthProvider authProvider, + boolean noCompact, + boolean useAdvancedShardAwarness, + int portLow, + int portHigh) { this.port = port; this.initialProtocolVersion = protocolVersion; this.maxSchemaAgreementWaitSeconds = maxSchemaAgreementWaitSeconds; this.sslOptions = sslOptions; this.authProvider = authProvider; this.noCompact = noCompact; + this.useAdvancedShardAwarness = useAdvancedShardAwarness; + this.localPortLow = portLow; + this.localPortHigh = portHigh; } void register(Cluster.Manager manager) { @@ -247,4 +295,17 @@ public AuthProvider getAuthProvider() { public boolean isNoCompact() { return noCompact; } + + /** @return Wheter advanced or non-advanced shard awareness is used. */ + public boolean isUseAdvancedShardAwareness() { + return useAdvancedShardAwarness; + } + + public int getLowLocalPort() { + return localPortLow; + } + + public int getHighLocalPort() { + return localPortHigh; + } } From 27fd006e808b16f13c7ae984c1c3d35fcab94291 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karol=20Bary=C5=82a?= Date: Thu, 9 Sep 2021 15:05:19 +0200 Subject: [PATCH 037/112] Implement PortAllocator PortAllocator finds a free port for a given shard in a given range. It will be used by port-based shard awareness. Important think to remember is that returned port may be stolen before we can use it, so to correctly bind to a local port we need to, in a loop, get a free port and try to bind it. --- .../com/datastax/driver/core/Connection.java | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/driver-core/src/main/java/com/datastax/driver/core/Connection.java b/driver-core/src/main/java/com/datastax/driver/core/Connection.java index 9f245e5a14f..f404507d59c 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/Connection.java +++ b/driver-core/src/main/java/com/datastax/driver/core/Connection.java @@ -72,8 +72,10 @@ import io.netty.util.Timer; import io.netty.util.TimerTask; import io.netty.util.concurrent.GlobalEventExecutor; +import java.io.IOException; import java.lang.ref.WeakReference; import java.net.InetSocketAddress; +import java.net.ServerSocket; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; @@ -1049,6 +1051,72 @@ public String toString() { "Connection[%s, inFlight=%d, closed=%b]", name, inFlight.get(), isClosed()); } + static class PortAllocator { + private static final AtomicInteger lastPort = new AtomicInteger(-1); + + public static int getNextAvailablePort(int shardCount, int shardId, int lowPort, int highPort) { + int lastPortValue, foundPort = -1; + do { + lastPortValue = lastPort.get(); + + // We will scan from lastPortValue + // (or lowPort is there was no lastPort or lastPort is too low) + int scanStart = lastPortValue == -1 ? lowPort : lastPortValue; + if (scanStart < lowPort) { + scanStart = lowPort; + } + + // Round it up to "% shardCount == shardId" + scanStart += (shardCount - scanStart % shardCount) + shardId; + + // Scan from scanStart upwards to highPort. + for (int port = scanStart; port <= highPort; port += shardCount) { + if (isTcpPortAvailable(port)) { + foundPort = port; + break; + } + } + + // If we started scanning from a high scanStart port + // there might have been not enough ports left that are + // smaller than highPort. Scan from the beginning + // from the lowPort. + if (foundPort == -1) { + scanStart = lowPort + (shardCount - lowPort % shardCount) + shardId; + + for (int port = scanStart; port <= highPort; port += shardCount) { + if (isTcpPortAvailable(port)) { + foundPort = port; + break; + } + } + } + + // No luck! All ports taken! + if (foundPort == -1) { + return -1; + } + } while (!lastPort.compareAndSet(lastPortValue, foundPort)); + + return foundPort; + } + + public static boolean isTcpPortAvailable(int port) { + try { + ServerSocket serverSocket = new ServerSocket(); + try { + serverSocket.setReuseAddress(false); + serverSocket.bind(new InetSocketAddress(port), 1); + return true; + } finally { + serverSocket.close(); + } + } catch (IOException ex) { + return false; + } + } + } + static class Factory { final Timer timer; From 2f2eba281f04f362b2f70048dc4eca2023691bc8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karol=20Bary=C5=82a?= Date: Sat, 11 Sep 2021 13:17:54 +0200 Subject: [PATCH 038/112] Make it possible to connect to given shard in Connection --- .../com/datastax/driver/core/Connection.java | 50 ++++++++++++++++--- .../driver/core/HostConnectionPoolTest.java | 9 ++-- 2 files changed, 49 insertions(+), 10 deletions(-) diff --git a/driver-core/src/main/java/com/datastax/driver/core/Connection.java b/driver-core/src/main/java/com/datastax/driver/core/Connection.java index f404507d59c..df854e2c439 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/Connection.java +++ b/driver-core/src/main/java/com/datastax/driver/core/Connection.java @@ -76,6 +76,8 @@ import java.lang.ref.WeakReference; import java.net.InetSocketAddress; import java.net.ServerSocket; +import java.security.InvalidParameterException; +import java.text.MessageFormat; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; @@ -172,10 +174,10 @@ protected Connection(String name, EndPoint endPoint, Factory factory, Owner owne } ListenableFuture initAsync() { - return initAsync(0); + return initAsync(-1, 0); } - ListenableFuture initAsync(int serverPort) { + ListenableFuture initAsync(final int shardId, int serverPort) { if (factory.isShutdown) return Futures.immediateFailedFuture( new ConnectionException(endPoint, "Connection factory is shut down")); @@ -207,7 +209,43 @@ ListenableFuture initAsync(int serverPort) { ? endPoint.resolve() : new InetSocketAddress(endPoint.resolve().getAddress(), serverPort); - ChannelFuture future = bootstrap.connect(serverAddress); + final Owner owner = ownerRef.get(); + final HostConnectionPool pool = + owner instanceof HostConnectionPool ? (HostConnectionPool) owner : null; + final ShardingInfo shardingInfo = pool == null ? null : pool.host.getShardingInfo(); + if ((shardingInfo == null) && shardId != -1) { + throw new InvalidParameterException( + MessageFormat.format( + "Requested connection to shard {0} of host {1}:{2}, but sharding info or pool is absent", + shardId, serverAddress.getAddress().getHostAddress(), serverPort)); + } + + ChannelFuture future; + final int lowPort, highPort; + if (pool != null) { + lowPort = pool.manager.configuration().getProtocolOptions().getLowLocalPort(); + highPort = pool.manager.configuration().getProtocolOptions().getHighLocalPort(); + } else { + lowPort = highPort = -1; + } + + if (shardId == -1) { + future = bootstrap.connect(serverAddress); + } else { + int localPort = + PortAllocator.getNextAvailablePort( + shardingInfo.getShardsCount(), shardId, lowPort, highPort); + if (localPort == -1) { + throw new RuntimeException("Can't find free local port to use"); + } + + future = bootstrap.connect(serverAddress, new InetSocketAddress(localPort)); + logger.debug( + "Connecting to shard {} using local port {} (shardCount: {})\n", + shardId, + localPort, + shardingInfo.getShardsCount()); + } writer.incrementAndGet(); future.addListener( @@ -1194,17 +1232,17 @@ Connection open(Host host) Connection open(HostConnectionPool pool) throws ConnectionException, InterruptedException, UnsupportedProtocolVersionException, ClusterNameMismatchException { - return open(pool, 0); + return open(pool, -1, 0); } - Connection open(HostConnectionPool pool, int serverPort) + Connection open(HostConnectionPool pool, int shardId, int serverPort) throws ConnectionException, InterruptedException, UnsupportedProtocolVersionException, ClusterNameMismatchException { pool.host.convictionPolicy.signalConnectionsOpening(1); Connection connection = new Connection(buildConnectionName(pool.host), pool.host.getEndPoint(), this, pool); try { - connection.initAsync(serverPort).get(); + connection.initAsync(shardId, serverPort).get(); return connection; } catch (ExecutionException e) { throw launderAsyncInitException(e); diff --git a/driver-core/src/test/java/com/datastax/driver/core/HostConnectionPoolTest.java b/driver-core/src/test/java/com/datastax/driver/core/HostConnectionPoolTest.java index 7d281b88990..f44e64dca0c 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/HostConnectionPoolTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/HostConnectionPoolTest.java @@ -512,7 +512,7 @@ public void variable_size_pool_should_fill_its_connections_and_then_reject() thr allRequests.add(MockRequest.send(pool)); // Allow time for new connection to be spawned. - verify(factory, after(2000).times(1)).open(any(HostConnectionPool.class), anyInt()); + verify(factory, after(2000).times(1)).open(any(HostConnectionPool.class), anyInt(), anyInt()); assertPoolSize(pool, 2); // Borrow more and ensure the connection returned is a non-core connection. @@ -563,7 +563,7 @@ public void should_add_extra_connection_when_core_full() throws Exception { allRequests.add(MockRequest.send(pool)); // Reaching the threshold should have triggered the creation of an extra one - verify(factory, after(2000).times(1)).open(any(HostConnectionPool.class), anyInt()); + verify(factory, after(2000).times(1)).open(any(HostConnectionPool.class), anyInt(), anyInt()); assertPoolSize(pool, 2); } finally { MockRequest.completeAll(allRequests); @@ -796,7 +796,7 @@ public void should_trash_on_returning_connection_with_insufficient_streams() thr allRequests.addAll(requests); allRequests.add(MockRequest.send(pool)); - verify(factory, after(2000).times(1)).open(any(HostConnectionPool.class), anyInt()); + verify(factory, after(2000).times(1)).open(any(HostConnectionPool.class), anyInt(), anyInt()); assertThat(pool.connections[0]).hasSize(2); // Grab the new non-core connection and replace it with a spy. @@ -1199,7 +1199,8 @@ public void should_not_mark_host_down_if_some_connections_fail_on_init() throws Uninterruptibles.sleepUninterruptibly(reconnectInterval, TimeUnit.MILLISECONDS); // Reconnection mechanism should fill missing connections by now. - verify(factory, timeout(readTimeout).times(4)).open(any(HostConnectionPool.class), anyInt()); + verify(factory, timeout(readTimeout).times(4)) + .open(any(HostConnectionPool.class), anyInt(), anyInt()); reset(factory); assertPoolSize(pool, 8); } finally { From de048ab3e20b5e6aea8434914e76385cdee5be47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karol=20Bary=C5=82a?= Date: Sat, 11 Sep 2021 13:21:18 +0200 Subject: [PATCH 039/112] Retry connection when local port is busy Local port may be stolen before we open channel, in that case we need to try again. --- .../com/datastax/driver/core/Connection.java | 89 ++++++++++++++----- 1 file changed, 67 insertions(+), 22 deletions(-) diff --git a/driver-core/src/main/java/com/datastax/driver/core/Connection.java b/driver-core/src/main/java/com/datastax/driver/core/Connection.java index df854e2c439..5c45720f3ce 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/Connection.java +++ b/driver-core/src/main/java/com/datastax/driver/core/Connection.java @@ -74,6 +74,7 @@ import io.netty.util.concurrent.GlobalEventExecutor; import java.io.IOException; import java.lang.ref.WeakReference; +import java.net.BindException; import java.net.InetSocketAddress; import java.net.ServerSocket; import java.security.InvalidParameterException; @@ -182,29 +183,18 @@ ListenableFuture initAsync(final int shardId, int serverPort) { return Futures.immediateFailedFuture( new ConnectionException(endPoint, "Connection factory is shut down")); - ProtocolVersion protocolVersion = + final ProtocolVersion protocolVersion = factory.protocolVersion == null ? ProtocolVersion.NEWEST_SUPPORTED : factory.protocolVersion; final SettableFuture channelReadyFuture = SettableFuture.create(); try { - Bootstrap bootstrap = factory.newBootstrap(); - ProtocolOptions protocolOptions = factory.configuration.getProtocolOptions(); - bootstrap.handler( - new Initializer( - this, - protocolVersion, - protocolOptions.getCompression().compressor(), - protocolOptions.getSSLOptions(), - factory.configuration.getPoolingOptions().getHeartbeatIntervalSeconds(), - factory.configuration.getNettyOptions(), - factory.configuration.getCodecRegistry(), - factory.configuration.getMetricsOptions().isEnabled() - ? factory.manager.metrics - : null)); - - InetSocketAddress serverAddress = + final ProtocolOptions protocolOptions = factory.configuration.getProtocolOptions(); + final Bootstrap bootstrap = factory.newBootstrap(); + prepareBootstrap(bootstrap, protocolVersion, protocolOptions); + + final InetSocketAddress serverAddress = (serverPort == 0) ? endPoint.resolve() : new InetSocketAddress(endPoint.resolve().getAddress(), serverPort); @@ -247,16 +237,49 @@ ListenableFuture initAsync(final int shardId, int serverPort) { shardingInfo.getShardsCount()); } - writer.incrementAndGet(); - future.addListener( + final ChannelFutureListener channelListener = new ChannelFutureListener() { @Override public void operationComplete(ChannelFuture future) throws Exception { - writer.decrementAndGet(); if (future.cause() != null) { + // Local port busy, let's try another one + if (shardId != -1 && future.cause().getCause() instanceof BindException) { + int localPort = + PortAllocator.getNextAvailablePort( + shardingInfo.getShardsCount(), shardId, lowPort, highPort); + if (localPort != -1) { + if (future.channel() != null) { + future + .channel() + .close() + .addListener( + new ChannelFutureListener() { + @Override + public void operationComplete(ChannelFuture future) + throws Exception { + if (future.cause() != null) { + logger.warn("Error while closing old channel", future.cause()); + } + } + }); + } + prepareBootstrap(bootstrap, protocolVersion, protocolOptions); + ChannelFuture newFuture = + bootstrap.connect(serverAddress, new InetSocketAddress(localPort)); + newFuture.addListener(this); + logger.debug( + "Retrying connecting to shard {} using local port {} (shardCount: {})\n", + shardId, + localPort, + shardingInfo.getShardsCount()); + return; + } + } logger.warn("Error creating netty channel to " + endPoint, future.cause()); } + writer.decrementAndGet(); + // Note: future.channel() can be null in some error cases, so we need to guard against // it in the rest of the code below. channel = future.channel(); @@ -278,13 +301,14 @@ public void operationComplete(ChannelFuture future) throws Exception { Connection.this.factory.allChannels.add(channel); } if (!future.isSuccess()) { - if (logger.isDebugEnabled()) + if (logger.isDebugEnabled()) { logger.debug( String.format( "%s Error connecting to %s%s", Connection.this, Connection.this.endPoint, extractMessage(future.cause()))); + } channelReadyFuture.setException( new TransportException( Connection.this.endPoint, "Cannot connect", future.cause())); @@ -297,7 +321,10 @@ public void operationComplete(ChannelFuture future) throws Exception { } } } - }); + }; + + writer.incrementAndGet(); + future.addListener(channelListener); } catch (RuntimeException e) { closeAsync().force(); throw e; @@ -364,6 +391,23 @@ public void onFailure(Throwable t) { return initFuture; } + private Bootstrap prepareBootstrap( + Bootstrap bootstrap, ProtocolVersion protocolVersion, ProtocolOptions protocolOptions) { + bootstrap.handler( + new Initializer( + this, + protocolVersion, + protocolOptions.getCompression().compressor(), + protocolOptions.getSSLOptions(), + factory.configuration.getPoolingOptions().getHeartbeatIntervalSeconds(), + factory.configuration.getNettyOptions(), + factory.configuration.getCodecRegistry(), + factory.configuration.getMetricsOptions().isEnabled() + ? factory.manager.metrics + : null)); + return bootstrap; + } + private static String extractMessage(Throwable t) { if (t == null) return ""; String msg = t.getMessage() == null || t.getMessage().isEmpty() ? t.toString() : t.getMessage(); @@ -1407,6 +1451,7 @@ private void flush(FlushItem item) { flusher.start(); } + @ChannelHandler.Sharable class Dispatcher extends SimpleChannelInboundHandler { final StreamIdGenerator streamIdHandler; From 6dbf8ffbb3b008d4950f9549324b097e04a9e4b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karol=20Bary=C5=82a?= Date: Sat, 11 Sep 2021 10:39:48 +0200 Subject: [PATCH 040/112] Use port-based shard awareness Use advanced (port-based) shard awareness both when creating initial connection pool, and later when creating missing connections. --- .../driver/core/HostConnectionPool.java | 77 +++++++++++++++++-- 1 file changed, 69 insertions(+), 8 deletions(-) diff --git a/driver-core/src/main/java/com/datastax/driver/core/HostConnectionPool.java b/driver-core/src/main/java/com/datastax/driver/core/HostConnectionPool.java index 5a3fc264074..01ca873ca82 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/HostConnectionPool.java +++ b/driver-core/src/main/java/com/datastax/driver/core/HostConnectionPool.java @@ -41,6 +41,7 @@ import com.google.common.util.concurrent.SettableFuture; import com.google.common.util.concurrent.Uninterruptibles; import io.netty.util.concurrent.EventExecutor; +import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.Collection; @@ -155,6 +156,23 @@ public Connection addConnectionToClose(int shardId, Connection c) { } } + private boolean canUseAdvancedShardAwareness() { + ShardingInfo shardingInfo = host.getShardingInfo(); + if (shardingInfo == null) { + return false; + } + if (!manager.configuration().getProtocolOptions().isUseAdvancedShardAwareness()) { + return false; + } + + boolean isSSLUsed = null != manager.configuration().getProtocolOptions().getSSLOptions(); + if (shardingInfo.getShardAwarePort(isSSLUsed) == 0) { + return false; + } + + return true; + } + private final ConnectionTasksSharedState connectionTasksSharedState = new ConnectionTasksSharedState(); @@ -261,7 +279,7 @@ ListenableFuture initAsyncWithConnection(Connection reusedConnection) { pendingBorrows[i] = new ConcurrentLinkedQueue(); } - final List connections = Lists.newArrayListWithCapacity(2 * toCreate); + final List connections = Lists.newArrayListWithCapacity(toCreate); final List> connectionFutures = Lists.newArrayListWithCapacity(2 * toCreate); @@ -269,12 +287,39 @@ ListenableFuture initAsyncWithConnection(Connection reusedConnection) { connections.add(reusedConnection); connectionFutures.add(MoreFutures.VOID_SUCCESS); - List newConnections = - manager.connectionFactory().newConnections(this, 2 * toCreate); + List newConnections = manager.connectionFactory().newConnections(this, toCreate); connections.addAll(newConnections); - for (Connection connection : newConnections) { - ListenableFuture connectionFuture = connection.initAsync(); - connectionFutures.add(handleErrors(connectionFuture, initExecutor)); + + if (canUseAdvancedShardAwareness()) { + ShardingInfo shardingInfo = host.getShardingInfo(); + boolean isSSLUsed = null != manager.configuration().getProtocolOptions().getSSLOptions(); + int serverPort = shardingInfo.getShardAwarePort(isSSLUsed); + + int shardId = 0; + int shardConnectionIndex = 0; + for (Connection connection : newConnections) { + if (shardConnectionIndex == connectionsPerShard) { + shardConnectionIndex = 0; + shardId++; + } + if (shardId == reusedConnection.shardId() && shardConnectionIndex == 0) { + shardConnectionIndex++; + if (shardConnectionIndex == connectionsPerShard) { + shardConnectionIndex = 0; + shardId++; + } + } + + ListenableFuture connectionFuture = connection.initAsync(shardId, serverPort); + connectionFutures.add(handleErrors(connectionFuture, initExecutor)); + + shardConnectionIndex++; + } + } else { + for (Connection connection : newConnections) { + ListenableFuture connectionFuture = connection.initAsync(); + connectionFutures.add(handleErrors(connectionFuture, initExecutor)); + } } final SettableFuture initFuture = SettableFuture.create(); @@ -699,10 +744,26 @@ private ConnectionResult addConnectionIfUnderMaximum( open[shardId].decrementAndGet(); return ConnectionResult.SHOULD_RETRY; } - logger.debug("Creating new connection on busy pool to {}", host); newConnection = sharedState.getConnection(shardId); if (newConnection == null) { - newConnection = manager.connectionFactory().open(this); + InetSocketAddress serverAddress = host.getEndPoint().resolve(); + int serverPort, effectiveShardId = shardId; + if (canUseAdvancedShardAwareness()) { + ShardingInfo shardingInfo = host.getShardingInfo(); + boolean isSSLUsed = + null != manager.configuration().getProtocolOptions().getSSLOptions(); + serverPort = shardingInfo.getShardAwarePort(isSSLUsed); + } else { + effectiveShardId = -1; + serverPort = serverAddress.getPort(); + } + + logger.debug( + "Creating new connection to {}:{} for shard {}", + serverAddress.getAddress().getHostAddress(), + serverPort, + shardId); + newConnection = manager.connectionFactory().open(this, effectiveShardId, serverPort); if (newConnection.shardId() == shardId) { newConnection.setKeyspace(manager.poolsState.keyspace); } else { From d4eca65e61476136624df4e564644971976269b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karol=20Bary=C5=82a?= Date: Fri, 10 Sep 2021 13:17:31 +0200 Subject: [PATCH 041/112] Implement fallback to non-advanced shard awareness When we connect to different shard than requested, then probably NAT is present - we should disable advanced shard awareness and use old strategy. When we failed to connect to node using shard-aware port, then we disable advanced shard awareness for 5 minutes - hopefully connection problems will be fixed by then. --- .../com/datastax/driver/core/Connection.java | 23 +++++++++++++++++++ .../driver/core/HostConnectionPool.java | 11 +++++++++ 2 files changed, 34 insertions(+) diff --git a/driver-core/src/main/java/com/datastax/driver/core/Connection.java b/driver-core/src/main/java/com/datastax/driver/core/Connection.java index 5c45720f3ce..60a3509e089 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/Connection.java +++ b/driver-core/src/main/java/com/datastax/driver/core/Connection.java @@ -112,6 +112,10 @@ class Connection { private static final int FLUSHER_SCHEDULE_PERIOD_NS = SystemProperties.getInt("com.datastax.driver.FLUSHER_SCHEDULE_PERIOD_NS", 10000); + private static final long ADV_SHARD_AWARENESS_BLOCK_ON_NAT = 1000000L * 60L * 1000L; + + private static final long ADV_SHARD_AWARENESS_BLOCK_ON_ERROR = 5 * 60 * 1000; + enum State { OPEN, TRASHED, @@ -127,6 +131,8 @@ enum State { private final String name; private volatile Integer shardId = null; + private int requestedShardId = -1; + @VisibleForTesting volatile Channel channel; private final Factory factory; @@ -183,6 +189,8 @@ ListenableFuture initAsync(final int shardId, int serverPort) { return Futures.immediateFailedFuture( new ConnectionException(endPoint, "Connection factory is shut down")); + this.requestedShardId = shardId; + final ProtocolVersion protocolVersion = factory.protocolVersion == null ? ProtocolVersion.NEWEST_SUPPORTED @@ -312,6 +320,11 @@ public void operationComplete(ChannelFuture future) throws Exception { channelReadyFuture.setException( new TransportException( Connection.this.endPoint, "Cannot connect", future.cause())); + if (shardId != -1) { + // We are using advanced shard awareness, so pool must be non-null. + pool.tempBlockAdvShardAwareness(ADV_SHARD_AWARENESS_BLOCK_ON_ERROR); + } + } else { assert channel != null; logger.debug( @@ -444,6 +457,16 @@ public ListenableFuture apply(Message.Response response) throws Exception if (sharding != null) { getHost().setShardingInfo(sharding.shardingInfo); Connection.this.shardId = sharding.shardId; + if (Connection.this.requestedShardId != -1 + && Connection.this.requestedShardId != sharding.shardId) { + logger.warn( + "Advanced shard awareness: requested connection to shard {}, but connected to {}. Is there a NAT between client and server?", + Connection.this.requestedShardId, + sharding.shardId); + // Owner is a HostConnectionPool if we are using adv. shard awareness + ((HostConnectionPool) Connection.this.ownerRef.get()) + .tempBlockAdvShardAwareness(ADV_SHARD_AWARENESS_BLOCK_ON_NAT); + } } else { getHost().setShardingInfo(null); Connection.this.shardId = 0; diff --git a/driver-core/src/main/java/com/datastax/driver/core/HostConnectionPool.java b/driver-core/src/main/java/com/datastax/driver/core/HostConnectionPool.java index 01ca873ca82..b6141e141f5 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/HostConnectionPool.java +++ b/driver-core/src/main/java/com/datastax/driver/core/HostConnectionPool.java @@ -97,6 +97,8 @@ class HostConnectionPool implements Connection.Owner { private final AtomicReference closeFuture = new AtomicReference(); + private long advShardAwarenessBlockedUntil = 0; + private enum Phase { INITIALIZING, READY, @@ -170,9 +172,18 @@ private boolean canUseAdvancedShardAwareness() { return false; } + if (System.currentTimeMillis() < advShardAwarenessBlockedUntil) { + return false; + } + return true; } + public void tempBlockAdvShardAwareness(long millis) { + advShardAwarenessBlockedUntil = + Math.max(System.currentTimeMillis() + millis, advShardAwarenessBlockedUntil); + } + private final ConnectionTasksSharedState connectionTasksSharedState = new ConnectionTasksSharedState(); From 552c87ea61a217092fe31d8507044f6e0a30d77c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wojciech=20B=C4=85czkowski?= Date: Mon, 10 Jan 2022 17:12:53 +0100 Subject: [PATCH 042/112] Pick unique ports during single build() call CCMBridge Builder will now attempt to re-randomize if current free port has already been returned for different service. This works under assumption that system will pick random ephemeral port upon calling new ServerSocket(0);. Fixes #99. --- .../com/datastax/driver/core/CCMBridge.java | 55 ++++++++++++++++++- 1 file changed, 52 insertions(+), 3 deletions(-) diff --git a/driver-core/src/test/java/com/datastax/driver/core/CCMBridge.java b/driver-core/src/test/java/com/datastax/driver/core/CCMBridge.java index b80f6dcb9b1..113649fe0bd 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/CCMBridge.java +++ b/driver-core/src/test/java/com/datastax/driver/core/CCMBridge.java @@ -31,6 +31,7 @@ import com.google.common.io.ByteStreams; import com.google.common.io.Closer; import com.google.common.io.Files; +import com.google.common.primitives.Ints; import java.io.BufferedReader; import java.io.File; import java.io.FileOutputStream; @@ -43,8 +44,10 @@ import java.io.StringWriter; import java.net.InetSocketAddress; import java.util.Arrays; +import java.util.Collection; import java.util.Collections; import java.util.HashMap; +import java.util.HashSet; import java.util.LinkedHashSet; import java.util.Map; import java.util.Set; @@ -881,6 +884,7 @@ public static class Builder { public static final String RANDOM_PORT = "__RANDOM_PORT__"; private static final Pattern RANDOM_PORT_PATTERN = Pattern.compile(RANDOM_PORT); + private static final int RANDOMIZE_PORT_MAX_RETRIES = 20; private String ipPrefix = TestUtils.IP_PREFIX; int[] nodes = {1}; @@ -893,6 +897,7 @@ public static class Builder { private final Map cassandraConfiguration = Maps.newLinkedHashMap(); private final Map dseConfiguration = Maps.newLinkedHashMap(); private final Map workloads = new HashMap(); + private final HashSet selectedPorts = new HashSet(); private Builder() { cassandraConfiguration.put("start_rpc", false); @@ -1044,6 +1049,14 @@ public CCMBridge build() { cassandraVersion = this.version; } + selectedPorts.clear(); + // Preemptively banning every number that looks like explicitly provided port + selectedPorts.addAll(collectPorts(this.cassandraConfiguration)); + if (dseVersion != null) { + selectedPorts.addAll(collectPorts(this.dseConfiguration)); + } + selectedPorts.addAll(Ints.asList(jmxPorts)); + Map cassandraConfiguration = randomizePorts(this.cassandraConfiguration); int storagePort = Integer.parseInt(cassandraConfiguration.get("storage_port").toString()); int thriftPort = Integer.parseInt(cassandraConfiguration.get("rpc_port").toString()); @@ -1059,7 +1072,7 @@ public CCMBridge build() { int[] generatedJmxPorts = new int[numNodes]; for (int i = 0; i < numNodes; i++) { if (i >= jmxPorts.length) { - generatedJmxPorts[i] = TestUtils.findAvailablePort(); + generatedJmxPorts[i] = selectAvailablePort(); } else { generatedJmxPorts[i] = jmxPorts[i]; } @@ -1217,7 +1230,7 @@ private void updateNodeConf(CCMBridge ccm) { int nodesInDc = nodes[dc - 1]; for (int i = 0; i < nodesInDc; i++) { int jmxPort = ccm.jmxAddressOfNode(n).getPort(); - int debugPort = TestUtils.findAvailablePort(); + int debugPort = selectAvailablePort(); logger.trace( "Node {} in cluster {} using JMX port {} and debug port {}", n, @@ -1282,12 +1295,48 @@ private String randomizePorts(CharSequence str) { Matcher matcher = RANDOM_PORT_PATTERN.matcher(str); StringBuffer sb = new StringBuffer(); while (matcher.find()) { - matcher.appendReplacement(sb, Integer.toString(TestUtils.findAvailablePort())); + matcher.appendReplacement(sb, Integer.toString(selectAvailablePort())); } matcher.appendTail(sb); return sb.toString(); } + // Collects port numbers from configuration map. May catch some non-issue false positives. + private static Collection collectPorts(Map config) { + HashSet set = new HashSet(); + for (Object value : config.values()) { + try { + int result = Integer.parseInt(value.toString()); + if ((1 <= result) && (result <= 65535)) { + set.add(result); + } + } catch (NumberFormatException e) { + } + } + return set; + } + + private int findUnselectedPort() { + int port, cnt = 0; + do { + cnt++; + port = TestUtils.findAvailablePort(); + } while (selectedPorts.contains(port) && (cnt < RANDOMIZE_PORT_MAX_RETRIES)); + + if (cnt >= RANDOMIZE_PORT_MAX_RETRIES) { + throw new RuntimeException( + "Couldn't assign random ports. " + + "This may happen when you're trying to exhaust nearly all available ports."); + } + return port; + } + + private int selectAvailablePort() { + int port = findUnselectedPort(); + selectedPorts.add(port); + return port; + } + @Override @SuppressWarnings("SimplifiableIfStatement") public boolean equals(Object o) { From 20f26d74f8a867a5c3618450f62ff2ccc8bb42e7 Mon Sep 17 00:00:00 2001 From: Piotr Grabowski Date: Mon, 31 Jan 2022 13:11:43 +0100 Subject: [PATCH 043/112] Run integration tests on all scylla-3.*x branches Change the GitHub Actions workflow to run on all branches that match scylla-3.*x glob pattern, not only scylla-3.x. This makes it easier to test the changes on specific version branches (such as scylla-3.10.2.x) before merging them into (main) scylla-3.x. --- .github/workflows/tests.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 5baa4e9d96f..33860208296 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -2,9 +2,9 @@ name: Tests on: push: - branches: [ scylla-3.x ] + branches: [ scylla-3.*x ] pull_request: - branches: [ scylla-3.x ] + branches: [ scylla-3.*x ] jobs: run-unit-tests: From 6aa2487c51aa517c530be27c403f07504b17f796 Mon Sep 17 00:00:00 2001 From: Jeff DiNoto Date: Tue, 1 Feb 2022 18:19:11 -0500 Subject: [PATCH 044/112] Fossa scanning (#1579) --- .github/workflows/dep-lic-scan.yaml | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 .github/workflows/dep-lic-scan.yaml diff --git a/.github/workflows/dep-lic-scan.yaml b/.github/workflows/dep-lic-scan.yaml new file mode 100644 index 00000000000..afb197bf137 --- /dev/null +++ b/.github/workflows/dep-lic-scan.yaml @@ -0,0 +1,23 @@ +name: Dependency and License Scan +on: + push: + branches: + - '4.x' + - '3.x' + paths-ignore: + - 'manual/**' + - 'faq/**' + - 'upgrade_guide/**' + - 'changelog/**' +jobs: + scan-repo: + runs-on: ubuntu-latest + steps: + - name: Check out code + uses: actions/checkout@v2 + - name: Install Fossa CLI + run: | + curl -H 'Cache-Control: no-cache' https://raw.githubusercontent.com/fossas/fossa-cli/master/install-latest.sh | bash -s -- -b . + - name: Scan for dependencies and licenses + run: | + FOSSA_API_KEY=${{ secrets.FOSSA_PUSH_ONLY_API_KEY }} ./fossa analyze From 17d8a72d262733cb209714e07f2ed1e19b53f6f1 Mon Sep 17 00:00:00 2001 From: Piotr Grabowski Date: Mon, 31 Jan 2022 14:39:46 +0100 Subject: [PATCH 045/112] Throw UnsupportedProtocolVersion handling OPTIONS Previously, if an OPTIONS packet was sent with a wrong protocol version, onOptionsResponse handler method would return a generic TransportException exception. This patch implements a similar approach to onStartupResponse() by throwing UnsupportedProtocolVersion when the exception is of that kind. This fixes a problem with protocol version downgrading - before this change, the driver could not correctly downgrade the protocol version and failed with: ``` com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: /127.0.1.1:38223 (com.datastax.driver.core.exceptions.TransportException: [/127.0.1.1:38223] Got ERROR response message from server to an OPTIONS message: Beta version of the protocol used (5/v5-beta), but USE_BETA flag is unset)) ``` By returning a properly typed Exception, the driver can correctly retry with a lower protocol version. The reason protocol version downgrading was broken in our fork and not in upstream is that we send OPTIONS packet before STARTUP, while upstream does it in reverse. --- .../main/java/com/datastax/driver/core/Connection.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/driver-core/src/main/java/com/datastax/driver/core/Connection.java b/driver-core/src/main/java/com/datastax/driver/core/Connection.java index 80248af635d..69860723cbb 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/Connection.java +++ b/driver-core/src/main/java/com/datastax/driver/core/Connection.java @@ -440,12 +440,13 @@ private AsyncFunction onChannelReady( public ListenableFuture apply(Void input) throws Exception { Future startupOptionsFuture = write(new Requests.Options()); return GuavaCompatibility.INSTANCE.transformAsync( - startupOptionsFuture, onOptionsResponse(initExecutor), initExecutor); + startupOptionsFuture, onOptionsResponse(protocolVersion, initExecutor), initExecutor); } }; } - private AsyncFunction onOptionsResponse(final Executor initExecutor) { + private AsyncFunction onOptionsResponse( + final ProtocolVersion protocolVersion, final Executor initExecutor) { return new AsyncFunction() { @Override public ListenableFuture apply(Message.Response response) throws Exception { @@ -478,6 +479,9 @@ public ListenableFuture apply(Message.Response response) throws Exception return MoreFutures.VOID_SUCCESS; case ERROR: Responses.Error error = (Responses.Error) response; + if (isUnsupportedProtocolVersion(error)) + throw unsupportedProtocolVersionException( + protocolVersion, error.serverProtocolVersion); throw new TransportException( endPoint, String.format( From e8db24236451ccb36af00c24bacf4ac7393a3c3f Mon Sep 17 00:00:00 2001 From: Piotr Grabowski Date: Mon, 7 Feb 2022 11:32:42 +0100 Subject: [PATCH 046/112] Introduce ProtocolVersion.DEFAULT Before this change, ProtocolVersion.NEWEST_SUPPORTED was used as a default version while connecting to a cluster. DataStax Driver 3.11.0 introduced support for protocol version V5 and accordingly set NEWEST_SUPPORTED to v5. This is a problem for Scylla, as it only supports v4 protocol version causing the driver to always downgrade the protocol version upon connecting. By introducing DEFAULT (set to v4) the driver now connects with older protocol version, while maintaining support for higher protocol versions (NEWEST_SUPPORTED set to v5). --- .../com/datastax/driver/core/Cluster.java | 10 +++++----- .../com/datastax/driver/core/Connection.java | 4 +--- .../driver/core/ControlConnection.java | 2 +- .../datastax/driver/core/ProtocolVersion.java | 6 ++++++ .../driver/core/NettyOptionsTest.java | 2 +- .../driver/core/PreparedStatementTest.java | 6 ++---- .../datastax/driver/core/TypeCodecAssert.java | 2 +- .../core/policies/TokenAwarePolicyTest.java | 20 ++++++++----------- 8 files changed, 25 insertions(+), 27 deletions(-) diff --git a/driver-core/src/main/java/com/datastax/driver/core/Cluster.java b/driver-core/src/main/java/com/datastax/driver/core/Cluster.java index 4849985d076..6ffb304cad3 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/Cluster.java +++ b/driver-core/src/main/java/com/datastax/driver/core/Cluster.java @@ -866,11 +866,11 @@ public Builder withMaxSchemaAgreementWaitSeconds(int maxSchemaAgreementWaitSecon * *

By default, the driver will "auto-detect" which protocol version it can use when * connecting to the first node. More precisely, it will try first with {@link - * ProtocolVersion#NEWEST_SUPPORTED}, and if not supported fallback to the highest version - * supported by the first node it connects to. Please note that once the version is - * "auto-detected", it won't change: if the first node the driver connects to is a Cassandra 1.2 - * node and auto-detection is used (the default), then the native protocol version 1 will be use - * for the lifetime of the Cluster instance. + * ProtocolVersion#DEFAULT}, and if not supported fallback to the highest version supported by + * the first node it connects to. Please note that once the version is "auto-detected", it won't + * change: if the first node the driver connects to is a Cassandra 1.2 node and auto-detection + * is used (the default), then the native protocol version 1 will be use for the lifetime of the + * Cluster instance. * *

By using {@link Builder#allowBetaProtocolVersion()}, it is possible to force driver to * connect to Cassandra node that supports the latest protocol beta version. Leaving this flag diff --git a/driver-core/src/main/java/com/datastax/driver/core/Connection.java b/driver-core/src/main/java/com/datastax/driver/core/Connection.java index 69860723cbb..346b63c32ab 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/Connection.java +++ b/driver-core/src/main/java/com/datastax/driver/core/Connection.java @@ -192,9 +192,7 @@ ListenableFuture initAsync(final int shardId, int serverPort) { this.requestedShardId = shardId; final ProtocolVersion protocolVersion = - factory.protocolVersion == null - ? ProtocolVersion.NEWEST_SUPPORTED - : factory.protocolVersion; + factory.protocolVersion == null ? ProtocolVersion.DEFAULT : factory.protocolVersion; final SettableFuture channelReadyFuture = SettableFuture.create(); try { diff --git a/driver-core/src/main/java/com/datastax/driver/core/ControlConnection.java b/driver-core/src/main/java/com/datastax/driver/core/ControlConnection.java index 3558f006d9d..dd93a282847 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/ControlConnection.java +++ b/driver-core/src/main/java/com/datastax/driver/core/ControlConnection.java @@ -301,7 +301,7 @@ private Connection tryConnect(Host host, boolean isInitialConnection) // If no protocol version was specified, set the default as soon as a connection succeeds (it's // needed to parse UDTs in refreshSchema) if (cluster.connectionFactory.protocolVersion == null) - cluster.connectionFactory.protocolVersion = ProtocolVersion.NEWEST_SUPPORTED; + cluster.connectionFactory.protocolVersion = ProtocolVersion.DEFAULT; try { logger.trace("[Control connection] Registering for events"); diff --git a/driver-core/src/main/java/com/datastax/driver/core/ProtocolVersion.java b/driver-core/src/main/java/com/datastax/driver/core/ProtocolVersion.java index dd1d0e08f00..c53d13a8303 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/ProtocolVersion.java +++ b/driver-core/src/main/java/com/datastax/driver/core/ProtocolVersion.java @@ -41,6 +41,12 @@ public enum ProtocolVersion { /** The most recent beta protocol version supported by the driver. */ public static final ProtocolVersion NEWEST_BETA = V6; + /** + * The default protocol version used by the driver to connect to the cluster if no specific + * protocol version was set. + */ + public static final ProtocolVersion DEFAULT = V4; + private final VersionNumber minCassandraVersion; private final int asInt; diff --git a/driver-core/src/test/java/com/datastax/driver/core/NettyOptionsTest.java b/driver-core/src/test/java/com/datastax/driver/core/NettyOptionsTest.java index cd2dff7815b..8d4f10b55e1 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/NettyOptionsTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/NettyOptionsTest.java @@ -94,7 +94,7 @@ public Object answer(InvocationOnMock invocation) throws Throwable { int expectedNumberOfCalls = TestUtils.numberOfLocalCoreConnections(cluster) * hosts + 1; // If the driver supports a more recent protocol version than C*, the negotiation at startup // will open an additional connection for each protocol version tried. - ProtocolVersion version = ProtocolVersion.NEWEST_SUPPORTED; + ProtocolVersion version = ProtocolVersion.DEFAULT; ProtocolVersion usedVersion = ccm().getProtocolVersion(); while (version != usedVersion && version != null) { version = version.getLowerSupported(); diff --git a/driver-core/src/test/java/com/datastax/driver/core/PreparedStatementTest.java b/driver-core/src/test/java/com/datastax/driver/core/PreparedStatementTest.java index 68676f13cf0..168b86730f3 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/PreparedStatementTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/PreparedStatementTest.java @@ -532,8 +532,7 @@ public void should_set_routing_key_on_case_insensitive_keyspace_and_table() { PreparedStatement ps = session().prepare(String.format("INSERT INTO %s.foo (i) VALUES (?)", keyspace)); BoundStatement bs = ps.bind(1); - assertThat(bs.getRoutingKey(ProtocolVersion.NEWEST_SUPPORTED, CodecRegistry.DEFAULT_INSTANCE)) - .isNotNull(); + assertThat(bs.getRoutingKey(protocolVersion, CodecRegistry.DEFAULT_INSTANCE)).isNotNull(); } @Test(groups = "short") @@ -548,8 +547,7 @@ public void should_set_routing_key_on_case_sensitive_keyspace_and_table() { PreparedStatement ps = session().prepare("INSERT INTO \"Test\".\"Foo\" (i) VALUES (?)"); BoundStatement bs = ps.bind(1); - assertThat(bs.getRoutingKey(ProtocolVersion.NEWEST_SUPPORTED, CodecRegistry.DEFAULT_INSTANCE)) - .isNotNull(); + assertThat(bs.getRoutingKey(protocolVersion, CodecRegistry.DEFAULT_INSTANCE)).isNotNull(); } @Test(groups = "short", expectedExceptions = InvalidQueryException.class) diff --git a/driver-core/src/test/java/com/datastax/driver/core/TypeCodecAssert.java b/driver-core/src/test/java/com/datastax/driver/core/TypeCodecAssert.java index 2394a0b92b1..d59371e7192 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/TypeCodecAssert.java +++ b/driver-core/src/test/java/com/datastax/driver/core/TypeCodecAssert.java @@ -24,7 +24,7 @@ @SuppressWarnings("unused") public class TypeCodecAssert extends AbstractAssert, TypeCodec> { - private ProtocolVersion version = ProtocolVersion.NEWEST_SUPPORTED; + private ProtocolVersion version = ProtocolVersion.DEFAULT; protected TypeCodecAssert(TypeCodec actual) { super(actual, TypeCodecAssert.class); diff --git a/driver-core/src/test/java/com/datastax/driver/core/policies/TokenAwarePolicyTest.java b/driver-core/src/test/java/com/datastax/driver/core/policies/TokenAwarePolicyTest.java index 545e0e55538..80a258d6905 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/policies/TokenAwarePolicyTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/policies/TokenAwarePolicyTest.java @@ -87,7 +87,7 @@ public void initMocks() { when(cluster.getConfiguration()).thenReturn(configuration); when(configuration.getCodecRegistry()).thenReturn(codecRegistry); when(configuration.getProtocolOptions()).thenReturn(protocolOptions); - when(protocolOptions.getProtocolVersion()).thenReturn(ProtocolVersion.NEWEST_SUPPORTED); + when(protocolOptions.getProtocolVersion()).thenReturn(ProtocolVersion.DEFAULT); when(cluster.getMetadata()).thenReturn(metadata); when(metadata.getReplicas(Metadata.quote("keyspace"), null, routingKey)) .thenReturn(Sets.newLinkedHashSet(host1, host2)); @@ -178,8 +178,7 @@ public void should_order_replicas_based_on_configuration( // Encodes into murmur hash '4874351301193663061' which should be owned by node 6 with // replicas 7 and 8. ByteBuffer routingKey = - TypeCodec.varchar() - .serialize("This is some sample text", ProtocolVersion.NEWEST_SUPPORTED); + TypeCodec.varchar().serialize("This is some sample text", ProtocolVersion.DEFAULT); // then: The replicas resolved from the cluster metadata must match node 6 and its replicas. List replicas = @@ -244,9 +243,7 @@ public void should_choose_proper_host_based_on_routing_key() { // Encodes into murmur hash '4557949199137838892' which should be owned by node 3. ByteBuffer routingKey = TypeCodec.varchar() - .serialize( - "should_choose_proper_host_based_on_routing_key", - ProtocolVersion.NEWEST_SUPPORTED); + .serialize("should_choose_proper_host_based_on_routing_key", ProtocolVersion.DEFAULT); SimpleStatement statement = new SimpleStatement("select * from table where k=5") .setRoutingKey(routingKey) @@ -307,7 +304,7 @@ public void should_choose_host_in_local_dc_when_using_network_topology_strategy_ TypeCodec.varchar() .serialize( "should_choose_host_in_local_dc_when_using_network_topology_strategy_and_dc_aware", - ProtocolVersion.NEWEST_SUPPORTED); + ProtocolVersion.DEFAULT); SimpleStatement statement = new SimpleStatement("select * from table where k=5") .setRoutingKey(routingKey) @@ -358,7 +355,7 @@ public void should_use_other_nodes_when_replicas_having_token_are_down() { TypeCodec.varchar() .serialize( "should_use_other_nodes_when_replicas_having_token_are_down", - ProtocolVersion.NEWEST_SUPPORTED); + ProtocolVersion.DEFAULT); SimpleStatement statement = new SimpleStatement("select * from table where k=5") .setRoutingKey(routingKey) @@ -460,7 +457,7 @@ public void should_use_provided_routing_key_boundstatement() { // Derive a routing key for single routing key component, this should resolve to // '4891967783720036163' - ByteBuffer routingKey = TypeCodec.bigint().serialize(33L, ProtocolVersion.NEWEST_SUPPORTED); + ByteBuffer routingKey = TypeCodec.bigint().serialize(33L, ProtocolVersion.DEFAULT); bs.setRoutingKey(routingKey); QueryTracker queryTracker = new QueryTracker(); @@ -479,10 +476,9 @@ public void should_use_provided_routing_key_boundstatement() { // Derive a routing key for multiple routing key components, this should resolve to // '3735658072872431718' bs = preparedStatement.bind("a", "b"); - ByteBuffer routingKeyK0Part = - TypeCodec.bigint().serialize(42L, ProtocolVersion.NEWEST_SUPPORTED); + ByteBuffer routingKeyK0Part = TypeCodec.bigint().serialize(42L, ProtocolVersion.DEFAULT); ByteBuffer routingKeyK1Part = - TypeCodec.varchar().serialize("hello_world", ProtocolVersion.NEWEST_SUPPORTED); + TypeCodec.varchar().serialize("hello_world", ProtocolVersion.DEFAULT); bs.setRoutingKey(routingKeyK0Part, routingKeyK1Part); queryTracker.query(session, 10, bs); From 12bb35c2d6f0f397254fe4b3369fafbd0a87e72f Mon Sep 17 00:00:00 2001 From: Piotr Grabowski Date: Mon, 7 Feb 2022 13:51:00 +0100 Subject: [PATCH 047/112] Use non-hardcoded protocol version in Parser Instead of always using ProtocolVersion.NEWEST_SUPPORTED in DataTypeClassNameParser, use the actual protocolVersion. --- .../driver/core/DataTypeClassNameParser.java | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/driver-core/src/main/java/com/datastax/driver/core/DataTypeClassNameParser.java b/driver-core/src/main/java/com/datastax/driver/core/DataTypeClassNameParser.java index ef840356f3c..b4617b14f4e 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/DataTypeClassNameParser.java +++ b/driver-core/src/main/java/com/datastax/driver/core/DataTypeClassNameParser.java @@ -123,7 +123,7 @@ static DataType parseOne( TypeCodec.varchar() .deserialize(Bytes.fromHexString("0x" + parser.readOne()), protocolVersion); parser.skipBlankAndComma(); - Map rawFields = parser.getNameAndTypeParameters(); + Map rawFields = parser.getNameAndTypeParameters(protocolVersion); List fields = new ArrayList(rawFields.size()); for (Map.Entry entry : rawFields.entrySet()) fields.add( @@ -199,7 +199,7 @@ static ParseResult parseWithComposite( count--; Parser collectionParser = new Parser(last, 0); collectionParser.parseNextName(); // skips columnToCollectionType - Map params = collectionParser.getCollectionsParameters(); + Map params = collectionParser.getCollectionsParameters(protocolVersion); for (Map.Entry entry : params.entrySet()) collections.put(entry.getKey(), parseOne(entry.getValue(), protocolVersion, codecRegistry)); } @@ -320,18 +320,18 @@ public List getTypeParameters() { "Syntax error parsing '%s' at char %d: unexpected end of string", str, idx)); } - public Map getCollectionsParameters() { + public Map getCollectionsParameters(ProtocolVersion protocolVersion) { if (isEOS()) return Collections.emptyMap(); if (str.charAt(idx) != '(') throw new IllegalStateException(); ++idx; // skipping '(' - return getNameAndTypeParameters(); + return getNameAndTypeParameters(protocolVersion); } // Must be at the start of the first parameter to read - public Map getNameAndTypeParameters() { + public Map getNameAndTypeParameters(ProtocolVersion protocolVersion) { // The order of the hashmap matters for UDT Map map = new LinkedHashMap(); @@ -345,8 +345,7 @@ public Map getNameAndTypeParameters() { String name = null; try { name = - TypeCodec.varchar() - .deserialize(Bytes.fromHexString("0x" + bbHex), ProtocolVersion.NEWEST_SUPPORTED); + TypeCodec.varchar().deserialize(Bytes.fromHexString("0x" + bbHex), protocolVersion); } catch (NumberFormatException e) { throwSyntaxError(e.getMessage()); } From 6029cb6793a84e69a06dfcd52acc3995a57bc6fe Mon Sep 17 00:00:00 2001 From: Piotr Grabowski Date: Mon, 7 Feb 2022 14:32:28 +0100 Subject: [PATCH 048/112] Add protocol version down-negotiation test Add a new integration test which creates a connection to a Cluster with NEWEST_SUPPORTED protocol version (not the default DEFAULT) to check if the driver can successfully down-negotiate the protocol version. --- .../com/datastax/driver/core/Cluster.java | 8 ++++++- .../ProtocolVersionRenegotiationTest.java | 24 +++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/driver-core/src/main/java/com/datastax/driver/core/Cluster.java b/driver-core/src/main/java/com/datastax/driver/core/Cluster.java index 6ffb304cad3..62a743e45ed 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/Cluster.java +++ b/driver-core/src/main/java/com/datastax/driver/core/Cluster.java @@ -133,6 +133,10 @@ public class Cluster implements Closeable { static final int NEW_NODE_DELAY_SECONDS = SystemProperties.getInt("com.datastax.driver.NEW_NODE_DELAY_SECONDS", 1); + // Used in integration tests to force the driver to negotiate the protocol + // version even if it was explicitly set. + @VisibleForTesting static boolean shouldAlwaysNegotiateProtocolVersion = false; + // Some per-JVM number that allows to generate unique cluster names when // multiple Cluster instance are created in the same JVM. private static final AtomicInteger CLUSTER_ID = new AtomicInteger(0); @@ -1887,7 +1891,9 @@ long delayMs() { } private void negotiateProtocolVersionAndConnect() { - boolean shouldNegotiate = (configuration.getProtocolOptions().initialProtocolVersion == null); + boolean shouldNegotiate = + (configuration.getProtocolOptions().initialProtocolVersion == null + || shouldAlwaysNegotiateProtocolVersion); while (true) { try { controlConnection.connect(); diff --git a/driver-core/src/test/java/com/datastax/driver/core/ProtocolVersionRenegotiationTest.java b/driver-core/src/test/java/com/datastax/driver/core/ProtocolVersionRenegotiationTest.java index 2b4534a2960..5de374b66d7 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/ProtocolVersionRenegotiationTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/ProtocolVersionRenegotiationTest.java @@ -93,6 +93,30 @@ public void should_negotiate_when_no_version_provided() { assertThat(actualProtocolVersion(cluster)).isEqualTo(protocolVersion); } + @Test(groups = "short") + public void should_successfully_negotiate_down_from_newest_supported_version() { + // By default, the driver will connect with ProtocolVersion.DEFAULT (<= + // ProtocolVersion.NEWEST_SUPPORTED). + // This test verifies that the driver can connect starting with the + // newest supported version, potentially renegotiating the protocol + // version to a lower version. + + // We will explicitly set a protocol version, so we need to force + // the driver to negotiate protocol version. + Cluster.shouldAlwaysNegotiateProtocolVersion = true; + + try { + Cluster cluster = connectWithVersion(ProtocolVersion.NEWEST_SUPPORTED); + assertThat(actualProtocolVersion(cluster)) + .isLessThanOrEqualTo(ProtocolVersion.NEWEST_SUPPORTED); + } catch (RuntimeException e) { + Cluster.shouldAlwaysNegotiateProtocolVersion = false; + throw e; + } + + Cluster.shouldAlwaysNegotiateProtocolVersion = false; + } + private UnsupportedProtocolVersionException connectWithUnsupportedVersion( ProtocolVersion version) { Cluster cluster = From 12a712ff5187b5a2f2ec0f32c186e4cae0954de0 Mon Sep 17 00:00:00 2001 From: Piotr Jastrzebski Date: Wed, 2 Feb 2022 16:23:28 +0100 Subject: [PATCH 049/112] HostConnectionPool: log whether port-based shard awareness is used If that's not the case log the reason why. Fixes #112 Signed-off-by: Piotr Jastrzebski --- .../driver/core/HostConnectionPool.java | 29 +++++++++++++++++-- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/driver-core/src/main/java/com/datastax/driver/core/HostConnectionPool.java b/driver-core/src/main/java/com/datastax/driver/core/HostConnectionPool.java index b6141e141f5..d967bc937d2 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/HostConnectionPool.java +++ b/driver-core/src/main/java/com/datastax/driver/core/HostConnectionPool.java @@ -158,24 +158,47 @@ public Connection addConnectionToClose(int shardId, Connection c) { } } - private boolean canUseAdvancedShardAwareness() { + private boolean canUseAdvancedShardAwareness(boolean logResult) { ShardingInfo shardingInfo = host.getShardingInfo(); if (shardingInfo == null) { + if (logResult) { + logger.warn( + "Not using advanced port-based shard awareness with {} because sharding info is missing", + host); + } return false; } if (!manager.configuration().getProtocolOptions().isUseAdvancedShardAwareness()) { + if (logResult) { + logger.warn( + "Not using advanced port-based shard awareness with {} because it's disabled in configuration", + host); + } return false; } boolean isSSLUsed = null != manager.configuration().getProtocolOptions().getSSLOptions(); if (shardingInfo.getShardAwarePort(isSSLUsed) == 0) { + if (logResult) { + logger.warn( + "Not using advanced port-based shard awareness with {} because we're missing port-based shard awareness port on the server", + host); + } return false; } if (System.currentTimeMillis() < advShardAwarenessBlockedUntil) { + if (logResult) { + logger.warn( + "Not using advanced port-based shard awareness with {} because of a previous error", + host); + } return false; } + if (logResult) { + logger.info("Using advanced port-based shard awareness with {}", host); + } return true; } @@ -301,7 +324,7 @@ ListenableFuture initAsyncWithConnection(Connection reusedConnection) { List newConnections = manager.connectionFactory().newConnections(this, toCreate); connections.addAll(newConnections); - if (canUseAdvancedShardAwareness()) { + if (canUseAdvancedShardAwareness(true)) { ShardingInfo shardingInfo = host.getShardingInfo(); boolean isSSLUsed = null != manager.configuration().getProtocolOptions().getSSLOptions(); int serverPort = shardingInfo.getShardAwarePort(isSSLUsed); @@ -759,7 +782,7 @@ private ConnectionResult addConnectionIfUnderMaximum( if (newConnection == null) { InetSocketAddress serverAddress = host.getEndPoint().resolve(); int serverPort, effectiveShardId = shardId; - if (canUseAdvancedShardAwareness()) { + if (canUseAdvancedShardAwareness(false)) { ShardingInfo shardingInfo = host.getShardingInfo(); boolean isSSLUsed = null != manager.configuration().getProtocolOptions().getSSLOptions(); From 5826b7e19da5d15ff1d9a5b29d8ae5fae6ab51c4 Mon Sep 17 00:00:00 2001 From: Piotr Grabowski Date: Tue, 8 Feb 2022 10:54:07 +0100 Subject: [PATCH 050/112] [maven-release-plugin] prepare release 3.11.0.0 --- driver-core/pom.xml | 2 +- driver-dist/pom.xml | 2 +- driver-examples/pom.xml | 2 +- driver-extras/pom.xml | 2 +- driver-mapping/pom.xml | 2 +- driver-tests/osgi/pom.xml | 2 +- driver-tests/pom.xml | 2 +- driver-tests/shading/pom.xml | 2 +- driver-tests/shading/shaded/pom.xml | 2 +- driver-tests/shading/unshaded/pom.xml | 2 +- driver-tests/stress/pom.xml | 2 +- pom.xml | 4 ++-- 12 files changed, 13 insertions(+), 13 deletions(-) diff --git a/driver-core/pom.xml b/driver-core/pom.xml index 04d913b4567..985a69bee1e 100644 --- a/driver-core/pom.xml +++ b/driver-core/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-parent - 3.11.0.0-SNAPSHOT + 3.11.0.0 scylla-driver-core diff --git a/driver-dist/pom.xml b/driver-dist/pom.xml index a9e8b936552..00c84e2766b 100644 --- a/driver-dist/pom.xml +++ b/driver-dist/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-parent - 3.11.0.0-SNAPSHOT + 3.11.0.0 scylla-driver-dist diff --git a/driver-examples/pom.xml b/driver-examples/pom.xml index 79d48ec7c27..aca5be41e05 100644 --- a/driver-examples/pom.xml +++ b/driver-examples/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-parent - 3.11.0.0-SNAPSHOT + 3.11.0.0 scylla-driver-examples diff --git a/driver-extras/pom.xml b/driver-extras/pom.xml index b00157cdba8..a2cb13829c9 100644 --- a/driver-extras/pom.xml +++ b/driver-extras/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-parent - 3.11.0.0-SNAPSHOT + 3.11.0.0 scylla-driver-extras diff --git a/driver-mapping/pom.xml b/driver-mapping/pom.xml index 6cfd586638f..3507bc638b3 100644 --- a/driver-mapping/pom.xml +++ b/driver-mapping/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-parent - 3.11.0.0-SNAPSHOT + 3.11.0.0 scylla-driver-mapping diff --git a/driver-tests/osgi/pom.xml b/driver-tests/osgi/pom.xml index 17afd0beb17..54392b436a6 100644 --- a/driver-tests/osgi/pom.xml +++ b/driver-tests/osgi/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-tests-parent - 3.11.0.0-SNAPSHOT + 3.11.0.0 scylla-driver-tests-osgi diff --git a/driver-tests/pom.xml b/driver-tests/pom.xml index f147c541165..d57cb887b3c 100644 --- a/driver-tests/pom.xml +++ b/driver-tests/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-parent - 3.11.0.0-SNAPSHOT + 3.11.0.0 scylla-driver-tests-parent diff --git a/driver-tests/shading/pom.xml b/driver-tests/shading/pom.xml index 396301d98b4..619f1ad2f6c 100644 --- a/driver-tests/shading/pom.xml +++ b/driver-tests/shading/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-tests-parent - 3.11.0.0-SNAPSHOT + 3.11.0.0 pom diff --git a/driver-tests/shading/shaded/pom.xml b/driver-tests/shading/shaded/pom.xml index eeb0894ca67..0d05c37f609 100644 --- a/driver-tests/shading/shaded/pom.xml +++ b/driver-tests/shading/shaded/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-tests-shading - 3.11.0.0-SNAPSHOT + 3.11.0.0 scylla-driver-tests-shading-shaded diff --git a/driver-tests/shading/unshaded/pom.xml b/driver-tests/shading/unshaded/pom.xml index 8b7eb962a0b..6d03733a9c0 100644 --- a/driver-tests/shading/unshaded/pom.xml +++ b/driver-tests/shading/unshaded/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-tests-shading - 3.11.0.0-SNAPSHOT + 3.11.0.0 scylla-driver-tests-shading-unshaded diff --git a/driver-tests/stress/pom.xml b/driver-tests/stress/pom.xml index 321d7c29aab..569c71909c5 100644 --- a/driver-tests/stress/pom.xml +++ b/driver-tests/stress/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-tests-parent - 3.11.0.0-SNAPSHOT + 3.11.0.0 scylla-driver-tests-stress diff --git a/pom.xml b/pom.xml index 93e0fc6a68d..c0f23757972 100644 --- a/pom.xml +++ b/pom.xml @@ -25,7 +25,7 @@ com.scylladb scylla-driver-parent - 3.11.0.0-SNAPSHOT + 3.11.0.0 pom Java Driver for Scylla and Apache Cassandra @@ -1172,7 +1172,7 @@ scm:git:https://github.com/scylladb/java-driver scm:git:https://github.com/scylladb/java-driver https://github.com/scylladb/java-driver - HEAD + 3.11.0.0 From 7808315e55d9853606b51b9281d89db01d86e17f Mon Sep 17 00:00:00 2001 From: Piotr Grabowski Date: Tue, 8 Feb 2022 10:55:23 +0100 Subject: [PATCH 051/112] [maven-release-plugin] prepare for next development iteration --- driver-core/pom.xml | 2 +- driver-dist/pom.xml | 2 +- driver-examples/pom.xml | 2 +- driver-extras/pom.xml | 2 +- driver-mapping/pom.xml | 2 +- driver-tests/osgi/pom.xml | 2 +- driver-tests/pom.xml | 2 +- driver-tests/shading/pom.xml | 2 +- driver-tests/shading/shaded/pom.xml | 2 +- driver-tests/shading/unshaded/pom.xml | 2 +- driver-tests/stress/pom.xml | 2 +- pom.xml | 4 ++-- 12 files changed, 13 insertions(+), 13 deletions(-) diff --git a/driver-core/pom.xml b/driver-core/pom.xml index 985a69bee1e..09fe209502a 100644 --- a/driver-core/pom.xml +++ b/driver-core/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-parent - 3.11.0.0 + 3.11.0.1-SNAPSHOT scylla-driver-core diff --git a/driver-dist/pom.xml b/driver-dist/pom.xml index 00c84e2766b..c9d34e27f37 100644 --- a/driver-dist/pom.xml +++ b/driver-dist/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-parent - 3.11.0.0 + 3.11.0.1-SNAPSHOT scylla-driver-dist diff --git a/driver-examples/pom.xml b/driver-examples/pom.xml index aca5be41e05..84f11292643 100644 --- a/driver-examples/pom.xml +++ b/driver-examples/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-parent - 3.11.0.0 + 3.11.0.1-SNAPSHOT scylla-driver-examples diff --git a/driver-extras/pom.xml b/driver-extras/pom.xml index a2cb13829c9..a4523406f3b 100644 --- a/driver-extras/pom.xml +++ b/driver-extras/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-parent - 3.11.0.0 + 3.11.0.1-SNAPSHOT scylla-driver-extras diff --git a/driver-mapping/pom.xml b/driver-mapping/pom.xml index 3507bc638b3..5648738020f 100644 --- a/driver-mapping/pom.xml +++ b/driver-mapping/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-parent - 3.11.0.0 + 3.11.0.1-SNAPSHOT scylla-driver-mapping diff --git a/driver-tests/osgi/pom.xml b/driver-tests/osgi/pom.xml index 54392b436a6..08e94055d77 100644 --- a/driver-tests/osgi/pom.xml +++ b/driver-tests/osgi/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-tests-parent - 3.11.0.0 + 3.11.0.1-SNAPSHOT scylla-driver-tests-osgi diff --git a/driver-tests/pom.xml b/driver-tests/pom.xml index d57cb887b3c..ed87c69867a 100644 --- a/driver-tests/pom.xml +++ b/driver-tests/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-parent - 3.11.0.0 + 3.11.0.1-SNAPSHOT scylla-driver-tests-parent diff --git a/driver-tests/shading/pom.xml b/driver-tests/shading/pom.xml index 619f1ad2f6c..772ad7a9fab 100644 --- a/driver-tests/shading/pom.xml +++ b/driver-tests/shading/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-tests-parent - 3.11.0.0 + 3.11.0.1-SNAPSHOT pom diff --git a/driver-tests/shading/shaded/pom.xml b/driver-tests/shading/shaded/pom.xml index 0d05c37f609..6835a4ba437 100644 --- a/driver-tests/shading/shaded/pom.xml +++ b/driver-tests/shading/shaded/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-tests-shading - 3.11.0.0 + 3.11.0.1-SNAPSHOT scylla-driver-tests-shading-shaded diff --git a/driver-tests/shading/unshaded/pom.xml b/driver-tests/shading/unshaded/pom.xml index 6d03733a9c0..937616122e8 100644 --- a/driver-tests/shading/unshaded/pom.xml +++ b/driver-tests/shading/unshaded/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-tests-shading - 3.11.0.0 + 3.11.0.1-SNAPSHOT scylla-driver-tests-shading-unshaded diff --git a/driver-tests/stress/pom.xml b/driver-tests/stress/pom.xml index 569c71909c5..d3dc4d945ee 100644 --- a/driver-tests/stress/pom.xml +++ b/driver-tests/stress/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-tests-parent - 3.11.0.0 + 3.11.0.1-SNAPSHOT scylla-driver-tests-stress diff --git a/pom.xml b/pom.xml index c0f23757972..1c16aa09ba6 100644 --- a/pom.xml +++ b/pom.xml @@ -25,7 +25,7 @@ com.scylladb scylla-driver-parent - 3.11.0.0 + 3.11.0.1-SNAPSHOT pom Java Driver for Scylla and Apache Cassandra @@ -1172,7 +1172,7 @@ scm:git:https://github.com/scylladb/java-driver scm:git:https://github.com/scylladb/java-driver https://github.com/scylladb/java-driver - 3.11.0.0 + HEAD From 83967fd170f1eb46611974a8314d858f95120672 Mon Sep 17 00:00:00 2001 From: Bret McGuire Date: Wed, 16 Feb 2022 10:32:28 -0600 Subject: [PATCH 052/112] JAVA-2976: Protocol v5 error codes CAS_WRITE_UNKNOWN, CDC_WRITE_FAILURE not supported (3.x) (#1585) --- .../datastax/driver/core/ExceptionCode.java | 2 + .../com/datastax/driver/core/Responses.java | 12 +++ .../exceptions/CASWriteUnknownException.java | 91 +++++++++++++++++++ .../core/exceptions/CDCWriteException.java | 61 +++++++++++++ 4 files changed, 166 insertions(+) create mode 100644 driver-core/src/main/java/com/datastax/driver/core/exceptions/CASWriteUnknownException.java create mode 100644 driver-core/src/main/java/com/datastax/driver/core/exceptions/CDCWriteException.java diff --git a/driver-core/src/main/java/com/datastax/driver/core/ExceptionCode.java b/driver-core/src/main/java/com/datastax/driver/core/ExceptionCode.java index b6c6d0af50f..4a745da5ff0 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/ExceptionCode.java +++ b/driver-core/src/main/java/com/datastax/driver/core/ExceptionCode.java @@ -36,6 +36,8 @@ enum ExceptionCode { READ_FAILURE(0x1300), FUNCTION_FAILURE(0x1400), WRITE_FAILURE(0x1500), + CDC_WRITE_FAILURE(0x1600), + CAS_WRITE_UNKNOWN(0x1700), // 2xx: problem validating the request SYNTAX_ERROR(0x2000), diff --git a/driver-core/src/main/java/com/datastax/driver/core/Responses.java b/driver-core/src/main/java/com/datastax/driver/core/Responses.java index d9402f5b189..d160cd0332c 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/Responses.java +++ b/driver-core/src/main/java/com/datastax/driver/core/Responses.java @@ -24,6 +24,8 @@ import com.datastax.driver.core.exceptions.AlreadyExistsException; import com.datastax.driver.core.exceptions.AuthenticationException; import com.datastax.driver.core.exceptions.BootstrappingException; +import com.datastax.driver.core.exceptions.CASWriteUnknownException; +import com.datastax.driver.core.exceptions.CDCWriteException; import com.datastax.driver.core.exceptions.DriverException; import com.datastax.driver.core.exceptions.DriverInternalError; import com.datastax.driver.core.exceptions.FunctionExecutionException; @@ -119,6 +121,12 @@ public Error decode(ByteBuf body, ProtocolVersion version, CodecRegistry codecRe clt, received, blockFor, failures, failuresMap, dataPresent != 0); } break; + case CAS_WRITE_UNKNOWN: + clt = CBUtil.readConsistencyLevel(body); + received = body.readInt(); + blockFor = body.readInt(); + infos = new CASWriteUnknownException(clt, received, blockFor); + break; case UNPREPARED: infos = MD5Digest.wrap(CBUtil.readBytes(body)); break; @@ -173,6 +181,10 @@ DriverException asException(EndPoint endPoint) { return ((ReadFailureException) infos).copy(endPoint); case FUNCTION_FAILURE: return new FunctionExecutionException(endPoint, message); + case CDC_WRITE_FAILURE: + return new CDCWriteException(endPoint, message); + case CAS_WRITE_UNKNOWN: + return ((CASWriteUnknownException) infos).copy(endPoint); case SYNTAX_ERROR: return new SyntaxError(endPoint, message); case UNAUTHORIZED: diff --git a/driver-core/src/main/java/com/datastax/driver/core/exceptions/CASWriteUnknownException.java b/driver-core/src/main/java/com/datastax/driver/core/exceptions/CASWriteUnknownException.java new file mode 100644 index 00000000000..751a403991d --- /dev/null +++ b/driver-core/src/main/java/com/datastax/driver/core/exceptions/CASWriteUnknownException.java @@ -0,0 +1,91 @@ +/* + * Copyright DataStax, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.datastax.driver.core.exceptions; + +import com.datastax.driver.core.ConsistencyLevel; +import com.datastax.driver.core.EndPoint; + +public class CASWriteUnknownException extends QueryConsistencyException { + + private static final long serialVersionUID = 0; + + /** + * This constructor should only be used internally by the driver when decoding error responses. + */ + public CASWriteUnknownException(ConsistencyLevel consistency, int received, int required) { + this(null, consistency, received, required); + } + + public CASWriteUnknownException( + EndPoint endPoint, ConsistencyLevel consistency, int received, int required) { + super( + endPoint, + String.format( + "CAS operation result is unknown - proposal was not accepted by a quorum. (%d / %d)", + received, required), + consistency, + received, + required); + } + + private CASWriteUnknownException( + EndPoint endPoint, + String msg, + Throwable cause, + ConsistencyLevel consistency, + int received, + int required) { + super(endPoint, msg, cause, consistency, received, required); + } + + @Override + public CASWriteUnknownException copy() { + return new CASWriteUnknownException( + getEndPoint(), + getMessage(), + this, + getConsistencyLevel(), + getReceivedAcknowledgements(), + getRequiredAcknowledgements()); + } + + /** + * Create a copy of this exception with a nicer stack trace, and including the coordinator address + * that caused this exception to be raised. + * + *

This method is mainly intended for internal use by the driver and exists mainly because: + * + *

    + *
  1. the original exception was decoded from a response frame and at that time, the + * coordinator address was not available; and + *
  2. the newly-created exception will refer to the current thread in its stack trace, which + * generally yields a more user-friendly stack trace that the original one. + *
+ * + * @param endPoint The full address of the host that caused this exception to be thrown. + * @return a copy/clone of this exception, but with the given host address instead of the original + * one. + */ + public CASWriteUnknownException copy(EndPoint endPoint) { + return new CASWriteUnknownException( + endPoint, + getMessage(), + this, + getConsistencyLevel(), + getReceivedAcknowledgements(), + getRequiredAcknowledgements()); + } +} diff --git a/driver-core/src/main/java/com/datastax/driver/core/exceptions/CDCWriteException.java b/driver-core/src/main/java/com/datastax/driver/core/exceptions/CDCWriteException.java new file mode 100644 index 00000000000..f4ac21c1663 --- /dev/null +++ b/driver-core/src/main/java/com/datastax/driver/core/exceptions/CDCWriteException.java @@ -0,0 +1,61 @@ +/* + * Copyright DataStax, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.datastax.driver.core.exceptions; + +import com.datastax.driver.core.EndPoint; +import java.net.InetAddress; +import java.net.InetSocketAddress; + +/** An error occurred when trying to write a CDC mutation to the commitlog * */ +public class CDCWriteException extends QueryExecutionException implements CoordinatorException { + + private static final long serialVersionUID = 0; + + private final EndPoint endPoint; + + public CDCWriteException(EndPoint endPoint, String message) { + super(message); + this.endPoint = endPoint; + } + + /** Private constructor used solely when copying exceptions. */ + private CDCWriteException(EndPoint endPoint, String message, CDCWriteException cause) { + super(message, cause); + this.endPoint = endPoint; + } + + @Override + public EndPoint getEndPoint() { + return endPoint; + } + + @Override + @Deprecated + public InetSocketAddress getAddress() { + return (endPoint == null) ? null : endPoint.resolve(); + } + + @Override + @Deprecated + public InetAddress getHost() { + return (endPoint == null) ? null : endPoint.resolve().getAddress(); + } + + @Override + public CDCWriteException copy() { + return new CDCWriteException(endPoint, getMessage(), this); + } +} From b9e4908f30d1f79382361950166e95df5b298a4d Mon Sep 17 00:00:00 2001 From: Bret McGuire Date: Wed, 16 Feb 2022 10:53:09 -0600 Subject: [PATCH 053/112] Changelog updates in prep for release --- changelog/README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/changelog/README.md b/changelog/README.md index a91d0e1a917..4fe403d5bf2 100644 --- a/changelog/README.md +++ b/changelog/README.md @@ -5,6 +5,11 @@ 3.x versions get published. --> +## 3.11.1 +- [bug] JAVA-2967: Support native transport peer information for DSE 6.8 +- [bug] JAVA-2976: Support missing protocol v5 error codes CAS_WRITE_UNKNOWN, CDC_WRITE_FAILURE + + ## 3.11.0 - [improvement] JAVA-2705: Remove protocol v5 beta status, add v6-beta. From 4b8f63e3922f13e3a955748494cac1603e7a7b01 Mon Sep 17 00:00:00 2001 From: Bret McGuire Date: Wed, 16 Feb 2022 10:56:16 -0600 Subject: [PATCH 054/112] Add periods for changelog messages --- changelog/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/changelog/README.md b/changelog/README.md index 4fe403d5bf2..dc14e0f5d76 100644 --- a/changelog/README.md +++ b/changelog/README.md @@ -6,8 +6,8 @@ --> ## 3.11.1 -- [bug] JAVA-2967: Support native transport peer information for DSE 6.8 -- [bug] JAVA-2976: Support missing protocol v5 error codes CAS_WRITE_UNKNOWN, CDC_WRITE_FAILURE +- [bug] JAVA-2967: Support native transport peer information for DSE 6.8. +- [bug] JAVA-2976: Support missing protocol v5 error codes CAS_WRITE_UNKNOWN, CDC_WRITE_FAILURE. ## 3.11.0 From 01c4521096e810b876bb88b745a295ef7a7c8a25 Mon Sep 17 00:00:00 2001 From: Bret McGuire Date: Wed, 16 Feb 2022 17:26:45 -0600 Subject: [PATCH 055/112] Update version in docs --- README.md | 12 ++++++------ faq/README.md | 2 +- manual/compression/README.md | 2 +- manual/custom_codecs/extras/README.md | 2 +- manual/metrics/README.md | 2 +- manual/object_mapper/README.md | 2 +- manual/shaded_jar/README.md | 6 +++--- pom.xml | 2 +- 8 files changed, 15 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 267a710eb9b..97c5067c979 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ for the development version and that some features described here might not yet have been released. You can find the documentation for the latest version through the [Java driver docs](http://docs.datastax.com/en/developer/java-driver/3.11/index.html) or via the release tags, -[e.g. 3.11.0](https://github.com/datastax/java-driver/tree/3.11.0).* +[e.g. 3.11.1](https://github.com/datastax/java-driver/tree/3.11.1).* A modern, [feature-rich](manual/) and highly tunable Java client library for Apache Cassandra (2.1+) and using exclusively Cassandra's binary protocol @@ -65,7 +65,7 @@ using DataStax Enterprise, install the [DataStax Enterprise Java driver][dse-dri com.datastax.cassandra cassandra-driver-core - 3.11.0 + 3.11.1 ``` @@ -75,7 +75,7 @@ Note that the object mapper is published as a separate artifact: com.datastax.cassandra cassandra-driver-mapping - 3.11.0 + 3.11.1 ``` @@ -85,7 +85,7 @@ The 'extras' module is also published as a separate artifact: com.datastax.cassandra cassandra-driver-extras - 3.11.0 + 3.11.1 ``` @@ -94,12 +94,12 @@ We also provide a [shaded JAR](manual/shaded_jar/) to avoid the explicit dependency to Netty. If you can't use a dependency management tool, a -[binary tarball](http://downloads.datastax.com/java-driver/cassandra-java-driver-3.11.0.tar.gz) +[binary tarball](http://downloads.datastax.com/java-driver/cassandra-java-driver-3.11.1.tar.gz) is available for download. ## Compatibility -The Java client driver 3.11.0 ([branch 3.x](https://github.com/datastax/java-driver/tree/3.x)) is compatible with Apache +The Java client driver 3.11.1 ([branch 3.x](https://github.com/datastax/java-driver/tree/3.x)) is compatible with Apache Cassandra 2.1, 2.2 and 3.0+ (see [this page](http://docs.datastax.com/en/developer/java-driver/3.11/manual/native_protocol/) for the most up-to-date compatibility information). diff --git a/faq/README.md b/faq/README.md index d806a414f71..ea48a598a23 100644 --- a/faq/README.md +++ b/faq/README.md @@ -289,7 +289,7 @@ version is available, you may want to reach out to the maintainer of that tool t an update with compatibility to this driver version. -[Blobs.java]: https://github.com/datastax/java-driver/tree/3.11.0/driver-examples/src/main/java/com/datastax/driver/examples/datatypes/Blobs.java +[Blobs.java]: https://github.com/datastax/java-driver/tree/3.11.1/driver-examples/src/main/java/com/datastax/driver/examples/datatypes/Blobs.java [CASSANDRA-7304]: https://issues.apache.org/jira/browse/CASSANDRA-7304 [Parameters and Binding]: ../manual/statements/prepared/#parameters-and-binding [Mapper options]: ../manual/object_mapper/using/#mapper-options diff --git a/manual/compression/README.md b/manual/compression/README.md index ab96172418e..fb39e6771dd 100644 --- a/manual/compression/README.md +++ b/manual/compression/README.md @@ -88,4 +88,4 @@ cluster = Cluster.builder() .build(); ``` -[pom]: https://repo1.maven.org/maven2/com/datastax/cassandra/cassandra-driver-parent/3.11.0/cassandra-driver-parent-3.11.0.pom +[pom]: https://repo1.maven.org/maven2/com/datastax/cassandra/cassandra-driver-parent/3.11.1/cassandra-driver-parent-3.11.1.pom diff --git a/manual/custom_codecs/extras/README.md b/manual/custom_codecs/extras/README.md index 9e253aa60e3..ec0f56a17e9 100644 --- a/manual/custom_codecs/extras/README.md +++ b/manual/custom_codecs/extras/README.md @@ -10,7 +10,7 @@ The module is published as a separate Maven artifact: com.datastax.cassandra cassandra-driver-extras - 3.11.0 + 3.11.1 ``` diff --git a/manual/metrics/README.md b/manual/metrics/README.md index e751bcf5bcf..5ad2a8084f6 100644 --- a/manual/metrics/README.md +++ b/manual/metrics/README.md @@ -38,7 +38,7 @@ To do this in a maven project: com.datastax.cassandra cassandra-driver-core - 3.11.0 + 3.11.1 io.dropwizard.metrics diff --git a/manual/object_mapper/README.md b/manual/object_mapper/README.md index 4884383b8d6..fd8ccad89d9 100644 --- a/manual/object_mapper/README.md +++ b/manual/object_mapper/README.md @@ -11,7 +11,7 @@ The mapper is published as a separate Maven artifact: com.datastax.cassandra cassandra-driver-mapping - 3.11.0 + 3.11.1 ``` diff --git a/manual/shaded_jar/README.md b/manual/shaded_jar/README.md index 91ae8f440b8..ee25d56f0d1 100644 --- a/manual/shaded_jar/README.md +++ b/manual/shaded_jar/README.md @@ -12,7 +12,7 @@ package name: com.datastax.cassandra cassandra-driver-core - 3.11.0 + 3.11.1 shaded @@ -32,7 +32,7 @@ non-shaded JAR: com.datastax.cassandra cassandra-driver-core - 3.11.0 + 3.11.1 shaded @@ -44,7 +44,7 @@ non-shaded JAR: com.datastax.cassandra cassandra-driver-mapping - 3.11.0 + 3.11.1 com.datastax.cassandra diff --git a/pom.xml b/pom.xml index e3fbf2ac979..76a47cb291e 100644 --- a/pom.xml +++ b/pom.xml @@ -641,7 +641,7 @@ - 3.10.2 + 3.11.0 ../clirr-ignores.xml com/datastax/shaded/** From 32be7838bc932c8c6163526910d5825bf089f147 Mon Sep 17 00:00:00 2001 From: Bret McGuire Date: Thu, 17 Feb 2022 11:13:10 -0600 Subject: [PATCH 056/112] [maven-release-plugin] prepare release 3.11.1 --- driver-core/pom.xml | 2 +- driver-dist/pom.xml | 2 +- driver-examples/pom.xml | 2 +- driver-extras/pom.xml | 2 +- driver-mapping/pom.xml | 2 +- driver-tests/osgi/pom.xml | 2 +- driver-tests/pom.xml | 2 +- driver-tests/shading/pom.xml | 2 +- driver-tests/shading/shaded/pom.xml | 2 +- driver-tests/shading/unshaded/pom.xml | 2 +- driver-tests/stress/pom.xml | 2 +- pom.xml | 4 ++-- 12 files changed, 13 insertions(+), 13 deletions(-) diff --git a/driver-core/pom.xml b/driver-core/pom.xml index 5117aadb2b0..71068f08659 100644 --- a/driver-core/pom.xml +++ b/driver-core/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1-SNAPSHOT + 3.11.1 cassandra-driver-core diff --git a/driver-dist/pom.xml b/driver-dist/pom.xml index 3545491a439..c1533c068f6 100644 --- a/driver-dist/pom.xml +++ b/driver-dist/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1-SNAPSHOT + 3.11.1 cassandra-driver-dist diff --git a/driver-examples/pom.xml b/driver-examples/pom.xml index d1bb15958f9..4a96380b14c 100644 --- a/driver-examples/pom.xml +++ b/driver-examples/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1-SNAPSHOT + 3.11.1 cassandra-driver-examples diff --git a/driver-extras/pom.xml b/driver-extras/pom.xml index eac090745c7..e129f17abbb 100644 --- a/driver-extras/pom.xml +++ b/driver-extras/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1-SNAPSHOT + 3.11.1 cassandra-driver-extras diff --git a/driver-mapping/pom.xml b/driver-mapping/pom.xml index 8f3496f47be..cda650db9a2 100644 --- a/driver-mapping/pom.xml +++ b/driver-mapping/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1-SNAPSHOT + 3.11.1 cassandra-driver-mapping diff --git a/driver-tests/osgi/pom.xml b/driver-tests/osgi/pom.xml index 293951d4c35..6f93a9f6396 100644 --- a/driver-tests/osgi/pom.xml +++ b/driver-tests/osgi/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-parent - 3.11.1-SNAPSHOT + 3.11.1 cassandra-driver-tests-osgi diff --git a/driver-tests/pom.xml b/driver-tests/pom.xml index 38aaea38c68..fbd4f4ebf71 100644 --- a/driver-tests/pom.xml +++ b/driver-tests/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1-SNAPSHOT + 3.11.1 cassandra-driver-tests-parent diff --git a/driver-tests/shading/pom.xml b/driver-tests/shading/pom.xml index 440f31064f0..46ce5d429b9 100644 --- a/driver-tests/shading/pom.xml +++ b/driver-tests/shading/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-parent - 3.11.1-SNAPSHOT + 3.11.1 pom diff --git a/driver-tests/shading/shaded/pom.xml b/driver-tests/shading/shaded/pom.xml index 14f19b31ae2..427a2ccacae 100644 --- a/driver-tests/shading/shaded/pom.xml +++ b/driver-tests/shading/shaded/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-shading - 3.11.1-SNAPSHOT + 3.11.1 cassandra-driver-tests-shading-shaded diff --git a/driver-tests/shading/unshaded/pom.xml b/driver-tests/shading/unshaded/pom.xml index e98fc0d581e..882f407a7d4 100644 --- a/driver-tests/shading/unshaded/pom.xml +++ b/driver-tests/shading/unshaded/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-shading - 3.11.1-SNAPSHOT + 3.11.1 cassandra-driver-tests-shading-unshaded diff --git a/driver-tests/stress/pom.xml b/driver-tests/stress/pom.xml index f5520ece9a1..e6359083f7e 100644 --- a/driver-tests/stress/pom.xml +++ b/driver-tests/stress/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-parent - 3.11.1-SNAPSHOT + 3.11.1 cassandra-driver-tests-stress diff --git a/pom.xml b/pom.xml index 76a47cb291e..3ea59a4b2c8 100644 --- a/pom.xml +++ b/pom.xml @@ -21,7 +21,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1-SNAPSHOT + 3.11.1 pom DataStax Java Driver for Apache Cassandra @@ -1147,7 +1147,7 @@ limitations under the License. scm:git:git@github.com:datastax/java-driver.git scm:git:git@github.com:datastax/java-driver.git https://github.com/datastax/java-driver - HEAD + 3.11.1 From b5fcaa789f16e15d75f2e0515d6a2335c2a535da Mon Sep 17 00:00:00 2001 From: Bret McGuire Date: Thu, 17 Feb 2022 11:13:14 -0600 Subject: [PATCH 057/112] [maven-release-plugin] prepare for next development iteration --- driver-core/pom.xml | 2 +- driver-dist/pom.xml | 2 +- driver-examples/pom.xml | 2 +- driver-extras/pom.xml | 2 +- driver-mapping/pom.xml | 2 +- driver-tests/osgi/pom.xml | 2 +- driver-tests/pom.xml | 2 +- driver-tests/shading/pom.xml | 2 +- driver-tests/shading/shaded/pom.xml | 2 +- driver-tests/shading/unshaded/pom.xml | 2 +- driver-tests/stress/pom.xml | 2 +- pom.xml | 4 ++-- 12 files changed, 13 insertions(+), 13 deletions(-) diff --git a/driver-core/pom.xml b/driver-core/pom.xml index 71068f08659..6d68864cba4 100644 --- a/driver-core/pom.xml +++ b/driver-core/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1 + 3.11.2-SNAPSHOT cassandra-driver-core diff --git a/driver-dist/pom.xml b/driver-dist/pom.xml index c1533c068f6..835df270641 100644 --- a/driver-dist/pom.xml +++ b/driver-dist/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1 + 3.11.2-SNAPSHOT cassandra-driver-dist diff --git a/driver-examples/pom.xml b/driver-examples/pom.xml index 4a96380b14c..6f3797d7777 100644 --- a/driver-examples/pom.xml +++ b/driver-examples/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1 + 3.11.2-SNAPSHOT cassandra-driver-examples diff --git a/driver-extras/pom.xml b/driver-extras/pom.xml index e129f17abbb..9cea0eb7431 100644 --- a/driver-extras/pom.xml +++ b/driver-extras/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1 + 3.11.2-SNAPSHOT cassandra-driver-extras diff --git a/driver-mapping/pom.xml b/driver-mapping/pom.xml index cda650db9a2..66586f7e800 100644 --- a/driver-mapping/pom.xml +++ b/driver-mapping/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1 + 3.11.2-SNAPSHOT cassandra-driver-mapping diff --git a/driver-tests/osgi/pom.xml b/driver-tests/osgi/pom.xml index 6f93a9f6396..182a734fc82 100644 --- a/driver-tests/osgi/pom.xml +++ b/driver-tests/osgi/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-parent - 3.11.1 + 3.11.2-SNAPSHOT cassandra-driver-tests-osgi diff --git a/driver-tests/pom.xml b/driver-tests/pom.xml index fbd4f4ebf71..b111c8d1ea5 100644 --- a/driver-tests/pom.xml +++ b/driver-tests/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1 + 3.11.2-SNAPSHOT cassandra-driver-tests-parent diff --git a/driver-tests/shading/pom.xml b/driver-tests/shading/pom.xml index 46ce5d429b9..0ad8d1a266b 100644 --- a/driver-tests/shading/pom.xml +++ b/driver-tests/shading/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-parent - 3.11.1 + 3.11.2-SNAPSHOT pom diff --git a/driver-tests/shading/shaded/pom.xml b/driver-tests/shading/shaded/pom.xml index 427a2ccacae..6810194ba9c 100644 --- a/driver-tests/shading/shaded/pom.xml +++ b/driver-tests/shading/shaded/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-shading - 3.11.1 + 3.11.2-SNAPSHOT cassandra-driver-tests-shading-shaded diff --git a/driver-tests/shading/unshaded/pom.xml b/driver-tests/shading/unshaded/pom.xml index 882f407a7d4..0090a151a83 100644 --- a/driver-tests/shading/unshaded/pom.xml +++ b/driver-tests/shading/unshaded/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-shading - 3.11.1 + 3.11.2-SNAPSHOT cassandra-driver-tests-shading-unshaded diff --git a/driver-tests/stress/pom.xml b/driver-tests/stress/pom.xml index e6359083f7e..162a55d75c4 100644 --- a/driver-tests/stress/pom.xml +++ b/driver-tests/stress/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-parent - 3.11.1 + 3.11.2-SNAPSHOT cassandra-driver-tests-stress diff --git a/pom.xml b/pom.xml index 3ea59a4b2c8..267313bed7f 100644 --- a/pom.xml +++ b/pom.xml @@ -21,7 +21,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1 + 3.11.2-SNAPSHOT pom DataStax Java Driver for Apache Cassandra @@ -1147,7 +1147,7 @@ limitations under the License. scm:git:git@github.com:datastax/java-driver.git scm:git:git@github.com:datastax/java-driver.git https://github.com/datastax/java-driver - 3.11.1 + HEAD From d3d5c81b63df22685a101a7ce6df76b2ff29d33a Mon Sep 17 00:00:00 2001 From: Bret McGuire Date: Thu, 17 Feb 2022 23:45:58 -0600 Subject: [PATCH 058/112] Revert "[maven-release-plugin] prepare for next development iteration" This reverts commit b5fcaa789f16e15d75f2e0515d6a2335c2a535da. --- driver-core/pom.xml | 2 +- driver-dist/pom.xml | 2 +- driver-examples/pom.xml | 2 +- driver-extras/pom.xml | 2 +- driver-mapping/pom.xml | 2 +- driver-tests/osgi/pom.xml | 2 +- driver-tests/pom.xml | 2 +- driver-tests/shading/pom.xml | 2 +- driver-tests/shading/shaded/pom.xml | 2 +- driver-tests/shading/unshaded/pom.xml | 2 +- driver-tests/stress/pom.xml | 2 +- pom.xml | 4 ++-- 12 files changed, 13 insertions(+), 13 deletions(-) diff --git a/driver-core/pom.xml b/driver-core/pom.xml index 6d68864cba4..71068f08659 100644 --- a/driver-core/pom.xml +++ b/driver-core/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.2-SNAPSHOT + 3.11.1 cassandra-driver-core diff --git a/driver-dist/pom.xml b/driver-dist/pom.xml index 835df270641..c1533c068f6 100644 --- a/driver-dist/pom.xml +++ b/driver-dist/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.2-SNAPSHOT + 3.11.1 cassandra-driver-dist diff --git a/driver-examples/pom.xml b/driver-examples/pom.xml index 6f3797d7777..4a96380b14c 100644 --- a/driver-examples/pom.xml +++ b/driver-examples/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.2-SNAPSHOT + 3.11.1 cassandra-driver-examples diff --git a/driver-extras/pom.xml b/driver-extras/pom.xml index 9cea0eb7431..e129f17abbb 100644 --- a/driver-extras/pom.xml +++ b/driver-extras/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.2-SNAPSHOT + 3.11.1 cassandra-driver-extras diff --git a/driver-mapping/pom.xml b/driver-mapping/pom.xml index 66586f7e800..cda650db9a2 100644 --- a/driver-mapping/pom.xml +++ b/driver-mapping/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.2-SNAPSHOT + 3.11.1 cassandra-driver-mapping diff --git a/driver-tests/osgi/pom.xml b/driver-tests/osgi/pom.xml index 182a734fc82..6f93a9f6396 100644 --- a/driver-tests/osgi/pom.xml +++ b/driver-tests/osgi/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-parent - 3.11.2-SNAPSHOT + 3.11.1 cassandra-driver-tests-osgi diff --git a/driver-tests/pom.xml b/driver-tests/pom.xml index b111c8d1ea5..fbd4f4ebf71 100644 --- a/driver-tests/pom.xml +++ b/driver-tests/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.2-SNAPSHOT + 3.11.1 cassandra-driver-tests-parent diff --git a/driver-tests/shading/pom.xml b/driver-tests/shading/pom.xml index 0ad8d1a266b..46ce5d429b9 100644 --- a/driver-tests/shading/pom.xml +++ b/driver-tests/shading/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-parent - 3.11.2-SNAPSHOT + 3.11.1 pom diff --git a/driver-tests/shading/shaded/pom.xml b/driver-tests/shading/shaded/pom.xml index 6810194ba9c..427a2ccacae 100644 --- a/driver-tests/shading/shaded/pom.xml +++ b/driver-tests/shading/shaded/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-shading - 3.11.2-SNAPSHOT + 3.11.1 cassandra-driver-tests-shading-shaded diff --git a/driver-tests/shading/unshaded/pom.xml b/driver-tests/shading/unshaded/pom.xml index 0090a151a83..882f407a7d4 100644 --- a/driver-tests/shading/unshaded/pom.xml +++ b/driver-tests/shading/unshaded/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-shading - 3.11.2-SNAPSHOT + 3.11.1 cassandra-driver-tests-shading-unshaded diff --git a/driver-tests/stress/pom.xml b/driver-tests/stress/pom.xml index 162a55d75c4..e6359083f7e 100644 --- a/driver-tests/stress/pom.xml +++ b/driver-tests/stress/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-parent - 3.11.2-SNAPSHOT + 3.11.1 cassandra-driver-tests-stress diff --git a/pom.xml b/pom.xml index 267313bed7f..3ea59a4b2c8 100644 --- a/pom.xml +++ b/pom.xml @@ -21,7 +21,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.2-SNAPSHOT + 3.11.1 pom DataStax Java Driver for Apache Cassandra @@ -1147,7 +1147,7 @@ limitations under the License. scm:git:git@github.com:datastax/java-driver.git scm:git:git@github.com:datastax/java-driver.git https://github.com/datastax/java-driver - HEAD + 3.11.1 From a19715743fe8b92eafa004a17403c77bcc1190f1 Mon Sep 17 00:00:00 2001 From: Bret McGuire Date: Thu, 17 Feb 2022 23:46:18 -0600 Subject: [PATCH 059/112] Revert "[maven-release-plugin] prepare release 3.11.1" This reverts commit 32be7838bc932c8c6163526910d5825bf089f147. --- driver-core/pom.xml | 2 +- driver-dist/pom.xml | 2 +- driver-examples/pom.xml | 2 +- driver-extras/pom.xml | 2 +- driver-mapping/pom.xml | 2 +- driver-tests/osgi/pom.xml | 2 +- driver-tests/pom.xml | 2 +- driver-tests/shading/pom.xml | 2 +- driver-tests/shading/shaded/pom.xml | 2 +- driver-tests/shading/unshaded/pom.xml | 2 +- driver-tests/stress/pom.xml | 2 +- pom.xml | 4 ++-- 12 files changed, 13 insertions(+), 13 deletions(-) diff --git a/driver-core/pom.xml b/driver-core/pom.xml index 71068f08659..5117aadb2b0 100644 --- a/driver-core/pom.xml +++ b/driver-core/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1 + 3.11.1-SNAPSHOT cassandra-driver-core diff --git a/driver-dist/pom.xml b/driver-dist/pom.xml index c1533c068f6..3545491a439 100644 --- a/driver-dist/pom.xml +++ b/driver-dist/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1 + 3.11.1-SNAPSHOT cassandra-driver-dist diff --git a/driver-examples/pom.xml b/driver-examples/pom.xml index 4a96380b14c..d1bb15958f9 100644 --- a/driver-examples/pom.xml +++ b/driver-examples/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1 + 3.11.1-SNAPSHOT cassandra-driver-examples diff --git a/driver-extras/pom.xml b/driver-extras/pom.xml index e129f17abbb..eac090745c7 100644 --- a/driver-extras/pom.xml +++ b/driver-extras/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1 + 3.11.1-SNAPSHOT cassandra-driver-extras diff --git a/driver-mapping/pom.xml b/driver-mapping/pom.xml index cda650db9a2..8f3496f47be 100644 --- a/driver-mapping/pom.xml +++ b/driver-mapping/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1 + 3.11.1-SNAPSHOT cassandra-driver-mapping diff --git a/driver-tests/osgi/pom.xml b/driver-tests/osgi/pom.xml index 6f93a9f6396..293951d4c35 100644 --- a/driver-tests/osgi/pom.xml +++ b/driver-tests/osgi/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-parent - 3.11.1 + 3.11.1-SNAPSHOT cassandra-driver-tests-osgi diff --git a/driver-tests/pom.xml b/driver-tests/pom.xml index fbd4f4ebf71..38aaea38c68 100644 --- a/driver-tests/pom.xml +++ b/driver-tests/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1 + 3.11.1-SNAPSHOT cassandra-driver-tests-parent diff --git a/driver-tests/shading/pom.xml b/driver-tests/shading/pom.xml index 46ce5d429b9..440f31064f0 100644 --- a/driver-tests/shading/pom.xml +++ b/driver-tests/shading/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-parent - 3.11.1 + 3.11.1-SNAPSHOT pom diff --git a/driver-tests/shading/shaded/pom.xml b/driver-tests/shading/shaded/pom.xml index 427a2ccacae..14f19b31ae2 100644 --- a/driver-tests/shading/shaded/pom.xml +++ b/driver-tests/shading/shaded/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-shading - 3.11.1 + 3.11.1-SNAPSHOT cassandra-driver-tests-shading-shaded diff --git a/driver-tests/shading/unshaded/pom.xml b/driver-tests/shading/unshaded/pom.xml index 882f407a7d4..e98fc0d581e 100644 --- a/driver-tests/shading/unshaded/pom.xml +++ b/driver-tests/shading/unshaded/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-shading - 3.11.1 + 3.11.1-SNAPSHOT cassandra-driver-tests-shading-unshaded diff --git a/driver-tests/stress/pom.xml b/driver-tests/stress/pom.xml index e6359083f7e..f5520ece9a1 100644 --- a/driver-tests/stress/pom.xml +++ b/driver-tests/stress/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-parent - 3.11.1 + 3.11.1-SNAPSHOT cassandra-driver-tests-stress diff --git a/pom.xml b/pom.xml index 3ea59a4b2c8..76a47cb291e 100644 --- a/pom.xml +++ b/pom.xml @@ -21,7 +21,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1 + 3.11.1-SNAPSHOT pom DataStax Java Driver for Apache Cassandra @@ -1147,7 +1147,7 @@ limitations under the License. scm:git:git@github.com:datastax/java-driver.git scm:git:git@github.com:datastax/java-driver.git https://github.com/datastax/java-driver - 3.11.1 + HEAD From 3e665c96e4c690111900d95b4585b5c4eb983b0c Mon Sep 17 00:00:00 2001 From: Bret McGuire Date: Thu, 17 Feb 2022 23:47:04 -0600 Subject: [PATCH 060/112] [maven-release-plugin] prepare for next development iteration --- driver-core/pom.xml | 2 +- driver-dist/pom.xml | 2 +- driver-examples/pom.xml | 2 +- driver-extras/pom.xml | 2 +- driver-mapping/pom.xml | 2 +- driver-tests/osgi/pom.xml | 2 +- driver-tests/pom.xml | 2 +- driver-tests/shading/pom.xml | 2 +- driver-tests/shading/shaded/pom.xml | 2 +- driver-tests/shading/unshaded/pom.xml | 2 +- driver-tests/stress/pom.xml | 2 +- pom.xml | 2 +- 12 files changed, 12 insertions(+), 12 deletions(-) diff --git a/driver-core/pom.xml b/driver-core/pom.xml index 5117aadb2b0..6d68864cba4 100644 --- a/driver-core/pom.xml +++ b/driver-core/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1-SNAPSHOT + 3.11.2-SNAPSHOT cassandra-driver-core diff --git a/driver-dist/pom.xml b/driver-dist/pom.xml index 3545491a439..835df270641 100644 --- a/driver-dist/pom.xml +++ b/driver-dist/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1-SNAPSHOT + 3.11.2-SNAPSHOT cassandra-driver-dist diff --git a/driver-examples/pom.xml b/driver-examples/pom.xml index d1bb15958f9..6f3797d7777 100644 --- a/driver-examples/pom.xml +++ b/driver-examples/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1-SNAPSHOT + 3.11.2-SNAPSHOT cassandra-driver-examples diff --git a/driver-extras/pom.xml b/driver-extras/pom.xml index eac090745c7..9cea0eb7431 100644 --- a/driver-extras/pom.xml +++ b/driver-extras/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1-SNAPSHOT + 3.11.2-SNAPSHOT cassandra-driver-extras diff --git a/driver-mapping/pom.xml b/driver-mapping/pom.xml index 8f3496f47be..66586f7e800 100644 --- a/driver-mapping/pom.xml +++ b/driver-mapping/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1-SNAPSHOT + 3.11.2-SNAPSHOT cassandra-driver-mapping diff --git a/driver-tests/osgi/pom.xml b/driver-tests/osgi/pom.xml index 293951d4c35..182a734fc82 100644 --- a/driver-tests/osgi/pom.xml +++ b/driver-tests/osgi/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-parent - 3.11.1-SNAPSHOT + 3.11.2-SNAPSHOT cassandra-driver-tests-osgi diff --git a/driver-tests/pom.xml b/driver-tests/pom.xml index 38aaea38c68..b111c8d1ea5 100644 --- a/driver-tests/pom.xml +++ b/driver-tests/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1-SNAPSHOT + 3.11.2-SNAPSHOT cassandra-driver-tests-parent diff --git a/driver-tests/shading/pom.xml b/driver-tests/shading/pom.xml index 440f31064f0..0ad8d1a266b 100644 --- a/driver-tests/shading/pom.xml +++ b/driver-tests/shading/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-parent - 3.11.1-SNAPSHOT + 3.11.2-SNAPSHOT pom diff --git a/driver-tests/shading/shaded/pom.xml b/driver-tests/shading/shaded/pom.xml index 14f19b31ae2..6810194ba9c 100644 --- a/driver-tests/shading/shaded/pom.xml +++ b/driver-tests/shading/shaded/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-shading - 3.11.1-SNAPSHOT + 3.11.2-SNAPSHOT cassandra-driver-tests-shading-shaded diff --git a/driver-tests/shading/unshaded/pom.xml b/driver-tests/shading/unshaded/pom.xml index e98fc0d581e..0090a151a83 100644 --- a/driver-tests/shading/unshaded/pom.xml +++ b/driver-tests/shading/unshaded/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-shading - 3.11.1-SNAPSHOT + 3.11.2-SNAPSHOT cassandra-driver-tests-shading-unshaded diff --git a/driver-tests/stress/pom.xml b/driver-tests/stress/pom.xml index f5520ece9a1..162a55d75c4 100644 --- a/driver-tests/stress/pom.xml +++ b/driver-tests/stress/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-parent - 3.11.1-SNAPSHOT + 3.11.2-SNAPSHOT cassandra-driver-tests-stress diff --git a/pom.xml b/pom.xml index 76a47cb291e..267313bed7f 100644 --- a/pom.xml +++ b/pom.xml @@ -21,7 +21,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1-SNAPSHOT + 3.11.2-SNAPSHOT pom DataStax Java Driver for Apache Cassandra From 9c534977f72eec2f92beea7057c684bcd41ff743 Mon Sep 17 00:00:00 2001 From: Bret McGuire Date: Thu, 17 Feb 2022 23:50:25 -0600 Subject: [PATCH 061/112] Revert "[maven-release-plugin] prepare for next development iteration" This reverts commit 3e665c96e4c690111900d95b4585b5c4eb983b0c. --- driver-core/pom.xml | 2 +- driver-dist/pom.xml | 2 +- driver-examples/pom.xml | 2 +- driver-extras/pom.xml | 2 +- driver-mapping/pom.xml | 2 +- driver-tests/osgi/pom.xml | 2 +- driver-tests/pom.xml | 2 +- driver-tests/shading/pom.xml | 2 +- driver-tests/shading/shaded/pom.xml | 2 +- driver-tests/shading/unshaded/pom.xml | 2 +- driver-tests/stress/pom.xml | 2 +- pom.xml | 2 +- 12 files changed, 12 insertions(+), 12 deletions(-) diff --git a/driver-core/pom.xml b/driver-core/pom.xml index 6d68864cba4..5117aadb2b0 100644 --- a/driver-core/pom.xml +++ b/driver-core/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.2-SNAPSHOT + 3.11.1-SNAPSHOT cassandra-driver-core diff --git a/driver-dist/pom.xml b/driver-dist/pom.xml index 835df270641..3545491a439 100644 --- a/driver-dist/pom.xml +++ b/driver-dist/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.2-SNAPSHOT + 3.11.1-SNAPSHOT cassandra-driver-dist diff --git a/driver-examples/pom.xml b/driver-examples/pom.xml index 6f3797d7777..d1bb15958f9 100644 --- a/driver-examples/pom.xml +++ b/driver-examples/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.2-SNAPSHOT + 3.11.1-SNAPSHOT cassandra-driver-examples diff --git a/driver-extras/pom.xml b/driver-extras/pom.xml index 9cea0eb7431..eac090745c7 100644 --- a/driver-extras/pom.xml +++ b/driver-extras/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.2-SNAPSHOT + 3.11.1-SNAPSHOT cassandra-driver-extras diff --git a/driver-mapping/pom.xml b/driver-mapping/pom.xml index 66586f7e800..8f3496f47be 100644 --- a/driver-mapping/pom.xml +++ b/driver-mapping/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.2-SNAPSHOT + 3.11.1-SNAPSHOT cassandra-driver-mapping diff --git a/driver-tests/osgi/pom.xml b/driver-tests/osgi/pom.xml index 182a734fc82..293951d4c35 100644 --- a/driver-tests/osgi/pom.xml +++ b/driver-tests/osgi/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-parent - 3.11.2-SNAPSHOT + 3.11.1-SNAPSHOT cassandra-driver-tests-osgi diff --git a/driver-tests/pom.xml b/driver-tests/pom.xml index b111c8d1ea5..38aaea38c68 100644 --- a/driver-tests/pom.xml +++ b/driver-tests/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.2-SNAPSHOT + 3.11.1-SNAPSHOT cassandra-driver-tests-parent diff --git a/driver-tests/shading/pom.xml b/driver-tests/shading/pom.xml index 0ad8d1a266b..440f31064f0 100644 --- a/driver-tests/shading/pom.xml +++ b/driver-tests/shading/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-parent - 3.11.2-SNAPSHOT + 3.11.1-SNAPSHOT pom diff --git a/driver-tests/shading/shaded/pom.xml b/driver-tests/shading/shaded/pom.xml index 6810194ba9c..14f19b31ae2 100644 --- a/driver-tests/shading/shaded/pom.xml +++ b/driver-tests/shading/shaded/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-shading - 3.11.2-SNAPSHOT + 3.11.1-SNAPSHOT cassandra-driver-tests-shading-shaded diff --git a/driver-tests/shading/unshaded/pom.xml b/driver-tests/shading/unshaded/pom.xml index 0090a151a83..e98fc0d581e 100644 --- a/driver-tests/shading/unshaded/pom.xml +++ b/driver-tests/shading/unshaded/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-shading - 3.11.2-SNAPSHOT + 3.11.1-SNAPSHOT cassandra-driver-tests-shading-unshaded diff --git a/driver-tests/stress/pom.xml b/driver-tests/stress/pom.xml index 162a55d75c4..f5520ece9a1 100644 --- a/driver-tests/stress/pom.xml +++ b/driver-tests/stress/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-parent - 3.11.2-SNAPSHOT + 3.11.1-SNAPSHOT cassandra-driver-tests-stress diff --git a/pom.xml b/pom.xml index 267313bed7f..76a47cb291e 100644 --- a/pom.xml +++ b/pom.xml @@ -21,7 +21,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.2-SNAPSHOT + 3.11.1-SNAPSHOT pom DataStax Java Driver for Apache Cassandra From 11eb92e15a84765a1b9a43c3ef318cd2ef41aeb1 Mon Sep 17 00:00:00 2001 From: Bret McGuire Date: Thu, 17 Feb 2022 23:55:10 -0600 Subject: [PATCH 062/112] [maven-release-plugin] prepare release 3.11.1 --- driver-core/pom.xml | 2 +- driver-dist/pom.xml | 2 +- driver-examples/pom.xml | 2 +- driver-extras/pom.xml | 2 +- driver-mapping/pom.xml | 2 +- driver-tests/osgi/pom.xml | 2 +- driver-tests/pom.xml | 2 +- driver-tests/shading/pom.xml | 2 +- driver-tests/shading/shaded/pom.xml | 2 +- driver-tests/shading/unshaded/pom.xml | 2 +- driver-tests/stress/pom.xml | 2 +- pom.xml | 4 ++-- 12 files changed, 13 insertions(+), 13 deletions(-) diff --git a/driver-core/pom.xml b/driver-core/pom.xml index 5117aadb2b0..71068f08659 100644 --- a/driver-core/pom.xml +++ b/driver-core/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1-SNAPSHOT + 3.11.1 cassandra-driver-core diff --git a/driver-dist/pom.xml b/driver-dist/pom.xml index 3545491a439..c1533c068f6 100644 --- a/driver-dist/pom.xml +++ b/driver-dist/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1-SNAPSHOT + 3.11.1 cassandra-driver-dist diff --git a/driver-examples/pom.xml b/driver-examples/pom.xml index d1bb15958f9..4a96380b14c 100644 --- a/driver-examples/pom.xml +++ b/driver-examples/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1-SNAPSHOT + 3.11.1 cassandra-driver-examples diff --git a/driver-extras/pom.xml b/driver-extras/pom.xml index eac090745c7..e129f17abbb 100644 --- a/driver-extras/pom.xml +++ b/driver-extras/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1-SNAPSHOT + 3.11.1 cassandra-driver-extras diff --git a/driver-mapping/pom.xml b/driver-mapping/pom.xml index 8f3496f47be..cda650db9a2 100644 --- a/driver-mapping/pom.xml +++ b/driver-mapping/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1-SNAPSHOT + 3.11.1 cassandra-driver-mapping diff --git a/driver-tests/osgi/pom.xml b/driver-tests/osgi/pom.xml index 293951d4c35..6f93a9f6396 100644 --- a/driver-tests/osgi/pom.xml +++ b/driver-tests/osgi/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-parent - 3.11.1-SNAPSHOT + 3.11.1 cassandra-driver-tests-osgi diff --git a/driver-tests/pom.xml b/driver-tests/pom.xml index 38aaea38c68..fbd4f4ebf71 100644 --- a/driver-tests/pom.xml +++ b/driver-tests/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1-SNAPSHOT + 3.11.1 cassandra-driver-tests-parent diff --git a/driver-tests/shading/pom.xml b/driver-tests/shading/pom.xml index 440f31064f0..46ce5d429b9 100644 --- a/driver-tests/shading/pom.xml +++ b/driver-tests/shading/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-parent - 3.11.1-SNAPSHOT + 3.11.1 pom diff --git a/driver-tests/shading/shaded/pom.xml b/driver-tests/shading/shaded/pom.xml index 14f19b31ae2..427a2ccacae 100644 --- a/driver-tests/shading/shaded/pom.xml +++ b/driver-tests/shading/shaded/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-shading - 3.11.1-SNAPSHOT + 3.11.1 cassandra-driver-tests-shading-shaded diff --git a/driver-tests/shading/unshaded/pom.xml b/driver-tests/shading/unshaded/pom.xml index e98fc0d581e..882f407a7d4 100644 --- a/driver-tests/shading/unshaded/pom.xml +++ b/driver-tests/shading/unshaded/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-shading - 3.11.1-SNAPSHOT + 3.11.1 cassandra-driver-tests-shading-unshaded diff --git a/driver-tests/stress/pom.xml b/driver-tests/stress/pom.xml index f5520ece9a1..e6359083f7e 100644 --- a/driver-tests/stress/pom.xml +++ b/driver-tests/stress/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-parent - 3.11.1-SNAPSHOT + 3.11.1 cassandra-driver-tests-stress diff --git a/pom.xml b/pom.xml index 76a47cb291e..3ea59a4b2c8 100644 --- a/pom.xml +++ b/pom.xml @@ -21,7 +21,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1-SNAPSHOT + 3.11.1 pom DataStax Java Driver for Apache Cassandra @@ -1147,7 +1147,7 @@ limitations under the License. scm:git:git@github.com:datastax/java-driver.git scm:git:git@github.com:datastax/java-driver.git https://github.com/datastax/java-driver - HEAD + 3.11.1 From 442e30087570cc4bc3e3eed411f83f0cb211ce67 Mon Sep 17 00:00:00 2001 From: Bret McGuire Date: Thu, 17 Feb 2022 23:56:23 -0600 Subject: [PATCH 063/112] Revert "[maven-release-plugin] prepare release 3.11.1" This reverts commit 11eb92e15a84765a1b9a43c3ef318cd2ef41aeb1. --- driver-core/pom.xml | 2 +- driver-dist/pom.xml | 2 +- driver-examples/pom.xml | 2 +- driver-extras/pom.xml | 2 +- driver-mapping/pom.xml | 2 +- driver-tests/osgi/pom.xml | 2 +- driver-tests/pom.xml | 2 +- driver-tests/shading/pom.xml | 2 +- driver-tests/shading/shaded/pom.xml | 2 +- driver-tests/shading/unshaded/pom.xml | 2 +- driver-tests/stress/pom.xml | 2 +- pom.xml | 4 ++-- 12 files changed, 13 insertions(+), 13 deletions(-) diff --git a/driver-core/pom.xml b/driver-core/pom.xml index 71068f08659..5117aadb2b0 100644 --- a/driver-core/pom.xml +++ b/driver-core/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1 + 3.11.1-SNAPSHOT cassandra-driver-core diff --git a/driver-dist/pom.xml b/driver-dist/pom.xml index c1533c068f6..3545491a439 100644 --- a/driver-dist/pom.xml +++ b/driver-dist/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1 + 3.11.1-SNAPSHOT cassandra-driver-dist diff --git a/driver-examples/pom.xml b/driver-examples/pom.xml index 4a96380b14c..d1bb15958f9 100644 --- a/driver-examples/pom.xml +++ b/driver-examples/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1 + 3.11.1-SNAPSHOT cassandra-driver-examples diff --git a/driver-extras/pom.xml b/driver-extras/pom.xml index e129f17abbb..eac090745c7 100644 --- a/driver-extras/pom.xml +++ b/driver-extras/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1 + 3.11.1-SNAPSHOT cassandra-driver-extras diff --git a/driver-mapping/pom.xml b/driver-mapping/pom.xml index cda650db9a2..8f3496f47be 100644 --- a/driver-mapping/pom.xml +++ b/driver-mapping/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1 + 3.11.1-SNAPSHOT cassandra-driver-mapping diff --git a/driver-tests/osgi/pom.xml b/driver-tests/osgi/pom.xml index 6f93a9f6396..293951d4c35 100644 --- a/driver-tests/osgi/pom.xml +++ b/driver-tests/osgi/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-parent - 3.11.1 + 3.11.1-SNAPSHOT cassandra-driver-tests-osgi diff --git a/driver-tests/pom.xml b/driver-tests/pom.xml index fbd4f4ebf71..38aaea38c68 100644 --- a/driver-tests/pom.xml +++ b/driver-tests/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1 + 3.11.1-SNAPSHOT cassandra-driver-tests-parent diff --git a/driver-tests/shading/pom.xml b/driver-tests/shading/pom.xml index 46ce5d429b9..440f31064f0 100644 --- a/driver-tests/shading/pom.xml +++ b/driver-tests/shading/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-parent - 3.11.1 + 3.11.1-SNAPSHOT pom diff --git a/driver-tests/shading/shaded/pom.xml b/driver-tests/shading/shaded/pom.xml index 427a2ccacae..14f19b31ae2 100644 --- a/driver-tests/shading/shaded/pom.xml +++ b/driver-tests/shading/shaded/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-shading - 3.11.1 + 3.11.1-SNAPSHOT cassandra-driver-tests-shading-shaded diff --git a/driver-tests/shading/unshaded/pom.xml b/driver-tests/shading/unshaded/pom.xml index 882f407a7d4..e98fc0d581e 100644 --- a/driver-tests/shading/unshaded/pom.xml +++ b/driver-tests/shading/unshaded/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-shading - 3.11.1 + 3.11.1-SNAPSHOT cassandra-driver-tests-shading-unshaded diff --git a/driver-tests/stress/pom.xml b/driver-tests/stress/pom.xml index e6359083f7e..f5520ece9a1 100644 --- a/driver-tests/stress/pom.xml +++ b/driver-tests/stress/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-parent - 3.11.1 + 3.11.1-SNAPSHOT cassandra-driver-tests-stress diff --git a/pom.xml b/pom.xml index 3ea59a4b2c8..76a47cb291e 100644 --- a/pom.xml +++ b/pom.xml @@ -21,7 +21,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1 + 3.11.1-SNAPSHOT pom DataStax Java Driver for Apache Cassandra @@ -1147,7 +1147,7 @@ limitations under the License. scm:git:git@github.com:datastax/java-driver.git scm:git:git@github.com:datastax/java-driver.git https://github.com/datastax/java-driver - 3.11.1 + HEAD From a4220e109f30532599895ca0fd2879a8a3034584 Mon Sep 17 00:00:00 2001 From: Bret McGuire Date: Thu, 17 Feb 2022 23:59:32 -0600 Subject: [PATCH 064/112] [maven-release-plugin] prepare release 3.11.1 --- driver-core/pom.xml | 2 +- driver-dist/pom.xml | 2 +- driver-examples/pom.xml | 2 +- driver-extras/pom.xml | 2 +- driver-mapping/pom.xml | 2 +- driver-tests/osgi/pom.xml | 2 +- driver-tests/pom.xml | 2 +- driver-tests/shading/pom.xml | 2 +- driver-tests/shading/shaded/pom.xml | 2 +- driver-tests/shading/unshaded/pom.xml | 2 +- driver-tests/stress/pom.xml | 2 +- pom.xml | 4 ++-- 12 files changed, 13 insertions(+), 13 deletions(-) diff --git a/driver-core/pom.xml b/driver-core/pom.xml index 5117aadb2b0..71068f08659 100644 --- a/driver-core/pom.xml +++ b/driver-core/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1-SNAPSHOT + 3.11.1 cassandra-driver-core diff --git a/driver-dist/pom.xml b/driver-dist/pom.xml index 3545491a439..c1533c068f6 100644 --- a/driver-dist/pom.xml +++ b/driver-dist/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1-SNAPSHOT + 3.11.1 cassandra-driver-dist diff --git a/driver-examples/pom.xml b/driver-examples/pom.xml index d1bb15958f9..4a96380b14c 100644 --- a/driver-examples/pom.xml +++ b/driver-examples/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1-SNAPSHOT + 3.11.1 cassandra-driver-examples diff --git a/driver-extras/pom.xml b/driver-extras/pom.xml index eac090745c7..e129f17abbb 100644 --- a/driver-extras/pom.xml +++ b/driver-extras/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1-SNAPSHOT + 3.11.1 cassandra-driver-extras diff --git a/driver-mapping/pom.xml b/driver-mapping/pom.xml index 8f3496f47be..cda650db9a2 100644 --- a/driver-mapping/pom.xml +++ b/driver-mapping/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1-SNAPSHOT + 3.11.1 cassandra-driver-mapping diff --git a/driver-tests/osgi/pom.xml b/driver-tests/osgi/pom.xml index 293951d4c35..6f93a9f6396 100644 --- a/driver-tests/osgi/pom.xml +++ b/driver-tests/osgi/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-parent - 3.11.1-SNAPSHOT + 3.11.1 cassandra-driver-tests-osgi diff --git a/driver-tests/pom.xml b/driver-tests/pom.xml index 38aaea38c68..fbd4f4ebf71 100644 --- a/driver-tests/pom.xml +++ b/driver-tests/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1-SNAPSHOT + 3.11.1 cassandra-driver-tests-parent diff --git a/driver-tests/shading/pom.xml b/driver-tests/shading/pom.xml index 440f31064f0..46ce5d429b9 100644 --- a/driver-tests/shading/pom.xml +++ b/driver-tests/shading/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-parent - 3.11.1-SNAPSHOT + 3.11.1 pom diff --git a/driver-tests/shading/shaded/pom.xml b/driver-tests/shading/shaded/pom.xml index 14f19b31ae2..427a2ccacae 100644 --- a/driver-tests/shading/shaded/pom.xml +++ b/driver-tests/shading/shaded/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-shading - 3.11.1-SNAPSHOT + 3.11.1 cassandra-driver-tests-shading-shaded diff --git a/driver-tests/shading/unshaded/pom.xml b/driver-tests/shading/unshaded/pom.xml index e98fc0d581e..882f407a7d4 100644 --- a/driver-tests/shading/unshaded/pom.xml +++ b/driver-tests/shading/unshaded/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-shading - 3.11.1-SNAPSHOT + 3.11.1 cassandra-driver-tests-shading-unshaded diff --git a/driver-tests/stress/pom.xml b/driver-tests/stress/pom.xml index f5520ece9a1..e6359083f7e 100644 --- a/driver-tests/stress/pom.xml +++ b/driver-tests/stress/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-parent - 3.11.1-SNAPSHOT + 3.11.1 cassandra-driver-tests-stress diff --git a/pom.xml b/pom.xml index 76a47cb291e..3ea59a4b2c8 100644 --- a/pom.xml +++ b/pom.xml @@ -21,7 +21,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1-SNAPSHOT + 3.11.1 pom DataStax Java Driver for Apache Cassandra @@ -1147,7 +1147,7 @@ limitations under the License. scm:git:git@github.com:datastax/java-driver.git scm:git:git@github.com:datastax/java-driver.git https://github.com/datastax/java-driver - HEAD + 3.11.1 From 48dcbbe80d43637a422847893d96f5741344e6a3 Mon Sep 17 00:00:00 2001 From: Bret McGuire Date: Thu, 17 Feb 2022 23:59:35 -0600 Subject: [PATCH 065/112] [maven-release-plugin] prepare for next development iteration --- driver-core/pom.xml | 2 +- driver-dist/pom.xml | 2 +- driver-examples/pom.xml | 2 +- driver-extras/pom.xml | 2 +- driver-mapping/pom.xml | 2 +- driver-tests/osgi/pom.xml | 2 +- driver-tests/pom.xml | 2 +- driver-tests/shading/pom.xml | 2 +- driver-tests/shading/shaded/pom.xml | 2 +- driver-tests/shading/unshaded/pom.xml | 2 +- driver-tests/stress/pom.xml | 2 +- pom.xml | 4 ++-- 12 files changed, 13 insertions(+), 13 deletions(-) diff --git a/driver-core/pom.xml b/driver-core/pom.xml index 71068f08659..6d68864cba4 100644 --- a/driver-core/pom.xml +++ b/driver-core/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1 + 3.11.2-SNAPSHOT cassandra-driver-core diff --git a/driver-dist/pom.xml b/driver-dist/pom.xml index c1533c068f6..835df270641 100644 --- a/driver-dist/pom.xml +++ b/driver-dist/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1 + 3.11.2-SNAPSHOT cassandra-driver-dist diff --git a/driver-examples/pom.xml b/driver-examples/pom.xml index 4a96380b14c..6f3797d7777 100644 --- a/driver-examples/pom.xml +++ b/driver-examples/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1 + 3.11.2-SNAPSHOT cassandra-driver-examples diff --git a/driver-extras/pom.xml b/driver-extras/pom.xml index e129f17abbb..9cea0eb7431 100644 --- a/driver-extras/pom.xml +++ b/driver-extras/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1 + 3.11.2-SNAPSHOT cassandra-driver-extras diff --git a/driver-mapping/pom.xml b/driver-mapping/pom.xml index cda650db9a2..66586f7e800 100644 --- a/driver-mapping/pom.xml +++ b/driver-mapping/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1 + 3.11.2-SNAPSHOT cassandra-driver-mapping diff --git a/driver-tests/osgi/pom.xml b/driver-tests/osgi/pom.xml index 6f93a9f6396..182a734fc82 100644 --- a/driver-tests/osgi/pom.xml +++ b/driver-tests/osgi/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-parent - 3.11.1 + 3.11.2-SNAPSHOT cassandra-driver-tests-osgi diff --git a/driver-tests/pom.xml b/driver-tests/pom.xml index fbd4f4ebf71..b111c8d1ea5 100644 --- a/driver-tests/pom.xml +++ b/driver-tests/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1 + 3.11.2-SNAPSHOT cassandra-driver-tests-parent diff --git a/driver-tests/shading/pom.xml b/driver-tests/shading/pom.xml index 46ce5d429b9..0ad8d1a266b 100644 --- a/driver-tests/shading/pom.xml +++ b/driver-tests/shading/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-parent - 3.11.1 + 3.11.2-SNAPSHOT pom diff --git a/driver-tests/shading/shaded/pom.xml b/driver-tests/shading/shaded/pom.xml index 427a2ccacae..6810194ba9c 100644 --- a/driver-tests/shading/shaded/pom.xml +++ b/driver-tests/shading/shaded/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-shading - 3.11.1 + 3.11.2-SNAPSHOT cassandra-driver-tests-shading-shaded diff --git a/driver-tests/shading/unshaded/pom.xml b/driver-tests/shading/unshaded/pom.xml index 882f407a7d4..0090a151a83 100644 --- a/driver-tests/shading/unshaded/pom.xml +++ b/driver-tests/shading/unshaded/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-shading - 3.11.1 + 3.11.2-SNAPSHOT cassandra-driver-tests-shading-unshaded diff --git a/driver-tests/stress/pom.xml b/driver-tests/stress/pom.xml index e6359083f7e..162a55d75c4 100644 --- a/driver-tests/stress/pom.xml +++ b/driver-tests/stress/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-parent - 3.11.1 + 3.11.2-SNAPSHOT cassandra-driver-tests-stress diff --git a/pom.xml b/pom.xml index 3ea59a4b2c8..267313bed7f 100644 --- a/pom.xml +++ b/pom.xml @@ -21,7 +21,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1 + 3.11.2-SNAPSHOT pom DataStax Java Driver for Apache Cassandra @@ -1147,7 +1147,7 @@ limitations under the License. scm:git:git@github.com:datastax/java-driver.git scm:git:git@github.com:datastax/java-driver.git https://github.com/datastax/java-driver - 3.11.1 + HEAD From af01c42f50d4f4180802438349cebd9a161f21e9 Mon Sep 17 00:00:00 2001 From: Bret McGuire Date: Fri, 18 Feb 2022 00:07:46 -0600 Subject: [PATCH 066/112] Revert "[maven-release-plugin] prepare for next development iteration" This reverts commit 48dcbbe80d43637a422847893d96f5741344e6a3. --- driver-core/pom.xml | 2 +- driver-dist/pom.xml | 2 +- driver-examples/pom.xml | 2 +- driver-extras/pom.xml | 2 +- driver-mapping/pom.xml | 2 +- driver-tests/osgi/pom.xml | 2 +- driver-tests/pom.xml | 2 +- driver-tests/shading/pom.xml | 2 +- driver-tests/shading/shaded/pom.xml | 2 +- driver-tests/shading/unshaded/pom.xml | 2 +- driver-tests/stress/pom.xml | 2 +- pom.xml | 4 ++-- 12 files changed, 13 insertions(+), 13 deletions(-) diff --git a/driver-core/pom.xml b/driver-core/pom.xml index 6d68864cba4..71068f08659 100644 --- a/driver-core/pom.xml +++ b/driver-core/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.2-SNAPSHOT + 3.11.1 cassandra-driver-core diff --git a/driver-dist/pom.xml b/driver-dist/pom.xml index 835df270641..c1533c068f6 100644 --- a/driver-dist/pom.xml +++ b/driver-dist/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.2-SNAPSHOT + 3.11.1 cassandra-driver-dist diff --git a/driver-examples/pom.xml b/driver-examples/pom.xml index 6f3797d7777..4a96380b14c 100644 --- a/driver-examples/pom.xml +++ b/driver-examples/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.2-SNAPSHOT + 3.11.1 cassandra-driver-examples diff --git a/driver-extras/pom.xml b/driver-extras/pom.xml index 9cea0eb7431..e129f17abbb 100644 --- a/driver-extras/pom.xml +++ b/driver-extras/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.2-SNAPSHOT + 3.11.1 cassandra-driver-extras diff --git a/driver-mapping/pom.xml b/driver-mapping/pom.xml index 66586f7e800..cda650db9a2 100644 --- a/driver-mapping/pom.xml +++ b/driver-mapping/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.2-SNAPSHOT + 3.11.1 cassandra-driver-mapping diff --git a/driver-tests/osgi/pom.xml b/driver-tests/osgi/pom.xml index 182a734fc82..6f93a9f6396 100644 --- a/driver-tests/osgi/pom.xml +++ b/driver-tests/osgi/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-parent - 3.11.2-SNAPSHOT + 3.11.1 cassandra-driver-tests-osgi diff --git a/driver-tests/pom.xml b/driver-tests/pom.xml index b111c8d1ea5..fbd4f4ebf71 100644 --- a/driver-tests/pom.xml +++ b/driver-tests/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.2-SNAPSHOT + 3.11.1 cassandra-driver-tests-parent diff --git a/driver-tests/shading/pom.xml b/driver-tests/shading/pom.xml index 0ad8d1a266b..46ce5d429b9 100644 --- a/driver-tests/shading/pom.xml +++ b/driver-tests/shading/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-parent - 3.11.2-SNAPSHOT + 3.11.1 pom diff --git a/driver-tests/shading/shaded/pom.xml b/driver-tests/shading/shaded/pom.xml index 6810194ba9c..427a2ccacae 100644 --- a/driver-tests/shading/shaded/pom.xml +++ b/driver-tests/shading/shaded/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-shading - 3.11.2-SNAPSHOT + 3.11.1 cassandra-driver-tests-shading-shaded diff --git a/driver-tests/shading/unshaded/pom.xml b/driver-tests/shading/unshaded/pom.xml index 0090a151a83..882f407a7d4 100644 --- a/driver-tests/shading/unshaded/pom.xml +++ b/driver-tests/shading/unshaded/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-shading - 3.11.2-SNAPSHOT + 3.11.1 cassandra-driver-tests-shading-unshaded diff --git a/driver-tests/stress/pom.xml b/driver-tests/stress/pom.xml index 162a55d75c4..e6359083f7e 100644 --- a/driver-tests/stress/pom.xml +++ b/driver-tests/stress/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-parent - 3.11.2-SNAPSHOT + 3.11.1 cassandra-driver-tests-stress diff --git a/pom.xml b/pom.xml index 267313bed7f..3ea59a4b2c8 100644 --- a/pom.xml +++ b/pom.xml @@ -21,7 +21,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.2-SNAPSHOT + 3.11.1 pom DataStax Java Driver for Apache Cassandra @@ -1147,7 +1147,7 @@ limitations under the License. scm:git:git@github.com:datastax/java-driver.git scm:git:git@github.com:datastax/java-driver.git https://github.com/datastax/java-driver - HEAD + 3.11.1 From e40cc75397a14f9db468aa3669e01e110a4d3a10 Mon Sep 17 00:00:00 2001 From: Bret McGuire Date: Fri, 18 Feb 2022 00:08:21 -0600 Subject: [PATCH 067/112] Revert "[maven-release-plugin] prepare release 3.11.1" This reverts commit a4220e109f30532599895ca0fd2879a8a3034584. --- driver-core/pom.xml | 2 +- driver-dist/pom.xml | 2 +- driver-examples/pom.xml | 2 +- driver-extras/pom.xml | 2 +- driver-mapping/pom.xml | 2 +- driver-tests/osgi/pom.xml | 2 +- driver-tests/pom.xml | 2 +- driver-tests/shading/pom.xml | 2 +- driver-tests/shading/shaded/pom.xml | 2 +- driver-tests/shading/unshaded/pom.xml | 2 +- driver-tests/stress/pom.xml | 2 +- pom.xml | 4 ++-- 12 files changed, 13 insertions(+), 13 deletions(-) diff --git a/driver-core/pom.xml b/driver-core/pom.xml index 71068f08659..5117aadb2b0 100644 --- a/driver-core/pom.xml +++ b/driver-core/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1 + 3.11.1-SNAPSHOT cassandra-driver-core diff --git a/driver-dist/pom.xml b/driver-dist/pom.xml index c1533c068f6..3545491a439 100644 --- a/driver-dist/pom.xml +++ b/driver-dist/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1 + 3.11.1-SNAPSHOT cassandra-driver-dist diff --git a/driver-examples/pom.xml b/driver-examples/pom.xml index 4a96380b14c..d1bb15958f9 100644 --- a/driver-examples/pom.xml +++ b/driver-examples/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1 + 3.11.1-SNAPSHOT cassandra-driver-examples diff --git a/driver-extras/pom.xml b/driver-extras/pom.xml index e129f17abbb..eac090745c7 100644 --- a/driver-extras/pom.xml +++ b/driver-extras/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1 + 3.11.1-SNAPSHOT cassandra-driver-extras diff --git a/driver-mapping/pom.xml b/driver-mapping/pom.xml index cda650db9a2..8f3496f47be 100644 --- a/driver-mapping/pom.xml +++ b/driver-mapping/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1 + 3.11.1-SNAPSHOT cassandra-driver-mapping diff --git a/driver-tests/osgi/pom.xml b/driver-tests/osgi/pom.xml index 6f93a9f6396..293951d4c35 100644 --- a/driver-tests/osgi/pom.xml +++ b/driver-tests/osgi/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-parent - 3.11.1 + 3.11.1-SNAPSHOT cassandra-driver-tests-osgi diff --git a/driver-tests/pom.xml b/driver-tests/pom.xml index fbd4f4ebf71..38aaea38c68 100644 --- a/driver-tests/pom.xml +++ b/driver-tests/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1 + 3.11.1-SNAPSHOT cassandra-driver-tests-parent diff --git a/driver-tests/shading/pom.xml b/driver-tests/shading/pom.xml index 46ce5d429b9..440f31064f0 100644 --- a/driver-tests/shading/pom.xml +++ b/driver-tests/shading/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-parent - 3.11.1 + 3.11.1-SNAPSHOT pom diff --git a/driver-tests/shading/shaded/pom.xml b/driver-tests/shading/shaded/pom.xml index 427a2ccacae..14f19b31ae2 100644 --- a/driver-tests/shading/shaded/pom.xml +++ b/driver-tests/shading/shaded/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-shading - 3.11.1 + 3.11.1-SNAPSHOT cassandra-driver-tests-shading-shaded diff --git a/driver-tests/shading/unshaded/pom.xml b/driver-tests/shading/unshaded/pom.xml index 882f407a7d4..e98fc0d581e 100644 --- a/driver-tests/shading/unshaded/pom.xml +++ b/driver-tests/shading/unshaded/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-shading - 3.11.1 + 3.11.1-SNAPSHOT cassandra-driver-tests-shading-unshaded diff --git a/driver-tests/stress/pom.xml b/driver-tests/stress/pom.xml index e6359083f7e..f5520ece9a1 100644 --- a/driver-tests/stress/pom.xml +++ b/driver-tests/stress/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-parent - 3.11.1 + 3.11.1-SNAPSHOT cassandra-driver-tests-stress diff --git a/pom.xml b/pom.xml index 3ea59a4b2c8..76a47cb291e 100644 --- a/pom.xml +++ b/pom.xml @@ -21,7 +21,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1 + 3.11.1-SNAPSHOT pom DataStax Java Driver for Apache Cassandra @@ -1147,7 +1147,7 @@ limitations under the License. scm:git:git@github.com:datastax/java-driver.git scm:git:git@github.com:datastax/java-driver.git https://github.com/datastax/java-driver - 3.11.1 + HEAD From 2bdcb4dbf2f2f38c91e12788cee9a0a00c233264 Mon Sep 17 00:00:00 2001 From: Bret McGuire Date: Fri, 18 Feb 2022 00:19:27 -0600 Subject: [PATCH 068/112] [maven-release-plugin] prepare release 3.11.1 --- driver-core/pom.xml | 2 +- driver-dist/pom.xml | 2 +- driver-examples/pom.xml | 2 +- driver-extras/pom.xml | 2 +- driver-mapping/pom.xml | 2 +- driver-tests/osgi/pom.xml | 2 +- driver-tests/pom.xml | 2 +- driver-tests/shading/pom.xml | 2 +- driver-tests/shading/shaded/pom.xml | 2 +- driver-tests/shading/unshaded/pom.xml | 2 +- driver-tests/stress/pom.xml | 2 +- pom.xml | 4 ++-- 12 files changed, 13 insertions(+), 13 deletions(-) diff --git a/driver-core/pom.xml b/driver-core/pom.xml index 5117aadb2b0..71068f08659 100644 --- a/driver-core/pom.xml +++ b/driver-core/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1-SNAPSHOT + 3.11.1 cassandra-driver-core diff --git a/driver-dist/pom.xml b/driver-dist/pom.xml index 3545491a439..c1533c068f6 100644 --- a/driver-dist/pom.xml +++ b/driver-dist/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1-SNAPSHOT + 3.11.1 cassandra-driver-dist diff --git a/driver-examples/pom.xml b/driver-examples/pom.xml index d1bb15958f9..4a96380b14c 100644 --- a/driver-examples/pom.xml +++ b/driver-examples/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1-SNAPSHOT + 3.11.1 cassandra-driver-examples diff --git a/driver-extras/pom.xml b/driver-extras/pom.xml index eac090745c7..e129f17abbb 100644 --- a/driver-extras/pom.xml +++ b/driver-extras/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1-SNAPSHOT + 3.11.1 cassandra-driver-extras diff --git a/driver-mapping/pom.xml b/driver-mapping/pom.xml index 8f3496f47be..cda650db9a2 100644 --- a/driver-mapping/pom.xml +++ b/driver-mapping/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1-SNAPSHOT + 3.11.1 cassandra-driver-mapping diff --git a/driver-tests/osgi/pom.xml b/driver-tests/osgi/pom.xml index 293951d4c35..6f93a9f6396 100644 --- a/driver-tests/osgi/pom.xml +++ b/driver-tests/osgi/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-parent - 3.11.1-SNAPSHOT + 3.11.1 cassandra-driver-tests-osgi diff --git a/driver-tests/pom.xml b/driver-tests/pom.xml index 38aaea38c68..fbd4f4ebf71 100644 --- a/driver-tests/pom.xml +++ b/driver-tests/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1-SNAPSHOT + 3.11.1 cassandra-driver-tests-parent diff --git a/driver-tests/shading/pom.xml b/driver-tests/shading/pom.xml index 440f31064f0..46ce5d429b9 100644 --- a/driver-tests/shading/pom.xml +++ b/driver-tests/shading/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-parent - 3.11.1-SNAPSHOT + 3.11.1 pom diff --git a/driver-tests/shading/shaded/pom.xml b/driver-tests/shading/shaded/pom.xml index 14f19b31ae2..427a2ccacae 100644 --- a/driver-tests/shading/shaded/pom.xml +++ b/driver-tests/shading/shaded/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-shading - 3.11.1-SNAPSHOT + 3.11.1 cassandra-driver-tests-shading-shaded diff --git a/driver-tests/shading/unshaded/pom.xml b/driver-tests/shading/unshaded/pom.xml index e98fc0d581e..882f407a7d4 100644 --- a/driver-tests/shading/unshaded/pom.xml +++ b/driver-tests/shading/unshaded/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-shading - 3.11.1-SNAPSHOT + 3.11.1 cassandra-driver-tests-shading-unshaded diff --git a/driver-tests/stress/pom.xml b/driver-tests/stress/pom.xml index f5520ece9a1..e6359083f7e 100644 --- a/driver-tests/stress/pom.xml +++ b/driver-tests/stress/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-parent - 3.11.1-SNAPSHOT + 3.11.1 cassandra-driver-tests-stress diff --git a/pom.xml b/pom.xml index 76a47cb291e..3ea59a4b2c8 100644 --- a/pom.xml +++ b/pom.xml @@ -21,7 +21,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1-SNAPSHOT + 3.11.1 pom DataStax Java Driver for Apache Cassandra @@ -1147,7 +1147,7 @@ limitations under the License. scm:git:git@github.com:datastax/java-driver.git scm:git:git@github.com:datastax/java-driver.git https://github.com/datastax/java-driver - HEAD + 3.11.1 From 27186d2c16771c96cc2723431d7aa7dbc4d0faa2 Mon Sep 17 00:00:00 2001 From: Bret McGuire Date: Fri, 18 Feb 2022 00:19:30 -0600 Subject: [PATCH 069/112] [maven-release-plugin] prepare for next development iteration --- driver-core/pom.xml | 2 +- driver-dist/pom.xml | 2 +- driver-examples/pom.xml | 2 +- driver-extras/pom.xml | 2 +- driver-mapping/pom.xml | 2 +- driver-tests/osgi/pom.xml | 2 +- driver-tests/pom.xml | 2 +- driver-tests/shading/pom.xml | 2 +- driver-tests/shading/shaded/pom.xml | 2 +- driver-tests/shading/unshaded/pom.xml | 2 +- driver-tests/stress/pom.xml | 2 +- pom.xml | 4 ++-- 12 files changed, 13 insertions(+), 13 deletions(-) diff --git a/driver-core/pom.xml b/driver-core/pom.xml index 71068f08659..6d68864cba4 100644 --- a/driver-core/pom.xml +++ b/driver-core/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1 + 3.11.2-SNAPSHOT cassandra-driver-core diff --git a/driver-dist/pom.xml b/driver-dist/pom.xml index c1533c068f6..835df270641 100644 --- a/driver-dist/pom.xml +++ b/driver-dist/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1 + 3.11.2-SNAPSHOT cassandra-driver-dist diff --git a/driver-examples/pom.xml b/driver-examples/pom.xml index 4a96380b14c..6f3797d7777 100644 --- a/driver-examples/pom.xml +++ b/driver-examples/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1 + 3.11.2-SNAPSHOT cassandra-driver-examples diff --git a/driver-extras/pom.xml b/driver-extras/pom.xml index e129f17abbb..9cea0eb7431 100644 --- a/driver-extras/pom.xml +++ b/driver-extras/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1 + 3.11.2-SNAPSHOT cassandra-driver-extras diff --git a/driver-mapping/pom.xml b/driver-mapping/pom.xml index cda650db9a2..66586f7e800 100644 --- a/driver-mapping/pom.xml +++ b/driver-mapping/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1 + 3.11.2-SNAPSHOT cassandra-driver-mapping diff --git a/driver-tests/osgi/pom.xml b/driver-tests/osgi/pom.xml index 6f93a9f6396..182a734fc82 100644 --- a/driver-tests/osgi/pom.xml +++ b/driver-tests/osgi/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-parent - 3.11.1 + 3.11.2-SNAPSHOT cassandra-driver-tests-osgi diff --git a/driver-tests/pom.xml b/driver-tests/pom.xml index fbd4f4ebf71..b111c8d1ea5 100644 --- a/driver-tests/pom.xml +++ b/driver-tests/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1 + 3.11.2-SNAPSHOT cassandra-driver-tests-parent diff --git a/driver-tests/shading/pom.xml b/driver-tests/shading/pom.xml index 46ce5d429b9..0ad8d1a266b 100644 --- a/driver-tests/shading/pom.xml +++ b/driver-tests/shading/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-parent - 3.11.1 + 3.11.2-SNAPSHOT pom diff --git a/driver-tests/shading/shaded/pom.xml b/driver-tests/shading/shaded/pom.xml index 427a2ccacae..6810194ba9c 100644 --- a/driver-tests/shading/shaded/pom.xml +++ b/driver-tests/shading/shaded/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-shading - 3.11.1 + 3.11.2-SNAPSHOT cassandra-driver-tests-shading-shaded diff --git a/driver-tests/shading/unshaded/pom.xml b/driver-tests/shading/unshaded/pom.xml index 882f407a7d4..0090a151a83 100644 --- a/driver-tests/shading/unshaded/pom.xml +++ b/driver-tests/shading/unshaded/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-shading - 3.11.1 + 3.11.2-SNAPSHOT cassandra-driver-tests-shading-unshaded diff --git a/driver-tests/stress/pom.xml b/driver-tests/stress/pom.xml index e6359083f7e..162a55d75c4 100644 --- a/driver-tests/stress/pom.xml +++ b/driver-tests/stress/pom.xml @@ -22,7 +22,7 @@ com.datastax.cassandra cassandra-driver-tests-parent - 3.11.1 + 3.11.2-SNAPSHOT cassandra-driver-tests-stress diff --git a/pom.xml b/pom.xml index 3ea59a4b2c8..267313bed7f 100644 --- a/pom.xml +++ b/pom.xml @@ -21,7 +21,7 @@ com.datastax.cassandra cassandra-driver-parent - 3.11.1 + 3.11.2-SNAPSHOT pom DataStax Java Driver for Apache Cassandra @@ -1147,7 +1147,7 @@ limitations under the License. scm:git:git@github.com:datastax/java-driver.git scm:git:git@github.com:datastax/java-driver.git https://github.com/datastax/java-driver - 3.11.1 + HEAD From 533f556c0c2a51896189b36ed4af4b912fbd65fd Mon Sep 17 00:00:00 2001 From: Piotr Jastrzebski Date: Wed, 16 Feb 2022 06:20:07 +0100 Subject: [PATCH 070/112] SchemaParser: fetch schema tables sequentially To minimize the impact of new client connecting to a cluster with a large number of tables, this patch changes the way schema tables are fetched by the driver. The ideal solution would be to make the queries use paging but that's not currently possible because of the driver architecture. This is the first step to mitigate the problem. It makes the queries run sequentially instead of all in parallel. Also schema data is no longer fetched with single full scans. Instead we fetch keyspaces info with a full scan and then fetch schema data for each keyspace separately with a single partition reads. Keyspaces are fetched sequentially. Signed-off-by: Piotr Jastrzebski --- .gitorderfile | 0 .../datastax/driver/core/SchemaParser.java | 304 +++++++++++++++++- 2 files changed, 296 insertions(+), 8 deletions(-) create mode 100644 .gitorderfile diff --git a/.gitorderfile b/.gitorderfile new file mode 100644 index 00000000000..e69de29bb2d diff --git a/driver-core/src/main/java/com/datastax/driver/core/SchemaParser.java b/driver-core/src/main/java/com/datastax/driver/core/SchemaParser.java index 74443a22741..61030b74a82 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/SchemaParser.java +++ b/driver-core/src/main/java/com/datastax/driver/core/SchemaParser.java @@ -13,6 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + +/* + * Copyright (C) 2021 ScyllaDB + * + * Modified by ScyllaDB + */ package com.datastax.driver.core; import static com.datastax.driver.core.SchemaElement.AGGREGATE; @@ -34,6 +40,7 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.concurrent.ExecutionException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -255,7 +262,7 @@ private Map buildKeyspaces( return keyspaces; } - private Map buildTables( + protected Map buildTables( KeyspaceMetadata keyspace, List tableRows, Map> colsDefs, @@ -322,7 +329,7 @@ private Map buildTables( return tables; } - private Map buildUserTypes( + protected Map buildUserTypes( KeyspaceMetadata keyspace, List udtRows, VersionNumber cassandraVersion, @@ -342,7 +349,7 @@ protected List maybeSortUdts(List udtRows, Cluster cluster, String key return udtRows; } - private Map buildFunctions( + protected Map buildFunctions( KeyspaceMetadata keyspace, List functionRows, VersionNumber cassandraVersion, @@ -362,7 +369,7 @@ private Map buildFunctions( return functions; } - private Map buildAggregates( + protected Map buildAggregates( KeyspaceMetadata keyspace, List aggregateRows, VersionNumber cassandraVersion, @@ -382,7 +389,7 @@ private Map buildAggregates( return aggregates; } - private Map buildViews( + protected Map buildViews( KeyspaceMetadata keyspace, List viewRows, Map> colsDefs, @@ -417,7 +424,7 @@ private Map buildViews( // Update oldKeyspaces with the changes contained in newKeyspaces. // This method also takes care of triggering the relevant events - private void updateKeyspaces( + protected void updateKeyspaces( Metadata metadata, Map oldKeyspaces, Map newKeyspaces, @@ -849,8 +856,238 @@ private static class V3SchemaParser extends SchemaParser { private static final String TABLE_NAME = "table_name"; + private List fetchUDTs( + KeyspaceMetadata keyspace, Connection connection, ProtocolVersion protocolVersion) + throws ConnectionException, BusyConnectionException, InterruptedException, + ExecutionException { + return queryAsync( + SELECT_USERTYPES + whereClause(KEYSPACE, keyspace.getName(), null, null), + connection, + protocolVersion) + .get() + .all(); + } + + private void buildUDTs( + KeyspaceMetadata keyspace, + Cluster cluster, + Connection connection, + VersionNumber cassandraVersion, + ProtocolVersion protocolVersion) + throws ConnectionException, BusyConnectionException, InterruptedException, + ExecutionException { + List raw = fetchUDTs(keyspace, connection, protocolVersion); + Map userTypes = buildUserTypes(keyspace, raw, cassandraVersion, cluster); + for (UserType userType : userTypes.values()) { + keyspace.add(userType); + } + } + + private List fetchFunctions( + KeyspaceMetadata keyspace, Connection connection, ProtocolVersion protocolVersion) + throws ConnectionException, BusyConnectionException, InterruptedException, + ExecutionException { + return queryAsync( + SELECT_FUNCTIONS + whereClause(KEYSPACE, keyspace.getName(), null, null), + connection, + protocolVersion) + .get() + .all(); + } + + private void buildFunctions( + KeyspaceMetadata keyspace, + Cluster cluster, + Connection connection, + VersionNumber cassandraVersion, + ProtocolVersion protocolVersion) + throws ConnectionException, BusyConnectionException, InterruptedException, + ExecutionException { + List raw = fetchFunctions(keyspace, connection, protocolVersion); + Map functions = + buildFunctions(keyspace, raw, cassandraVersion, cluster); + for (FunctionMetadata function : functions.values()) { + keyspace.add(function); + } + } + + private List fetchAggregates( + KeyspaceMetadata keyspace, Connection connection, ProtocolVersion protocolVersion) + throws ConnectionException, BusyConnectionException, InterruptedException, + ExecutionException { + return queryAsync( + SELECT_AGGREGATES + whereClause(KEYSPACE, keyspace.getName(), null, null), + connection, + protocolVersion) + .get() + .all(); + } + + private void buildAggregates( + KeyspaceMetadata keyspace, + Cluster cluster, + Connection connection, + VersionNumber cassandraVersion, + ProtocolVersion protocolVersion) + throws ConnectionException, BusyConnectionException, InterruptedException, + ExecutionException { + List raw = fetchAggregates(keyspace, connection, protocolVersion); + Map aggregates = + buildAggregates(keyspace, raw, cassandraVersion, cluster); + for (AggregateMetadata aggregate : aggregates.values()) { + keyspace.add(aggregate); + } + } + + private Map> fetchColumns( + KeyspaceMetadata keyspace, Connection connection, ProtocolVersion protocolVersion) + throws ConnectionException, BusyConnectionException, InterruptedException, + ExecutionException { + ResultSet rs = + queryAsync( + SELECT_COLUMNS + whereClause(KEYSPACE, keyspace.getName(), null, null), + connection, + protocolVersion) + .get(); + + if (rs == null) return Collections.emptyMap(); + + Map> result = new HashMap>(); + for (Row row : rs) { + String cfName = row.getString(TABLE_NAME); + Map colsByCf = result.get(cfName); + if (colsByCf == null) { + colsByCf = new HashMap(); + result.put(cfName, colsByCf); + } + colsByCf.put(row.getString(ColumnMetadata.COLUMN_NAME), row); + } + return result; + } + + private Map> buildColumns( + KeyspaceMetadata keyspace, + Connection connection, + VersionNumber cassandraVersion, + ProtocolVersion protocolVersion) + throws ConnectionException, BusyConnectionException, InterruptedException, + ExecutionException { + Map> raw = fetchColumns(keyspace, connection, protocolVersion); + Map> result = + new HashMap>(); + for (Entry> table : raw.entrySet()) { + Map columns = new HashMap(); + for (Entry column : table.getValue().entrySet()) { + columns.put( + column.getKey(), ColumnMetadata.Raw.fromRow(column.getValue(), cassandraVersion)); + } + result.put(table.getKey(), columns); + } + return result; + } + + private List fetchTables( + KeyspaceMetadata keyspace, Connection connection, ProtocolVersion protocolVersion) + throws ConnectionException, BusyConnectionException, InterruptedException, + ExecutionException { + return queryAsync( + SELECT_TABLES + whereClause(KEYSPACE, keyspace.getName(), null, null), + connection, + protocolVersion) + .get() + .all(); + } + + private Map> fetchIndexes( + KeyspaceMetadata keyspace, Connection connection, ProtocolVersion protocolVersion) + throws ConnectionException, BusyConnectionException, InterruptedException, + ExecutionException { + ResultSet rs = + queryAsync( + SELECT_INDEXES + whereClause(KEYSPACE, keyspace.getName(), null, null), + connection, + protocolVersion) + .get(); + if (rs == null) return Collections.emptyMap(); + + Map> result = Maps.newHashMap(); + for (Row row : rs) { + String cfName = row.getString(TABLE_NAME); + List rowsByCf = result.get(cfName); + if (rowsByCf == null) { + rowsByCf = Lists.newArrayList(); + result.put(cfName, rowsByCf); + } + rowsByCf.add(row); + } + return result; + } + + private List fetchViews( + KeyspaceMetadata keyspace, Connection connection, ProtocolVersion protocolVersion) + throws ConnectionException, BusyConnectionException, InterruptedException, + ExecutionException { + return queryAsync( + SELECT_VIEWS + whereClause(KEYSPACE, keyspace.getName(), null, null), + connection, + protocolVersion) + .get() + .all(); + } + + private void buildTablesIndexesAndViews( + KeyspaceMetadata keyspace, + Cluster cluster, + Connection connection, + VersionNumber cassandraVersion, + ProtocolVersion protocolVersion) + throws ConnectionException, BusyConnectionException, InterruptedException, + ExecutionException { + List cf = fetchTables(keyspace, connection, protocolVersion); + Map> columns = + buildColumns(keyspace, connection, cassandraVersion, protocolVersion); + Map> indexes = fetchIndexes(keyspace, connection, protocolVersion); + Map tables = + buildTables(keyspace, cf, columns, indexes, cassandraVersion, cluster); + for (TableMetadata table : tables.values()) { + keyspace.add(table); + } + List viewsData = fetchViews(keyspace, connection, protocolVersion); + Map views = + buildViews(keyspace, viewsData, columns, cassandraVersion, cluster); + for (MaterializedViewMetadata view : views.values()) { + keyspace.add(view); + } + } + + private Map buildSchema( + Cluster cluster, Connection connection, VersionNumber cassandraVersion) + throws ConnectionException, BusyConnectionException, InterruptedException, + ExecutionException { + ProtocolVersion protocolVersion = + cluster.getConfiguration().getProtocolOptions().getProtocolVersion(); + + Map keyspaces = new LinkedHashMap(); + ResultSet keyspacesData = queryAsync(SELECT_KEYSPACES, connection, protocolVersion).get(); + for (Row keyspaceRow : keyspacesData) { + KeyspaceMetadata keyspace = KeyspaceMetadata.build(keyspaceRow, cassandraVersion); + keyspaces.put(keyspace.getName(), keyspace); + } + + for (Entry keyspace : keyspaces.entrySet()) { + buildUDTs(keyspace.getValue(), cluster, connection, cassandraVersion, protocolVersion); + buildFunctions(keyspace.getValue(), cluster, connection, cassandraVersion, protocolVersion); + buildAggregates( + keyspace.getValue(), cluster, connection, cassandraVersion, protocolVersion); + buildTablesIndexesAndViews( + keyspace.getValue(), cluster, connection, cassandraVersion, protocolVersion); + } + + return keyspaces; + } + @Override - SystemRows fetchSystemRows( + void refresh( Cluster cluster, SchemaElement targetType, String targetKeyspace, @@ -860,7 +1097,58 @@ SystemRows fetchSystemRows( VersionNumber cassandraVersion) throws ConnectionException, BusyConnectionException, ExecutionException, InterruptedException { + if (targetType == null) { + Map keyspaces = + buildSchema(cluster, connection, cassandraVersion); + Metadata metadata; + try { + metadata = cluster.getMetadata(); + } catch (IllegalStateException e) { + logger.warn("Unable to refresh metadata, cluster has been closed"); + return; + } + metadata.lock.lock(); + try { + updateKeyspaces(metadata, metadata.keyspaces, keyspaces, null); + // If we rebuild all from scratch or have an updated keyspace, rebuild the token map + // since some replication on some keyspace may have changed + metadata.rebuildTokenMap(); + } catch (RuntimeException e) { + // Failure to parse the schema is definitively wrong so log a full-on error, but this + // won't + // generally prevent queries to + // work and this can happen when new Cassandra versions modify stuff in the schema and the + // driver hasn't yet be modified. + // So log, but let things go otherwise. + logger.error( + "Error parsing schema from Cassandra system tables: the schema in Cluster#getMetadata() will appear incomplete or stale", + e); + } finally { + metadata.lock.unlock(); + } + } else { + super.refresh( + cluster, + targetType, + targetKeyspace, + targetName, + targetSignature, + connection, + cassandraVersion); + } + } + @Override + SystemRows fetchSystemRows( + Cluster cluster, + SchemaElement targetType, + String targetKeyspace, + String targetName, + List targetSignature, + Connection connection, + VersionNumber cassandraVersion) + throws ConnectionException, BusyConnectionException, ExecutionException, + InterruptedException { boolean isSchemaOrKeyspace = (targetType == null || targetType == KEYSPACE); ResultSetFuture ksFuture = null, @@ -957,7 +1245,7 @@ String tableNameColumn() { return TABLE_NAME; } - protected String whereClause( + protected static String whereClause( SchemaElement targetType, String targetKeyspace, String targetName, From dbe06715485b93c0fed39b779bcfdcafaf6ac1aa Mon Sep 17 00:00:00 2001 From: Piotr Jastrzebski Date: Wed, 16 Feb 2022 14:51:53 +0100 Subject: [PATCH 071/112] SchemaParser: use paging for fetching tables info We can't use the regular paging so we emulate it with LIMIT. Signed-off-by: Piotr Jastrzebski --- .../datastax/driver/core/SchemaParser.java | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/driver-core/src/main/java/com/datastax/driver/core/SchemaParser.java b/driver-core/src/main/java/com/datastax/driver/core/SchemaParser.java index 61030b74a82..937187e9e9f 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/SchemaParser.java +++ b/driver-core/src/main/java/com/datastax/driver/core/SchemaParser.java @@ -855,6 +855,7 @@ private static class V3SchemaParser extends SchemaParser { protected static final String SELECT_VIEWS = "SELECT * FROM system_schema.views"; private static final String TABLE_NAME = "table_name"; + private static final String LIMIT = " LIMIT 1000"; private List fetchUDTs( KeyspaceMetadata keyspace, Connection connection, ProtocolVersion protocolVersion) @@ -990,12 +991,21 @@ private List fetchTables( KeyspaceMetadata keyspace, Connection connection, ProtocolVersion protocolVersion) throws ConnectionException, BusyConnectionException, InterruptedException, ExecutionException { - return queryAsync( - SELECT_TABLES + whereClause(KEYSPACE, keyspace.getName(), null, null), - connection, - protocolVersion) - .get() - .all(); + String queryPrefix = SELECT_TABLES + whereClause(KEYSPACE, keyspace.getName(), null, null); + List result = new ArrayList(); + List rs = queryAsync(queryPrefix + LIMIT, connection, protocolVersion).get().all(); + while (!rs.isEmpty()) { + result.addAll(rs); + String lastSeen = "'" + result.get(result.size() - 1).getString(TABLE_NAME) + "'"; + rs = + queryAsync( + queryPrefix + " AND " + TABLE_NAME + " > " + lastSeen + LIMIT, + connection, + protocolVersion) + .get() + .all(); + } + return result; } private Map> fetchIndexes( From 39921d875c605ae4386c168d377cd2efb95c7472 Mon Sep 17 00:00:00 2001 From: Piotr Jastrzebski Date: Wed, 16 Feb 2022 14:54:59 +0100 Subject: [PATCH 072/112] SchemaParser: use paging for fetching views info We can't use the regular paging so we emulate it with LIMIT. Signed-off-by: Piotr Jastrzebski --- .../datastax/driver/core/SchemaParser.java | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/driver-core/src/main/java/com/datastax/driver/core/SchemaParser.java b/driver-core/src/main/java/com/datastax/driver/core/SchemaParser.java index 937187e9e9f..11c98203ff1 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/SchemaParser.java +++ b/driver-core/src/main/java/com/datastax/driver/core/SchemaParser.java @@ -855,6 +855,7 @@ private static class V3SchemaParser extends SchemaParser { protected static final String SELECT_VIEWS = "SELECT * FROM system_schema.views"; private static final String TABLE_NAME = "table_name"; + private static final String VIEW_NAME = "view_name"; private static final String LIMIT = " LIMIT 1000"; private List fetchUDTs( @@ -1037,12 +1038,21 @@ private List fetchViews( KeyspaceMetadata keyspace, Connection connection, ProtocolVersion protocolVersion) throws ConnectionException, BusyConnectionException, InterruptedException, ExecutionException { - return queryAsync( - SELECT_VIEWS + whereClause(KEYSPACE, keyspace.getName(), null, null), - connection, - protocolVersion) - .get() - .all(); + String queryPrefix = SELECT_VIEWS + whereClause(KEYSPACE, keyspace.getName(), null, null); + List result = new ArrayList(); + List rs = queryAsync(queryPrefix + LIMIT, connection, protocolVersion).get().all(); + while (!rs.isEmpty()) { + result.addAll(rs); + String lastSeen = "'" + result.get(result.size() - 1).getString(VIEW_NAME) + "'"; + rs = + queryAsync( + queryPrefix + " AND " + VIEW_NAME + " > " + lastSeen + LIMIT, + connection, + protocolVersion) + .get() + .all(); + } + return result; } private void buildTablesIndexesAndViews( From 861c5b1454f7c75a26d886f8bafaa23c967794ce Mon Sep 17 00:00:00 2001 From: Piotr Jastrzebski Date: Wed, 16 Feb 2022 15:15:59 +0100 Subject: [PATCH 073/112] SchemaParser: use paging for fetching columns info We can't use the regular paging so we emulate it with LIMIT. Signed-off-by: Piotr Jastrzebski --- .../datastax/driver/core/SchemaParser.java | 47 ++++++++++++------- 1 file changed, 31 insertions(+), 16 deletions(-) diff --git a/driver-core/src/main/java/com/datastax/driver/core/SchemaParser.java b/driver-core/src/main/java/com/datastax/driver/core/SchemaParser.java index 11c98203ff1..b23de709046 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/SchemaParser.java +++ b/driver-core/src/main/java/com/datastax/driver/core/SchemaParser.java @@ -856,6 +856,7 @@ private static class V3SchemaParser extends SchemaParser { private static final String TABLE_NAME = "table_name"; private static final String VIEW_NAME = "view_name"; + private static final String COLUMN_NAME = "column_name"; private static final String LIMIT = " LIMIT 1000"; private List fetchUDTs( @@ -945,24 +946,38 @@ private Map> fetchColumns( KeyspaceMetadata keyspace, Connection connection, ProtocolVersion protocolVersion) throws ConnectionException, BusyConnectionException, InterruptedException, ExecutionException { - ResultSet rs = - queryAsync( - SELECT_COLUMNS + whereClause(KEYSPACE, keyspace.getName(), null, null), - connection, - protocolVersion) - .get(); - - if (rs == null) return Collections.emptyMap(); - + String queryPrefix = SELECT_COLUMNS + whereClause(KEYSPACE, keyspace.getName(), null, null); Map> result = new HashMap>(); - for (Row row : rs) { - String cfName = row.getString(TABLE_NAME); - Map colsByCf = result.get(cfName); - if (colsByCf == null) { - colsByCf = new HashMap(); - result.put(cfName, colsByCf); + List rs = queryAsync(queryPrefix + LIMIT, connection, protocolVersion).get().all(); + while (!rs.isEmpty()) { + String lastSeenTable = "'" + rs.get(rs.size() - 1).getString(TABLE_NAME) + "'"; + String lastSeenColumn = "'" + rs.get(rs.size() - 1).getString(COLUMN_NAME) + "'"; + for (Row row : rs) { + String cfName = row.getString(TABLE_NAME); + Map colsByCf = result.get(cfName); + if (colsByCf == null) { + colsByCf = new HashMap(); + result.put(cfName, colsByCf); + } + colsByCf.put(row.getString(ColumnMetadata.COLUMN_NAME), row); } - colsByCf.put(row.getString(ColumnMetadata.COLUMN_NAME), row); + rs = + queryAsync( + queryPrefix + + " AND (" + + TABLE_NAME + + ", " + + COLUMN_NAME + + ") > (" + + lastSeenTable + + ", " + + lastSeenColumn + + ")" + + LIMIT, + connection, + protocolVersion) + .get() + .all(); } return result; } From b7c097cf7fdbe0c67b0135debb88538fb5a7b28b Mon Sep 17 00:00:00 2001 From: Piotr Jastrzebski Date: Wed, 16 Feb 2022 15:20:17 +0100 Subject: [PATCH 074/112] SchemaParser: use paging for fetching indexes info We can't use the regular paging so we emulate it with LIMIT. Signed-off-by: Piotr Jastrzebski --- .../datastax/driver/core/SchemaParser.java | 46 +++++++++++++------ 1 file changed, 31 insertions(+), 15 deletions(-) diff --git a/driver-core/src/main/java/com/datastax/driver/core/SchemaParser.java b/driver-core/src/main/java/com/datastax/driver/core/SchemaParser.java index b23de709046..0017d32ed19 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/SchemaParser.java +++ b/driver-core/src/main/java/com/datastax/driver/core/SchemaParser.java @@ -857,6 +857,7 @@ private static class V3SchemaParser extends SchemaParser { private static final String TABLE_NAME = "table_name"; private static final String VIEW_NAME = "view_name"; private static final String COLUMN_NAME = "column_name"; + private static final String INDEX_NAME = "index_name"; private static final String LIMIT = " LIMIT 1000"; private List fetchUDTs( @@ -1028,23 +1029,38 @@ private Map> fetchIndexes( KeyspaceMetadata keyspace, Connection connection, ProtocolVersion protocolVersion) throws ConnectionException, BusyConnectionException, InterruptedException, ExecutionException { - ResultSet rs = - queryAsync( - SELECT_INDEXES + whereClause(KEYSPACE, keyspace.getName(), null, null), - connection, - protocolVersion) - .get(); - if (rs == null) return Collections.emptyMap(); - + String queryPrefix = SELECT_INDEXES + whereClause(KEYSPACE, keyspace.getName(), null, null); Map> result = Maps.newHashMap(); - for (Row row : rs) { - String cfName = row.getString(TABLE_NAME); - List rowsByCf = result.get(cfName); - if (rowsByCf == null) { - rowsByCf = Lists.newArrayList(); - result.put(cfName, rowsByCf); + List rs = queryAsync(queryPrefix + LIMIT, connection, protocolVersion).get().all(); + while (!rs.isEmpty()) { + String lastSeenTable = "'" + rs.get(rs.size() - 1).getString(TABLE_NAME) + "'"; + String lastSeenIndex = "'" + rs.get(rs.size() - 1).getString(INDEX_NAME) + "'"; + for (Row row : rs) { + String cfName = row.getString(TABLE_NAME); + List rowsByCf = result.get(cfName); + if (rowsByCf == null) { + rowsByCf = Lists.newArrayList(); + result.put(cfName, rowsByCf); + } + rowsByCf.add(row); } - rowsByCf.add(row); + rs = + queryAsync( + queryPrefix + + " AND (" + + TABLE_NAME + + ", " + + INDEX_NAME + + ") > (" + + lastSeenTable + + ", " + + lastSeenIndex + + ")" + + LIMIT, + connection, + protocolVersion) + .get() + .all(); } return result; } From ef016e1f033379227a20f8ff1e7795df5bd15e2c Mon Sep 17 00:00:00 2001 From: Piotr Jastrzebski Date: Wed, 16 Feb 2022 15:25:39 +0100 Subject: [PATCH 075/112] SchemaParser: use paging for fetching UDFs info We can't use the regular paging so we emulate it with LIMIT. Signed-off-by: Piotr Jastrzebski --- .../datastax/driver/core/SchemaParser.java | 46 ++++++++++++++++--- 1 file changed, 40 insertions(+), 6 deletions(-) diff --git a/driver-core/src/main/java/com/datastax/driver/core/SchemaParser.java b/driver-core/src/main/java/com/datastax/driver/core/SchemaParser.java index 0017d32ed19..7a451e14961 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/SchemaParser.java +++ b/driver-core/src/main/java/com/datastax/driver/core/SchemaParser.java @@ -858,6 +858,8 @@ private static class V3SchemaParser extends SchemaParser { private static final String VIEW_NAME = "view_name"; private static final String COLUMN_NAME = "column_name"; private static final String INDEX_NAME = "index_name"; + private static final String FUNCTION_NAME = "function_name"; + private static final String ARGUMENT_TYPES = "argument_types"; private static final String LIMIT = " LIMIT 1000"; private List fetchUDTs( @@ -891,12 +893,44 @@ private List fetchFunctions( KeyspaceMetadata keyspace, Connection connection, ProtocolVersion protocolVersion) throws ConnectionException, BusyConnectionException, InterruptedException, ExecutionException { - return queryAsync( - SELECT_FUNCTIONS + whereClause(KEYSPACE, keyspace.getName(), null, null), - connection, - protocolVersion) - .get() - .all(); + String queryPrefix = SELECT_FUNCTIONS + whereClause(KEYSPACE, keyspace.getName(), null, null); + List result = new ArrayList(); + List rs = queryAsync(queryPrefix + LIMIT, connection, protocolVersion).get().all(); + while (!rs.isEmpty()) { + String lastSeenFunction = "'" + rs.get(rs.size() - 1).getString(FUNCTION_NAME) + "'"; + StringBuilder sb = new StringBuilder(); + sb.append("["); + boolean first = true; + for (String arg_type : rs.get(rs.size() - 1).getList(ARGUMENT_TYPES, String.class)) { + if (first) { + first = false; + } else { + sb.append(", "); + } + sb.append("'").append(arg_type).append("'"); + } + sb.append("]"); + String lastSeenArgs = sb.toString(); + result.addAll(rs); + rs = + queryAsync( + queryPrefix + + " AND (" + + FUNCTION_NAME + + ", " + + ARGUMENT_TYPES + + ") > (" + + lastSeenFunction + + ", " + + lastSeenArgs + + ")" + + LIMIT, + connection, + protocolVersion) + .get() + .all(); + } + return result; } private void buildFunctions( From 03243b9e2108d5cafa95f55ef85f0fd6efe04064 Mon Sep 17 00:00:00 2001 From: Piotr Jastrzebski Date: Wed, 16 Feb 2022 15:32:10 +0100 Subject: [PATCH 076/112] SchemaParser: use paging for fetching UDAs info We can't use the regular paging so we emulate it with LIMIT. Signed-off-by: Piotr Jastrzebski --- .../datastax/driver/core/SchemaParser.java | 46 ++++++++++++++++--- 1 file changed, 40 insertions(+), 6 deletions(-) diff --git a/driver-core/src/main/java/com/datastax/driver/core/SchemaParser.java b/driver-core/src/main/java/com/datastax/driver/core/SchemaParser.java index 7a451e14961..fa2200e0aa5 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/SchemaParser.java +++ b/driver-core/src/main/java/com/datastax/driver/core/SchemaParser.java @@ -860,6 +860,7 @@ private static class V3SchemaParser extends SchemaParser { private static final String INDEX_NAME = "index_name"; private static final String FUNCTION_NAME = "function_name"; private static final String ARGUMENT_TYPES = "argument_types"; + private static final String AGGREGATE_NAME = "aggregate_name"; private static final String LIMIT = " LIMIT 1000"; private List fetchUDTs( @@ -953,12 +954,45 @@ private List fetchAggregates( KeyspaceMetadata keyspace, Connection connection, ProtocolVersion protocolVersion) throws ConnectionException, BusyConnectionException, InterruptedException, ExecutionException { - return queryAsync( - SELECT_AGGREGATES + whereClause(KEYSPACE, keyspace.getName(), null, null), - connection, - protocolVersion) - .get() - .all(); + String queryPrefix = + SELECT_AGGREGATES + whereClause(KEYSPACE, keyspace.getName(), null, null); + List result = new ArrayList(); + List rs = queryAsync(queryPrefix + LIMIT, connection, protocolVersion).get().all(); + while (!rs.isEmpty()) { + String lastSeenAggregate = "'" + rs.get(rs.size() - 1).getString(AGGREGATE_NAME) + "'"; + StringBuilder sb = new StringBuilder(); + sb.append("["); + boolean first = true; + for (String arg_type : rs.get(rs.size() - 1).getList(ARGUMENT_TYPES, String.class)) { + if (first) { + first = false; + } else { + sb.append(", "); + } + sb.append("'").append(arg_type).append("'"); + } + sb.append("]"); + String lastSeenArgs = sb.toString(); + result.addAll(rs); + rs = + queryAsync( + queryPrefix + + " AND (" + + AGGREGATE_NAME + + ", " + + ARGUMENT_TYPES + + ") > (" + + lastSeenAggregate + + ", " + + lastSeenArgs + + ")" + + LIMIT, + connection, + protocolVersion) + .get() + .all(); + } + return result; } private void buildAggregates( From 3860be423c2d715d6f39b0f929add9eb18316c9e Mon Sep 17 00:00:00 2001 From: Piotr Jastrzebski Date: Wed, 16 Feb 2022 15:35:33 +0100 Subject: [PATCH 077/112] SchemaParser: use paging for fetching UDTs info We can't use the regular paging so we emulate it with LIMIT. Signed-off-by: Piotr Jastrzebski --- .../datastax/driver/core/SchemaParser.java | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/driver-core/src/main/java/com/datastax/driver/core/SchemaParser.java b/driver-core/src/main/java/com/datastax/driver/core/SchemaParser.java index fa2200e0aa5..f4bf3af0d3e 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/SchemaParser.java +++ b/driver-core/src/main/java/com/datastax/driver/core/SchemaParser.java @@ -861,18 +861,28 @@ private static class V3SchemaParser extends SchemaParser { private static final String FUNCTION_NAME = "function_name"; private static final String ARGUMENT_TYPES = "argument_types"; private static final String AGGREGATE_NAME = "aggregate_name"; + private static final String TYPE_NAME = "type_name"; private static final String LIMIT = " LIMIT 1000"; private List fetchUDTs( KeyspaceMetadata keyspace, Connection connection, ProtocolVersion protocolVersion) throws ConnectionException, BusyConnectionException, InterruptedException, ExecutionException { - return queryAsync( - SELECT_USERTYPES + whereClause(KEYSPACE, keyspace.getName(), null, null), - connection, - protocolVersion) - .get() - .all(); + String queryPrefix = SELECT_USERTYPES + whereClause(KEYSPACE, keyspace.getName(), null, null); + List result = new ArrayList(); + List rs = queryAsync(queryPrefix + LIMIT, connection, protocolVersion).get().all(); + while (!rs.isEmpty()) { + result.addAll(rs); + String lastSeen = "'" + result.get(result.size() - 1).getString(TYPE_NAME) + "'"; + rs = + queryAsync( + queryPrefix + " AND " + TYPE_NAME + " > " + lastSeen + LIMIT, + connection, + protocolVersion) + .get() + .all(); + } + return result; } private void buildUDTs( From 568ac03649240a2a3cfaca4456bc0fdb9f199b62 Mon Sep 17 00:00:00 2001 From: Piotr Jastrzebski Date: Wed, 16 Feb 2022 15:54:32 +0100 Subject: [PATCH 078/112] Configuration: make it possible to turn off paging in schema queries Signed-off-by: Piotr Jastrzebski --- .../com/datastax/driver/core/Cluster.java | 22 ++++++++ .../datastax/driver/core/Configuration.java | 4 ++ .../datastax/driver/core/QueryOptions.java | 50 ++++++++++++++----- .../datastax/driver/core/SchemaParser.java | 3 +- 4 files changed, 65 insertions(+), 14 deletions(-) diff --git a/driver-core/src/main/java/com/datastax/driver/core/Cluster.java b/driver-core/src/main/java/com/datastax/driver/core/Cluster.java index 62a743e45ed..cdac5cff4d0 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/Cluster.java +++ b/driver-core/src/main/java/com/datastax/driver/core/Cluster.java @@ -753,6 +753,7 @@ public static class Builder implements Initializer { private boolean noCompact = false; private boolean isCloud = false; private boolean useAdvancedShardAwareness = true; + private boolean schemaQueriesPaged = true; private int localPortLow = ProtocolOptions.DEFAULT_LOCAL_PORT_LOW; private int localPortHigh = ProtocolOptions.DEFAULT_LOCAL_PORT_HIGH; @@ -1495,6 +1496,19 @@ public Builder withoutAdvancedShardAwareness() { return this; } + /** + * Disables paging in schema queries. By default, Queries that fetch schema from the cluster are + * paged. This option causes the least impact on the cluster latencies when a new client + * connects. Turning off paging may result in faster driver initialisation at the expense of + * higher cluster latencies. + * + * @return this builder. + */ + public Builder withoutPagingInSchemaQueries() { + this.schemaQueriesPaged = false; + return this; + } + /** * Sets local port range for use by advanced shard awareness. Driver will use ports from this * range as local ports when connecting to cluster. If {@link #withoutAdvancedShardAwareness()} @@ -1572,10 +1586,18 @@ public Configuration getConfiguration() { MetricsOptions metricsOptions = new MetricsOptions(metricsEnabled, jmxEnabled); + QueryOptions queryOptions = configurationBuilder.getQueryOptions(); + if (queryOptions == null) { + queryOptions = new QueryOptions(); + } + + queryOptions.setSchemaQueriesPaged(schemaQueriesPaged); + return configurationBuilder .withProtocolOptions(protocolOptions) .withMetricsOptions(metricsOptions) .withPolicies(policiesBuilder.build()) + .withQueryOptions(queryOptions) .build(); } diff --git a/driver-core/src/main/java/com/datastax/driver/core/Configuration.java b/driver-core/src/main/java/com/datastax/driver/core/Configuration.java index 3ef6922df1b..714d173bb81 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/Configuration.java +++ b/driver-core/src/main/java/com/datastax/driver/core/Configuration.java @@ -348,6 +348,10 @@ public Builder withDefaultKeyspace(String keyspace) { return this; } + public QueryOptions getQueryOptions() { + return queryOptions; + } + /** * Builds the final object from this builder. * diff --git a/driver-core/src/main/java/com/datastax/driver/core/QueryOptions.java b/driver-core/src/main/java/com/datastax/driver/core/QueryOptions.java index 556ee0a8a01..9fcd6a437d4 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/QueryOptions.java +++ b/driver-core/src/main/java/com/datastax/driver/core/QueryOptions.java @@ -70,6 +70,8 @@ public class QueryOptions { private volatile Cluster.Manager manager; private volatile boolean prepareOnAllHosts = true; + private volatile boolean schemaQueriesPaged = true; + /** * Creates a new {@link QueryOptions} instance using the {@link #DEFAULT_CONSISTENCY_LEVEL}, * {@link #DEFAULT_SERIAL_CONSISTENCY_LEVEL} and {@link #DEFAULT_FETCH_SIZE}. @@ -321,6 +323,26 @@ public boolean isMetadataEnabled() { return metadataEnabled; } + /** + * Toggle schema queries paging. + * + * @param enabled whether paging is enabled in schema queries. + * @return this {@code QueryOptions} instance. + */ + public QueryOptions setSchemaQueriesPaged(boolean enabled) { + this.schemaQueriesPaged = enabled; + return this; + } + + /** + * Whether schema queries are using paging. + * + * @return the value. + */ + public boolean isSchemaQueriesPaged() { + return schemaQueriesPaged; + } + /** * Sets the default window size in milliseconds used to debounce node list refresh requests. * @@ -486,18 +508,19 @@ public boolean equals(Object that) { QueryOptions other = (QueryOptions) that; return (this.consistency.equals(other.consistency) - && this.serialConsistency.equals(other.serialConsistency) - && this.fetchSize == other.fetchSize - && this.defaultIdempotence == other.defaultIdempotence - && this.metadataEnabled == other.metadataEnabled - && this.maxPendingRefreshNodeListRequests == other.maxPendingRefreshNodeListRequests - && this.maxPendingRefreshNodeRequests == other.maxPendingRefreshNodeRequests - && this.maxPendingRefreshSchemaRequests == other.maxPendingRefreshSchemaRequests - && this.refreshNodeListIntervalMillis == other.refreshNodeListIntervalMillis - && this.refreshNodeIntervalMillis == other.refreshNodeIntervalMillis - && this.refreshSchemaIntervalMillis == other.refreshSchemaIntervalMillis - && this.reprepareOnUp == other.reprepareOnUp - && this.prepareOnAllHosts == other.prepareOnAllHosts); + && this.serialConsistency.equals(other.serialConsistency) + && this.fetchSize == other.fetchSize + && this.defaultIdempotence == other.defaultIdempotence + && this.metadataEnabled == other.metadataEnabled + && this.maxPendingRefreshNodeListRequests == other.maxPendingRefreshNodeListRequests + && this.maxPendingRefreshNodeRequests == other.maxPendingRefreshNodeRequests + && this.maxPendingRefreshSchemaRequests == other.maxPendingRefreshSchemaRequests + && this.refreshNodeListIntervalMillis == other.refreshNodeListIntervalMillis + && this.refreshNodeIntervalMillis == other.refreshNodeIntervalMillis + && this.refreshSchemaIntervalMillis == other.refreshSchemaIntervalMillis + && this.reprepareOnUp == other.reprepareOnUp + && this.prepareOnAllHosts == other.prepareOnAllHosts) + && this.schemaQueriesPaged == other.schemaQueriesPaged; } @Override @@ -515,7 +538,8 @@ public int hashCode() { refreshNodeIntervalMillis, refreshSchemaIntervalMillis, reprepareOnUp, - prepareOnAllHosts); + prepareOnAllHosts, + schemaQueriesPaged); } public boolean isConsistencySet() { diff --git a/driver-core/src/main/java/com/datastax/driver/core/SchemaParser.java b/driver-core/src/main/java/com/datastax/driver/core/SchemaParser.java index f4bf3af0d3e..6354595b9e5 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/SchemaParser.java +++ b/driver-core/src/main/java/com/datastax/driver/core/SchemaParser.java @@ -1226,7 +1226,8 @@ void refresh( VersionNumber cassandraVersion) throws ConnectionException, BusyConnectionException, ExecutionException, InterruptedException { - if (targetType == null) { + if (targetType == null + && cluster.getConfiguration().getQueryOptions().isSchemaQueriesPaged()) { Map keyspaces = buildSchema(cluster, connection, cassandraVersion); Metadata metadata; From 99eedb4fa87805608ccde97dac98d059b85fc514 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wojciech=20B=C4=85czkowski?= Date: Wed, 23 Feb 2022 14:40:46 +0100 Subject: [PATCH 079/112] Add port collision mitigation to TestUtils class TestUtils.findAvailablePort() will now repick a port upon choosing one that has been returned recently. Similar logic added before to CCMBridge has been removed as now it is superseded by this solution. Fixes #99. --- .../com/datastax/driver/core/CCMBridge.java | 55 +------------------ .../com/datastax/driver/core/TestUtils.java | 25 +++++++-- 2 files changed, 24 insertions(+), 56 deletions(-) diff --git a/driver-core/src/test/java/com/datastax/driver/core/CCMBridge.java b/driver-core/src/test/java/com/datastax/driver/core/CCMBridge.java index c69af5439d7..63ecf6153f8 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/CCMBridge.java +++ b/driver-core/src/test/java/com/datastax/driver/core/CCMBridge.java @@ -31,7 +31,6 @@ import com.google.common.io.ByteStreams; import com.google.common.io.Closer; import com.google.common.io.Files; -import com.google.common.primitives.Ints; import java.io.BufferedReader; import java.io.File; import java.io.FileOutputStream; @@ -47,10 +46,8 @@ import java.net.UnknownHostException; import java.util.ArrayList; import java.util.Arrays; -import java.util.Collection; import java.util.Collections; import java.util.HashMap; -import java.util.HashSet; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; @@ -908,7 +905,6 @@ public static class Builder { public static final String RANDOM_PORT = "__RANDOM_PORT__"; private static final Pattern RANDOM_PORT_PATTERN = Pattern.compile(RANDOM_PORT); - private static final int RANDOMIZE_PORT_MAX_RETRIES = 20; private String ipPrefix = TestUtils.IP_PREFIX; int[] nodes = {1}; @@ -921,7 +917,6 @@ public static class Builder { private final Map cassandraConfiguration = Maps.newLinkedHashMap(); private final Map dseConfiguration = Maps.newLinkedHashMap(); private final Map workloads = new HashMap(); - private final HashSet selectedPorts = new HashSet(); private Builder() { cassandraConfiguration.put("start_rpc", false); @@ -1074,14 +1069,6 @@ public CCMBridge build() { cassandraVersion = this.version; } - selectedPorts.clear(); - // Preemptively banning every number that looks like explicitly provided port - selectedPorts.addAll(collectPorts(this.cassandraConfiguration)); - if (dseVersion != null) { - selectedPorts.addAll(collectPorts(this.dseConfiguration)); - } - selectedPorts.addAll(Ints.asList(jmxPorts)); - Map cassandraConfiguration = randomizePorts(this.cassandraConfiguration); int storagePort = Integer.parseInt(cassandraConfiguration.get("storage_port").toString()); int thriftPort = Integer.parseInt(cassandraConfiguration.get("rpc_port").toString()); @@ -1097,7 +1084,7 @@ public CCMBridge build() { int[] generatedJmxPorts = new int[numNodes]; for (int i = 0; i < numNodes; i++) { if (i >= jmxPorts.length) { - generatedJmxPorts[i] = selectAvailablePort(); + generatedJmxPorts[i] = TestUtils.findAvailablePort(); } else { generatedJmxPorts[i] = jmxPorts[i]; } @@ -1255,7 +1242,7 @@ private void updateNodeConf(CCMBridge ccm) { int nodesInDc = nodes[dc - 1]; for (int i = 0; i < nodesInDc; i++) { int jmxPort = ccm.jmxAddressOfNode(n).getPort(); - int debugPort = selectAvailablePort(); + int debugPort = TestUtils.findAvailablePort(); logger.trace( "Node {} in cluster {} using JMX port {} and debug port {}", n, @@ -1320,48 +1307,12 @@ private String randomizePorts(CharSequence str) { Matcher matcher = RANDOM_PORT_PATTERN.matcher(str); StringBuffer sb = new StringBuffer(); while (matcher.find()) { - matcher.appendReplacement(sb, Integer.toString(selectAvailablePort())); + matcher.appendReplacement(sb, Integer.toString(TestUtils.findAvailablePort())); } matcher.appendTail(sb); return sb.toString(); } - // Collects port numbers from configuration map. May catch some non-issue false positives. - private static Collection collectPorts(Map config) { - HashSet set = new HashSet(); - for (Object value : config.values()) { - try { - int result = Integer.parseInt(value.toString()); - if ((1 <= result) && (result <= 65535)) { - set.add(result); - } - } catch (NumberFormatException e) { - } - } - return set; - } - - private int findUnselectedPort() { - int port, cnt = 0; - do { - cnt++; - port = TestUtils.findAvailablePort(); - } while (selectedPorts.contains(port) && (cnt < RANDOMIZE_PORT_MAX_RETRIES)); - - if (cnt >= RANDOMIZE_PORT_MAX_RETRIES) { - throw new RuntimeException( - "Couldn't assign random ports. " - + "This may happen when you're trying to exhaust nearly all available ports."); - } - return port; - } - - private int selectAvailablePort() { - int port = findUnselectedPort(); - selectedPorts.add(port); - return port; - } - @Override @SuppressWarnings("SimplifiableIfStatement") public boolean equals(Object o) { diff --git a/driver-core/src/test/java/com/datastax/driver/core/TestUtils.java b/driver-core/src/test/java/com/datastax/driver/core/TestUtils.java index a33d4f7bdc4..79dd7a939f0 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/TestUtils.java +++ b/driver-core/src/test/java/com/datastax/driver/core/TestUtils.java @@ -70,6 +70,9 @@ /** A number of static fields/methods handy for tests. */ public abstract class TestUtils { + private static final Map recentPorts = new HashMap(); + private static final long RECENT_PORT_TTL = 4 * 60 * (long) (1e9); // nanoseconds + private static final int MAX_FIND_PORT_RETRIES = 20; public static final String IP_PREFIX; static { @@ -760,10 +763,22 @@ public static String generateIdentifier(String prefix) { public static synchronized int findAvailablePort() throws RuntimeException { ServerSocket ss = null; try { - // let the system pick an ephemeral port - ss = new ServerSocket(0); - ss.setReuseAddress(true); - return ss.getLocalPort(); + int retries = 0; + while (retries++ < MAX_FIND_PORT_RETRIES) { + // let the system pick an ephemeral port + ss = new ServerSocket(0); + ss.setReuseAddress(true); + long time = System.nanoTime(); + int port = ss.getLocalPort(); + Long last = recentPorts.get(port); + if (last == null || time - last > RECENT_PORT_TTL) { + recentPorts.put(port, time); + logger.info("Found available port: {}", port); + return port; + } else { + ss.close(); + } + } } catch (IOException e) { throw Throwables.propagate(e); } finally { @@ -775,6 +790,8 @@ public static synchronized int findAvailablePort() throws RuntimeException { } } } + throw new RuntimeException( + "Couldn't find available port. Max retries (" + MAX_FIND_PORT_RETRIES + ") exceeded."); } private static final Predicate PORT_IS_UP = From 1186ac99ecc8a31e8b8c7c3d8992e78d766284af Mon Sep 17 00:00:00 2001 From: Piotr Grabowski Date: Tue, 1 Mar 2022 12:14:59 +0100 Subject: [PATCH 080/112] [maven-release-plugin] prepare release 3.11.0.1 --- driver-core/pom.xml | 2 +- driver-dist/pom.xml | 2 +- driver-examples/pom.xml | 2 +- driver-extras/pom.xml | 2 +- driver-mapping/pom.xml | 2 +- driver-tests/osgi/pom.xml | 2 +- driver-tests/pom.xml | 2 +- driver-tests/shading/pom.xml | 2 +- driver-tests/shading/shaded/pom.xml | 2 +- driver-tests/shading/unshaded/pom.xml | 2 +- driver-tests/stress/pom.xml | 2 +- pom.xml | 4 ++-- 12 files changed, 13 insertions(+), 13 deletions(-) diff --git a/driver-core/pom.xml b/driver-core/pom.xml index 09fe209502a..ac7c128d4d4 100644 --- a/driver-core/pom.xml +++ b/driver-core/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-parent - 3.11.0.1-SNAPSHOT + 3.11.0.1 scylla-driver-core diff --git a/driver-dist/pom.xml b/driver-dist/pom.xml index c9d34e27f37..b41ea8bf0e5 100644 --- a/driver-dist/pom.xml +++ b/driver-dist/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-parent - 3.11.0.1-SNAPSHOT + 3.11.0.1 scylla-driver-dist diff --git a/driver-examples/pom.xml b/driver-examples/pom.xml index 84f11292643..b5b5fd0c8b5 100644 --- a/driver-examples/pom.xml +++ b/driver-examples/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-parent - 3.11.0.1-SNAPSHOT + 3.11.0.1 scylla-driver-examples diff --git a/driver-extras/pom.xml b/driver-extras/pom.xml index a4523406f3b..8aeb5f98fbf 100644 --- a/driver-extras/pom.xml +++ b/driver-extras/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-parent - 3.11.0.1-SNAPSHOT + 3.11.0.1 scylla-driver-extras diff --git a/driver-mapping/pom.xml b/driver-mapping/pom.xml index 5648738020f..a90ea88a60f 100644 --- a/driver-mapping/pom.xml +++ b/driver-mapping/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-parent - 3.11.0.1-SNAPSHOT + 3.11.0.1 scylla-driver-mapping diff --git a/driver-tests/osgi/pom.xml b/driver-tests/osgi/pom.xml index 08e94055d77..17d913b704c 100644 --- a/driver-tests/osgi/pom.xml +++ b/driver-tests/osgi/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-tests-parent - 3.11.0.1-SNAPSHOT + 3.11.0.1 scylla-driver-tests-osgi diff --git a/driver-tests/pom.xml b/driver-tests/pom.xml index ed87c69867a..b733df882a0 100644 --- a/driver-tests/pom.xml +++ b/driver-tests/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-parent - 3.11.0.1-SNAPSHOT + 3.11.0.1 scylla-driver-tests-parent diff --git a/driver-tests/shading/pom.xml b/driver-tests/shading/pom.xml index 772ad7a9fab..8518f517934 100644 --- a/driver-tests/shading/pom.xml +++ b/driver-tests/shading/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-tests-parent - 3.11.0.1-SNAPSHOT + 3.11.0.1 pom diff --git a/driver-tests/shading/shaded/pom.xml b/driver-tests/shading/shaded/pom.xml index 6835a4ba437..da60f40fc81 100644 --- a/driver-tests/shading/shaded/pom.xml +++ b/driver-tests/shading/shaded/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-tests-shading - 3.11.0.1-SNAPSHOT + 3.11.0.1 scylla-driver-tests-shading-shaded diff --git a/driver-tests/shading/unshaded/pom.xml b/driver-tests/shading/unshaded/pom.xml index 937616122e8..37b217e28a1 100644 --- a/driver-tests/shading/unshaded/pom.xml +++ b/driver-tests/shading/unshaded/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-tests-shading - 3.11.0.1-SNAPSHOT + 3.11.0.1 scylla-driver-tests-shading-unshaded diff --git a/driver-tests/stress/pom.xml b/driver-tests/stress/pom.xml index d3dc4d945ee..1ab75fa8035 100644 --- a/driver-tests/stress/pom.xml +++ b/driver-tests/stress/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-tests-parent - 3.11.0.1-SNAPSHOT + 3.11.0.1 scylla-driver-tests-stress diff --git a/pom.xml b/pom.xml index 1c16aa09ba6..f0ea5ab0cee 100644 --- a/pom.xml +++ b/pom.xml @@ -25,7 +25,7 @@ com.scylladb scylla-driver-parent - 3.11.0.1-SNAPSHOT + 3.11.0.1 pom Java Driver for Scylla and Apache Cassandra @@ -1172,7 +1172,7 @@ scm:git:https://github.com/scylladb/java-driver scm:git:https://github.com/scylladb/java-driver https://github.com/scylladb/java-driver - HEAD + 3.11.0.1 From 80ca77f1e4216cc82ab87603c59bb3dac0d04d94 Mon Sep 17 00:00:00 2001 From: Piotr Grabowski Date: Tue, 1 Mar 2022 12:15:08 +0100 Subject: [PATCH 081/112] [maven-release-plugin] prepare for next development iteration --- driver-core/pom.xml | 2 +- driver-dist/pom.xml | 2 +- driver-examples/pom.xml | 2 +- driver-extras/pom.xml | 2 +- driver-mapping/pom.xml | 2 +- driver-tests/osgi/pom.xml | 2 +- driver-tests/pom.xml | 2 +- driver-tests/shading/pom.xml | 2 +- driver-tests/shading/shaded/pom.xml | 2 +- driver-tests/shading/unshaded/pom.xml | 2 +- driver-tests/stress/pom.xml | 2 +- pom.xml | 4 ++-- 12 files changed, 13 insertions(+), 13 deletions(-) diff --git a/driver-core/pom.xml b/driver-core/pom.xml index ac7c128d4d4..8af912d0e3b 100644 --- a/driver-core/pom.xml +++ b/driver-core/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-parent - 3.11.0.1 + 3.11.0.2-SNAPSHOT scylla-driver-core diff --git a/driver-dist/pom.xml b/driver-dist/pom.xml index b41ea8bf0e5..60e3ba9340e 100644 --- a/driver-dist/pom.xml +++ b/driver-dist/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-parent - 3.11.0.1 + 3.11.0.2-SNAPSHOT scylla-driver-dist diff --git a/driver-examples/pom.xml b/driver-examples/pom.xml index b5b5fd0c8b5..2c0621f2d6e 100644 --- a/driver-examples/pom.xml +++ b/driver-examples/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-parent - 3.11.0.1 + 3.11.0.2-SNAPSHOT scylla-driver-examples diff --git a/driver-extras/pom.xml b/driver-extras/pom.xml index 8aeb5f98fbf..c77766134cd 100644 --- a/driver-extras/pom.xml +++ b/driver-extras/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-parent - 3.11.0.1 + 3.11.0.2-SNAPSHOT scylla-driver-extras diff --git a/driver-mapping/pom.xml b/driver-mapping/pom.xml index a90ea88a60f..5ef2e3d1c53 100644 --- a/driver-mapping/pom.xml +++ b/driver-mapping/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-parent - 3.11.0.1 + 3.11.0.2-SNAPSHOT scylla-driver-mapping diff --git a/driver-tests/osgi/pom.xml b/driver-tests/osgi/pom.xml index 17d913b704c..da733930f2e 100644 --- a/driver-tests/osgi/pom.xml +++ b/driver-tests/osgi/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-tests-parent - 3.11.0.1 + 3.11.0.2-SNAPSHOT scylla-driver-tests-osgi diff --git a/driver-tests/pom.xml b/driver-tests/pom.xml index b733df882a0..08a46ef145d 100644 --- a/driver-tests/pom.xml +++ b/driver-tests/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-parent - 3.11.0.1 + 3.11.0.2-SNAPSHOT scylla-driver-tests-parent diff --git a/driver-tests/shading/pom.xml b/driver-tests/shading/pom.xml index 8518f517934..477cd4de9c8 100644 --- a/driver-tests/shading/pom.xml +++ b/driver-tests/shading/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-tests-parent - 3.11.0.1 + 3.11.0.2-SNAPSHOT pom diff --git a/driver-tests/shading/shaded/pom.xml b/driver-tests/shading/shaded/pom.xml index da60f40fc81..c381c39a701 100644 --- a/driver-tests/shading/shaded/pom.xml +++ b/driver-tests/shading/shaded/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-tests-shading - 3.11.0.1 + 3.11.0.2-SNAPSHOT scylla-driver-tests-shading-shaded diff --git a/driver-tests/shading/unshaded/pom.xml b/driver-tests/shading/unshaded/pom.xml index 37b217e28a1..c52c56e2b0b 100644 --- a/driver-tests/shading/unshaded/pom.xml +++ b/driver-tests/shading/unshaded/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-tests-shading - 3.11.0.1 + 3.11.0.2-SNAPSHOT scylla-driver-tests-shading-unshaded diff --git a/driver-tests/stress/pom.xml b/driver-tests/stress/pom.xml index 1ab75fa8035..941ca9eb973 100644 --- a/driver-tests/stress/pom.xml +++ b/driver-tests/stress/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-tests-parent - 3.11.0.1 + 3.11.0.2-SNAPSHOT scylla-driver-tests-stress diff --git a/pom.xml b/pom.xml index f0ea5ab0cee..2ac3e70e82f 100644 --- a/pom.xml +++ b/pom.xml @@ -25,7 +25,7 @@ com.scylladb scylla-driver-parent - 3.11.0.1 + 3.11.0.2-SNAPSHOT pom Java Driver for Scylla and Apache Cassandra @@ -1172,7 +1172,7 @@ scm:git:https://github.com/scylladb/java-driver scm:git:https://github.com/scylladb/java-driver https://github.com/scylladb/java-driver - 3.11.0.1 + HEAD From d4a604445926ff78d5c26c0381084b58ca589863 Mon Sep 17 00:00:00 2001 From: Bret McGuire Date: Tue, 26 Apr 2022 09:23:04 -0500 Subject: [PATCH 082/112] JAVA-2984: Upgrade jackson-databind to latest 2.7.x (#1593) --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 267313bed7f..445b2595641 100644 --- a/pom.xml +++ b/pom.xml @@ -59,7 +59,7 @@ 2.1.10 2.8.11 - 2.7.9.3 + 2.7.9.7 2.9.9 1.0 1.0.4 From 19a9cf80503e16f5ae5a271af3021607ec2bb97f Mon Sep 17 00:00:00 2001 From: Bret McGuire Date: Tue, 26 Apr 2022 12:19:18 -0500 Subject: [PATCH 083/112] JAVA-3008: Upgrade to Netty 4.1.75 to address CVEs (3.x) (#1594) --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 445b2595641..753ebc1da55 100644 --- a/pom.xml +++ b/pom.xml @@ -51,8 +51,8 @@ 1.7.25 1.7.25 19.0 - 4.0.56.Final - 2.0.7.Final + 4.1.75.Final + 2.0.50.Final 3.2.2 1.1.2.6 1.4.1 From 20a210533c31094af08455a03242fdc12671fea3 Mon Sep 17 00:00:00 2001 From: Bret McGuire Date: Thu, 28 Apr 2022 14:12:33 -0500 Subject: [PATCH 084/112] Update version in docs to 3.11.2 --- README.md | 12 ++++++------ changelog/README.md | 5 +++++ faq/README.md | 2 +- manual/compression/README.md | 2 +- manual/custom_codecs/extras/README.md | 2 +- manual/metrics/README.md | 2 +- manual/object_mapper/README.md | 2 +- manual/shaded_jar/README.md | 6 +++--- pom.xml | 2 +- 9 files changed, 20 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 97c5067c979..ab93de8f62e 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ for the development version and that some features described here might not yet have been released. You can find the documentation for the latest version through the [Java driver docs](http://docs.datastax.com/en/developer/java-driver/3.11/index.html) or via the release tags, -[e.g. 3.11.1](https://github.com/datastax/java-driver/tree/3.11.1).* +[e.g. 3.11.2](https://github.com/datastax/java-driver/tree/3.11.2).* A modern, [feature-rich](manual/) and highly tunable Java client library for Apache Cassandra (2.1+) and using exclusively Cassandra's binary protocol @@ -65,7 +65,7 @@ using DataStax Enterprise, install the [DataStax Enterprise Java driver][dse-dri com.datastax.cassandra cassandra-driver-core - 3.11.1 + 3.11.2 ``` @@ -75,7 +75,7 @@ Note that the object mapper is published as a separate artifact: com.datastax.cassandra cassandra-driver-mapping - 3.11.1 + 3.11.2 ``` @@ -85,7 +85,7 @@ The 'extras' module is also published as a separate artifact: com.datastax.cassandra cassandra-driver-extras - 3.11.1 + 3.11.2 ``` @@ -94,12 +94,12 @@ We also provide a [shaded JAR](manual/shaded_jar/) to avoid the explicit dependency to Netty. If you can't use a dependency management tool, a -[binary tarball](http://downloads.datastax.com/java-driver/cassandra-java-driver-3.11.1.tar.gz) +[binary tarball](http://downloads.datastax.com/java-driver/cassandra-java-driver-3.11.2.tar.gz) is available for download. ## Compatibility -The Java client driver 3.11.1 ([branch 3.x](https://github.com/datastax/java-driver/tree/3.x)) is compatible with Apache +The Java client driver 3.11.2 ([branch 3.x](https://github.com/datastax/java-driver/tree/3.x)) is compatible with Apache Cassandra 2.1, 2.2 and 3.0+ (see [this page](http://docs.datastax.com/en/developer/java-driver/3.11/manual/native_protocol/) for the most up-to-date compatibility information). diff --git a/changelog/README.md b/changelog/README.md index dc14e0f5d76..017332aa7d2 100644 --- a/changelog/README.md +++ b/changelog/README.md @@ -5,6 +5,11 @@ 3.x versions get published. --> +## 3.11.2 +- [improvement] JAVA-3008: Upgrade Netty to 4.1.75, 3.x edition +- [improvement] JAVA-2984: Upgrade Jackson to resolve high-priority CVEs + + ## 3.11.1 - [bug] JAVA-2967: Support native transport peer information for DSE 6.8. - [bug] JAVA-2976: Support missing protocol v5 error codes CAS_WRITE_UNKNOWN, CDC_WRITE_FAILURE. diff --git a/faq/README.md b/faq/README.md index ea48a598a23..f2481fd5807 100644 --- a/faq/README.md +++ b/faq/README.md @@ -289,7 +289,7 @@ version is available, you may want to reach out to the maintainer of that tool t an update with compatibility to this driver version. -[Blobs.java]: https://github.com/datastax/java-driver/tree/3.11.1/driver-examples/src/main/java/com/datastax/driver/examples/datatypes/Blobs.java +[Blobs.java]: https://github.com/datastax/java-driver/tree/3.11.2/driver-examples/src/main/java/com/datastax/driver/examples/datatypes/Blobs.java [CASSANDRA-7304]: https://issues.apache.org/jira/browse/CASSANDRA-7304 [Parameters and Binding]: ../manual/statements/prepared/#parameters-and-binding [Mapper options]: ../manual/object_mapper/using/#mapper-options diff --git a/manual/compression/README.md b/manual/compression/README.md index fb39e6771dd..ff4358dacd4 100644 --- a/manual/compression/README.md +++ b/manual/compression/README.md @@ -88,4 +88,4 @@ cluster = Cluster.builder() .build(); ``` -[pom]: https://repo1.maven.org/maven2/com/datastax/cassandra/cassandra-driver-parent/3.11.1/cassandra-driver-parent-3.11.1.pom +[pom]: https://repo1.maven.org/maven2/com/datastax/cassandra/cassandra-driver-parent/3.11.2/cassandra-driver-parent-3.11.2.pom diff --git a/manual/custom_codecs/extras/README.md b/manual/custom_codecs/extras/README.md index ec0f56a17e9..91c5e665957 100644 --- a/manual/custom_codecs/extras/README.md +++ b/manual/custom_codecs/extras/README.md @@ -10,7 +10,7 @@ The module is published as a separate Maven artifact: com.datastax.cassandra cassandra-driver-extras - 3.11.1 + 3.11.2 ``` diff --git a/manual/metrics/README.md b/manual/metrics/README.md index 5ad2a8084f6..2b005364f98 100644 --- a/manual/metrics/README.md +++ b/manual/metrics/README.md @@ -38,7 +38,7 @@ To do this in a maven project: com.datastax.cassandra cassandra-driver-core - 3.11.1 + 3.11.2 io.dropwizard.metrics diff --git a/manual/object_mapper/README.md b/manual/object_mapper/README.md index fd8ccad89d9..7e542b0d076 100644 --- a/manual/object_mapper/README.md +++ b/manual/object_mapper/README.md @@ -11,7 +11,7 @@ The mapper is published as a separate Maven artifact: com.datastax.cassandra cassandra-driver-mapping - 3.11.1 + 3.11.2 ``` diff --git a/manual/shaded_jar/README.md b/manual/shaded_jar/README.md index ee25d56f0d1..d3063df685f 100644 --- a/manual/shaded_jar/README.md +++ b/manual/shaded_jar/README.md @@ -12,7 +12,7 @@ package name: com.datastax.cassandra cassandra-driver-core - 3.11.1 + 3.11.2 shaded @@ -32,7 +32,7 @@ non-shaded JAR: com.datastax.cassandra cassandra-driver-core - 3.11.1 + 3.11.2 shaded @@ -44,7 +44,7 @@ non-shaded JAR: com.datastax.cassandra cassandra-driver-mapping - 3.11.1 + 3.11.2 com.datastax.cassandra diff --git a/pom.xml b/pom.xml index 753ebc1da55..db4a6180b61 100644 --- a/pom.xml +++ b/pom.xml @@ -641,7 +641,7 @@ - 3.11.0 + 3.11.1 ../clirr-ignores.xml com/datastax/shaded/** From 170b567679093eee213fce7eb25fd8650882d29c Mon Sep 17 00:00:00 2001 From: Piotr Grabowski Date: Fri, 29 Apr 2022 15:42:50 +0200 Subject: [PATCH 085/112] Remove not ours GitHub Actions workflow Remove GitHub Actions workflow fetched from upstream DataStax repo. It wouldn't work, as it relies on secret (secrets.FOSSA_PUSH_ONLY_API_KEY) we don't have. --- .github/workflows/dep-lic-scan.yaml | 23 ----------------------- 1 file changed, 23 deletions(-) delete mode 100644 .github/workflows/dep-lic-scan.yaml diff --git a/.github/workflows/dep-lic-scan.yaml b/.github/workflows/dep-lic-scan.yaml deleted file mode 100644 index afb197bf137..00000000000 --- a/.github/workflows/dep-lic-scan.yaml +++ /dev/null @@ -1,23 +0,0 @@ -name: Dependency and License Scan -on: - push: - branches: - - '4.x' - - '3.x' - paths-ignore: - - 'manual/**' - - 'faq/**' - - 'upgrade_guide/**' - - 'changelog/**' -jobs: - scan-repo: - runs-on: ubuntu-latest - steps: - - name: Check out code - uses: actions/checkout@v2 - - name: Install Fossa CLI - run: | - curl -H 'Cache-Control: no-cache' https://raw.githubusercontent.com/fossas/fossa-cli/master/install-latest.sh | bash -s -- -b . - - name: Scan for dependencies and licenses - run: | - FOSSA_API_KEY=${{ secrets.FOSSA_PUSH_ONLY_API_KEY }} ./fossa analyze From 9ae95b9dc2c794e4c83aa0e912733e1038a81e67 Mon Sep 17 00:00:00 2001 From: Piotr Grabowski Date: Fri, 29 Apr 2022 15:45:06 +0200 Subject: [PATCH 086/112] Fix disabling of test This is a bug present in the upstream repository. The test was supposed to be turned off, however they disabled it in a wrong way - using a JUnit annotation, but the tests are ran with TestNG. Therefore, it has to be disabled the TestNG way, not JUnit way. --- .../java/com/datastax/driver/core/ControlConnectionTest.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/driver-core/src/test/java/com/datastax/driver/core/ControlConnectionTest.java b/driver-core/src/test/java/com/datastax/driver/core/ControlConnectionTest.java index 83f54e7861a..307f6d9878d 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/ControlConnectionTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/ControlConnectionTest.java @@ -52,7 +52,6 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import org.apache.log4j.Level; -import org.junit.Ignore; import org.scassandra.http.client.PrimingClient; import org.scassandra.http.client.PrimingRequest; import org.scassandra.http.client.Result; @@ -614,9 +613,8 @@ public void should_extract_hosts_using_native_transport_address_port_from_peers( * be selected if the Cluster is created with SSL support (i.e. if {@link * Cluster.Builder#withSSL()} is used). */ - @Test(groups = "short") + @Test(groups = "short", enabled = false /* Requires SSL support in scassandra */) @CCMConfig(createCcm = false) - @Ignore("Requires SSL support in scassandra") public void should_extract_hosts_using_native_transport_address_port_ssl_from_peers() throws UnknownHostException { From c028a226b29b8764c349d249293b598ec9306a1b Mon Sep 17 00:00:00 2001 From: Piotr Grabowski Date: Fri, 29 Apr 2022 15:46:12 +0200 Subject: [PATCH 087/112] Fix expected error msg in ControlConnectionTest Fix the formatting of expected error message in ControlConnectionTest. This was a bug from the upstream repository. --- .../driver/core/ControlConnectionTest.java | 35 +++++++++++++++---- 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/driver-core/src/test/java/com/datastax/driver/core/ControlConnectionTest.java b/driver-core/src/test/java/com/datastax/driver/core/ControlConnectionTest.java index 307f6d9878d..225f1bd253d 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/ControlConnectionTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/ControlConnectionTest.java @@ -42,6 +42,7 @@ import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.UnknownHostException; +import java.util.Arrays; import java.util.Collection; import java.util.HashSet; import java.util.Iterator; @@ -299,7 +300,9 @@ static void run_with_null_peer_info(String columns, boolean expectPeer2, boolean } StringBuilder columnDataBuilder = new StringBuilder(); - for (String column : columns.split(",")) { + String[] splitColumns = columns.split(","); + Set splitColumnsSet = new HashSet(Arrays.asList(splitColumns)); + for (String column : splitColumns) { builder = builder.forcePeerInfo(1, 2, column, null); columnDataBuilder.append(String.format("%s=null, ", column)); } @@ -334,11 +337,31 @@ static void run_with_null_peer_info(String columns, boolean expectPeer2, boolean cluster.init(); InetAddress node2Address = scassandraCluster.address(2).getAddress(); - String expectedError = - String.format( - "Found invalid row in system.peers: [peer=%s, %s]. " - + "This is likely a gossip or snitch issue, this host will be ignored.", - node2Address, columnData); + String expectedError; + // Based on ControlConnection::formatInvalidPeer + if (withPeersV2) { + expectedError = + String.format( + "Found invalid row in system.peers: [peer=%s, %s]. " + + "This is likely a gossip or snitch issue, this host will be ignored.", + node2Address, columnData); + } else { + expectedError = + String.format( + "Found invalid row in system.peers: [peer=%s, %s%s%s%s]. " + + "This is likely a gossip or snitch issue, this host will be ignored.", + node2Address, + !splitColumnsSet.contains("native_transport_address") + ? "missing native_transport_address, " + : "", + !splitColumnsSet.contains("native_transport_port") + ? "missing native_transport_port, " + : "", + !splitColumnsSet.contains("native_transport_port_ssl") + ? "missing native_transport_port_ssl, " + : "", + columnData); + } String log = logs.get(); // then: A peer with a null rack should not show up in host metadata, unless allowed via // system property. From 895abd4076a3f1c972c81774e7c1336ed7574fe3 Mon Sep 17 00:00:00 2001 From: Piotr Grabowski Date: Fri, 29 Apr 2022 16:41:57 +0200 Subject: [PATCH 088/112] Fix message check in ExceptionsScassandraTest Fix message check in ExceptionsScassandraTest which was too strict. The actual error message contains additional information "In case this was generated during read repair, the consistency level is not representative of the actual consistency." at the end. Other places in this file check it using contains(). --- .../driver/core/exceptions/ExceptionsScassandraTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/driver-core/src/test/java/com/datastax/driver/core/exceptions/ExceptionsScassandraTest.java b/driver-core/src/test/java/com/datastax/driver/core/exceptions/ExceptionsScassandraTest.java index 1e9b6cbc1ff..d7d6b3a58ca 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/exceptions/ExceptionsScassandraTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/exceptions/ExceptionsScassandraTest.java @@ -77,7 +77,7 @@ public void should_throw_proper_read_timeout_exception() { fail("expected a ReadTimeoutException"); } catch (ReadTimeoutException e) { assertThat(e.getMessage()) - .isEqualTo( + .contains( "Cassandra timeout during read query at consistency LOCAL_ONE (1 responses were required but only 0 replica responded)"); assertThat(e.getConsistencyLevel()).isEqualTo(LOCAL_ONE); assertThat(e.getReceivedAcknowledgements()).isEqualTo(0); From e230eec1aee81d60935f0111b04f1c520c2171e1 Mon Sep 17 00:00:00 2001 From: Piotr Grabowski Date: Mon, 2 May 2022 17:40:03 +0200 Subject: [PATCH 089/112] [maven-release-plugin] prepare release 3.11.2.0 --- driver-core/pom.xml | 2 +- driver-dist/pom.xml | 2 +- driver-examples/pom.xml | 2 +- driver-extras/pom.xml | 2 +- driver-mapping/pom.xml | 2 +- driver-tests/osgi/pom.xml | 2 +- driver-tests/pom.xml | 2 +- driver-tests/shading/pom.xml | 2 +- driver-tests/shading/shaded/pom.xml | 2 +- driver-tests/shading/unshaded/pom.xml | 2 +- driver-tests/stress/pom.xml | 2 +- pom.xml | 4 ++-- 12 files changed, 13 insertions(+), 13 deletions(-) diff --git a/driver-core/pom.xml b/driver-core/pom.xml index fb2f7c174c7..9ec04948047 100644 --- a/driver-core/pom.xml +++ b/driver-core/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-parent - 3.11.2.0-SNAPSHOT + 3.11.2.0 scylla-driver-core diff --git a/driver-dist/pom.xml b/driver-dist/pom.xml index c0569972b89..3db61bdc5ea 100644 --- a/driver-dist/pom.xml +++ b/driver-dist/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-parent - 3.11.2.0-SNAPSHOT + 3.11.2.0 scylla-driver-dist diff --git a/driver-examples/pom.xml b/driver-examples/pom.xml index 54534ba091f..8afcd6f945d 100644 --- a/driver-examples/pom.xml +++ b/driver-examples/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-parent - 3.11.2.0-SNAPSHOT + 3.11.2.0 scylla-driver-examples diff --git a/driver-extras/pom.xml b/driver-extras/pom.xml index 94e609aa1c2..da4f469c77a 100644 --- a/driver-extras/pom.xml +++ b/driver-extras/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-parent - 3.11.2.0-SNAPSHOT + 3.11.2.0 scylla-driver-extras diff --git a/driver-mapping/pom.xml b/driver-mapping/pom.xml index 8b78f3ada7d..adc3f375c7e 100644 --- a/driver-mapping/pom.xml +++ b/driver-mapping/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-parent - 3.11.2.0-SNAPSHOT + 3.11.2.0 scylla-driver-mapping diff --git a/driver-tests/osgi/pom.xml b/driver-tests/osgi/pom.xml index 0dd9e171cdb..2e22de04f15 100644 --- a/driver-tests/osgi/pom.xml +++ b/driver-tests/osgi/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-tests-parent - 3.11.2.0-SNAPSHOT + 3.11.2.0 scylla-driver-tests-osgi diff --git a/driver-tests/pom.xml b/driver-tests/pom.xml index d2761f496db..066b88540ac 100644 --- a/driver-tests/pom.xml +++ b/driver-tests/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-parent - 3.11.2.0-SNAPSHOT + 3.11.2.0 scylla-driver-tests-parent diff --git a/driver-tests/shading/pom.xml b/driver-tests/shading/pom.xml index 18c90d7dff5..a7765f7cc5e 100644 --- a/driver-tests/shading/pom.xml +++ b/driver-tests/shading/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-tests-parent - 3.11.2.0-SNAPSHOT + 3.11.2.0 pom diff --git a/driver-tests/shading/shaded/pom.xml b/driver-tests/shading/shaded/pom.xml index 513dc5b8874..a9ff21c576d 100644 --- a/driver-tests/shading/shaded/pom.xml +++ b/driver-tests/shading/shaded/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-tests-shading - 3.11.2.0-SNAPSHOT + 3.11.2.0 scylla-driver-tests-shading-shaded diff --git a/driver-tests/shading/unshaded/pom.xml b/driver-tests/shading/unshaded/pom.xml index 5f666756972..f86d49e6271 100644 --- a/driver-tests/shading/unshaded/pom.xml +++ b/driver-tests/shading/unshaded/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-tests-shading - 3.11.2.0-SNAPSHOT + 3.11.2.0 scylla-driver-tests-shading-unshaded diff --git a/driver-tests/stress/pom.xml b/driver-tests/stress/pom.xml index 3859fcf87f3..28b9b8a71d8 100644 --- a/driver-tests/stress/pom.xml +++ b/driver-tests/stress/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-tests-parent - 3.11.2.0-SNAPSHOT + 3.11.2.0 scylla-driver-tests-stress diff --git a/pom.xml b/pom.xml index 9e954af82ec..c11e98fd990 100644 --- a/pom.xml +++ b/pom.xml @@ -25,7 +25,7 @@ com.scylladb scylla-driver-parent - 3.11.2.0-SNAPSHOT + 3.11.2.0 pom Java Driver for Scylla and Apache Cassandra @@ -1172,7 +1172,7 @@ scm:git:https://github.com/scylladb/java-driver scm:git:https://github.com/scylladb/java-driver https://github.com/scylladb/java-driver - HEAD + 3.11.2.0 From 96a9aeb3a314bdbea029247a360ca6c8d9c3669b Mon Sep 17 00:00:00 2001 From: Piotr Grabowski Date: Mon, 2 May 2022 17:40:13 +0200 Subject: [PATCH 090/112] [maven-release-plugin] prepare for next development iteration --- driver-core/pom.xml | 2 +- driver-dist/pom.xml | 2 +- driver-examples/pom.xml | 2 +- driver-extras/pom.xml | 2 +- driver-mapping/pom.xml | 2 +- driver-tests/osgi/pom.xml | 2 +- driver-tests/pom.xml | 2 +- driver-tests/shading/pom.xml | 2 +- driver-tests/shading/shaded/pom.xml | 2 +- driver-tests/shading/unshaded/pom.xml | 2 +- driver-tests/stress/pom.xml | 2 +- pom.xml | 4 ++-- 12 files changed, 13 insertions(+), 13 deletions(-) diff --git a/driver-core/pom.xml b/driver-core/pom.xml index 9ec04948047..5fe304881b3 100644 --- a/driver-core/pom.xml +++ b/driver-core/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-parent - 3.11.2.0 + 3.11.2.1-SNAPSHOT scylla-driver-core diff --git a/driver-dist/pom.xml b/driver-dist/pom.xml index 3db61bdc5ea..ed44113afd1 100644 --- a/driver-dist/pom.xml +++ b/driver-dist/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-parent - 3.11.2.0 + 3.11.2.1-SNAPSHOT scylla-driver-dist diff --git a/driver-examples/pom.xml b/driver-examples/pom.xml index 8afcd6f945d..5f28572501b 100644 --- a/driver-examples/pom.xml +++ b/driver-examples/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-parent - 3.11.2.0 + 3.11.2.1-SNAPSHOT scylla-driver-examples diff --git a/driver-extras/pom.xml b/driver-extras/pom.xml index da4f469c77a..b7c812d36f9 100644 --- a/driver-extras/pom.xml +++ b/driver-extras/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-parent - 3.11.2.0 + 3.11.2.1-SNAPSHOT scylla-driver-extras diff --git a/driver-mapping/pom.xml b/driver-mapping/pom.xml index adc3f375c7e..52e6bb839e0 100644 --- a/driver-mapping/pom.xml +++ b/driver-mapping/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-parent - 3.11.2.0 + 3.11.2.1-SNAPSHOT scylla-driver-mapping diff --git a/driver-tests/osgi/pom.xml b/driver-tests/osgi/pom.xml index 2e22de04f15..b25dc57a487 100644 --- a/driver-tests/osgi/pom.xml +++ b/driver-tests/osgi/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-tests-parent - 3.11.2.0 + 3.11.2.1-SNAPSHOT scylla-driver-tests-osgi diff --git a/driver-tests/pom.xml b/driver-tests/pom.xml index 066b88540ac..a1a86ffa249 100644 --- a/driver-tests/pom.xml +++ b/driver-tests/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-parent - 3.11.2.0 + 3.11.2.1-SNAPSHOT scylla-driver-tests-parent diff --git a/driver-tests/shading/pom.xml b/driver-tests/shading/pom.xml index a7765f7cc5e..e83da598a93 100644 --- a/driver-tests/shading/pom.xml +++ b/driver-tests/shading/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-tests-parent - 3.11.2.0 + 3.11.2.1-SNAPSHOT pom diff --git a/driver-tests/shading/shaded/pom.xml b/driver-tests/shading/shaded/pom.xml index a9ff21c576d..a8e5e7f259c 100644 --- a/driver-tests/shading/shaded/pom.xml +++ b/driver-tests/shading/shaded/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-tests-shading - 3.11.2.0 + 3.11.2.1-SNAPSHOT scylla-driver-tests-shading-shaded diff --git a/driver-tests/shading/unshaded/pom.xml b/driver-tests/shading/unshaded/pom.xml index f86d49e6271..8b05ccd8d27 100644 --- a/driver-tests/shading/unshaded/pom.xml +++ b/driver-tests/shading/unshaded/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-tests-shading - 3.11.2.0 + 3.11.2.1-SNAPSHOT scylla-driver-tests-shading-unshaded diff --git a/driver-tests/stress/pom.xml b/driver-tests/stress/pom.xml index 28b9b8a71d8..05358ae8f58 100644 --- a/driver-tests/stress/pom.xml +++ b/driver-tests/stress/pom.xml @@ -26,7 +26,7 @@ com.scylladb scylla-driver-tests-parent - 3.11.2.0 + 3.11.2.1-SNAPSHOT scylla-driver-tests-stress diff --git a/pom.xml b/pom.xml index c11e98fd990..caff9391bd6 100644 --- a/pom.xml +++ b/pom.xml @@ -25,7 +25,7 @@ com.scylladb scylla-driver-parent - 3.11.2.0 + 3.11.2.1-SNAPSHOT pom Java Driver for Scylla and Apache Cassandra @@ -1172,7 +1172,7 @@ scm:git:https://github.com/scylladb/java-driver scm:git:https://github.com/scylladb/java-driver https://github.com/scylladb/java-driver - 3.11.2.0 + HEAD From cdaf75a6cf54b91f3f795aa509cf836166dad1e2 Mon Sep 17 00:00:00 2001 From: Piotr Grabowski Date: Thu, 12 May 2022 13:25:07 +0200 Subject: [PATCH 091/112] Pin specific version of Jinja2 Before this change, the docs failed to build with the following error: ImportError: cannot import name 'environmentfilter' from 'jinja2' A fix to this problem is to explicitly pin Jinja2 version. --- docs/pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/pyproject.toml b/docs/pyproject.toml index 170bdbf9364..d6b89004e90 100644 --- a/docs/pyproject.toml +++ b/docs/pyproject.toml @@ -14,6 +14,7 @@ sphinx-sitemap = "2.1.0" sphinx-autobuild = "0.7.1" Sphinx = "2.4.4" sphinx-multiversion-scylla = "~0.2.6" +Jinja2 = "<3.1" [tool.poetry.dev-dependencies] pytest = "5.2" From 34722c943e28d29e63cfa99855f42086f85f1ac4 Mon Sep 17 00:00:00 2001 From: Piotr Grabowski Date: Thu, 12 May 2022 13:27:23 +0200 Subject: [PATCH 092/112] Add scylla-3.11.0.x and scylla-3.11.2.x to docs Add branches scylla-3.11.0.x and scylla-3.11.2.x to a list of whitelisted branches to generate documentation for. scylla-3.x is removed, as the documentation generator fails to compare 4-component version numbers (X.Y.Z.x) with 2-component version number (3.x). --- docs/source/conf.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index 71dbea88832..20f86d46d3c 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -117,11 +117,11 @@ def setup(app): TAGS = [] smv_tag_whitelist = multiversion_regex_builder(TAGS) # Whitelist pattern for branches (set to None to ignore all branches) -BRANCHES = ['scylla-3.x', 'scylla-3.7.2.x', 'scylla-3.10.2.x'] +BRANCHES = ['scylla-3.7.2.x', 'scylla-3.10.2.x', 'scylla-3.11.0.x', 'scylla-3.11.2.x'] smv_branch_whitelist = multiversion_regex_builder(BRANCHES) # Defines which version is considered to be the latest stable version. # Must be listed in smv_tag_whitelist or smv_branch_whitelist. -smv_latest_version = 'scylla-3.10.2.x' +smv_latest_version = 'scylla-3.11.2.x' smv_rename_latest_version = 'stable' # Whitelist pattern for remotes (set to None to use local branches only) smv_remote_whitelist = r"^origin$" From 89cb49aa4a6f447c2a73c3247cb2a64c1c9f7f82 Mon Sep 17 00:00:00 2001 From: David Garcia Date: Fri, 20 May 2022 14:36:56 +0100 Subject: [PATCH 093/112] Add api docs dynamic slug Fix http case --- docs/source/conf.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index 20f86d46d3c..b4974773f4a 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -1,9 +1,7 @@ # -*- coding: utf-8 -*- import os -import sys from datetime import date -import yaml import re from docutils import nodes from sphinx.util import logging @@ -75,7 +73,8 @@ def setup(app): app.add_transform(AutoStructify) # Replace DataStax links - replacements = {r'https://docs.datastax.com/en/drivers/java\/(.*?)\/': "https://java-driver.docs.scylladb.com/stable/api/"} + current_slug = os.getenv("SPHINX_MULTIVERSION_NAME", "stable") + replacements = {r'docs.datastax.com/en/drivers/java\/(.*?)\/': "java-driver.docs.scylladb.com/" + current_slug + "/api/"} app.add_config_value('replacements', replacements, True) app.connect('source-read', replace_relative_links) From 8feeb205fcf163d9a45dbe884fc353ef5a1a4535 Mon Sep 17 00:00:00 2001 From: David Garcia Date: Tue, 17 May 2022 11:26:49 +0100 Subject: [PATCH 094/112] docs: update theme 1.2 docs: update dynamic slug Add back index.md Move custom slug to a separate PR Fix typo --- .github/workflows/docs-pages.yaml | 41 ++++++++++++++ .github/workflows/docs-pages@v2.yaml | 37 ------------- .github/workflows/docs-pr.yaml | 36 ++++++++++++ .github/workflows/docs-pr@v1.yaml | 29 ---------- README-dev.md | 17 ++++++ README-dev.rst | 68 ----------------------- docs.yaml | 67 ----------------------- docs/Makefile | 82 +++++++++++++++++----------- docs/_utils/javadoc.sh | 4 +- docs/_utils/setup.sh | 11 ---- docs/pyproject.toml | 16 ++---- docs/source/conf.py | 31 ++++++++--- 12 files changed, 174 insertions(+), 265 deletions(-) create mode 100644 .github/workflows/docs-pages.yaml delete mode 100644 .github/workflows/docs-pages@v2.yaml create mode 100644 .github/workflows/docs-pr.yaml delete mode 100644 .github/workflows/docs-pr@v1.yaml create mode 100644 README-dev.md delete mode 100644 README-dev.rst delete mode 100644 docs.yaml delete mode 100755 docs/_utils/setup.sh diff --git a/.github/workflows/docs-pages.yaml b/.github/workflows/docs-pages.yaml new file mode 100644 index 00000000000..fc52bb0f22f --- /dev/null +++ b/.github/workflows/docs-pages.yaml @@ -0,0 +1,41 @@ +name: "Docs / Publish" +# For more information, +# see https://sphinx-theme.scylladb.com/stable/deployment/production.html#available-workflows + +on: + push: + branches: + - scylla-3.x + paths: + - 'docs/**' + - 'faq/**' + - 'manual/**' + - 'changelog/**' + - 'upgrade_guide/**' + workflow_dispatch: + +jobs: + release: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + persist-credentials: false + fetch-depth: 0 + - name: Set up Python + uses: actions/setup-python@v3 + with: + python-version: 3.7 + - name: Set up JDK 1.8 + uses: actions/setup-java@v1 + with: + java-version: 1.8 + - name: Set up env + run: make -C docs setupenv + - name: Build docs + run: make -C docs multiversion + - name: Deploy docs to GitHub Pages + run: ./docs/_utils/deploy.sh + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/docs-pages@v2.yaml b/.github/workflows/docs-pages@v2.yaml deleted file mode 100644 index 64e135149a2..00000000000 --- a/.github/workflows/docs-pages@v2.yaml +++ /dev/null @@ -1,37 +0,0 @@ -name: "Docs / Publish" - -on: - push: - branches: - - scylla-3.x - paths: - - 'docs/**' - - 'faq/**' - - 'manual/**' - - 'changelog/**' - - 'upgrade_guide/**' - workflow_dispatch: - -jobs: - release: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v2 - with: - persist-credentials: false - fetch-depth: 0 - - name: Set up Python - uses: actions/setup-python@v1 - with: - python-version: 3.7 - - name: Set up JDK 1.8 - uses: actions/setup-java@v1 - with: - java-version: 1.8 - - name: Build docs - run: make -C docs multiversion - - name: Deploy - run: ./docs/_utils/deploy.sh - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/docs-pr.yaml b/.github/workflows/docs-pr.yaml new file mode 100644 index 00000000000..73f1e34c65b --- /dev/null +++ b/.github/workflows/docs-pr.yaml @@ -0,0 +1,36 @@ +name: "Docs / Build PR" +# For more information, +# see https://sphinx-theme.scylladb.com/stable/deployment/production.html#available-workflows + +on: + pull_request: + branches: + - scylla-3.x + paths: + - 'docs/**' + - 'faq/**' + - 'manual/**' + - 'changelog/**' + - 'upgrade_guide/**' + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + persist-credentials: false + fetch-depth: 0 + - name: Set up Python + uses: actions/setup-python@v3 + with: + python-version: 3.7 + - name: Set up JDK 1.8 + uses: actions/setup-java@v1 + with: + java-version: 1.8 + - name: Set up env + run: make -C docs setupenv + - name: Build docs + run: make -C docs test \ No newline at end of file diff --git a/.github/workflows/docs-pr@v1.yaml b/.github/workflows/docs-pr@v1.yaml deleted file mode 100644 index 1d1d9730d9e..00000000000 --- a/.github/workflows/docs-pr@v1.yaml +++ /dev/null @@ -1,29 +0,0 @@ -name: "Docs / Build PR" - -on: - pull_request: - branches: - - scylla-3.x - paths: - - 'docs/**' - - 'faq/**' - - 'manual/**' - - 'changelog/**' - - 'upgrade_guide/**' - -jobs: - build: - name: Build - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v2 - with: - persist-credentials: false - fetch-depth: 0 - - name: Set up Python - uses: actions/setup-python@v1 - with: - python-version: 3.7 - - name: Build docs - run: make -C docs test \ No newline at end of file diff --git a/README-dev.md b/README-dev.md new file mode 100644 index 00000000000..5da38fd77da --- /dev/null +++ b/README-dev.md @@ -0,0 +1,17 @@ +# Building the docs + +The docs build instructions have been tested with Sphinx 4 and Fedora 32. + +## Prerequisites + +To build and preview the docs locally, you will need to install the following software: + +- Git +- Python 3.7 +- pip +- Java JDK 8 or above +- Maven + +## Commands + +For more information, see [Commands](https://sphinx-theme.scylladb.com/stable/commands.html). diff --git a/README-dev.rst b/README-dev.rst deleted file mode 100644 index 98e6f0b573c..00000000000 --- a/README-dev.rst +++ /dev/null @@ -1,68 +0,0 @@ -Building the Docs -================= - -*Note*: The docs build instructions have been tested with Sphinx 2.4.4 and Fedora 32. - -To build and preview the docs locally, you will need to install the following software: - -- `Git `_ -- `Python 3.7 `_ -- `pip `_ -- Java JDK 6 or above -- Maven - -Run the following command to build the docs. - -.. code:: console - - cd docs - make preview - -Once the command completes processing, open http://127.0.0.1:5500/ with your preferred browser. - -Building multiple documentation versions -======================================== - -Build Sphinx docs for all the versions defined in ``docs/conf.py``. - -.. code:: console - - cd docs - make multiversion - -Then, open ``docs/_build/dirhtml//index.html`` with your preferred browser. - -**NOTE:** If you only can see docs generated for the master branch, try to run ``git fetch --tags`` to download the latest tags from remote. - -Defining supported versions -=========================== - -Let's say you want to generate docs for the new version ``scylla-3.x.y``. - -1. The file ``.github/workflows`` defines the branch from where all the documentation versions will be build. - -.. code:: yaml - - on: - push: - branches: - - scylla-3.x - -In our case, this branch currently is``scylla-3.x``. -In practice, this means that the file ``docs/source/conf.py`` of ```scylla-3.x`` defines which documentation versions are supported. - -2. In the file ``docs/source/conf.py`` (``scylla-3.x`` branch), list the new target version support inside the ``BRANCHES`` array. -For example, listing ``scylla-3.x.y`` should look like in your code: - -.. code:: python - - BRANCHES = ['scylla-3.x.y'] - smv_branch_whitelist = multiversion_regex_builder(BRANCHES) - -3. (optional) If the new version is the latest stable version, update as well the variable ``smv_latest_version`` in ``docs/source/conf.py``. - -.. code:: python - - smv_latest_version = 'scylla-3.x.y' - -4. Commit & push the changes to the ``scylla-3.x`` branch. diff --git a/docs.yaml b/docs.yaml deleted file mode 100644 index b38b86397d7..00000000000 --- a/docs.yaml +++ /dev/null @@ -1,67 +0,0 @@ -title: Java Driver for Apache Cassandra -summary: High performance Java client for Apache Cassandra -homepage: http://datastax.github.io/java-driver/ -theme: datastax -sections: - - title: Manual - prefix: /manual - sources: - - type: markdown - files: 'manual/**/*.md' - # The 'manual' section was called 'features' in older releases. Leave both - # definitions and Documentor will pick up whichever exists and ignore the - # other. - - title: Features - prefix: /features - sources: - - type: markdown - files: 'features/**/*.md' - - title: Changelog - prefix: /changelog - sources: - - type: markdown - files: 'changelog/**/*.md' - - title: Upgrading - prefix: /upgrade_guide - sources: - - type: markdown - files: 'upgrade_guide/**/*.md' - - title: FAQ - prefix: /faq - sources: - - type: markdown - files: 'faq/**/*.md' -links: - - title: Code - href: https://github.com/datastax/java-driver/ - - title: Docs - href: http://docs.datastax.com/en/developer/java-driver/ - - title: Issues - href: https://datastax-oss.atlassian.net/browse/JAVA/ - - title: Mailing List - href: https://groups.google.com/a/lists.datastax.com/forum/#!forum/java-driver-user - - title: Releases - href: http://downloads.datastax.com/java-driver/ -api_docs: - 3.3: http://docs.datastax.com/en/drivers/java/3.3 - 4.0-alpha: http://docs.datastax.com/en/drivers/java/4.0 - 3.2: http://docs.datastax.com/en/drivers/java/3.2 - 3.1: http://docs.datastax.com/en/drivers/java/3.1 - 3.0: http://docs.datastax.com/en/drivers/java/3.0 - 2.1: http://docs.datastax.com/en/drivers/java/2.1 - 2.0: http://docs.datastax.com/en/drivers/java/2.0 -versions: - - name: '3.3' - ref: '3.3.0' - - name: '4.0-alpha' - ref: '9f0edeb' - - name: '3.2' - ref: '3.2_docfixes' - - name: '3.1' - ref: '3.1_docfixes' - - name: '3.0' - ref: '3.0_docfixes' - - name: '2.1' - ref: '2.1.10.3' - - name: '2.0' - ref: '2.0.12.3' diff --git a/docs/Makefile b/docs/Makefile index 2cebd73728e..8401dcb26e7 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -1,89 +1,107 @@ # You can set these variables from the command line. -POETRY = $(HOME)/.poetry/bin/poetry +POETRY = poetry SPHINXOPTS = SPHINXBUILD = $(POETRY) run sphinx-build PAPER = BUILDDIR = _build -SOURCE_DIR = _source +SOURCEDIR = _source -# Internal variables. +# Internal variables PAPEROPT_a4 = -D latex_paper_size=a4 PAPEROPT_letter = -D latex_paper_size=letter -ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) $(SOURCE_DIR) +ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) $(SOURCEDIR) TESTSPHINXOPTS = $(ALLSPHINXOPTS) -W --keep-going +I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) $(SOURCEDIR) -# the i18n builder cannot share the environment and doctrees with the others -I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . +# Windows variables +ifeq ($(OS),Windows_NT) + POETRY = $(APPDATA)\Python\Scripts\poetry +endif + +define javadoc + cd .. && ./docs/_utils/javadoc.sh +endef .PHONY: all all: dirhtml +# Setup commands +.PHONY: setupenv +setupenv: + pip install -q poetry + +.PHONY: setup +setup: + $(POETRY) install + $(POETRY) update + cp -TLr source $(SOURCEDIR) + cd $(SOURCEDIR) && find . -name README.md -execdir mv '{}' index.md ';' + +# Clean commands .PHONY: pristine pristine: clean git clean -dfX -.PHONY: setup -setup: - ./_utils/setup.sh - cp -TLr source $(SOURCE_DIR) - cd $(SOURCE_DIR) && find . -name README.md -execdir mv '{}' index.md ';' .PHONY: clean clean: rm -rf $(BUILDDIR)/* - rm -rf $(SOURCE_DIR)/* - -.PHONY: preview -preview: setup - cd .. && ./docs/_utils/javadoc.sh - $(POETRY) run sphinx-autobuild -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml --port 5500 + rm -rf $(SOURCEDIR)/* +# Generate output commands .PHONY: dirhtml dirhtml: setup + @$(javadoc) $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." .PHONY: singlehtml singlehtml: setup + @$(javadoc) $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml @echo @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." +.PHONY: multiversion +multiversion: setup + $(POETRY) run ./_utils/multiversion.sh + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." + .PHONY: epub -epub: setup +epub: setup $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub @echo @echo "Build finished. The epub file is in $(BUILDDIR)/epub." .PHONY: epub3 -epub3: setup +epub3:setup $(SPHINXBUILD) -b epub3 $(ALLSPHINXOPTS) $(BUILDDIR)/epub3 @echo @echo "Build finished. The epub3 file is in $(BUILDDIR)/epub3." .PHONY: dummy -dummy: setup +dummy: setup $(SPHINXBUILD) -b dummy $(ALLSPHINXOPTS) $(BUILDDIR)/dummy @echo @echo "Build finished. Dummy builder generates no files." -.PHONY: linkcheck -linkcheck: setup - $(SPHINXBUILD) -b linkcheck $(SOURCE_DIR) $(BUILDDIR)/linkcheck - -.PHONY: multiversion -multiversion: setup - @mkdir -p $(HOME)/.cache/pypoetry/virtualenvs - $(POETRY) run ./_utils/multiversion.sh - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." +# Preview commands +.PHONY: preview +preview: setup + $(POETRY) run sphinx-autobuild -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml --port 5500 --re-ignore 'api/*' .PHONY: multiversionpreview multiversionpreview: multiversion - $(POETRY) run python3 -m http.server 5500 --directory $(BUILDDIR)/dirhtml + $(POETRY) run python -m http.server 5500 --directory $(BUILDDIR)/dirhtml +# Test commands .PHONY: test test: setup $(SPHINXBUILD) -b dirhtml $(TESTSPHINXOPTS) $(BUILDDIR)/dirhtml @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." \ No newline at end of file + @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." + +.PHONY: linkcheck +linkcheck: setup + $(SPHINXBUILD) -b linkcheck $(SOURCEDIR) $(BUILDDIR)/linkcheck \ No newline at end of file diff --git a/docs/_utils/javadoc.sh b/docs/_utils/javadoc.sh index 5ec6ab16dc0..5fadf3954d4 100755 --- a/docs/_utils/javadoc.sh +++ b/docs/_utils/javadoc.sh @@ -1,7 +1,7 @@ #!/bin/bash # Install dependencies -mvn install -DskipTests +mvn install -DskipTests -T 1C # Define output folder OUTPUT_DIR="docs/_build/dirhtml/api" @@ -11,7 +11,7 @@ if [[ "$SPHINX_MULTIVERSION_OUTPUTDIR" != "" ]]; then fi # Generate javadoc -mvn javadoc:javadoc +mvn javadoc:javadoc -T 1C [ -d $OUTPUT_DIR ] && rm -r $OUTPUT_DIR mkdir -p "$OUTPUT_DIR" mv -f driver-core/target/site/apidocs/* $OUTPUT_DIR diff --git a/docs/_utils/setup.sh b/docs/_utils/setup.sh deleted file mode 100755 index b8f50243e4f..00000000000 --- a/docs/_utils/setup.sh +++ /dev/null @@ -1,11 +0,0 @@ -#! /bin/bash - -if pwd | egrep -q '\s'; then - echo "Working directory name contains one or more spaces." - exit 1 -fi - -which python3 || { echo "Failed to find python3. Try installing Python for your operative system: https://www.python.org/downloads/" && exit 1; } -which poetry || curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/1.1.3/get-poetry.py | python3 - && source ${HOME}/.poetry/env -poetry install -poetry update diff --git a/docs/pyproject.toml b/docs/pyproject.toml index d6b89004e90..d25548c641a 100644 --- a/docs/pyproject.toml +++ b/docs/pyproject.toml @@ -6,18 +6,14 @@ authors = ["Java Driver Contributors"] [tool.poetry.dependencies] python = "^3.7" -pyyaml = "5.3" +pyyaml = "6.0" pygments = "2.2.0" -recommonmark = "0.5.0" -sphinx-scylladb-theme = "~1.0.0" +recommonmark = "0.7.1" +sphinx-scylladb-theme = "~1.2.1" sphinx-sitemap = "2.1.0" -sphinx-autobuild = "0.7.1" -Sphinx = "2.4.4" -sphinx-multiversion-scylla = "~0.2.6" -Jinja2 = "<3.1" - -[tool.poetry.dev-dependencies] -pytest = "5.2" +sphinx-autobuild = "2021.3.14" +Sphinx = "4.3.2" +sphinx-multiversion-scylla = "~0.2.11" [build-system] requires = ["poetry>=0.12"] diff --git a/docs/source/conf.py b/docs/source/conf.py index b4974773f4a..31bf207ff17 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -4,14 +4,24 @@ from datetime import date import re from docutils import nodes -from sphinx.util import logging from recommonmark.transform import AutoStructify from recommonmark.parser import CommonMarkParser, splitext, urlparse from sphinx_scylladb_theme.utils import multiversion_regex_builder + # -- General configuration ------------------------------------------------ -# Add any Sphinx extension'¡' module names here, as strings. They can be +# Build documentation for the following tags and branches +TAGS = [] +BRANCHES = ['scylla-3.7.2.x', 'scylla-3.10.2.x', 'scylla-3.11.0.x', 'scylla-3.11.2.x'] +# Set the latest version. +LATEST_VERSION = 'scylla-3.11.2.x' +# Set which versions are not released yet. +UNSTABLE_VERSIONS = [] +# Set which versions are deprecated +DEPRECATED_VERSIONS = [''] + +# Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = [ @@ -19,6 +29,7 @@ 'sphinx.ext.mathjax', 'sphinx.ext.githubpages', 'sphinx.ext.extlinks', + 'sphinx_sitemap', 'sphinx.ext.autosectionlabel', 'sphinx_scylladb_theme', 'sphinx_multiversion', @@ -112,23 +123,24 @@ def setup(app): # -- Options for multiversion extension ---------------------------------- -# Whitelist pattern for tags (set to None to ignore all tags) -TAGS = [] +# Whitelist pattern for tags smv_tag_whitelist = multiversion_regex_builder(TAGS) -# Whitelist pattern for branches (set to None to ignore all branches) -BRANCHES = ['scylla-3.7.2.x', 'scylla-3.10.2.x', 'scylla-3.11.0.x', 'scylla-3.11.2.x'] +# Whitelist pattern for branches smv_branch_whitelist = multiversion_regex_builder(BRANCHES) # Defines which version is considered to be the latest stable version. # Must be listed in smv_tag_whitelist or smv_branch_whitelist. -smv_latest_version = 'scylla-3.11.2.x' +smv_latest_version = LATEST_VERSION smv_rename_latest_version = 'stable' # Whitelist pattern for remotes (set to None to use local branches only) -smv_remote_whitelist = r"^origin$" +smv_remote_whitelist = r'^origin$' # Pattern for released versions smv_released_pattern = r'^tags/.*$' # Format for versioned output directories inside the build directory smv_outputdir_format = '{ref.name}' +# -- Options for sitemap extension --------------------------------------- + +sitemap_url_scheme = 'stable/{link}' # -- Options for HTML output ---------------------------------------------- @@ -147,7 +159,8 @@ def setup(app): 'github_repository': 'scylladb/java-driver', 'github_issues_repository': 'scylladb/java-driver', 'hide_edit_this_page_button': 'false', - 'hide_sidebar_index': 'false', + 'versions_unstable': UNSTABLE_VERSIONS, + 'versions_deprecated': DEPRECATED_VERSIONS, 'hide_version_dropdown': ['scylla-3.x'], } From 76f771528db530c8af7f38551869fcf0d13ce567 Mon Sep 17 00:00:00 2001 From: Piotr Grabowski Date: Tue, 24 May 2022 13:46:29 +0200 Subject: [PATCH 095/112] Add Java Driver 4.x branches to documentation Add Java Driver 4.x branches to the list of generated documentation and bump the LATEST_VERSION variable. --- docs/source/conf.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index 31bf207ff17..7780af2d7a4 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -13,9 +13,9 @@ # Build documentation for the following tags and branches TAGS = [] -BRANCHES = ['scylla-3.7.2.x', 'scylla-3.10.2.x', 'scylla-3.11.0.x', 'scylla-3.11.2.x'] +BRANCHES = ['scylla-3.7.2.x', 'scylla-3.10.2.x', 'scylla-3.11.0.x', 'scylla-3.11.2.x', 'scylla-4.7.2.x', 'scylla-4.10.0.x', 'scylla-4.11.1.x', 'scylla-4.12.0.x', 'scylla-4.13.0.x'] # Set the latest version. -LATEST_VERSION = 'scylla-3.11.2.x' +LATEST_VERSION = 'scylla-4.13.0.x' # Set which versions are not released yet. UNSTABLE_VERSIONS = [] # Set which versions are deprecated From 010b3fc5da32e482af7b24ba7ab3f68854fff85b Mon Sep 17 00:00:00 2001 From: Piotr Grabowski Date: Mon, 2 May 2022 16:43:57 +0200 Subject: [PATCH 096/112] Change each test profile running only its category Previously, "long" test profile would run tests of "unit", "short" and "long" categories. After this change, each profile only runs its own category. --- CONTRIBUTING.md | 2 +- pom.xml | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c5450ce3cd4..f3b3b36a7aa 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -89,7 +89,7 @@ The Maven build uses profiles named after the categories to choose which tests t mvn test -Pshort ``` -The default is "unit". Each profile runs the ones before it ("short" runs unit, etc.) +The default is "unit". Each profile runs only their own category ("short" will *not* run "unit"). Integration tests use [CCM](https://github.com/pcmanus/ccm) to bootstrap Cassandra instances. Two Maven properties control its execution: diff --git a/pom.xml b/pom.xml index caff9391bd6..e9615736031 100644 --- a/pom.xml +++ b/pom.xml @@ -951,7 +951,7 @@ short - unit,short + short false @@ -959,7 +959,7 @@ long - unit,short,long + long false @@ -967,7 +967,7 @@ duration - unit,short,long,duration + duration false @@ -975,7 +975,7 @@ doc - unit,doc + doc From 17e7374a5633771dd2512b7e7b444b5ef172811f Mon Sep 17 00:00:00 2001 From: Piotr Grabowski Date: Mon, 2 May 2022 16:46:16 +0200 Subject: [PATCH 097/112] Add support for parsing Scylla RC version numbers Add support for parsing Scylla RC version numbers, such as 4.3.rc5. For it to co-exist with existing VersionNumber, 4.3.rc5 is parsed into 4.3.0-rc5. --- .../com/datastax/driver/core/VersionNumber.java | 15 +++++++++------ .../datastax/driver/core/VersionNumberTest.java | 8 ++++++++ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/driver-core/src/main/java/com/datastax/driver/core/VersionNumber.java b/driver-core/src/main/java/com/datastax/driver/core/VersionNumber.java index 58e9ef47a8c..60055e2d09c 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/VersionNumber.java +++ b/driver-core/src/main/java/com/datastax/driver/core/VersionNumber.java @@ -34,7 +34,7 @@ public class VersionNumber implements Comparable { private static final String VERSION_REGEXP = - "(\\d+)\\.(\\d+)(\\.\\d+)?(\\.\\d+)?([~\\-]\\w[.\\w]*(?:\\-\\w[.\\w]*)*)?(\\+[.\\w]+)?"; + "(\\d+)\\.(\\d+)(\\.(?:rc)?\\d+)?(\\.\\d+)?([~\\-]\\w[.\\w]*(?:\\-\\w[.\\w]*)*)?(\\+[.\\w]+)?"; private static final Pattern pattern = Pattern.compile(VERSION_REGEXP); private final int major; @@ -79,8 +79,9 @@ public static VersionNumber parse(String version) { int minor = Integer.parseInt(matcher.group(2)); String pa = matcher.group(3); + boolean isRC = pa != null && pa.startsWith(".rc"); // Detect Scylla naming convention: X.Y.rcZ int patch = - pa == null || pa.isEmpty() + pa == null || pa.isEmpty() || isRC ? 0 : Integer.parseInt( pa.substring(1)); // dropping the initial '.' since it's included this time @@ -94,10 +95,12 @@ public static VersionNumber parse(String version) { String pr = matcher.group(5); String[] preReleases = - pr == null || pr.isEmpty() - ? null - : pr.substring(1) - .split("\\-"); // drop initial '-' or '~' then split on the remaining ones + isRC + ? new String[] {pa.substring(1)} + : pr == null || pr.isEmpty() + ? null + : pr.substring(1) + .split("\\-"); // drop initial '-' or '~' then split on the remaining ones String bl = matcher.group(6); String build = bl == null || bl.isEmpty() ? null : bl.substring(1); // drop the initial '+' diff --git a/driver-core/src/test/java/com/datastax/driver/core/VersionNumberTest.java b/driver-core/src/test/java/com/datastax/driver/core/VersionNumberTest.java index 2494fada318..8be308e40ca 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/VersionNumberTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/VersionNumberTest.java @@ -106,6 +106,14 @@ public void should_treat_same_prerelease_equal() { assertThat(version1.hashCode()).isEqualTo(version2.hashCode()); } + @Test(groups = "unit") + public void should_parse_scylla_release_candidates() { + assertThat(VersionNumber.parse("4.3.rc5")) + .hasMajorMinorPatch(4, 3, 0) + .hasToString("4.3.0-rc5") + .hasPreReleaseLabels("rc5"); + } + private void assertOrder(String version1, String version2, int expected) { assertThat(VersionNumber.parse(version1).compareTo(VersionNumber.parse(version2))) .isEqualTo(expected); From 0c262f8f05eb59f68fcd8dc5f0ca44118447068a Mon Sep 17 00:00:00 2001 From: Piotr Grabowski Date: Mon, 2 May 2022 16:48:38 +0200 Subject: [PATCH 098/112] Support Scylla Enterprise in CCMBridge Add support for detecting Scylla Enterprise in CCMBridge. When a Scylla Enterprise version is detected (starts with 4-digit year), SCYLLA_PRODUCT is correctly set for scylla-ccm to start Scylla Enterprise. --- .../test/java/com/datastax/driver/core/CCMBridge.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/driver-core/src/test/java/com/datastax/driver/core/CCMBridge.java b/driver-core/src/test/java/com/datastax/driver/core/CCMBridge.java index 63ecf6153f8..dfe37938462 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/CCMBridge.java +++ b/driver-core/src/test/java/com/datastax/driver/core/CCMBridge.java @@ -185,7 +185,8 @@ public class CCMBridge implements CCMAccess { String installDirectory = System.getProperty("cassandra.directory"); String branch = System.getProperty("cassandra.branch"); - + // Inherit the current environment. + Map envMap = Maps.newHashMap(new ProcessBuilder().environment()); ImmutableSet.Builder installArgs = ImmutableSet.builder(); if (installDirectory != null && !installDirectory.trim().isEmpty()) { installArgs.add("--install-dir=" + new File(installDirectory).getAbsolutePath()); @@ -194,6 +195,12 @@ public class CCMBridge implements CCMAccess { } else if (inputScyllaVersion != null && !inputScyllaVersion.trim().isEmpty()) { installArgs.add(" --scylla "); installArgs.add("-v release:" + inputScyllaVersion); + + // Detect Scylla Enterprise - it should start with + // a 4-digit year. + if (inputScyllaVersion.matches("\\d{4}\\..*")) { + envMap.put("SCYLLA_PRODUCT", "enterprise"); + } } else if (inputCassandraVersion != null && !inputCassandraVersion.trim().isEmpty()) { installArgs.add("-v " + inputCassandraVersion); } @@ -204,8 +211,6 @@ public class CCMBridge implements CCMAccess { CASSANDRA_INSTALL_ARGS = installArgs.build(); - // Inherit the current environment. - Map envMap = Maps.newHashMap(new ProcessBuilder().environment()); // If ccm.path is set, override the PATH variable with it. String ccmPath = System.getProperty("ccm.path"); if (ccmPath != null) { From f101599b569e9f90c56f74ccf672443686c2d392 Mon Sep 17 00:00:00 2001 From: Piotr Grabowski Date: Mon, 2 May 2022 16:54:01 +0200 Subject: [PATCH 099/112] Add version_fetch.py script Add a script that allows for fetching the latest version of Scylla OSS, Scylla Enterprise and Cassandra 3. --- ci/requirements.txt | 1 + ci/version_fetch.py | 208 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 209 insertions(+) create mode 100644 ci/requirements.txt create mode 100644 ci/version_fetch.py diff --git a/ci/requirements.txt b/ci/requirements.txt new file mode 100644 index 00000000000..663bd1f6a2a --- /dev/null +++ b/ci/requirements.txt @@ -0,0 +1 @@ +requests \ No newline at end of file diff --git a/ci/version_fetch.py b/ci/version_fetch.py new file mode 100644 index 00000000000..04a690baf26 --- /dev/null +++ b/ci/version_fetch.py @@ -0,0 +1,208 @@ +#!/usr/bin/python3 + +""" +This Python script allows you to list the +latest version numbers of Scylla and Cassandra. + +You can specify whether you want the +versions of Scylla OSS or Scylla Enterprise, +either N latest stable X.Y.latest or +all non-obsolete RCs. You can also fetch +the latest version of Cassandra 3. + +How are those versions fetched? We use Docker Hub +tags API. +""" + +import requests +import re +import json +from itertools import groupby, islice +import sys + +DOCKER_HUB_TAGS_ENDPOINT = 'https://registry.hub.docker.com/v1/repositories/%s/tags' +DOCKER_HUB_SCYLLA_ORG = 'scylladb/' + +SCYLLA_OSS = DOCKER_HUB_SCYLLA_ORG + 'scylla' +SCYLLA_OSS_RELEASED_VERSION_REGEX = re.compile(r'(\d+)\.(\d+)\.(\d+)') +SCYLLA_OSS_RC_VERSION_REGEX = re.compile(r'(\d+)\.(\d+)\.rc(\d+)') + +SCYLLA_ENTERPRISE = DOCKER_HUB_SCYLLA_ORG + 'scylla-enterprise' +SCYLLA_ENTERPRISE_RELEASED_VERSION_REGEX = re.compile(r'(\d{4})\.(\d+)\.(\d+)') +SCYLLA_ENTERPRISE_RC_VERSION_REGEX = re.compile(r'(\d{4})\.(\d+)\.rc(\d+)') + +CASSANDRA_ENDPOINT = 'https://dlcdn.apache.org/cassandra/' + +CASSANDRA3_REGEX = re.compile(r'a href="(3)\.(\d+)\.(\d+)/"') + +COMMAND_LINE_ARGUMENT = re.compile( + r'((?:(scylla-oss-stable):(\d+))|(?:(scylla-enterprise-stable):(\d+))|(?:(cassandra3-stable):(\d+))|(?:(scylla-oss-rc))|(?:(scylla-enterprise-rc)))') + + +def fetch_last_scylla_oss_minor_versions(count): + # Download Docker tags for repository + tags_data = requests.get(DOCKER_HUB_TAGS_ENDPOINT % (SCYLLA_OSS)).json() + tags_data = map(lambda e: e['name'], tags_data) + + # Parse only those tags which match 'NUM.NUM.NUM' + # into tuple (NUM, NUM, NUM) + tags_data = filter(SCYLLA_OSS_RELEASED_VERSION_REGEX.fullmatch, tags_data) + tags_data = map(lambda e: SCYLLA_OSS_RELEASED_VERSION_REGEX.match( + e).groups(), tags_data) + tags_data = map(lambda e: tuple(map(int, e)), tags_data) + + # Group by (major, minor) and select latest patch version + tags_data = sorted(tags_data) + tags_data = groupby(tags_data, key=lambda e: (e[0], e[1])) + tags_data = ((e[0][0], e[0][1], max(e[1])[2]) + for e in tags_data) + + # Return the latest ones + tags_data = list(tags_data)[-count:] + tags_data = [f'{e[0]}.{e[1]}.{e[2]}' for e in tags_data] + return tags_data + + +def fetch_all_scylla_oss_rc_versions(): + # Download Docker tags for repository + tags_data = requests.get(DOCKER_HUB_TAGS_ENDPOINT % (SCYLLA_OSS)).json() + tags_data = list(map(lambda e: e['name'], tags_data)) + + # Parse only those tags which match 'NUM.NUM.rcNUM' + # into tuple (NUM, NUM, NUM) + rc_tags_data = filter(SCYLLA_OSS_RC_VERSION_REGEX.fullmatch, tags_data) + rc_tags_data = map(lambda e: SCYLLA_OSS_RC_VERSION_REGEX.match( + e).groups(), rc_tags_data) + rc_tags_data = map(lambda e: tuple(map(int, e)), rc_tags_data) + + # Parse only those tags which match 'NUM.NUM.NUM' + # into tuple (NUM, NUM) + stable_tags_data = filter( + SCYLLA_OSS_RELEASED_VERSION_REGEX.fullmatch, tags_data) + stable_tags_data = map(lambda e: SCYLLA_OSS_RELEASED_VERSION_REGEX.match( + e).groups(), stable_tags_data) + stable_tags_data = map(lambda e: tuple(map(int, e[0:2])), stable_tags_data) + stable_tags_data = set(stable_tags_data) + + # Group by (major, minor) and select latest RC version + rc_tags_data = sorted(rc_tags_data) + rc_tags_data = groupby(rc_tags_data, key=lambda e: (e[0], e[1])) + rc_tags_data = ((e[0][0], e[0][1], max(e[1])[2]) + for e in rc_tags_data) + + # Filter out those RCs that are obsoleted by released stable version + rc_tags_data = filter(lambda e: ( + e[0], e[1]) not in stable_tags_data, rc_tags_data) + rc_tags_data = [f'{e[0]}.{e[1]}.rc{e[2]}' for e in rc_tags_data] + return rc_tags_data + + +def fetch_last_scylla_enterprise_minor_versions(count): + # Download Docker tags for repository + tags_data = requests.get(DOCKER_HUB_TAGS_ENDPOINT % + (SCYLLA_ENTERPRISE)).json() + tags_data = map(lambda e: e['name'], tags_data) + + # Parse only those tags which match 'YEAR.NUM.NUM' + # into tuple (YEAR, NUM, NUM) + tags_data = filter( + SCYLLA_ENTERPRISE_RELEASED_VERSION_REGEX.fullmatch, tags_data) + tags_data = map(lambda e: SCYLLA_ENTERPRISE_RELEASED_VERSION_REGEX.match( + e).groups(), tags_data) + tags_data = map(lambda e: tuple(map(int, e)), tags_data) + + # Group by (major, minor) and select latest patch version + tags_data = sorted(tags_data) + tags_data = groupby(tags_data, key=lambda e: (e[0], e[1])) + tags_data = ((e[0][0], e[0][1], max(e[1])[2]) + for e in tags_data) + + # Return the latest ones + tags_data = list(tags_data)[-count:] + tags_data = [f'{e[0]}.{e[1]}.{e[2]}' for e in tags_data] + return tags_data + + +def fetch_all_scylla_enterprise_rc_versions(): + # Download Docker tags for repository + tags_data = requests.get(DOCKER_HUB_TAGS_ENDPOINT % + (SCYLLA_ENTERPRISE)).json() + tags_data = list(map(lambda e: e['name'], tags_data)) + + # Parse only those tags which match 'YEAR.NUM.rcNUM' + # into tuple (YEAR, NUM, NUM) + rc_tags_data = filter( + SCYLLA_ENTERPRISE_RC_VERSION_REGEX.fullmatch, tags_data) + rc_tags_data = map(lambda e: SCYLLA_ENTERPRISE_RC_VERSION_REGEX.match( + e).groups(), rc_tags_data) + rc_tags_data = map(lambda e: tuple(map(int, e)), rc_tags_data) + + # Parse only those tags which match 'YEAR.NUM.NUM' + # into tuple (YEAR, NUM) + stable_tags_data = filter( + SCYLLA_ENTERPRISE_RELEASED_VERSION_REGEX.fullmatch, tags_data) + stable_tags_data = map(lambda e: SCYLLA_ENTERPRISE_RELEASED_VERSION_REGEX.match( + e).groups(), stable_tags_data) + stable_tags_data = map(lambda e: tuple(map(int, e[0:2])), stable_tags_data) + + # Group by (major, minor) and select latest RC version + rc_tags_data = sorted(rc_tags_data) + rc_tags_data = groupby(rc_tags_data, key=lambda e: (e[0], e[1])) + rc_tags_data = ((e[0][0], e[0][1], max(e[1])[2]) + for e in rc_tags_data) + + # Filter out those RCs that are obsoleted by released stable version + rc_tags_data = filter(lambda e: ( + e[0], e[1]) not in stable_tags_data, rc_tags_data) + rc_tags_data = [f'{e[0]}.{e[1]}.rc{e[2]}' for e in rc_tags_data] + return rc_tags_data + + +def fetch_last_cassandra3_minor_versions(count): + # Download folder listing for Cassandra download site + data = requests.get(CASSANDRA_ENDPOINT).text + + # Parse only those version numbers which match '3.NUM.NUM' + # into tuple (3, NUM, NUM) + data = CASSANDRA3_REGEX.finditer(data) + data = map(lambda e: e.groups(), data) + data = map(lambda e: tuple(map(int, e)), data) + + # Group by (major, minor) and select latest patch version + data = sorted(data) + data = groupby(data, key=lambda e: (e[0], e[1])) + data = ((e[0][0], e[0][1], max(e[1])[2]) + for e in data) + + # Return the latest ones + data = list(data)[-count:] + data = [f'{e[0]}.{e[1]}.{e[2]}' for e in data] + return data + + +if __name__ == '__main__': + names = set() + + for arg in sys.argv[1:]: + if not COMMAND_LINE_ARGUMENT.fullmatch(arg): + print("Usage:", sys.argv[0], "[scylla-oss-stable:COUNT] [scylla-oss-rc] [scylla-enterprise-stable:COUNT] [scylla-enterprise-rc] [cassandra3-stable:COUNT]...", file=sys.stderr) + sys.exit(1) + + groups = COMMAND_LINE_ARGUMENT.match(arg).groups() + groups = [g for g in groups if g][1:] + + mode_name = groups[0] + if mode_name == 'scylla-oss-stable': + names.update(fetch_last_scylla_oss_minor_versions(int(groups[1]))) + elif mode_name == 'scylla-enterprise-stable': + names.update( + fetch_last_scylla_enterprise_minor_versions(int(groups[1]))) + elif mode_name == 'cassandra3-stable': + names.update( + fetch_last_cassandra3_minor_versions(int(groups[1]))) + elif mode_name == 'scylla-oss-rc': + names.update(fetch_all_scylla_oss_rc_versions()) + elif mode_name == 'scylla-enterprise-rc': + names.update(fetch_all_scylla_enterprise_rc_versions()) + + print(json.dumps(list(names))) From c4c8ccfe9bd649c1bb3f9d334ed42588a26f6762 Mon Sep 17 00:00:00 2001 From: Piotr Grabowski Date: Mon, 2 May 2022 16:54:38 +0200 Subject: [PATCH 100/112] Remove unused upstream CI scripts Remove upstream CI scripts, which are unused in our project. --- ci/appveyor.ps1 | 132 --------------------------------------------- ci/appveyor.yml | 20 ------- ci/uploadtests.ps1 | 17 ------ 3 files changed, 169 deletions(-) delete mode 100644 ci/appveyor.ps1 delete mode 100644 ci/appveyor.yml delete mode 100644 ci/uploadtests.ps1 diff --git a/ci/appveyor.ps1 b/ci/appveyor.ps1 deleted file mode 100644 index bc1d95b69f7..00000000000 --- a/ci/appveyor.ps1 +++ /dev/null @@ -1,132 +0,0 @@ -Add-Type -AssemblyName System.IO.Compression.FileSystem - -$dep_dir="C:\Users\appveyor\deps" -If (!(Test-Path $dep_dir)) { - Write-Host "Creating $($dep_dir)" - New-Item -Path $dep_dir -ItemType Directory -Force -} - -$apr_platform = "Win32" -$openssl_platform = "Win32" -$vc_platform = "x86" -$env:PYTHON="C:\Python27" -$env:OPENSSL_PATH="C:\OpenSSL-Win32" -If ($env:PLATFORM -eq "X64") { - $apr_platform = "x64" - $vc_platform = "x64" - $env:PYTHON="C:\Python27-x64" - $env:OPENSSL_PATH="C:\OpenSSL-Win64" -} - -$env:JAVA_HOME="C:\Program Files\Java\jdk$($env:java_version)" -# The configured java version to test with. -$env:JAVA_PLATFORM_HOME="$($env:JAVA_HOME)" -$env:JAVA_8_HOME="C:\Program Files\Java\jdk1.8.0" -$env:PATH="$($env:PYTHON);$($env:PYTHON)\Scripts;$($env:JAVA_HOME)\bin;$($env:OPENSSL_PATH)\bin;$($env:PATH)" -$env:CCM_PATH="$($dep_dir)\ccm" - -$apr_dist_path = "$($dep_dir)\apr" -# Build APR if it hasn't been previously built. -If (!(Test-Path $apr_dist_path)) { - Write-Host "Cloning APR" - $apr_path = "C:\Users\appveyor\apr" - Start-Process git -ArgumentList "clone --branch=1.5.2 --depth=1 https://github.com/apache/apr.git $($apr_path)" -Wait -nnw - Write-Host "Setting Visual Studio Environment to VS 2015" - Push-Location "$($env:VS140COMNTOOLS)\..\..\VC" - cmd /c "vcvarsall.bat $vc_platform & set" | - foreach { - if ($_ -match "=") { - $v = $_.split("="); Set-Item -force -path "ENV:\$($v[0])" -value "$($v[1])" - } - } - Pop-Location - Write-Host "Building APR (an error may be printed, but it will still build)" - Push-Location $($apr_path) - cmd /c nmake -f Makefile.win ARCH="$apr_platform Release" PREFIX=$($apr_dist_path) buildall install - Pop-Location - Write-Host "Done Building APR" -} -$env:PATH="$($apr_dist_path)\bin;$($env:PATH)" - -# Install Ant and Maven -$ant_base = "$($dep_dir)\ant" -$ant_path = "$($ant_base)\apache-ant-1.9.7" -If (!(Test-Path $ant_path)) { - Write-Host "Installing Ant" - $ant_url = "https://www.dropbox.com/s/lgx95x1jr6s787l/apache-ant-1.9.7-bin.zip?dl=1" - $ant_zip = "C:\Users\appveyor\apache-ant-1.9.7-bin.zip" - (new-object System.Net.WebClient).DownloadFile($ant_url, $ant_zip) - [System.IO.Compression.ZipFile]::ExtractToDirectory($ant_zip, $ant_base) -} -$env:PATH="$($ant_path)\bin;$($env:PATH)" - -$maven_base = "$($dep_dir)\maven" -$maven_path = "$($maven_base)\apache-maven-3.2.5" -If (!(Test-Path $maven_path)) { - Write-Host "Installing Maven" - $maven_url = "https://www.dropbox.com/s/fh9kffmexprsmha/apache-maven-3.2.5-bin.zip?dl=1" - $maven_zip = "C:\Users\appveyor\apache-maven-3.2.5-bin.zip" - (new-object System.Net.WebClient).DownloadFile($maven_url, $maven_zip) - [System.IO.Compression.ZipFile]::ExtractToDirectory($maven_zip, $maven_base) -} -$env:M2_HOME="$($maven_path)" -$env:PATH="$($maven_path)\bin;$($env:PATH)" - -$jdks = @("1.6.0", "1.7.0", "1.8.0") -foreach ($jdk in $jdks) { - $java_dir = "C:\Program Files\Java\jdk$jdk" - $jce_target = "$java_dir\jre\lib\security" - $jce_indicator = "$jce_target\README.txt" - # Install Java Cryptographic Extensions, needed for SSL. - # If this file doesn't exist we know JCE hasn't been installed. - If (!(Test-Path $jce_indicator)) { - Write-Host "Installing JCE for $jdk" - $zip = "$dep_dir\jce_policy-$jdk.zip" - $url = "https://www.dropbox.com/s/po4308hlwulpvep/UnlimitedJCEPolicyJDK7.zip?dl=1" - $extract_folder = "UnlimitedJCEPolicy" - If ($jdk -eq "1.8.0") { - $url = "https://www.dropbox.com/s/al1e6e92cjdv7m7/jce_policy-8.zip?dl=1" - $extract_folder = "UnlimitedJCEPolicyJDK8" - } - ElseIf ($jdk -eq "1.6.0") { - $url = "https://www.dropbox.com/s/dhrtucxcif4n11k/jce_policy-6.zip?dl=1" - $extract_folder = "jce" - } - # Download zip to staging area if it doesn't exist, we do this because - # we extract it to the directory based on the platform and we want to cache - # this file so it can apply to all platforms. - if(!(Test-Path $zip)) { - (new-object System.Net.WebClient).DownloadFile($url, $zip) - } - - [System.IO.Compression.ZipFile]::ExtractToDirectory($zip, $jce_target) - - $jcePolicyDir = "$jce_target\$extract_folder" - Move-Item $jcePolicyDir\* $jce_target\ -force - Remove-Item $jcePolicyDir - } -} - -# Install Python Dependencies for CCM. -Write-Host "Installing Python Dependencies for CCM" -Start-Process python -ArgumentList "-m pip install psutil pyYaml six" -Wait -nnw - -# Clone ccm from git and use master. -If (!(Test-Path $env:CCM_PATH)) { - Write-Host "Cloning CCM" - Start-Process git -ArgumentList "clone https://github.com/pcmanus/ccm.git $($env:CCM_PATH)" -Wait -nnw -} - -# Copy ccm -> ccm.py so windows knows to run it. -If (!(Test-Path $env:CCM_PATH\ccm.py)) { - Copy-Item "$env:CCM_PATH\ccm" "$env:CCM_PATH\ccm.py" -} -$env:PYTHONPATH="$($env:CCM_PATH);$($env:PYTHONPATH)" -$env:PATH="$($env:CCM_PATH);$($env:PATH)" - -# Predownload cassandra version for CCM if it isn't already downloaded. -If (!(Test-Path C:\Users\appveyor\.ccm\repository\$env:cassandra_version)) { - Write-Host "Preinstalling C* $($env:cassandra_version)" - Start-Process python -ArgumentList "$($env:CCM_PATH)\ccm.py create -v $($env:cassandra_version) -n 1 predownload" -Wait -nnw - Start-Process python -ArgumentList "$($env:CCM_PATH)\ccm.py remove predownload" -Wait -nnw -} diff --git a/ci/appveyor.yml b/ci/appveyor.yml deleted file mode 100644 index 81dd5b01958..00000000000 --- a/ci/appveyor.yml +++ /dev/null @@ -1,20 +0,0 @@ -environment: - test_profile: default - matrix: - - java_version: 1.6.0 - - java_version: 1.7.0 - - java_version: 1.8.0 - test_profile: short -platform: x64 -install: - - ps: .\ci\appveyor.ps1 -build_script: - - "set \"JAVA_HOME=%JAVA_8_HOME%\" && mvn install -DskipTests=true -B -V" -test_script: - - "set \"JAVA_HOME=%JAVA_PLATFORM_HOME%\" && mvn -B -D\"ccm.java.home\"=\"%JAVA_8_HOME%\" -D\"ccm.maxNumberOfNodes\"=1 -D\"cassandra.version\"=%cassandra_version% verify -P %test_profile%" -on_finish: - - ps: .\ci\uploadtests.ps1 -cache: - - C:\Users\appveyor\.m2 - - C:\Users\appveyor\.ccm\repository - - C:\Users\appveyor\deps -> .\ci\appveyor.ps1 diff --git a/ci/uploadtests.ps1 b/ci/uploadtests.ps1 deleted file mode 100644 index cf88b16229c..00000000000 --- a/ci/uploadtests.ps1 +++ /dev/null @@ -1,17 +0,0 @@ -$testResults=Get-ChildItem TEST-TestSuite.xml -Recurse - -Write-Host "Uploading test results." - -$url = "https://ci.appveyor.com/api/testresults/junit/$($env:APPVEYOR_JOB_ID)" -$wc = New-Object 'System.Net.WebClient' - -foreach ($testResult in $testResults) { - try { - Write-Host -ForegroundColor Green "Uploading $testResult -> $url." - $wc.UploadFile($url, $testResult) - } catch [Net.WebException] { - Write-Host -ForegroundColor Red "Failed Uploading $testResult -> $url. $_" - } -} - -Write-Host "Done uploading test results." From 5973f68270e3c5c6e4fdf78624e5562cc37780f5 Mon Sep 17 00:00:00 2001 From: Piotr Grabowski Date: Mon, 2 May 2022 16:59:48 +0200 Subject: [PATCH 101/112] New version of continuous testing workflow Adds new GitHub actions workflow for continuous testing. Some of the changes: - Build is separately tested - Testing building with both Java 8 and Java 11 (Java 12+ compilers don't support building with Java 6 target version) - Formatting check is skipped in almost all steps, except for "Full verify" step - version_fetch.py script is used to fetch latest Scylla/Cassandra versions to check against - Test results are now visualized thanks to "dorny/test-reporter@v1" - Scylla Enterprise is now tested --- .github/workflows/tests-reports@v1.yml | 24 +++ .github/workflows/tests.yml | 85 ---------- .github/workflows/tests@v1.yml | 221 +++++++++++++++++++++++++ pom.xml | 2 +- 4 files changed, 246 insertions(+), 86 deletions(-) create mode 100644 .github/workflows/tests-reports@v1.yml delete mode 100644 .github/workflows/tests.yml create mode 100644 .github/workflows/tests@v1.yml diff --git a/.github/workflows/tests-reports@v1.yml b/.github/workflows/tests-reports@v1.yml new file mode 100644 index 00000000000..a6d1b3b5b9e --- /dev/null +++ b/.github/workflows/tests-reports@v1.yml @@ -0,0 +1,24 @@ +# This is a workflow that runs after 'Tests' +# workflow, because the 'Tests' (PR) workflow +# has insufficient permissions to write +# GitHub Actions checks. +name: 'Tests Reports' +on: + workflow_run: + workflows: ['Tests'] + types: + - completed +jobs: + report: + runs-on: ubuntu-latest + timeout-minutes: 5 + + steps: + - name: Generate test report + uses: dorny/test-reporter@v1 + with: + artifact: 'test-results' + name: 'Test report' + path: '**/TEST-TestSuite.xml' + reporter: java-junit + list-tests: failed diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml deleted file mode 100644 index 33860208296..00000000000 --- a/.github/workflows/tests.yml +++ /dev/null @@ -1,85 +0,0 @@ -name: Tests - -on: - push: - branches: [ scylla-3.*x ] - pull_request: - branches: [ scylla-3.*x ] - -jobs: - run-unit-tests: - name: Run unit tests - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v2 - - - name: Set up JDK 8 - uses: actions/setup-java@v2 - with: - java-version: '8' - distribution: 'adopt' - - - name: Run unit tests - run: mvn -B test - - run-cassandra-integration-tests: - name: Run integration tests on Cassandra - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v2 - - - name: Set up JDK 8 - uses: actions/setup-java@v2 - with: - java-version: '8' - distribution: 'adopt' - - - name: Setup environment (Integration test on Cassandra 3.11.11) - run: | - sudo apt-get update - sudo apt-get install -y python3 python3-pip python-is-python3 python3-boto3 - sudo pip3 install https://github.com/scylladb/scylla-ccm/archive/master.zip - - - name: Run integration tests on Cassandra 3.11.11 - run: mvn -B verify -Pshort -Dcassandra.version=3.11.11 - - - uses: actions/upload-artifact@v2 - if: ${{ failure() }} - with: - name: ccm-logs-cassandra-3.11.11 - path: /tmp/*-0/ccm*/node*/logs/* - - run-scylla-integration-tests: - name: Run integration tests on Scylla - runs-on: ubuntu-latest - - strategy: - matrix: - scylla-version: ['4.4.4', '4.3.6'] - - steps: - - uses: actions/checkout@v2 - - - name: Set up JDK 8 - uses: actions/setup-java@v2 - with: - java-version: '8' - distribution: 'adopt' - - - name: Setup environment (Integration test on Scylla ${{ matrix.scylla-version }}) - run: | - sudo apt-get update - sudo apt-get install -y python3 python3-pip python-is-python3 python3-boto3 - sudo pip3 install https://github.com/scylladb/scylla-ccm/archive/master.zip - sudo sh -c "echo 2097152 >> /proc/sys/fs/aio-max-nr" - - - name: Run integration tests on Scylla (${{ matrix.scylla-version }}) - run: mvn -B verify -Pshort -Dscylla.version=${{ matrix.scylla-version }} - - - uses: actions/upload-artifact@v2 - if: ${{ failure() }} - with: - name: ccm-logs-scylla-${{ matrix.scylla-version }} - path: /tmp/*-0/ccm*/node*/logs/* \ No newline at end of file diff --git a/.github/workflows/tests@v1.yml b/.github/workflows/tests@v1.yml new file mode 100644 index 00000000000..4b5d7202078 --- /dev/null +++ b/.github/workflows/tests@v1.yml @@ -0,0 +1,221 @@ +name: Tests + +on: + push: + branches: [ scylla-3.*x ] + pull_request: + branches: [ scylla-3.*x ] + workflow_dispatch: + +jobs: + build: + name: Build + runs-on: ubuntu-latest + timeout-minutes: 10 + + strategy: + matrix: + java-version: [8, 11] + fail-fast: false + + steps: + - name: Checkout source + uses: actions/checkout@v2 + + - name: Set up JDK ${{ matrix.java-version }} + uses: actions/setup-java@v2 + with: + java-version: ${{ matrix.java-version }} + distribution: 'adopt' + + - name: Compile source and tests + run: mvn -B compile test-compile -Dfmt.skip=true -Dclirr.skip=true -Danimal.sniffer.skip=true + + verify: + name: Full verify + runs-on: ubuntu-latest + timeout-minutes: 10 + + strategy: + matrix: + java-version: [8, 11] + fail-fast: false + + steps: + - name: Checkout source + uses: actions/checkout@v2 + + - name: Set up JDK ${{ matrix.java-version }} + uses: actions/setup-java@v2 + with: + java-version: ${{ matrix.java-version }} + distribution: 'adopt' + + - name: Full verify + run: mvn -B verify -DskipTests + + unit-tests: + name: Unit tests + runs-on: ubuntu-latest + timeout-minutes: 10 + + steps: + - name: Checkout source + uses: actions/checkout@v2 + + - name: Set up JDK 8 + uses: actions/setup-java@v2 + with: + java-version: '8' + distribution: 'adopt' + + - name: Run unit tests + run: mvn -B test -Dfmt.skip=true -Dclirr.skip=true -Danimal.sniffer.skip=true + + - name: Copy test results + if: success() || failure() + run: | + shopt -s globstar + mkdir unit + cp --parents ./**/target/*-reports/*.xml unit/ + + - name: Upload test results + uses: actions/upload-artifact@v2 + if: success() || failure() + with: + name: test-results + path: "*/**/target/*-reports/*.xml" + + setup-integration-tests: + name: Setup ITs + runs-on: ubuntu-latest + timeout-minutes: 2 + + steps: + - name: Checkout source + uses: actions/checkout@v2 + + - name: Setup Python 3 + uses: actions/setup-python@v2 + with: + python-version: '3.x' + + - name: Fetch Scylla and Cassandra versions + id: fetch-versions + run: | + pip3 install -r ci/requirements.txt + echo "::set-output name=scylla-integration-tests-versions::$(python3 ci/version_fetch.py scylla-oss-stable:2 scylla-oss-rc scylla-enterprise-stable:2 scylla-enterprise-rc)" + echo "::set-output name=cassandra-integration-tests-versions::$(python3 ci/version_fetch.py cassandra3-stable:1)" + + outputs: + scylla-integration-tests-versions: ${{ steps.fetch-versions.outputs.scylla-integration-tests-versions }} + cassandra-integration-tests-versions: ${{ steps.fetch-versions.outputs.cassandra-integration-tests-versions }} + + cassandra-integration-tests: + name: Cassandra ITs + runs-on: ubuntu-latest + needs: [setup-integration-tests] + timeout-minutes: 90 + + strategy: + matrix: + cassandra-version: ${{ fromJson(needs.setup-integration-tests.outputs.cassandra-integration-tests-versions) }} + fail-fast: false + + steps: + - name: Checkout source + uses: actions/checkout@v2 + + - name: Set up JDK 8 + uses: actions/setup-java@v2 + with: + java-version: '8' + distribution: 'adopt' + + - name: Setup Python 3 + uses: actions/setup-python@v2 + with: + python-version: '3.x' + + - name: Setup environment + run: | + pip3 install https://github.com/scylladb/scylla-ccm/archive/master.zip + + - name: Run integration tests on Cassandra (${{ matrix.cassandra-version }}) + run: mvn -B verify -Pshort -Dcassandra.version=${{ matrix.cassandra-version }} -Dfmt.skip=true -Dclirr.skip=true -Danimal.sniffer.skip=true + + - name: Copy test results + if: success() || failure() + run: | + shopt -s globstar + mkdir cassandra-${{ matrix.cassandra-version }} + cp --parents ./**/target/*-reports/*.xml cassandra-${{ matrix.cassandra-version }}/ + + - name: Upload test results + uses: actions/upload-artifact@v2 + if: success() || failure() + with: + name: test-results + path: "*/**/target/*-reports/*.xml" + + - name: Upload CCM logs + uses: actions/upload-artifact@v2 + if: ${{ failure() }} + with: + name: ccm-logs-cassandra-${{ matrix.cassandra-version }} + path: /tmp/*-0/ccm*/node*/logs/* + + scylla-integration-tests: + name: Scylla ITs + runs-on: ubuntu-latest + needs: [setup-integration-tests] + timeout-minutes: 90 + + strategy: + matrix: + scylla-version: ${{ fromJson(needs.setup-integration-tests.outputs.scylla-integration-tests-versions) }} + fail-fast: false + + steps: + - name: Checkout source + uses: actions/checkout@v2 + + - name: Set up JDK 8 + uses: actions/setup-java@v2 + with: + java-version: '8' + distribution: 'adopt' + + - name: Setup Python 3 + uses: actions/setup-python@v2 + with: + python-version: '3.x' + + - name: Setup environment + run: | + pip3 install https://github.com/avelanarius/scylla-ccm/archive/master.zip + sudo sh -c "echo 2097152 >> /proc/sys/fs/aio-max-nr" + + - name: Run integration tests on Scylla (${{ matrix.scylla-version }}) + run: mvn -B verify -Pshort -Dscylla.version=${{ matrix.scylla-version }} -Dfmt.skip=true -Dclirr.skip=true -Danimal.sniffer.skip=true + + - name: Copy test results + if: success() || failure() + run: | + shopt -s globstar + mkdir scylla-${{ matrix.scylla-version }} + cp --parents ./**/target/*-reports/*.xml scylla-${{ matrix.scylla-version }}/ + + - name: Upload test results + uses: actions/upload-artifact@v2 + if: success() || failure() + with: + name: test-results + path: "*/**/target/*-reports/*.xml" + + - name: Upload CCM logs + uses: actions/upload-artifact@v2 + if: ${{ failure() }} + with: + name: ccm-logs-scylla-${{ matrix.scylla-version }} + path: /tmp/*-0/ccm*/node*/logs/* diff --git a/pom.xml b/pom.xml index e9615736031..028ae5179ba 100644 --- a/pom.xml +++ b/pom.xml @@ -732,7 +732,7 @@ maven-surefire-plugin - 2.18 + 3.0.0-M6 ${test.groups} false From f63017af28034c41424961e5eecfc4a28136f1d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wojciech=20B=C4=85czkowski?= Date: Sat, 11 Jun 2022 02:22:23 +0200 Subject: [PATCH 102/112] Fix typo in 3.x tests workflow Replaces 1 ccm link, since main repo is up to date now. --- .github/workflows/tests@v1.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests@v1.yml b/.github/workflows/tests@v1.yml index 4b5d7202078..f783372f123 100644 --- a/.github/workflows/tests@v1.yml +++ b/.github/workflows/tests@v1.yml @@ -193,7 +193,7 @@ jobs: - name: Setup environment run: | - pip3 install https://github.com/avelanarius/scylla-ccm/archive/master.zip + pip3 install https://github.com/scylladb/scylla-ccm/archive/master.zip sudo sh -c "echo 2097152 >> /proc/sys/fs/aio-max-nr" - name: Run integration tests on Scylla (${{ matrix.scylla-version }}) From f887767b191b21416842a9d0154dab444f3c2b13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karol=20Bary=C5=82a?= Date: Wed, 15 Jun 2022 17:48:41 +0200 Subject: [PATCH 103/112] Metadata.java: Add missing reserved keywords Added all the missing reserved CQL keywords. Generated using a simple script: https://github.com/Lorak-mmk/cql_reserved_keywords I didn't remove keywords that were in Metadata.java, but are not in my list, in case they were reserved in older Cassandra/Scylla versions. --- .../com/datastax/driver/core/Metadata.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/driver-core/src/main/java/com/datastax/driver/core/Metadata.java b/driver-core/src/main/java/com/datastax/driver/core/Metadata.java index 0a5c82829cd..f24d5b588ae 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/Metadata.java +++ b/driver-core/src/main/java/com/datastax/driver/core/Metadata.java @@ -66,6 +66,8 @@ public class Metadata { // See https://github.com/apache/cassandra/blob/trunk/doc/cql3/CQL.textile#appendixA private static final IntObjectHashMap> RESERVED_KEYWORDS = indexByCaseInsensitiveHash( + "-infinity", + "-nan", "add", "allow", "alter", @@ -77,38 +79,54 @@ public class Metadata { "batch", "begin", "by", + "cast", "columnfamily", "create", + "default", "delete", "desc", + "describe", "drop", "each_quorum", + "entries", + "execute", "from", + "full", "grant", + "if", "in", "index", "inet", "infinity", "insert", "into", + "is", "keyspace", "keyspaces", "limit", "local_one", "local_quorum", + "materialized", "modify", "nan", "norecursive", + "not", + "null", "of", "on", "one", + "or", "order", "password", "primary", "quorum", "rename", + "replace", "revoke", "schema", + "scylla_clustering_bound", + "scylla_counter_shard_list", + "scylla_timeuuid_list_index", "select", "set", "table", @@ -118,9 +136,11 @@ public class Metadata { "truncate", "two", "unlogged", + "unset", "update", "use", "using", + "view", "where", "with"); From 663b94839105f2df21bc2f46c5bd853fb0f06c84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wojciech=20B=C4=85czkowski?= Date: Mon, 23 May 2022 10:42:51 +0200 Subject: [PATCH 104/112] Update .md docs Adds info about channels to reach out through, how to run tests against scylla. Resolves #130 --- CONTRIBUTING.md | 34 +++++++++++++++++++++++----------- testing/README.md | 2 +- 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f3b3b36a7aa..b8590885903 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -22,10 +22,12 @@ imports in ASCII sort order. In addition, please avoid using wildcard imports. ## Working on an issue -Before starting to work on something, please comment in JIRA or ask on the mailing list -to make sure nobody else is working on it. +We use [github issues](https://github.com/scylladb/java-driver/issues) to track ongoing issues. +Before starting to work on something, please check the issues list to make sure nobody else is working on it. +It's also a good idea to get in contact through [ScyllaDB-Users Slack](https://scylladb-users.slack.com/) +to make your intentions known and clear. -If your fix applies to multiple branches, base your work on the lowest active branch. Since version 3 of the driver, +If your fix applies to multiple branches, base your work on the lowest active branch. Most of the time if you want to implement a feature for driver version 3, then you'll base your work on `scylla-3.x` (and `scylla-4.x` for version 4). Since version 3 of the driver, we've adopted [semantic versioning](http://semver.org/) and our branches use the following scheme: ``` @@ -59,15 +61,13 @@ Before you send your pull request, make sure that: - you have a unit test that failed before the fix and succeeds after. - the fix is mentioned in `changelog/README.md`. -- the commit message include the reference of the JIRA ticket for automatic linking - (example: `JAVA-503: Fix NPE when a connection fails during pool construction.`). +- the commit message includes the reference of the github issue for + automatic linking + (example: `Fixes #1234`). As long as your pull request is not merged, it's OK to rebase your branch and push with -`--force`. - -If you want to contribute but don't have a specific issue in mind, the [lhf](https://datastax-oss.atlassian.net/secure/IssueNavigator.jspa?reset=true&mode=hide&jqlQuery=project%20%3D%20JAVA%20AND%20status%20in%20(Open%2C%20Reopened)%20AND%20labels%20%3D%20lhf) -label in JIRA is a good place to start: it marks "low hanging fruits" that don't require -in-depth knowledge of the codebase. +`--force`. Commit history should be as flat as reasonably possible. Multiple commits where each one represents a single logical piece of pull request are fine. +If you want to contribute but don't have a specific issue in mind, it's best to reach out through users slack. ## Editor configuration @@ -91,7 +91,12 @@ mvn test -Pshort The default is "unit". Each profile runs only their own category ("short" will *not* run "unit"). -Integration tests use [CCM](https://github.com/pcmanus/ccm) to bootstrap Cassandra instances. +Integration tests use [CCM](https://github.com/pcmanus/ccm) to bootstrap Cassandra instances. It is recommended to +setup [Scylla CCM](https://github.com/scylladb/scylla-ccm) in its place: +``` +pip3 install https://github.com/scylladb/scylla-ccm/archive/master.zip +``` + Two Maven properties control its execution: - `cassandra.version`: the Cassandra version. This has a default value in the root POM, @@ -99,6 +104,13 @@ Two Maven properties control its execution: - `ipprefix`: the prefix of the IP addresses that the Cassandra instances will bind to (see below). This defaults to `127.0.1.`. +Additionally `-Dscylla.version=${{ matrix.scylla-version }}` can be used instead with Scylla CCM to test against Scylla. + +Examples: +- `mvn test -Pshort -Dcassandra.version=3.11.11` +- `mvn test -Plong -Dcassandra.version=3.11.11` +- `mvn verify -Plong -Dscylla.version=4.3.6` + CCM launches multiple Cassandra instances on localhost by binding to different addresses. The driver uses up to 10 different instances (127.0.1.1 to 127.0.1.10 with the default prefix). diff --git a/testing/README.md b/testing/README.md index 4dfbb525351..3b378d3a99c 100644 --- a/testing/README.md +++ b/testing/README.md @@ -2,7 +2,7 @@ ### Install CCM - pip install ccm + pip3 install https://github.com/scylladb/scylla-ccm/archive/master.zip ### Setup CCM Loopbacks (required for OSX) From 177cc65ed15795fa5cddd2154a77bb8fbd69262f Mon Sep 17 00:00:00 2001 From: Piotr Grabowski Date: Fri, 17 Jun 2022 14:08:28 +0200 Subject: [PATCH 105/112] Regenerate SSL keys used in integration tests Regenerate SSL keys used in integration tests, because the certificates were expired. The new certificates have 100-year expiration date. --- .../com/datastax/driver/core/CCMBridge.java | 8 +-- driver-core/src/test/resources/client.crt | 40 ++++++++------ driver-core/src/test/resources/client.key | 52 +++++++++--------- .../src/test/resources/client.keystore | Bin 2292 -> 2438 bytes .../src/test/resources/client.truststore | Bin 1009 -> 1151 bytes .../src/test/resources/server.keystore | Bin 2299 -> 2436 bytes .../src/test/resources/server.truststore | Bin 1004 -> 1151 bytes 7 files changed, 53 insertions(+), 47 deletions(-) diff --git a/driver-core/src/test/java/com/datastax/driver/core/CCMBridge.java b/driver-core/src/test/java/com/datastax/driver/core/CCMBridge.java index dfe37938462..b957c9e2947 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/CCMBridge.java +++ b/driver-core/src/test/java/com/datastax/driver/core/CCMBridge.java @@ -77,13 +77,13 @@ public class CCMBridge implements CCMAccess { private static final Set CASSANDRA_INSTALL_ARGS; - public static final String DEFAULT_CLIENT_TRUSTSTORE_PASSWORD = "cassandra1sfun"; + public static final String DEFAULT_CLIENT_TRUSTSTORE_PASSWORD = "scylla1sfun"; public static final String DEFAULT_CLIENT_TRUSTSTORE_PATH = "/client.truststore"; public static final File DEFAULT_CLIENT_TRUSTSTORE_FILE = createTempStore(DEFAULT_CLIENT_TRUSTSTORE_PATH); - public static final String DEFAULT_CLIENT_KEYSTORE_PASSWORD = "cassandra1sfun"; + public static final String DEFAULT_CLIENT_KEYSTORE_PASSWORD = "scylla1sfun"; public static final String DEFAULT_CLIENT_KEYSTORE_PATH = "/client.keystore"; public static final File DEFAULT_CLIENT_KEYSTORE_FILE = @@ -93,13 +93,13 @@ public class CCMBridge implements CCMAccess { public static final File DEFAULT_CLIENT_PRIVATE_KEY_FILE = createTempStore("/client.key"); public static final File DEFAULT_CLIENT_CERT_CHAIN_FILE = createTempStore("/client.crt"); - public static final String DEFAULT_SERVER_TRUSTSTORE_PASSWORD = "cassandra1sfun"; + public static final String DEFAULT_SERVER_TRUSTSTORE_PASSWORD = "scylla1sfun"; public static final String DEFAULT_SERVER_TRUSTSTORE_PATH = "/server.truststore"; private static final File DEFAULT_SERVER_TRUSTSTORE_FILE = createTempStore(DEFAULT_SERVER_TRUSTSTORE_PATH); - public static final String DEFAULT_SERVER_KEYSTORE_PASSWORD = "cassandra1sfun"; + public static final String DEFAULT_SERVER_KEYSTORE_PASSWORD = "scylla1sfun"; public static final String DEFAULT_SERVER_KEYSTORE_PATH = "/server.keystore"; private static final File DEFAULT_SERVER_KEYSTORE_FILE = diff --git a/driver-core/src/test/resources/client.crt b/driver-core/src/test/resources/client.crt index 241e5f545d6..8d548f8d327 100644 --- a/driver-core/src/test/resources/client.crt +++ b/driver-core/src/test/resources/client.crt @@ -1,19 +1,25 @@ -----BEGIN CERTIFICATE----- -MIIDqTCCApGgAwIBAgIERLZiJzANBgkqhkiG9w0BAQsFADCBhDELMAkGA1UEBhMCVVMxEzARBgNV -BAgTCkNhbGlmb3JuaWExFDASBgNVBAcTC1NhbnRhIENsYXJhMRYwFAYDVQQKEw1EYXRhU3RheCBJ -bmMuMRowGAYDVQQLExFEcml2ZXJzIGFuZCBUb29sczEWMBQGA1UEAxMNRHJpdmVyIENsaWVudDAe -Fw0xNTAzMTIwMTA4MjRaFw0xNTA2MTAwMTA4MjRaMIGEMQswCQYDVQQGEwJVUzETMBEGA1UECBMK -Q2FsaWZvcm5pYTEUMBIGA1UEBxMLU2FudGEgQ2xhcmExFjAUBgNVBAoTDURhdGFTdGF4IEluYy4x -GjAYBgNVBAsTEURyaXZlcnMgYW5kIFRvb2xzMRYwFAYDVQQDEw1Ecml2ZXIgQ2xpZW50MIIBIjAN -BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAq0J0EoZQnOv2KRrvwA+1ZL9VZ3hDdQMwkDfitoGN -B6upvMUZpf8W+ReQmaY6yacYJthHzsZTd3G97Bw81/3VNHQB9PnXGmbupMLVXeFXysSCs1nPEdJl -TBbJXWHSh41AE4ejJaoCoTuigKGwI9lTbOOPDz/WMcio9nagsCJdsdG2+TxmR7RlyzEIANJ0wpnL -JEIeJmRS2loLVuCU4lZ9hDLN57cP9jEVD4Hk2kJD4Exx7G9HQFH+/63H6XtEDZsJcYldR7yBNsGr -pz9CupULCS1R40ePQEIlUXhM4ft/hsljQybLQvvfXNVTvk5WgY7LNaBJy6A/Tfg32SXEn3wUvwID -AQABoyEwHzAdBgNVHQ4EFgQUt+JDOeziZzHNYTFU/FL9PhDGqSQwDQYJKoZIhvcNAQELBQADggEB -ADOYpa1f9dPcVLq3RiMytajHo3YJ0AQqGRzVgngkeRFSdhyy/y+/8D0/V5s6QbNt/l6x3FxkoiTR -1Lptf96eylnS5AkGQTgogJP53cSNrqkDL0IyyvErSiATEXNpBKz6ivY+e5J1GLTfX9Ylu8limzIq -Y6YBnr8fMLD6XWraxtzzkJ9NIPhhaz696rxqr8ix6uy0mgxR/7/jUglreimZkLW40/qiABgX7Evw -UqpuJWmqNbQP9UXecx/UJ0hdxxxuxkZsoRoQwWYhkeT4aGCLJv/hjiNTfFAt23uHe0LVfW/HqykW -KoEj8F08mJVe5ZfpjF974i5qO9PU9XxvLfLjNvo= +MIIEPTCCAyWgAwIBAgIUXQymVOmOttUHZI7Gi5AsX+VNprwwDQYJKoZIhvcNAQEL +BQAwgawxCzAJBgNVBAYTAlBMMREwDwYDVQQIDAhNYXpvdmlhbjEPMA0GA1UEBwwG +V2Fyc2F3MRwwGgYDVQQKDBNTY3lsbGFEQiBTcC4geiBvLm8uMRYwFAYDVQQLDA1T +Y3lsbGEgTm9kZSAxMRYwFAYDVQQDDA1TY3lsbGEgTm9kZSAxMSswKQYJKoZIhvcN +AQkBFhxwaW90ci5ncmFib3dza2lAc2N5bGxhZGIuY29tMCAXDTIyMDYxNzEwNTkw +NVoYDzIxMjIwNTI0MTA1OTA1WjCBrDELMAkGA1UEBhMCUEwxETAPBgNVBAgMCE1h +em92aWFuMQ8wDQYDVQQHDAZXYXJzYXcxHDAaBgNVBAoME1NjeWxsYURCIFNwLiB6 +IG8uby4xFjAUBgNVBAsMDVNjeWxsYSBOb2RlIDExFjAUBgNVBAMMDVNjeWxsYSBO +b2RlIDExKzApBgkqhkiG9w0BCQEWHHBpb3RyLmdyYWJvd3NraUBzY3lsbGFkYi5j +b20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDKYYuwE878o7A/h2eW +tpmOCIX6iRLA0p+6Ndhsm6WVts/YqbxB9J0ICzZs4RWf2rbE55qz0FpLZol4qwWO +WEizRfGSBnJPiUMKHEUyU51rGXjjwGbxBvV06dQlcfMT1wxhJ+pTEuYPsawQLoGR +2ByUecELweQwZ+ynDIPqeoUZnUFxHi+r4Aszf6xlLFyb2ePU2op0n/RMqLpqtFPK +BhjhXkbCcwk246C5M6bEjC0s09H9oyO4WM37cFjMcRMX+w8R0/VwKAtS0ztekXsg +VYD94fEKAs8LafjoYTpPqhQ9XEKbKHB9WHedlaPw+5Vldvv1Wrbv1n1G7fc+X69D +mnLnAgMBAAGjUzBRMB0GA1UdDgQWBBQEC/E0DYGLVULfF/fr1wgVbxGYoTAfBgNV +HSMEGDAWgBQEC/E0DYGLVULfF/fr1wgVbxGYoTAPBgNVHRMBAf8EBTADAQH/MA0G +CSqGSIb3DQEBCwUAA4IBAQC6voLj0O//6Mfc0FUb8S3v4QFd/1NY94PjTSL3jfVC +5LVuynuLrhYXm8c985310DrsPwxpCuEFm7dDHC+WIo7gu1TZdNNP7NtFVUzHeJFo +p+gIMUEEyou46glEx6pBJSj3DpvQu2BFLIotKfjAmc0qTLj4mL9/rWTjy0uKs5Ls +6A5+xzIvVQF5GLP7vn6dD72DDzNxcUynrJXx4q/iczmYvQtGFjJ7gG+nrmefXF0T +MDVftixHw5ZHT0pkH2FA8OzqzIDfU4hovkFiFb5fIea9kbbD1HpjAegZshHKql+y +U8/8o09NhR7SLhZwZxiuhJo2d/qD2SvJcCyPWqrtczZ8 -----END CERTIFICATE----- diff --git a/driver-core/src/test/resources/client.key b/driver-core/src/test/resources/client.key index 05bb6fad83d..ac1ca512ba0 100644 --- a/driver-core/src/test/resources/client.key +++ b/driver-core/src/test/resources/client.key @@ -1,28 +1,28 @@ -----BEGIN PRIVATE KEY----- -MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCrQnQShlCc6/Yp -Gu/AD7Vkv1VneEN1AzCQN+K2gY0Hq6m8xRml/xb5F5CZpjrJpxgm2EfOxlN3cb3s -HDzX/dU0dAH0+dcaZu6kwtVd4VfKxIKzWc8R0mVMFsldYdKHjUATh6MlqgKhO6KA -obAj2VNs448PP9YxyKj2dqCwIl2x0bb5PGZHtGXLMQgA0nTCmcskQh4mZFLaWgtW -4JTiVn2EMs3ntw/2MRUPgeTaQkPgTHHsb0dAUf7/rcfpe0QNmwlxiV1HvIE2waun -P0K6lQsJLVHjR49AQiVReEzh+3+GyWNDJstC+99c1VO+TlaBjss1oEnLoD9N+DfZ -JcSffBS/AgMBAAECggEAMHATNEoY8skqTmX3+XJ3847KMQGq0qWcTq3/yW7K3KiI -0YNNxc1oSfuIQmzpo69G/XWembUuVlItTWKPMufwLW3CP++KD0WdqawRfQQHOKpr -7R4xmvDPBb5MJcVNLlmdDekHE9gJ9mBPjeItV3ZYSivygnWjt2DxqQPUXvzZUzlu -munh3H5x6ehXVHDYGzosPgTpfmLHdlNfvF4x9bcklMMbCOyoPttXB2uHWOvUIS+/ -2YEkPmJfZdpudI7RqN75yYi7N8+gpnCTp530zA2yONyZ8THqEG/0nWy+02/zm5sm -gs1saYNwXME2IPekZNM/pJh2DtnTcxZaUt84q2nhAQKBgQDi8mgvE8ekbs6DLfKK -YAtTuOcLRpuvJqxtiQecqaumzgZnmHtkm6yuDNjieqB6OITudP4NdhPpyvOFJw46 -zTHMpGqZboxHuxoxMOgmyeiO+cdSwGHobr1zUcT8jVmLH7A+LtL5hHi+733EbCRh -sF04Vq9L46Q52mhcZKbs56U8MQKBgQDBLwotnOJH7hZD5sKS0o8/Sfj3pgzXEDpL -RfnrBPGhLn+1zhPEYsEW3mKI/yHiOZHNXZMQ6oYmxThg03qKTjaY8OIm8sg/zrlZ -M+o3wVnAzayrhw5gZ8DzqioHhEUMOAwwRFXRpfxqj8regrLjE9KaYty8ZYAFtwuH -W2S3+MVT7wKBgGQx7XlLXErmeNpFgN1Cxf1ylt7Nj5Jmmp3Jb8jkx9ne/8jg8ylZ -6YT2OxLSXONY7Kdyk29SADyp05WnxoqDaUcWF9IhkmFg45FwLC5j2f61nCCWuyMp -MQ8mvLdbmHrpxJ/PgGmU6NIzXe1IaU+P07g53S6+FBVOreCMt33ET5khAoGAGgKz -ZCDTdsvfw5S2bf5buzHCi9WXtP1CXBA37iTkQ8d2+oucrbx+Mw4ORlPTxBnsP7Jx -sr1hAqdbR+4xeZ2+TCliycu2mqDC4/fReWBXLVaEATRWAzT1DdnDfu+YPGTvfzA0 -Pd4TdmWV8w+19k0c9hyJi/Q+oIZczwTHMt4T85ECgYAe4J0ht6b6kPEG3d9vxmMN -T23S+ucYLHnfT1nacTuBZnMphWHhSqf8UJloIGpusxDU84MdAp22Jpd9SfPi9KK9 -yZY9WDJGeb0Yk7ML1R5GcAAkM78lUw/rS2VfMjQFnnUl2jVMS8adcm8/vHcpkcn7 -MufMEZzDpeO/aI8nbClktw== +MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDKYYuwE878o7A/ +h2eWtpmOCIX6iRLA0p+6Ndhsm6WVts/YqbxB9J0ICzZs4RWf2rbE55qz0FpLZol4 +qwWOWEizRfGSBnJPiUMKHEUyU51rGXjjwGbxBvV06dQlcfMT1wxhJ+pTEuYPsawQ +LoGR2ByUecELweQwZ+ynDIPqeoUZnUFxHi+r4Aszf6xlLFyb2ePU2op0n/RMqLpq +tFPKBhjhXkbCcwk246C5M6bEjC0s09H9oyO4WM37cFjMcRMX+w8R0/VwKAtS0zte +kXsgVYD94fEKAs8LafjoYTpPqhQ9XEKbKHB9WHedlaPw+5Vldvv1Wrbv1n1G7fc+ +X69DmnLnAgMBAAECggEBAMd8z4yIegdd8mUsu1c8NrBihm4mn22iMAAFA4hLBDVH +NimDZiY9UGyVYNiCJiakGHSPN1b3kYmxUOC484kUTNUppK0j3Zm423Qj2bF56jmf +qiIVjWMYUOslchBW+hwcZf9+sOOiRVRC9jAdJ2rzc3iHa1qDjMKKLiObmoyOqJRN +QzERogkpluGnZi7kPTJvdwSY5iW5YLIkYt026GreC1eSHuacOzMtrFaAqEXTDmQl +jhi11HeYjAaGMAzYqBgJ+AMgxbBAejzlYqd+LLkicDuSEollaTbmHqnvNXxdMwX3 +sYmTNC093za6xBgG2JhglRIy4XVMlYm/WaSux/RxEkECgYEA+5S6WG/0Kpgc0xxl +5nP7edON7vUkYp8rSbKEzlc//ywZPioI3jxQEf51AG75ynESV7GhmbgkVJDkVBCy +iUjY4STzmaHmcJ0F1hQhDyZQFwsp3iWQXrC03VCAu2+bmhV7sC7+7bmUB2ZCaKPr +zxKUzb5CvbyWdhv9Oyi3JHYawWMCgYEAze+VMI+6rKo61yq+O/yDOyn5aI6bV2z8 +hFZP5jK9hByxt38quTMpk7jSoJohup3gSLBciYkT5rMK3fLngqxY7g5BnplyWnWC +tKe8trPt+uaxzdyVvtVWIsoiYFTOqXGbbh4njdvike39HZ27yqNvhYudDBgm6Hxt +yew4nOyIIa0CgYEAvoWIhXbrIuKlWZ708Iw/EqiKoT9WubUulBY0iwr6NSVRTImK +w7pLLQVV1+kzFAODT5P+/Km+IajEsYEfo+XeEMrqDBvWpsvTYqdFzfJGztyubURn +S75oif3wL4I7BXplfCxq9N8IYn4nppUU/HFm7VS7uHK8Q1+463dPEra6Vl8CgYEA +xTjpvDQqJypwZ5h7z58pXwP34/aPNs8dlu/CXUfC0D9aw8158RvaearLrRtvqfWA +0px0QxOQh6R4h88VgMPl9zaYCXgTWCaqIrFxvdfb1ioRpoHWt4hAkdjbyz3tHcG7 +hV5Dq0wmVHODsVVaf9q99zuaD/chbA2eZ39fSIoOZZECgYBv+9HIrby+yvhjMacV +D3rwbU1uv3/NFhO0rgP8dDCFCuKxhPzYmiTBklD+81gCaz4pDuIYqwlvKLcVIeER +C6IzDCfWSWibVcHPd0rEcPJC9dLy3OnU5aDQd9j94yEqHwEK6u4ZVvOiO1ASMiMC +exrB+xuqM00fiR3hhoRV168wbA== -----END PRIVATE KEY----- diff --git a/driver-core/src/test/resources/client.keystore b/driver-core/src/test/resources/client.keystore index f1030fdb3773f7107e47ee48cc6645a70065a050..6e98f75cc2b5041a0710460869cc48637e806adc 100644 GIT binary patch literal 2438 zcmdUw`9IWM8^`B6Gu9b~CQFt~i@R*&I~ZBAmN2+gLnKU-WlU&nWlc=cJ+xRF*@k+E z>`G+GT2d0`whdY=Y0w}^Q^~m1v%K!t^LqY)=ZEWc&Ut^%^*ZNV=Q`IBEC?1L5D0YB zfL{jSHhb~GPHD*yh!6~8GCy^jFfWCbSf7--lNs;y2)!{+h%Q26#Encolo(X}H z3Bf16k-uHh{$ZGv>BJ>vEvD4~$<8k_(~&JjIYl#>&RjJ((aW;0( zkxI%x%*coNdFHaJ@)Weidbczle=(r|V@U@L^>ji?T1~hqi-PGwS4N~{lS{#KQ_?L^ zgmAvnw|zlz#dg5P-1=c)?6LNDwvLKH5f0zX&dE4Tl@LgUzn!}pfrU<*c-frRRiko|?!V{-1T@Anv_J4$4|azJ9u9_ziKESSl~7=~q> zt(k_z($sA(+LaEcQ7W2iJRYo99@9~OTn$20f-D_Tsx2m^GL882rf5 zSd9~x->$_1G&l zI@@CU@5=xk?Nt`ni?`l|h+R>5b5phq_Wc$@C+BC`(+vbqOC1gy|pG@=xhbFehnqFvbXgx_~9Ov}(q$uvN>+6(WtR0N4 zPAw5Vno`($c%1Tj5zreNyLy@Bc~ZsjcipOyITWM5-hva#?-Ip=%kHlTc_A z>e?|lX}suzI)7@NAw)!#@iVT?*vl;E@yZ8PerzwxxBDRZrK(Nch96CZ+dulC+e3~+xlWqT=4P+_9tZTuiN@ay`Mlk?4*9BOH) zF(u;-TkuW6@?+#Fw%Y9JywyFJhif;!)UuDS@p=6_Mjp&6$Z?V4?OHZawX@Vkf5o$z zcQoWA=dU2U_iM{>oRMJelSaEstwR+%cPy+k4XUa;UmlH?Prq>@&?{^$g=yOJt11e) zV)39M1Om6%tcWHc9j1B<1_hwdtsclCr@3o&Ln7YSo+hVgl4cx=9)S|VV(N)DiF^qF zKnOv=_;MTq6cdIy!-dh%!}d675cP8)iWGGqN72qv$!Bn=O`lC9f)sWkhlG;DaY~@V zPauv&6TKn>0>}p~F~lG&CJIBt(y%yLaO+PMft2{Cius-9?SsMno5TK_Yk+G1*^(F_ zs}w|~g@s@#A>>oE@KArMdFZb-yiZ}hXn`O`PC`cq)W_|^fp|j@?tXZqXQ@iNC(8BbO3;Klas5_y*~=7%`Q_i>awnhCVXdXY5Oz35zh(8 zxx=jMbc>!`(b61XuNUm9cYV1Q zQ)OYLi0)=PE!`mdR- z7b?7`U)Uwpr154YW4m;;oqlnHJKH_sywwj|Zc?fZ1*LrMpW> z_lbQ!3LG60w*QHh4Wh_bUdq-F|9){)<9U$gb+^)mQ2iJi7u<0AQ!6Wagzn&P9YKDz Iy+uWT0sBlcTmS$7 literal 2292 zcmd5-`8N~_8=j4f$ufS!TxCB+O*{8VrMk5o3$7P2>`yZrQTs+II<` zk}TQgtF9R%M6x9!OBAwPb-wSM`zL%qygxk8d*1iF=Q+=L-o2&0B>(^bIw;_;;&=1$ za;FC#KqBl`>O26z2SBqRJ7{5k!BhM|2v8LS2Lky35EkUqT_$5+WT&+APE1zRT-$t6 z2^ZAGZ1lGneEF3|Sa*``(S+&^l+@@cnfW#nn1wPvzXuObiE&@qU8DF`Smd!=G_Nu` ztD}c?A9hZD_FtHA9m)EZWJnJ^{A>bvotCs77T!p{!>=aZsY zWmr;?@FkN*vj5k*E~l8ebXw;mKTA`htj|>rt8R&kRNQWS9O5(8X*tjMXyy=H94EvS z8F4c7W^b8Xpp1KYkyfwjZ|+8cXLA(7&c}FY4L?|oOAfYhWLdQCNN^>+oj8UZNhA1u zH4B}1S9Sk;pOOUPER6rM0#}MBxugEoCfe@oi#LUQs8X(}xHMs|Q5HG~7i7>pAE(S_ zpUYu@>P2Mi#gA(YH_xxi@1z{%->t;yOOPibE_UC%jVO0GH?_Flq!kX!?*Jq+jdov8 zi`-l@uTyi@{3z%2?zaAh$&x6KP&B`wm?TA%8QatKLc_i8Z}P1*_PF#XurAJL)l{|` zr;pi}RKQNS8wZ_TMcjOXt*~fWN`f8dDh!;2J(izu6EkCkM9A|yIrxR zqq!B0S*N&>l(Ocb&$k!lO;5S(MmVP^qw*cb>rXuSxQfCa%|zs07*Qk5vG+6f*w4K~ z^Ci@$A@%em<5C0L?ni~8>*T|&Ocm1oEs)?GFFiK7e!b6XCPh6vH8Y{kD#Ng|alAY- zT6#S)9zMs?p77Oga8H%MaY$CS+9uPwx?uIswbe>dyUqA8&S}tLInJ?OX{>!W67DkjCfrtYrW~(q^wC5`HRiI@ z=d~lXwG-@s>epjxU*t3VWNxsf2-VxrsioV5iQ}vY7ZLqw8;IA%3XpEwfwSg@8cVL14zjVqj<}Kln0)9|5{d!XVJ_pFjX1 zh^P8^dH4m;y{H&5^pT(BAq0#>r3X@xcpqv26(f!o`^gF-gb36?Dk+c}iZrLYp)gWt ziJv?S0Vf1_1-l0@kW@MiN%r&eVf=3fd@%E?cd+VbhNESU31PI*8W=1ZgFb`Rbo>Ri zG3fuo|CcjaK)HVkc<^1oETG82+W`uKSU@140vCAXmes@0-&CZQUx+-RwO#fM#Rq}W zsX9}QG0BH2%AUQHEZP^}I+mJQe6FuVLTT9abvG%*zjaYs@9i#6GZ47G^;XK`%by)Q z%A{R?7wfUZ8#u?EDBee*a^jN>5%GnJ<)8xHN6`hf@*^al={q6@Lzv#uZ^8Msa+JD( z#w|S$(*}1oMgYJG?8sy*;AE6&HlvO(+Yf(C*+#@-U(Gd%e8U_SiJ2M2;Xe@l7yV2P zt@rk;dgj9kLfKIN1d8di8143o5(8YzeHc{DdfN1kAx_aclsNe#>Q!@Q zdTwbOlfu@@H)rP?T-?+dQS8cNinW2jKmf4tBw7}I;=lqYgdyS(v8E~f*~KYO%quE} zykoPgFWOzE@J|sBTzDWN5TKD!ROP(E9V53inaE?Gl=c(`L;r%PN=oxsp$a$PHo?;M z`|52g=MC(#&lx@T-E*oNyFz=UFfiES8}&Z7-+?m&I$MGWkdMZ@JRb%8=D0&(9oo3VLlbpk+ mP}g+1gBwggwY6#OZSNuHwd=ZLK?!WZIKbB*-3uzE@Baq)1oIgH diff --git a/driver-core/src/test/resources/client.truststore b/driver-core/src/test/resources/client.truststore index ac2b87c44056d0f22f5d5a5f14eba5f36f08c74d..b698d7bfe40cbd4ea637d62a513bb38860082332 100644 GIT binary patch literal 1151 zcmezO_TO6u1_mY|W(3o$xs}Wx!mMkO0>XqUT+Y7Q#CTa$g=L-rFB_*;n@8JsUPeZ4RtAH{HHO>pDVpV=wW@4TpKTr=)h@FQmJh7-avD{F`Knf(l#UmV?T$z)T=;EXh zT%e~=rI4?euV*M`AOe!*=HZ3NDg>t%m8BNJ#F^2>wGA}kPU2(~lPSo|FDcSXFG@_x zFE7r{bSMVfk&>jBoS$o;AkJ%KWMF1!ZfIa?VQd^F!Ea;;6fiY1feH*Y4>d6=Ax8-# zD+6;ABR_*d6C)Q>6C)$ThC_0@`d^CP=!wkz7P2^EMaln~X*|1pRc7t@wrJ(i?Y8gD zCcIeT7!tW@k`HT#{{r?$U231gdb&a<{4=?Gmu32n)xS126@J|&{LTF6?>pMeUya+I zoC$rjMC!x&gCEV_Ib7LkTDtqeo{Hvs7rkz?|Ika7jq>fR{Wg34=>uy$=d~LC-pU{% z@%(N`yi!1u@{YF1C$THfR20vDG9!=o%5t9H|8`DUJnz!1*vHJD4h64s->miGr%C#c z$7VA<-Jh!}C~6fgxZ(BX^C#U~A=ykK0X&}fcCiMr-v4%eqt_PRUIC*zKE95M=1B*3 zTl_PW&e(Y7QB3pf*v8jIZzH}%aVj0^Gpg)mVrFDuTpVl=XdnwrRkD06Vk{!kfy$FM z?pnmq&@Qnh;q9#3KMN<{FpvjHE3-%#h&5nW07}=g!i^;k#8uiodYo6uwqO4j`L$#5V`qhbM|7eePLDQ|I>f~! zAa?)a#o)Px(XKh%OncX9oLxSvV3Xw`_l@g*?Q^%k%c2!tyEuN{1LffI@MM`Z*CQ(@ z7jJB0d6Uh%z`tK3xKO=!ZE$i|XJ_WAnJtwwe2e=kK9_F%YIP>?cjJxsztz(-&cyqy zUZ{FS^Qoty4qJ8ze#iLR!aFQ$h!0F z8|(d#`gomRElrf&ccyOh8tt7$Guv*xFn;Q@Sy%ReWS}kM)4DBNlE!ZjKd|{cWU%&CO&xicj=TrF#z4VtPTJG literal 1009 zcmezO_TO6u1_mY|W(3o$dHE@+hCrSVca+!~2G$5YQv*u|2IkEMP0Z^JnwX|9U}j=u zVq($e+HlT*myJ`a&7bV8AyP{ zxrGH?iZaVmi;5Kz^HLN-^7C_w4J8f4L2}H(0?vuW#X#|*LlF+Q^p+HGRt>=hOw?ujHkkR#)TZE4ciRbLPSJxc{q?KS+FacqdstWkuwxR{`m=wlg+O z@5|O!t5I9E(OEQkRi)6F_0bhK%sdACU4v5(8X z8Cu<8-NT&5z9mL$yMpHGu-gfxVs6no5?cxbH2!a~PfeRLalXg9#78#Aj+E|x$G!X8 zqynZu)0f<0UCY1Dp6~KEi=E5xY5NLGJ$YH%7w5bWSYByhGF~F`I*O^&is9Lu&s*Fa zQU$<2g+4YI1_Rc4r(OT}}!$P1HlgbWu|u`}J+y_boZ zk%4isqJg}DEHJWV`B=nQL^kifCdl2JCKdPd_ECuq^OOF4;d4h0L||G31|lPaZcSI~ zr`e9p(me_O@%MUzFQIbS6qCD>--4b5ooX7%Z* zH^g5=E^ph3*$S7~xxF#0M{D+}&SEW@w0STJi1+Krrfv4oG%$p0x``u-X}bMtTUOvE@Tc5yS>ySXMPs`3nw4f zT{XNkA^*Wsjc4uUn>Z3U6h8hu&>b-IjrsekLmN8=|Wlw}KipVl{jZ8D6Y*9vyy(Y?*CQG)gqZFgX zsAL%x$=1gbT9jnMgeku2yF5OR@8kOqe1ABPd++mg&*R>E?z!h~eBJm80)fC=2K+Gq zv(-x?x*wSUfnWfd0{w*+;S<#41E7EgSR4RgASeYo7ebhCkzsMo)75neYL*HlTc^aS zA097s-0?)_xaTeBPKgo1_IMKKY=%`|(nURNiuxkFUp{_} zXnru>Tcu;^-W#`w%!j9nc$N)u4vbrM!i-i0=%G5qy_Ut3`P$+Y849iB1ufC&m-c0m zNj4AX@z)A3_oJBXXnLz`ve4;4N#ECrELO+RH|GxrQHNqmpCqoxcg%J9BucLcRrHvO z9Sq*}EoX+k+;uKr{i1HQ!!S+N>T=9rjBqeQ;*b`_@m=>&8dULW`^YFfTtiuO8L3vZ zK9OH2YJdD}`Umof)Z(P)r9hvgrM{`su>0eAno#HdGkXRZ1ETgelMS3qr?|LsNgsAn z&qP(TR(?IhYqVYUxcXDxEb3x!9{-CF!BMQReRG6`k_JMKh0epfP5^O3ax$Fo8Uz#QW8$q<`SK zwj$OiHqbMnTjrc`81ZXYsdWlIw&!gUZHgS>mMXMl(@b}ljc_xfxH@Vg>z?l+ zOZq=9qUO8LcWhoGp1YGWzI}fXM~5SMr9I%d-n*?s4~t=)eEMVEmVjvDwH5)uMAwTBsv& z5G3#>VeOv!`&yBF>oQhd!GURgS>|b6CZ&IBYN^p0f2A3(<}~Id3G8kdjFVi?H0x1P zY<`tuKKhzaWR*I$bX|KBe#)Df=9GMpfTKl*80td!$la-XO?hf5F=QIU6lr1Yav4gyU z({Ah9o<>>^Xd<>v}Ww3fe2z=<+nb zPn9VXmCfIj?RSG!ZSHn6O8KXQvLv;^3=%W^(STykMqn2}C+dn!g)I(OLSGrvM*KHo z?(5~U4poKu5CtcVHUl%kk9#Y~&dhQtif`8mdUK%AX^qOh&)APjB__6HB17|bU65N- z#^}ObkR-BVt@xe4^OyRU+E5k5k)glqwyf?yH4)~CGC-SvKv2uA zdbkfwf$T1ZfB`TVVdf?Qs||2Dx;@6G?{gFIT2ci{N5lC9G^huuKi~i$1OuUyYB54+ z0Y1nPD4zt_#StTp7X3ZgCcMoF7e_b~j*G;IZux8>eqlZj9EpsJ#weiWegi>a32b0& zLVUQ5k7gF;-nC&4v(#`{YXvZ6LspVst4S7!_h?Cn18Mk;BL ziboulm%eL{x#PhI7h(GeCd>^s$sJ}m+=XX}=_ZPZq{bv?x3?K@VC2IX?CIml*L{+{ zkiL3yy##i3T+)rr0z&{0P=-ajq7}EYN>KzV1x3iaDrYm8rJ(aEGI#yI7QS60=8T|s z{+5-YGH9vu|9iskyjGL|fK4b24cTh`9`>!5uoZRyv{P_&_z)Sr_|5dr^JgE7M1xE( zACOi_IhbjETQOyL0k3OZ0jrIss2(f)yokM0&p!0Zm@!`wrSfW~19X2pMEiJsK z;6iM^6Zuli(rLzuDchBoH1dt778=I(bF3-ZJ-EA@xMrjyYeM|B)Gd2T)2ctkcJ3vs z)0Mq|zZ|cAAw8u=Z$88}V^`3MIIOjAe(&SyOK|JYewf}_l|e8 z729Q9_W|z{@7~=}@m+3PU|U#}y1}*d=-ekNYa;PVT03|X???_^7nghKYQ$1s>tOvW;nOIOU4E$fsmWS*>1Aroq3 zsZ2^qD5SDw88j8Lq`11z^TYiUo*&K+@6Y+=ygui=K4<6i&Sww^1lcR_KLrmX2N5uP zWQX*0ssVxE5P%BX0fcz?wRpfVuqH$l42FYXRM=vOhu@{z%zYJ>*%#Lu`g_Qck?-TS zeDm?`9nZH)^)%J)1!aoXJeo>KiAZgFXw;xz#VEHqR=pBC5M}>KvrOJ*Rbs)HHea?jMG)`%z-gPn>p4NmV zu|x9OR%KgjE6iO=c@>i;r?9*JQKj@@)v_O3hfWsv*vKZet-AgpXFtjrd>ER1N4Z5I zPB|*x)miM*dg`RE3}bmd$1#s#b^;nBTy+%FVUgvje1ZFBs5ZVkEy9jih8erMhVRh? zitcmz;$mQL<0NK28*hh;*=+K*w6&}~avnWpHgG>ZJ1Jh|wm#0}gYOZUN5uVe5ysj< z?S|V!N9bk08mBHTA``eQ!Ijus?_+{}{a>hMjr{pibH8ZMFG0`pTP8tftwYaOjxedOYz* zirX3m2ofepDnF{fmXzwQtXsLv=nnGco9TN`VPCfX{3|QaL(1Y2$ZWt2WNVf;P;3`2LZCFsE;6lZ&`nx+% zEhD-Ut*ln@TAp6wQd8FcRp~Ic8Fa&L7am;3pIseS9z52Z@eW-$%kaOic=r&LkuUx6 zLemUVyh^p?bu5azL)%36g)RiY-LJVQv`ziB_)JH)JtM*9%H#c0qCtE(V_*(hSWM9x zt7*BQYL`Dp3&VA3ZJD#5wRhDo+P~CX z48N7!GF?bQ)$hPcY-q8yetduuWrRu|=@Tg|h)HgV+f8@OBZPnZakAAwmnW^8!9BRWNYlGt%60S-(MoN^RABQdHQ*HE+v^s0`NsN+ zckf{ z02SH*P$7j3C)!2j_7Xi_Rz`QJ9~eHkbfEDQpuV15V{3-2DlvjGPwnNjn- zq}=jX2!bCon_6qEt0-@}(0{7ScsL27S1G>a4M{%?nk!vpo;arP%B}L{ZpTM^SISco zgln4hfM*ljTCx1czQbqT4K3s56}$%MBr(j5cm!mW^$-FDgTNI^fFdBjw`_SKm?TWR zne|o_nMIVvZH@OxHsvmjD0& diff --git a/driver-core/src/test/resources/server.truststore b/driver-core/src/test/resources/server.truststore index 1a3cfeea19f285ccadca883055fcd4ce16243d6d..e0a05100e67f1161528115b530b9148121847289 100644 GIT binary patch literal 1151 zcmezO_TO6u1_mY|W(3o$xs}KX-(`CYc-c6$+C196^D;7WvoaVot})~`;ACSCWnmL$ z3h*%$G~fquICwaG6RYyeG86L*`GIDK8 z-~v5`DusN#d_6-k0}+rcHxDmFR>3bnB~`%?CeDm5u5F+RcM>O~m`p)teo2vDdQoCh zetB_rrb98_HnfS>J&O~Y5p$L8#%L=PTh9? z#>zd8U*>Xfo8>$doqucFk>|5EUx@Nf>#SJK+85!m+4bWjwj%#dXD%66qu{yOk`<2+ zqpY3-uY!f1@o!uspw~F@hRl@8gWLz77^J^h&eQy=s#S8XW1*b> z>IdA$^=ndfVrJibeC1YG$^0)qD|TgV2|mRp@i5NqP%)?3;{`j7mmTTR)wz7}?_%X0 z5odoFM4TxU7XQsJc=>CA26xb9>$r*43ZV^uAAaOwI?tW?<3*yC|0)sN7^m491+@|7 zbEhu;@Ox@%+3&AW+umQRb$k2WE`Gi9tfJ>k%!~|-i-QdU4P=3-N|ujBj75Zn`=beO zV|S?2eev(FuXBjz3(i<*APh5)7;U*#|#>?zoYDC}X9>=HL73=JM}t<~J@Z z^jW@U>c>ax9~E29*vsuEW>npfzkFT#{Fqo_1Jn3zI_`(3x%+#i$R|2{c=PH^!~Nin zjD3ztqWj_%pY5Hv?eLYVWX2bgn*>j-ir*A`{?B56-&VOxdSV6X66;!KnU())zNvk( jK&L-y)!SmTnl;>~Zx%X#ZTC4k!T8Rlu*SXjetH7{LTIY0 literal 1004 zcmezO_TO6u1_mY|W(3o0$vK&+c_l!u4|n?leg@VEJyQcq1_tJ}22IQ>4VsuHE?{P2 zWMX1**_Nbkz{|#|)#lOmotKf3o0Y+!vBi+vfRl|ml!Z;0DKywn*gz1(;SlC>PRz+n z%P-2yOf(cR5CRFZ3v&l2=9MHWIOil5B^rtuh=4@7gn3;OOA>=i5-Suu^OE%pr3@rM z;@rZ5E=8GTsYS&KiFqjsA^G_^#V|e0Ks{hNpiv;V8_0?C8k!my8yXoH8dw;aM1i?x zh6YgXU~y&>qY`oeGO{u-H!<=v7&I|*F*PwVGOTtg5o!yV^ZJ{n)cXVcTT}LjrdK$Z zG8;@Vf3&T!mwolhJx3*%{ulcxK4IoEtCPzm)NZ(+I~H7Cxc7~W&Go-mO-dNQ{Jbue z_HN0ctFaHmPaSF69C=>wQmT*G$=Jk8?Y$1d?Tb}cF)g%S)Ua@a^3C9!$Nl{F*9=dr z_*S-HgHr6qi`#zMq`7ZNJ#EOraH-_b%+o4Pa%w3-x1zYi9!z-@R@-89_W5@HZ-%1$ zjZbblIY00ze3S3)5cu!^+T$;)U3h167IwzE?`bqUxO%z0)2^x9oVtOJ-TNJ!R0At~ z9{#RxJDKdPcG~Ip{g|u4`~1Qh`%arK@I1Z1-uH+3P1PgwYee=lF*7nSE><*SDPwSDg}eeWH$ZR-~YkZK76*7ARWOKC8Xqf!-?vdVgE1C73j81*j_EHcQEY4(E^Q-HdUG=0=i7ofzuc_`nnKau- zD|s2?y#4Y98-B%R-8y#X^Mv`n3O^FF?e@OflePZD##e8)%;E|BzyEO%XLgn5%n4g} zT>iC)K|=hE_lKZWd8(PKOt9N@_yN~~Q Vm;T89sG|8j+0p5tsMrp-y#QZ-c@_Ww From 859073766938d2bc846f977b782f02b9ab7e8d71 Mon Sep 17 00:00:00 2001 From: Piotr Grabowski Date: Fri, 17 Jun 2022 14:07:52 +0200 Subject: [PATCH 106/112] Properly set SSL configuration options for Scylla Extend withSSL() and withAuth() methods of CCMBridge to correctly set up SSL keys on Scylla. Convert keys to a format usable by Scylla. --- .../com/datastax/driver/core/CCMBridge.java | 45 +++++++++++++++---- driver-core/src/test/resources/server.crt | 25 +++++++++++ driver-core/src/test/resources/server.key | 28 ++++++++++++ .../src/test/resources/server.truststore.pem | 25 +++++++++++ 4 files changed, 114 insertions(+), 9 deletions(-) create mode 100644 driver-core/src/test/resources/server.crt create mode 100644 driver-core/src/test/resources/server.key create mode 100644 driver-core/src/test/resources/server.truststore.pem diff --git a/driver-core/src/test/java/com/datastax/driver/core/CCMBridge.java b/driver-core/src/test/java/com/datastax/driver/core/CCMBridge.java index b957c9e2947..5d4ef182243 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/CCMBridge.java +++ b/driver-core/src/test/java/com/datastax/driver/core/CCMBridge.java @@ -96,14 +96,26 @@ public class CCMBridge implements CCMAccess { public static final String DEFAULT_SERVER_TRUSTSTORE_PASSWORD = "scylla1sfun"; public static final String DEFAULT_SERVER_TRUSTSTORE_PATH = "/server.truststore"; + public static final String DEFAULT_SERVER_TRUSTSTORE_PEM_PATH = "/server.truststore.pem"; + private static final File DEFAULT_SERVER_TRUSTSTORE_FILE = createTempStore(DEFAULT_SERVER_TRUSTSTORE_PATH); + private static final File DEFAULT_SERVER_TRUSTSTORE_PEM_FILE = + createTempStore(DEFAULT_SERVER_TRUSTSTORE_PEM_PATH); public static final String DEFAULT_SERVER_KEYSTORE_PASSWORD = "scylla1sfun"; public static final String DEFAULT_SERVER_KEYSTORE_PATH = "/server.keystore"; + // Contain the same keypair as the server keystore, but in format usable by Scylla + public static final String DEFAULT_SERVER_PRIVATE_KEY_PATH = "/server.key"; + public static final String DEFAULT_SERVER_CERT_CHAIN_PATH = "/server.crt"; + private static final File DEFAULT_SERVER_KEYSTORE_FILE = createTempStore(DEFAULT_SERVER_KEYSTORE_PATH); + private static final File DEFAULT_SERVER_PRIVATE_KEY_FILE = + createTempStore(DEFAULT_SERVER_PRIVATE_KEY_PATH); + private static final File DEFAULT_SERVER_CERT_CHAIN_FILE = + createTempStore(DEFAULT_SERVER_CERT_CHAIN_PATH); /** * The environment variables to use when invoking CCM. Inherits the current processes environment, @@ -951,11 +963,19 @@ public Builder withoutNodes() { /** Enables SSL encryption. */ public Builder withSSL() { cassandraConfiguration.put("client_encryption_options.enabled", "true"); - cassandraConfiguration.put("client_encryption_options.optional", "false"); - cassandraConfiguration.put( - "client_encryption_options.keystore", DEFAULT_SERVER_KEYSTORE_FILE.getAbsolutePath()); - cassandraConfiguration.put( - "client_encryption_options.keystore_password", DEFAULT_SERVER_KEYSTORE_PASSWORD); + if (GLOBAL_SCYLLA_VERSION_NUMBER != null) { + cassandraConfiguration.put( + "client_encryption_options.certificate", + DEFAULT_SERVER_CERT_CHAIN_FILE.getAbsolutePath()); + cassandraConfiguration.put( + "client_encryption_options.keyfile", DEFAULT_SERVER_PRIVATE_KEY_FILE.getAbsolutePath()); + } else { + cassandraConfiguration.put("client_encryption_options.optional", "false"); + cassandraConfiguration.put( + "client_encryption_options.keystore", DEFAULT_SERVER_KEYSTORE_FILE.getAbsolutePath()); + cassandraConfiguration.put( + "client_encryption_options.keystore_password", DEFAULT_SERVER_KEYSTORE_PASSWORD); + } return this; } @@ -963,10 +983,17 @@ public Builder withSSL() { public Builder withAuth() { withSSL(); cassandraConfiguration.put("client_encryption_options.require_client_auth", "true"); - cassandraConfiguration.put( - "client_encryption_options.truststore", DEFAULT_SERVER_TRUSTSTORE_FILE.getAbsolutePath()); - cassandraConfiguration.put( - "client_encryption_options.truststore_password", DEFAULT_SERVER_TRUSTSTORE_PASSWORD); + if (GLOBAL_SCYLLA_VERSION_NUMBER != null) { + cassandraConfiguration.put( + "client_encryption_options.truststore", + DEFAULT_SERVER_TRUSTSTORE_PEM_FILE.getAbsolutePath()); + } else { + cassandraConfiguration.put( + "client_encryption_options.truststore", + DEFAULT_SERVER_TRUSTSTORE_FILE.getAbsolutePath()); + cassandraConfiguration.put( + "client_encryption_options.truststore_password", DEFAULT_SERVER_TRUSTSTORE_PASSWORD); + } return this; } diff --git a/driver-core/src/test/resources/server.crt b/driver-core/src/test/resources/server.crt new file mode 100644 index 00000000000..632567e1743 --- /dev/null +++ b/driver-core/src/test/resources/server.crt @@ -0,0 +1,25 @@ +-----BEGIN CERTIFICATE----- +MIIEPTCCAyWgAwIBAgIUPFITBaxiUFYSeETN6rIB0xUkBJ4wDQYJKoZIhvcNAQEL +BQAwgawxCzAJBgNVBAYTAlBMMREwDwYDVQQIDAhNYXpvdmlhbjEPMA0GA1UEBwwG +V2Fyc2F3MRwwGgYDVQQKDBNTY3lsbGFEQiBTcC4geiBvLm8uMRYwFAYDVQQLDA1T +Y3lsbGEgU2VydmVyMRYwFAYDVQQDDA1TY3lsbGEgU2VydmVyMSswKQYJKoZIhvcN +AQkBFhxwaW90ci5ncmFib3dza2lAc2N5bGxhZGIuY29tMCAXDTIyMDYxNzEwNTgz +M1oYDzIxMjIwNTI0MTA1ODMzWjCBrDELMAkGA1UEBhMCUEwxETAPBgNVBAgMCE1h +em92aWFuMQ8wDQYDVQQHDAZXYXJzYXcxHDAaBgNVBAoME1NjeWxsYURCIFNwLiB6 +IG8uby4xFjAUBgNVBAsMDVNjeWxsYSBTZXJ2ZXIxFjAUBgNVBAMMDVNjeWxsYSBT +ZXJ2ZXIxKzApBgkqhkiG9w0BCQEWHHBpb3RyLmdyYWJvd3NraUBzY3lsbGFkYi5j +b20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCwwh66j+kV2IxZbfZU +o1iodP98lgy6TSSauPaiqcW3Pe82kOioQVRZspJMBYhPoAfiiibyVoyKVZD+NN3d +BJe4q/qxgnH1thP2N8X73CsD9TOG5MxV4qQa8M/B8TbuQNS5NXW74Lx4g97RStsH ++C5lHVpNiX32m5/LwK1JnoUx+7UAFBjn3VRfIlCCI7iGWeRdqcx4c5/kmG4N1KcM ++/65lKOe0ppd4wPywlOuR7Mq6Pk0Z/jjNplJR+clICEqcqDYSvTz8i3aVGsCFFAM +Sd66BVIF3/bXsUq0DY0QMn4ODoh4g5LAuzj+MRtoscziXIObXYHrcu1Y9loJIsKO +MnmNAgMBAAGjUzBRMB0GA1UdDgQWBBQbUSOSsbqiAICHGLRg7Zrb+XGT2DAfBgNV +HSMEGDAWgBQbUSOSsbqiAICHGLRg7Zrb+XGT2DAPBgNVHRMBAf8EBTADAQH/MA0G +CSqGSIb3DQEBCwUAA4IBAQAfCtnXS3Mw8O86s8fF5jcPZDqPRhckh0iMQ6odh9f+ +WfWIo+NDIP7ELFvhl1s2GsIKAhAW39HRU51xW0VsCwK9rijNp5pwsjnCR7Gu+r5H +P90EKld9o1+e4CNTd1djHGZFxKmTc7GCBOxrDaBPjyhTcSeNrVNjiomJacqZhHmY +TXOOePN1sfU6zFH7gdjv+ydnaMxfTKuhJdQlyXH5Ny8ZOXH988kZcCtC0YdF6c/B +xlHM7muPeyiEioerM+xmRYsiZPURBbnN7Du/4o4NQ+qlYR2+zH6zrCu5cpmG2ugz +5UyzLR3AGVE9AeV+tLQepvIaCGO7aHQoNZWKd5bDJPkO +-----END CERTIFICATE----- diff --git a/driver-core/src/test/resources/server.key b/driver-core/src/test/resources/server.key new file mode 100644 index 00000000000..b234b426513 --- /dev/null +++ b/driver-core/src/test/resources/server.key @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCwwh66j+kV2IxZ +bfZUo1iodP98lgy6TSSauPaiqcW3Pe82kOioQVRZspJMBYhPoAfiiibyVoyKVZD+ +NN3dBJe4q/qxgnH1thP2N8X73CsD9TOG5MxV4qQa8M/B8TbuQNS5NXW74Lx4g97R +StsH+C5lHVpNiX32m5/LwK1JnoUx+7UAFBjn3VRfIlCCI7iGWeRdqcx4c5/kmG4N +1KcM+/65lKOe0ppd4wPywlOuR7Mq6Pk0Z/jjNplJR+clICEqcqDYSvTz8i3aVGsC +FFAMSd66BVIF3/bXsUq0DY0QMn4ODoh4g5LAuzj+MRtoscziXIObXYHrcu1Y9loJ +IsKOMnmNAgMBAAECggEAEPTeW8lYc+cNN7sLyXzOEYL/y2TdnbWu0ET0LBCbTgPc +AeEO4K07uUsfK7nQJMtWVk4ohFD3NIIW4bwSmJRLNcURzJuV8RtheNpK3Ol3Gu8X +3VXvoEGYupjlZVaNjXecsJPHUpmxmuITqwJCVtZhJQQW2J9a/SBayQIX3Zsebfft +pHDZZgV2WLWYpLplmxqqxvEiSx+enTHRQYoiKMfmPcBlbzybgFatKe3vIRDTaMPL +ORakqu1NE/mBOVLYUUNZn47xi36Kt8JGHsXPk31ReYh2Y5CYzU0miUhPrRfIVT36 +XjHtw6d/5WF17i/69/pgUYoTbfhuMxIH9FyOjtUXhQKBgQDnhc+1PnfQc0LBA290 +IpHvPWK72i7gQdkpwB/lebsBT7nPiAS575WjssKVdO0UkVL3yd38fGSlVWh0NSzb +au07rGZkNMD4HzoeoXrPE+nxDUj3YIs5u8Lv6u1NYShpYSCcYcAvKzvI7/7VGcbh +t3UbEzarEaFS0DzD4K6AyPRCpwKBgQDDchp0kLn9/WJ/j4T6li4V4Un8sjlwfFTj +/RuAl101DL7OZ0Nci15Lav6E5Es/yD3ZecX5kZ30Y6nQZO7ZRLntYUsClEVbbKM9 +t3S4asyb1fIloO8W25jZ+VfpyoGIZdJKOVy8+qIGwtoQktcp4F/NWvp09euoJ49m +lRJKWKjsqwKBgFk3AREQX08d+y0xS7Nu1tlfyDonG0UjWrFx7ViaDeu1cx57hYa4 +werwqXa6NdllHpmJWlc+//GN9dBB5WUv0PbbuiEHCw0Ry22eQBqny9AtlF5u/3dh +2P5mgsb8l3v0B4L7T/ldKY6GnKY1ZqP389JZFwnYo1esEp5QaC4MQcOlAoGBAKyP +Zuo6Ce1FtZyYk7lHtYLd+Zwho3M8Yxs0kv6zJbk7+o90PtZLusJtwjCE/CdhXbJQ +wMn7lnF7OShkpTmxY1NCDp9FWANDZNGN04Er0mFYwUYV1GLjGg6CBuvFPx61f7jG +8qlrxHihuzTc4Rn5H7zJMc7ofdtmqkbRIWgA5YynAoGALwtuVOjSKWHVPQJIOxpF +AXMDw/2rgBHv8Ty/LCDRZTCLml34dCbESlBDLzzvn2kq5B4tfJcgXlKYrswLwc25 +5OTEvueg7JdkeyIYpznTU0ve4HRd21YKpPe0mAPxmwKZoBxXISlshAYgTaRcna3S +f/Lx+nkNVqDCzb2Y3/89Cgk= +-----END PRIVATE KEY----- diff --git a/driver-core/src/test/resources/server.truststore.pem b/driver-core/src/test/resources/server.truststore.pem new file mode 100644 index 00000000000..8d548f8d327 --- /dev/null +++ b/driver-core/src/test/resources/server.truststore.pem @@ -0,0 +1,25 @@ +-----BEGIN CERTIFICATE----- +MIIEPTCCAyWgAwIBAgIUXQymVOmOttUHZI7Gi5AsX+VNprwwDQYJKoZIhvcNAQEL +BQAwgawxCzAJBgNVBAYTAlBMMREwDwYDVQQIDAhNYXpvdmlhbjEPMA0GA1UEBwwG +V2Fyc2F3MRwwGgYDVQQKDBNTY3lsbGFEQiBTcC4geiBvLm8uMRYwFAYDVQQLDA1T +Y3lsbGEgTm9kZSAxMRYwFAYDVQQDDA1TY3lsbGEgTm9kZSAxMSswKQYJKoZIhvcN +AQkBFhxwaW90ci5ncmFib3dza2lAc2N5bGxhZGIuY29tMCAXDTIyMDYxNzEwNTkw +NVoYDzIxMjIwNTI0MTA1OTA1WjCBrDELMAkGA1UEBhMCUEwxETAPBgNVBAgMCE1h +em92aWFuMQ8wDQYDVQQHDAZXYXJzYXcxHDAaBgNVBAoME1NjeWxsYURCIFNwLiB6 +IG8uby4xFjAUBgNVBAsMDVNjeWxsYSBOb2RlIDExFjAUBgNVBAMMDVNjeWxsYSBO +b2RlIDExKzApBgkqhkiG9w0BCQEWHHBpb3RyLmdyYWJvd3NraUBzY3lsbGFkYi5j +b20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDKYYuwE878o7A/h2eW +tpmOCIX6iRLA0p+6Ndhsm6WVts/YqbxB9J0ICzZs4RWf2rbE55qz0FpLZol4qwWO +WEizRfGSBnJPiUMKHEUyU51rGXjjwGbxBvV06dQlcfMT1wxhJ+pTEuYPsawQLoGR +2ByUecELweQwZ+ynDIPqeoUZnUFxHi+r4Aszf6xlLFyb2ePU2op0n/RMqLpqtFPK +BhjhXkbCcwk246C5M6bEjC0s09H9oyO4WM37cFjMcRMX+w8R0/VwKAtS0ztekXsg +VYD94fEKAs8LafjoYTpPqhQ9XEKbKHB9WHedlaPw+5Vldvv1Wrbv1n1G7fc+X69D +mnLnAgMBAAGjUzBRMB0GA1UdDgQWBBQEC/E0DYGLVULfF/fr1wgVbxGYoTAfBgNV +HSMEGDAWgBQEC/E0DYGLVULfF/fr1wgVbxGYoTAPBgNVHRMBAf8EBTADAQH/MA0G +CSqGSIb3DQEBCwUAA4IBAQC6voLj0O//6Mfc0FUb8S3v4QFd/1NY94PjTSL3jfVC +5LVuynuLrhYXm8c985310DrsPwxpCuEFm7dDHC+WIo7gu1TZdNNP7NtFVUzHeJFo +p+gIMUEEyou46glEx6pBJSj3DpvQu2BFLIotKfjAmc0qTLj4mL9/rWTjy0uKs5Ls +6A5+xzIvVQF5GLP7vn6dD72DDzNxcUynrJXx4q/iczmYvQtGFjJ7gG+nrmefXF0T +MDVftixHw5ZHT0pkH2FA8OzqzIDfU4hovkFiFb5fIea9kbbD1HpjAegZshHKql+y +U8/8o09NhR7SLhZwZxiuhJo2d/qD2SvJcCyPWqrtczZ8 +-----END CERTIFICATE----- From a8598b78e3c9d531d6bcb0ff88459ea14863fe5f Mon Sep 17 00:00:00 2001 From: Piotr Grabowski Date: Fri, 17 Jun 2022 13:57:55 +0200 Subject: [PATCH 107/112] Configure libssl1.0.0 for SSL tests Add installing of libssl1.0.0 on GitHub Actions for the SSL tests. Fix tc-native detection of libssl1.0.0 on Fedora systems. --- .github/workflows/tests@v1.yml | 6 ++++++ CONTRIBUTING.md | 3 +++ pom.xml | 3 +++ 3 files changed, 12 insertions(+) diff --git a/.github/workflows/tests@v1.yml b/.github/workflows/tests@v1.yml index f783372f123..80702698380 100644 --- a/.github/workflows/tests@v1.yml +++ b/.github/workflows/tests@v1.yml @@ -139,6 +139,9 @@ jobs: - name: Setup environment run: | + sudo sh -c "echo 'deb http://security.ubuntu.com/ubuntu xenial-security main' >> /etc/apt/sources.list" + sudo apt-get update + sudo apt-get install libssl1.0.0 pip3 install https://github.com/scylladb/scylla-ccm/archive/master.zip - name: Run integration tests on Cassandra (${{ matrix.cassandra-version }}) @@ -193,6 +196,9 @@ jobs: - name: Setup environment run: | + sudo sh -c "echo 'deb http://security.ubuntu.com/ubuntu xenial-security main' >> /etc/apt/sources.list" + sudo apt-get update + sudo apt-get install libssl1.0.0 pip3 install https://github.com/scylladb/scylla-ccm/archive/master.zip sudo sh -c "echo 2097152 >> /proc/sys/fs/aio-max-nr" diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b8590885903..be63f984c2b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -97,6 +97,9 @@ setup [Scylla CCM](https://github.com/scylladb/scylla-ccm) in its place: pip3 install https://github.com/scylladb/scylla-ccm/archive/master.zip ``` +The SSL tests use `libssl.1.0.0.so`. Before starting the tests, make sure it is installed on your system +(`compat-openssl10` on Fedora and `libssl1.0.0` on Ubuntu, `xenial-security` repository source). + Two Maven properties control its execution: - `cassandra.version`: the Cassandra version. This has a default value in the root POM, diff --git a/pom.xml b/pom.xml index 028ae5179ba..307e2df8864 100644 --- a/pom.xml +++ b/pom.xml @@ -92,6 +92,9 @@ unit true + + fedora From 57e7893a502a0c42c5fa0a64ef19484e3a896824 Mon Sep 17 00:00:00 2001 From: Piotr Grabowski Date: Fri, 17 Jun 2022 13:58:15 +0200 Subject: [PATCH 108/112] Re-enable SSL integration tests Re-enable all SSL integration tests on both Cassandra and Scylla. Refs #96. --- .../com/datastax/driver/core/Jdk8SSLEncryptionTest.java | 6 +----- .../java/com/datastax/driver/core/NettyOptionsTest.java | 4 +--- .../driver/core/SSLAuthenticatedEncryptionTest.java | 9 ++------- .../java/com/datastax/driver/core/SSLEncryptionTest.java | 9 ++------- .../test/java/com/datastax/driver/core/SSLTestBase.java | 2 -- 5 files changed, 6 insertions(+), 24 deletions(-) diff --git a/driver-core/src/test/java/com/datastax/driver/core/Jdk8SSLEncryptionTest.java b/driver-core/src/test/java/com/datastax/driver/core/Jdk8SSLEncryptionTest.java index 7282fe2e7cb..8066f18affe 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/Jdk8SSLEncryptionTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/Jdk8SSLEncryptionTest.java @@ -62,11 +62,7 @@ public class Jdk8SSLEncryptionTest extends SSLTestBase { * @jira_ticket JAVA-1364 * @since 3.2.0 */ - @Test( - groups = "short", - dataProvider = "sslImplementation", - dataProviderClass = SSLTestBase.class, - enabled = false /* @IntegrationTestDisabledNettyFailure @IntegrationTestDisabledSSL */) + @Test(groups = "short", dataProvider = "sslImplementation", dataProviderClass = SSLTestBase.class) public void should_pass_peer_address_to_engine(SslImplementation sslImplementation) throws Exception { String expectedPeerHost = TestUtils.IP_PREFIX + "1"; diff --git a/driver-core/src/test/java/com/datastax/driver/core/NettyOptionsTest.java b/driver-core/src/test/java/com/datastax/driver/core/NettyOptionsTest.java index 8d4f10b55e1..5c7fc1fc4de 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/NettyOptionsTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/NettyOptionsTest.java @@ -54,9 +54,7 @@ public void should_invoke_netty_options_hooks_single_node() throws Exception { } @CCMConfig(numberOfNodes = 3) - @Test( - groups = "short", - enabled = false /* @IntegrationTestDisabledNettyFailure @IntegrationTestDisabledSSL */) + @Test(groups = "short") public void should_invoke_netty_options_hooks_multi_node() throws Exception { should_invoke_netty_options_hooks(3, 4); } diff --git a/driver-core/src/test/java/com/datastax/driver/core/SSLAuthenticatedEncryptionTest.java b/driver-core/src/test/java/com/datastax/driver/core/SSLAuthenticatedEncryptionTest.java index 3689d51d134..de8c400dba9 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/SSLAuthenticatedEncryptionTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/SSLAuthenticatedEncryptionTest.java @@ -40,11 +40,7 @@ public class SSLAuthenticatedEncryptionTest extends SSLTestBase { * @expected_result Connection can be established to a cassandra node using SSL that requires * client auth. */ - @Test( - groups = "short", - dataProvider = "sslImplementation", - dataProviderClass = SSLTestBase.class, - enabled = false /* @IntegrationTestDisabledNettyFailure @IntegrationTestDisabledSSL */) + @Test(groups = "short", dataProvider = "sslImplementation", dataProviderClass = SSLTestBase.class) public void should_connect_with_ssl_with_client_auth_and_node_requires_auth( SslImplementation sslImplementation) throws Exception { connectWithSSLOptions(getSSLOptions(sslImplementation, true, true)); @@ -62,8 +58,7 @@ public void should_connect_with_ssl_with_client_auth_and_node_requires_auth( groups = "short", dataProvider = "sslImplementation", dataProviderClass = SSLTestBase.class, - expectedExceptions = {NoHostAvailableException.class}, - enabled = false /* @IntegrationTestDisabledNettyFailure @IntegrationTestDisabledSSL */) + expectedExceptions = {NoHostAvailableException.class}) public void should_not_connect_without_client_auth_but_node_requires_auth( SslImplementation sslImplementation) throws Exception { connectWithSSLOptions(getSSLOptions(sslImplementation, false, true)); diff --git a/driver-core/src/test/java/com/datastax/driver/core/SSLEncryptionTest.java b/driver-core/src/test/java/com/datastax/driver/core/SSLEncryptionTest.java index 11c40654ef8..cd5b40d549d 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/SSLEncryptionTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/SSLEncryptionTest.java @@ -41,11 +41,7 @@ public class SSLEncryptionTest extends SSLTestBase { * @test_category connection:ssl * @expected_result Connection can be established to a cassandra node using SSL. */ - @Test( - groups = "short", - dataProvider = "sslImplementation", - dataProviderClass = SSLTestBase.class, - enabled = false /* @IntegrationTestDisabledNettyFailure @IntegrationTestDisabledSSL */) + @Test(groups = "short", dataProvider = "sslImplementation", dataProviderClass = SSLTestBase.class) public void should_connect_with_ssl_without_client_auth_and_node_doesnt_require_auth( SslImplementation sslImplementation) throws Exception { connectWithSSLOptions(getSSLOptions(sslImplementation, false, true)); @@ -63,8 +59,7 @@ public void should_connect_with_ssl_without_client_auth_and_node_doesnt_require_ groups = "short", dataProvider = "sslImplementation", dataProviderClass = SSLTestBase.class, - expectedExceptions = {NoHostAvailableException.class}, - enabled = false /* @IntegrationTestDisabledNettyFailure @IntegrationTestDisabledSSL */) + expectedExceptions = {NoHostAvailableException.class}) public void should_not_connect_with_ssl_without_trusting_server_cert( SslImplementation sslImplementation) throws Exception { connectWithSSLOptions(getSSLOptions(sslImplementation, false, false)); diff --git a/driver-core/src/test/java/com/datastax/driver/core/SSLTestBase.java b/driver-core/src/test/java/com/datastax/driver/core/SSLTestBase.java index 0c8e37b412d..e4b91b3abbf 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/SSLTestBase.java +++ b/driver-core/src/test/java/com/datastax/driver/core/SSLTestBase.java @@ -26,7 +26,6 @@ import static io.netty.handler.ssl.SslProvider.OPENSSL; import static org.assertj.core.api.Assertions.fail; -import com.datastax.driver.core.utils.ScyllaSkip; import io.netty.handler.ssl.SslContextBuilder; import java.security.KeyStore; import java.security.SecureRandom; @@ -35,7 +34,6 @@ import javax.net.ssl.TrustManagerFactory; import org.testng.annotations.DataProvider; -@ScyllaSkip /* @IntegrationTestDisabledScyllaUnsupportedFunctionality @IntegrationTestDisabledSSL */ @CCMConfig(ssl = true, createCluster = false) public abstract class SSLTestBase extends CCMTestsSupport { From 0c8957f8b57130b8c8ff77b793c043ac94e5db81 Mon Sep 17 00:00:00 2001 From: Bouncheck <36934780+Bouncheck@users.noreply.github.com> Date: Tue, 12 Jul 2022 16:24:00 +0200 Subject: [PATCH 109/112] Adds reports workflow for 4.x test workflows Near identical to 3.x version (except names). --- .github/workflows/tests-reports-4x@v1.yml | 24 +++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 .github/workflows/tests-reports-4x@v1.yml diff --git a/.github/workflows/tests-reports-4x@v1.yml b/.github/workflows/tests-reports-4x@v1.yml new file mode 100644 index 00000000000..02921c9a9cd --- /dev/null +++ b/.github/workflows/tests-reports-4x@v1.yml @@ -0,0 +1,24 @@ +# This is a workflow that runs after 'Tests' +# workflow, because the 'Tests' (PR) workflow +# has insufficient permissions to write +# GitHub Actions checks. +name: 'Tests Reports (Driver 4.x)' +on: + workflow_run: + workflows: ['Tests (Driver 4.x)'] + types: + - completed +jobs: + report: + runs-on: ubuntu-latest + timeout-minutes: 5 + + steps: + - name: Generate test report + uses: dorny/test-reporter@v1 + with: + artifact: 'test-results' + name: 'Test report' + path: '**/TEST-TestSuite.xml' + reporter: java-junit + list-tests: failed \ No newline at end of file From 3ac707fb2fd00ff42aa9cf752ef5ce77b2408503 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wojciech=20B=C4=85czkowski?= Date: Thu, 14 Jul 2022 12:29:42 +0200 Subject: [PATCH 110/112] Return correct node address for scylla-jmx during testing. Stick to "localhost" for Cassandra. --- .../src/test/java/com/datastax/driver/core/CCMBridge.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/driver-core/src/test/java/com/datastax/driver/core/CCMBridge.java b/driver-core/src/test/java/com/datastax/driver/core/CCMBridge.java index 5d4ef182243..6d085b36bea 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/CCMBridge.java +++ b/driver-core/src/test/java/com/datastax/driver/core/CCMBridge.java @@ -437,7 +437,11 @@ public InetSocketAddress addressOfNode(int n) { @Override public InetSocketAddress jmxAddressOfNode(int n) { - return new InetSocketAddress("localhost", jmxPorts[n - 1]); + if (GLOBAL_SCYLLA_VERSION_NUMBER != null) { + return new InetSocketAddress(ipOfNode(n), jmxPorts[n - 1]); + } else { + return new InetSocketAddress("localhost", jmxPorts[n - 1]); + } } @Override From b77ce2ef97dcd5ad1eec8274b22ba55cdd0300c1 Mon Sep 17 00:00:00 2001 From: David Garcia Date: Fri, 19 Aug 2022 18:00:39 +0100 Subject: [PATCH 111/112] docs: update theme 1.3 --- .github/workflows/docs-pages.yaml | 2 ++ docs/Makefile | 6 ++++++ docs/_utils/multiversion.sh | 4 ++-- docs/_utils/redirections.yaml | 1 - docs/_utils/redirects.yaml | 0 docs/pyproject.toml | 5 +++-- docs/source/conf.py | 7 +------ 7 files changed, 14 insertions(+), 11 deletions(-) delete mode 100644 docs/_utils/redirections.yaml create mode 100644 docs/_utils/redirects.yaml diff --git a/.github/workflows/docs-pages.yaml b/.github/workflows/docs-pages.yaml index fc52bb0f22f..b40bb391062 100644 --- a/.github/workflows/docs-pages.yaml +++ b/.github/workflows/docs-pages.yaml @@ -33,6 +33,8 @@ jobs: java-version: 1.8 - name: Set up env run: make -C docs setupenv + - name: Build redirects + run: make -C docs redirects - name: Build docs run: make -C docs multiversion - name: Deploy docs to GitHub Pages diff --git a/docs/Makefile b/docs/Makefile index 8401dcb26e7..f7c59bcd79b 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -95,6 +95,12 @@ preview: setup multiversionpreview: multiversion $(POETRY) run python -m http.server 5500 --directory $(BUILDDIR)/dirhtml +.PHONY: redirects +redirects: setup + $(POETRY) run redirects-cli fromfile --yaml-file _utils/redirects.yaml --output-dir $(BUILDDIR)/dirhtml + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." + # Test commands .PHONY: test test: setup diff --git a/docs/_utils/multiversion.sh b/docs/_utils/multiversion.sh index 19270f32932..89895a896c6 100755 --- a/docs/_utils/multiversion.sh +++ b/docs/_utils/multiversion.sh @@ -1,5 +1,5 @@ #! /bin/bash cd .. && sphinx-multiversion docs/source docs/_build/dirhtml \ - --pre-build './docs/_utils/javadoc.sh' \ - --pre-build "find . -mindepth 2 -name README.md -execdir mv '{}' index.md ';'" + --pre-build "find . -mindepth 2 -name README.md -execdir mv '{}' index.md ';'" \ + --post-build './docs/_utils/javadoc.sh' diff --git a/docs/_utils/redirections.yaml b/docs/_utils/redirections.yaml deleted file mode 100644 index 0e5f1ff9e07..00000000000 --- a/docs/_utils/redirections.yaml +++ /dev/null @@ -1 +0,0 @@ -api: /api/overview-summary.html diff --git a/docs/_utils/redirects.yaml b/docs/_utils/redirects.yaml new file mode 100644 index 00000000000..e69de29bb2d diff --git a/docs/pyproject.toml b/docs/pyproject.toml index d25548c641a..580711c9f9b 100644 --- a/docs/pyproject.toml +++ b/docs/pyproject.toml @@ -9,11 +9,12 @@ python = "^3.7" pyyaml = "6.0" pygments = "2.2.0" recommonmark = "0.7.1" -sphinx-scylladb-theme = "~1.2.1" +redirects_cli ="~0.1.2" +sphinx-scylladb-theme = "~1.3.1" sphinx-sitemap = "2.1.0" sphinx-autobuild = "2021.3.14" Sphinx = "4.3.2" -sphinx-multiversion-scylla = "~0.2.11" +sphinx-multiversion-scylla = "~0.2.12" [build-system] requires = ["poetry>=0.12"] diff --git a/docs/source/conf.py b/docs/source/conf.py index 7780af2d7a4..056562c84a5 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -19,7 +19,7 @@ # Set which versions are not released yet. UNSTABLE_VERSIONS = [] # Set which versions are deprecated -DEPRECATED_VERSIONS = [''] +DEPRECATED_VERSIONS = [] # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom @@ -116,11 +116,6 @@ def setup(app): # Prefix added to all the URLs generated in the 404 page. notfound_urls_prefix = '' -# -- Options for redirect extension --------------------------------------- - -# Read a YAML dictionary of redirections and generate an HTML file for each -redirects_file = "_utils/redirections.yaml" - # -- Options for multiversion extension ---------------------------------- # Whitelist pattern for tags From 7d1745aa851bb815fa31952ebe5758f160ecc251 Mon Sep 17 00:00:00 2001 From: David Garcia Date: Thu, 15 Sep 2022 12:30:34 +0100 Subject: [PATCH 112/112] Add a command for javadoc --- docs/Makefile | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/docs/Makefile b/docs/Makefile index f7c59bcd79b..9b2c899ab50 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -50,17 +50,15 @@ clean: # Generate output commands .PHONY: dirhtml dirhtml: setup - @$(javadoc) $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." -.PHONY: singlehtml -singlehtml: setup +.PHONY: javadoc +javadoc: setup @$(javadoc) - $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml @echo - @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." + @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." .PHONY: multiversion multiversion: setup