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
diff --git a/.gitignore b/.gitignore
index 7cf0248307f..eaf1a9ef8b2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,17 +1,15 @@
-target/
-cobertura-history/
-testing/
.settings
-.classpath
-.project
-doc
-docs
-notes
.DS_Store
+.documenter_local_last_run
/.idea
*.iml
+.classpath
+.project
-/driver-core/dependency-reduced-pom.xml
.java-version
+.documenter_local_last_run
+/docs
+target/
+dependency-reduced-pom.xml
diff --git a/.travis.yml b/.travis.yml
index c63c5b781f2..a7f970a8c20 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,18 +1,20 @@
language: java
-dist: trusty
-jdk:
-- openjdk7
-- oraclejdk8
sudo: false
-before_install:
- # Require JDK8 for compiling
- - jdk_switcher use oraclejdk8
-before_script:
- # Switch back to configured JDK for running tests
- - jdk_switcher use $TRAVIS_JDK_VERSION
+# see https://sormuras.github.io/blog/2018-03-20-jdk-matrix.html
+matrix:
+ include:
+ # 8
+ - env: JDK='OpenJDK 8'
+ jdk: openjdk8
+ # 11
+ - env: JDK='OpenJDK 11'
+ # switch to JDK 11 before running tests
+ before_script: . $TRAVIS_BUILD_DIR/ci/install-jdk.sh -F 11 -L GPL
+before_install:
+ # Require JDK8 for compiling
+ - jdk_switcher use openjdk8
+install: mvn install -DskipTests=true -Dmaven.javadoc.skip=true -B -V
+script: mvn test -Djacoco.skip=true -B -V
cache:
directories:
- - $HOME/.m2
-notifications:
- slack:
- secure: PxE3bfSyGGRkvHqlR5HciuqAWO7qxJk/8/j0odRJ4FxoT8QYzlGjt8dxN54f+QmKEjFv9W3Gn8ufZmk5lOZlS3L5vWd3MofAfSUzuDpDY9v95UEwltdmedDLjwkdIGnhpYAI7VvLRrhny8sQfx3uSncCpGiLpDqubZRF4D7IDxQ=
+ - $HOME/.m2
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index c5450ce3cd4..d8d7a4c778a 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -6,7 +6,7 @@ We follow the [Google Java Style Guide](https://google.github.io/styleguide/java
https://github.com/google/google-java-format for IDE plugins. The rules are not configurable.
The build will fail if the code is not formatted. To format all files from the command line, run:
-
+
```
mvn fmt:format
```
@@ -15,97 +15,429 @@ Some aspects are not covered by the formatter:
* braces must be used with `if`, `else`, `for`, `do` and `while` statements, even when the body is
empty or contains only a single statement.
+* XML files: indent with two spaces and wrap to respect the column limit of 100 characters.
+
+## Coding style -- production code
+
+Do not use static imports. They make things harder to understand when you look at the code
+someplace where you don't have IDE support, like Github's code view.
-Also, if your IDE sorts import statements automatically, make sure it follows the same order as the
-formatter: all static imports in ASCII sort order, followed by a blank line, followed by all regular
-imports in ASCII sort order. In addition, please avoid using wildcard imports.
+Avoid abbreviations in class and variable names. A good rule of thumb is that you should only use
+them if you would also do so verbally, for example "id" and "config" are probably reasonable.
+Single-letter variables are permissible if the variable scope is only a few lines, or for commonly
+understood cases (like `i` for a loop index).
-## Working on an issue
+Keep source files short. Short files are easy to understand and test. The average should probably
+be around 200-300 lines.
-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.
+### Javadoc
-If your fix applies to multiple branches, base your work on the lowest active branch. Since version 3 of the driver,
-we've adopted [semantic versioning](http://semver.org/) and our branches use the following scheme:
+All types in "API" packages must be documented. For "internal" packages, documentation is optional,
+but in no way discouraged: it's generally a good idea to have a class-level comment that explains
+where the component fits in the architecture, and anything else that you feel is important.
+You don't need to document every parameter or return type, or even every method. Don't document
+something if it is completely obvious, we don't want to end up with this:
+
+```java
+/**
+ * Returns the name.
+ *
+ * @return the name
+ */
+String getName();
```
- 3.0.1 3.0.2 ... 3.1.1 ...
- -----*----------*------> 3.0.x -----*------> 3.1.x
- / /
- / /
- / /
------*-----------------------------------*-------------------------> 3.x
- 3.0.0 3.1.0 ...
-Legend:
- > branch
- * tag
+On the other hand, there is often something useful to say about a method, so most should have at
+least a one-line comment. Use common sense.
+
+Driver users coding in their IDE should find the right documentation at the right time. Try to
+think of how they will come into contact with the class. For example, if a type is constructed with
+a builder, each builder method should probably explain what the default is when you don't call it.
+
+Avoid using too many links, they can make comments harder to read, especially in the IDE. Link to a
+type the first time it's mentioned, then use a text description ("this registry"...) or an `@code`
+block. Don't link to a class in its own documentation. Don't link to types that appear right below
+in the documented item's signature.
+
+```java
+/**
+* @return this {@link Builder} <-- completely unnecessary
+*/
+Builder withLimit(int limit) {
+```
+
+### Logs
+
+We use SLF4J; loggers are declared like this:
+
+```java
+private static final Logger LOG = LoggerFactory.getLogger(TheEnclosingClass.class);
```
-- new features are developed on "minor" branches such as `3.x`, where minor releases (ending in `.0`) happen.
-- bugfixes go to "patch" branches such as `3.0.x` and `3.1.x`, where patch releases (ending in `.1`, `.2`...) happen.
-- patch branches are regularly merged to the right (`3.0.x` to `3.1.x`) and to the bottom (`3.1.x` to `3.x`) so that
- bugfixes are applied to newer versions too.
+Logs are intended for two personae:
+
+* Ops who manage the application in production.
+* Developers (maybe you) who debug a particular issue.
+
+The first 3 log levels are for ops:
+
+* `ERROR`: something that renders the driver -- or a part of it -- completely unusable. An action is
+ required to fix it: bouncing the client, applying a patch, etc.
+* `WARN`: something that the driver can recover from automatically, but indicates a configuration or
+ programming error that should be addressed. For example: the driver connected successfully, but
+ one of the contact points in the configuration was malformed; the same prepared statement is being
+ prepared multiple time by the application code.
+* `INFO`: something that is part of the normal operation of the driver, but might be useful to know
+ for an operator. For example: the driver has initialized successfully and is ready to process
+ queries; an optional dependency was detected in the classpath and activated an enhanced feature.
+
+Do not log errors that are rethrown to the client (such as the error that you're going to complete a
+request with). This is annoying for ops because they see a lot of stack traces that require no
+actual action on their part, because they're already handled by application code.
+
+Similarly, do not log stack traces for non-critical errors. If you still want the option to get the
+trace for debugging, see the `Loggers.warnWithException` utility.
+
+The last 2 levels are for developers, to help follow what the driver is doing from a "black box"
+perspective (think about debugging an issue remotely, and all you have are the logs).
+
+* `TRACE`: anything that happens **for every user request**. Not only request handling, but all
+ related components (e.g. timestamp generators, policies, etc).
+* `DEBUG`: everything else. For example, node state changes, control connection activity, etc.
+
+Note that `DEBUG` and `TRACE` can coexist within the same component, for example the LBP
+initializing is a one-time event, but returning a query plan is a per-request event.
+
+Logs statements start with a prefix that identifies its origin, for example:
+
+* for components that are unique to the cluster instance, just the cluster name: `[c0]`.
+* for sessions, the cluster name + a generated unique identifier: `[c0|s0]`.
+* for channel pools, the session identifier + the address of the node: `[c0|s0|/127.0.0.2:9042]`.
+* for channels, the identifier of the owner (session or control connection) + the Netty identifier,
+ which indicates the local and remote ports:
+ `[c0|s0|id: 0xf9ef0b15, L:/127.0.0.1:51482 - R:/127.0.0.1:9042]`.
+* for request handlers, the session identifier, a unique identifier, and the index of the
+ speculative execution: `[c0|s0|1077199500|0]`.
+
+Tests run with the configuration defined in `src/test/resources/logback-test.xml`. The default level
+for driver classes is `WARN`, but you can override it with a system property: `-DdriverLevel=DEBUG`.
+A nice setup is to use `DEBUG` when you run from your IDE, and keep the default for the command
+line.
+
+When you add or review new code, take a moment to run the tests in `DEBUG` mode and check if the
+output looks good.
+
+### No stream API
+
+Please don't use `java.util.stream` in the driver codebase. Streams were designed for *data
+processing*, not to make your collection traversals "functional".
+
+Here's an example from the driver codebase (`ChannelSet`):
+
+```java
+DriverChannel[] snapshot = this.channels;
+DriverChannel best = null;
+int bestScore = 0;
+for (DriverChannel channel : snapshot) {
+ int score = channel.availableIds();
+ if (score > bestScore) {
+ bestScore = score;
+ best = channel;
+ }
+}
+return best;
+```
+
+And here's a terrible way to rewrite it using streams:
+
+```java
+// Don't do this:
+DriverChannel best =
+ Stream.of(snapshot)
+ .reduce((a, b) -> a.availableIds() > b.availableIds() ? a : b)
+ .get();
+```
+
+The stream version is not easier to read, and will probably be slower (creating intermediary objects
+vs. an array iteration, compounded by the fact that this particular array typically has a low
+cardinality).
+
+The driver never does the kind of processing that the stream API is intended for; the only large
+collections we manipulate are result sets, and these get passed on to the client directly.
+
+### Never assume a specific format for `toString()`
+
+Only use `toString()` for debug logs or exception messages, and always assume that its format is
+unspecified and can change at any time.
+
+If you need a specific string representation for a class, make it a dedicated method with a
+documented format, for example `toCqlLiteral`. Otherwise it's too easy to lose track of the intended
+usage and break things: for example, someone modifies your `toString()` method to make their logs
+prettier, but unintentionally breaks the script export feature that expected it to produce CQL
+literals.
+
+`toString()` can delegate to `toCqlLiteral()` if that is appropriate for logs.
+
+
+### Concurrency annotations
+
+We use the [JCIP annotations](http://jcip.net/annotations/doc/index.html) to document thread-safety
+policies.
+
+Add them for all new code, with the exception of:
+
+* enums and interfaces;
+* utility classes (only static methods);
+* test code.
+
+Make sure you import the types from `net.jcip`, there are homonyms in the classpath.
+
+
+### Nullability annotations
+
+We use the [Spotbugs annotations](https://spotbugs.github.io) to document nullability of parameters,
+method return types and class members.
+
+Please annotate any new class or interface with the appropriate annotations: `@NonNull`, `@Nullable`. Make sure you import
+the types from `edu.umd.cs.findbugs.annotations`, there are homonyms in the classpath.
+
+
+## Coding style -- test code
+
+Static imports are permitted in a couple of places:
+* All AssertJ methods, e.g.:
+ ```java
+ assertThat(node.getDatacenter()).isNotNull();
+ fail("Expecting IllegalStateException to be thrown");
+ ```
+* All Mockito methods, e.g.:
+ ```java
+ when(codecRegistry.codecFor(DataTypes.INT)).thenReturn(codec);
+ verify(codec).decodePrimitive(any(ByteBuffer.class), eq(ProtocolVersion.DEFAULT));
+ ```
+
+Test methods names use lower snake case, generally start with `should`, and clearly indicate the
+purpose of the test, for example: `should_fail_if_key_already_exists`. If you have trouble coming
+up with a simple name, it might be a sign that your test does too much, and should be split.
+
+We use AssertJ (`assertThat`) for assertions. Don't use JUnit assertions (`assertEquals`,
+`assertNull`, etc).
+
+Don't try to generify at all cost: a bit of duplication is acceptable, if that helps keep the tests
+simple to understand (a newcomer should be able to understand how to fix a failing test without
+having to read too much code).
+
+Test classes can be a bit longer, since they often enumerate similar test cases. You can also
+factor some common code in a parent abstract class named with "XxxTestBase", and then split
+different families of tests into separate child classes. For example, `CqlRequestHandlerTestBase`,
+`CqlRequestHandlerRetryTest`, `CqlRequestHandlerSpeculativeExecutionTest`...
+
+### Unit tests
+
+They live in the same module as the code they are testing. They should be fast and not start any
+external process. They usually target one specific component and mock the rest of the driver
+context.
+
+### Integration tests
+
+They live in the `integration-tests` module, and exercise the whole driver stack against an external
+process, which can be either one of:
+* [Simulacron](https://github.com/datastax/simulacron): simulates Cassandra nodes on loopback
+ addresses; your test must "prime" data, i.e. tell the nodes what results to return for
+ pre-determined queries.
+
+ For an example of a Simulacron-based test, see `NodeTargetingIT`.
+* [CCM](https://github.com/pcmanus/ccm): launches actual Cassandra nodes locally. The `ccm`
+ executable must be in the path.
+
+ You can pass a `-Dccm.version` system property to the build to target a particular Cassandra
+ version (it defaults to 3.11.0). `-Dccm.directory` allows you to point to a local installation
+ -- this can be a checkout of the Cassandra codebase, as long as it's built. See `CcmBridge` in
+ the driver codebase for more details.
+
+ For an example of a CCM-based test, see `PlainTextAuthProviderIT`.
+
+Integration tests are divided into three categories:
-The current active versions are 3.0 and 3.1. Therefore:
+#### Parallelizable tests
-- if you're fixing a bug on a feature that existed since 3.0, target `3.0.x`. Your changes will be available in future
- 3.0 and 3.1 patch versions.
-- if you're fixing a bug on a 3.1-only feature, target `3.1.x`. Your changes will be available in a future 3.1 patch
- version.
-- if you're adding a new feature, target `3.x`. Your changes will be available in the upcoming 3.2.0.
+These tests can be run in parallel, to speed up the build. They either use:
+* dedicated Simulacron instances. These are lightweight, and Simulacron will manage the ports to
+ make sure that there are no collisions.
+* a shared, one-node CCM cluster. Each test works in its own keyspace.
-Before you send your pull request, make sure that:
+The build runs them with a configurable degree of parallelism (currently 8). The shared CCM cluster
+is initialized the first time it's used, and stopped before moving on to serial tests.
-- 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.`).
+To make an integration test parallelizable, annotate it with `@Category(ParallelizableTests.class)`.
+If you use CCM, it **must** be with `CcmRule`.
-As long as your pull request is not merged, it's OK to rebase your branch and push with
-`--force`.
+For an example of a Simulacron-based parallelizable test, see `NodeTargetingIT`. For a CCM-based
+test, see `DirectCompressionIT`.
-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.
+#### Serial tests
-## Editor configuration
+These tests cannot run in parallel, in general because they require CCM clusters of different sizes,
+or with a specific configuration (we never run more than one CCM cluster simultaneously: it would be
+too resource-intensive, and too complicated to manage all the ports).
-We use IntelliJ IDEA with the default formatting options, with one exception: check
-"Enable formatter markers in comments" in Preferences > Editor > Code Style.
+The build runs them one by one, after the parallelizable tests.
+
+To make an integration test serial, do not annotate it with `@Category`. The CCM rule **must** be
+`CustomCcmRule`.
+
+For an example, see `DefaultLoadBalancingPolicyIT`.
+
+Note: if multiple serial tests have a common "base" class, do not pull up `CustomCcmRule`, each
+child class must have its own instance. Otherwise they share the same CCM instance, and the first
+one destroys it on teardown. See `TokenITBase` for how to organize code in those cases.
+
+#### Isolated tests
+
+Not only can those tests not run in parallel, they also require specific environment tweaks,
+typically system properties that need to be set before initialization.
+
+The build runs them one by one, *each in its own JVM fork*, after the serial tests.
+
+To isolate an integration test, annotate it with `@Category(IsolatedTests.class)`. The CCM rule
+**must** be `CustomCcmRule`.
+
+For an example, see `HeapCompressionIT`.
-Please format your code and organize imports before submitting your changes.
## Running the tests
-We use TestNG. There are 3 test categories:
+### Unit tests
+
+ mvn clean test
+
+This currently takes about 30 seconds. The goal is to keep it within a couple of minutes (it runs
+for each commit if you enable the pre-commit hook -- see below).
+
+### Integration tests
+
+ mvn clean verify
+
+This currently takes about 9 minutes. We don't have a hard limit, but ideally it should stay within
+30 minutes to 1 hour.
+
+You can skip test categories individually with `-DskipParallelizableITs`, `-DskipSerialITs` and
+`-DskipIsolatedITs`.
+
+### Configuring MacOS for Simulacron
+
+Simulacron (used in integration tests) relies on loopback aliases to simulate multiple nodes. On
+Linux or Windows, you shouldn't have anything to do. On MacOS, run this script:
+
+```
+#!/bin/bash
+for sub in {0..4}; do
+ echo "Opening for 127.0.$sub"
+ for i in {0..255}; do sudo ifconfig lo0 alias 127.0.$sub.$i up; done
+done
+```
+
+Note that this is known to cause temporary increased CPU usage in OS X initially while mDNSResponder
+acclimates itself to the presence of added IP addresses. This lasts several minutes. Also, this does
+not survive reboots.
+
+
+## License headers
-- "unit": pure Java unit tests.
-- "short" and "long": integration tests that launch Cassandra instances.
+The build will fail if some license headers are missing. To update all files from the command line,
+run:
-The Maven build uses profiles named after the categories to choose which tests to run:
+```
+mvn license:format
+```
+
+## Pre-commit hook (highly recommended)
+
+Ensure `pre-commit.sh` is executable, then run:
```
-mvn test -Pshort
+ln -s ../../pre-commit.sh .git/hooks/pre-commit
+```
+
+This will only allow commits if the tests pass. It is also a good reminder to keep the test suite
+short.
+
+Note: the tests run on the current state of the working directory. I tried to add a `git stash` in
+the script to only test what's actually being committed, but I couldn't get it to run reliably
+(it's still in there but commented). Keep this in mind when you commit, and don't forget to re-add
+the changes if the first attempt failed and you fixed the tests.
+
+## Commits
+
+Keep your changes **focused**. Each commit should have a single, clear purpose expressed in its
+message.
+
+Resist the urge to "fix" cosmetic issues (add/remove blank lines, move methods, etc.) in existing
+code. This adds cognitive load for reviewers, who have to figure out which changes are relevant to
+the actual issue. If you see legitimate issues, like typos, address them in a separate commit (it's
+fine to group multiple typo fixes in a single commit).
+
+Isolate trivial refactorings into separate commits. For example, a method rename that affects dozens
+of call sites can be reviewed in a few seconds, but if it's part of a larger diff it gets mixed up
+with more complex changes (that might affect the same lines), and reviewers have to check every
+line.
+
+Commit message subjects start with a capital letter, use the imperative form and do **not** end
+with a period:
+
+* correct: "Add test for CQL request handler"
+* incorrect: "~~Added test for CQL request handler~~"
+* incorrect: "~~New test for CQL request handler~~"
+
+Avoid catch-all messages like "Minor cleanup", "Various fixes", etc. They don't provide any useful
+information to reviewers, and might be a sign that your commit contains unrelated changes.
+
+We don't enforce a particular subject line length limit, but try to keep it short.
+
+You can add more details after the subject line, separated by a blank line. The following pattern
+(inspired by [Netty](http://netty.io/wiki/writing-a-commit-message.html)) is not mandatory, but
+welcome for complex changes:
+
```
+One line description of your change
+
+Motivation:
-The default is "unit". Each profile runs the ones before it ("short" runs unit, etc.)
+Explain here the context, and why you're making that change.
+What is the problem you're trying to solve.
+
+Modifications:
-Integration tests use [CCM](https://github.com/pcmanus/ccm) to bootstrap Cassandra instances.
-Two Maven properties control its execution:
+Describe the modifications you've done.
+
+Result:
-- `cassandra.version`: the Cassandra version. This has a default value in the root POM,
- you can override it on the command line (`-Dcassandra.version=...`).
-- `ipprefix`: the prefix of the IP addresses that the Cassandra instances will bind to (see
- below). This defaults to `127.0.1.`.
+After your change, what will change.
+```
+
+## Pull requests
+
+Like commits, pull requests should be focused on a single, clearly stated goal.
+Don't base a pull request onto another one, it's too complicated to follow two branches that evolve
+at the same time. If a ticket depends on another, wait for the first one to be merged.
-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).
-You'll need to define loopback aliases for this to work, on Mac OS X your can do it with:
+If you have to address feedback, avoid rewriting the history (e.g. squashing or amending commits):
+this makes the reviewers' job harder, because they have to re-read the full diff and figure out
+where your new changes are. Instead, push a new commit on top of the existing history; it will be
+squashed later when the PR gets merged. If the history is complex, it's a good idea to indicate in
+the message where the changes should be squashed:
```
-sudo ifconfig lo0 alias 127.0.1.1 up
-sudo ifconfig lo0 alias 127.0.1.2 up
-...
+* 20c88f4 - Address feedback (to squash with "Add metadata parsing logic") (36 minutes ago)
+* 7044739 - Fix various typos in Javadocs (2 days ago)
+* 574dd08 - Add metadata parsing logic (2 days ago)
```
+
+(Note that the message refers to the other commit's subject line, not the SHA-1. This way it's still
+relevant if there are intermediary rebases.)
+
+If you need new stuff from the base branch, it's fine to rebase and force-push, as long as you don't
+rewrite the history. Just give a heads up to the reviewers beforehand. Don't push a merge commit to
+a pull request.
diff --git a/Jenkinsfile b/Jenkinsfile
deleted file mode 100644
index 388395b7615..00000000000
--- a/Jenkinsfile
+++ /dev/null
@@ -1,549 +0,0 @@
-#!groovy
-
-def initializeEnvironment() {
- env.DRIVER_DISPLAY_NAME = 'CassandraⓇ Java Driver 3.x'
- env.DRIVER_METRIC_TYPE = 'oss'
- if (env.GIT_URL.contains('riptano/java-driver')) {
- env.DRIVER_DISPLAY_NAME = 'private ' + env.DRIVER_DISPLAY_NAME
- env.DRIVER_METRIC_TYPE = 'oss-private'
- } else if (env.GIT_URL.contains('java-dse-driver')) {
- env.DRIVER_DISPLAY_NAME = 'DSE Java Driver 1.x'
- env.DRIVER_METRIC_TYPE = 'dse'
- }
-
- env.GIT_SHA = "${env.GIT_COMMIT.take(7)}"
- env.GITHUB_PROJECT_URL = "https://${GIT_URL.replaceFirst(/(git@|http:\/\/|https:\/\/)/, '').replace(':', '/').replace('.git', '')}"
- env.GITHUB_BRANCH_URL = "${GITHUB_PROJECT_URL}/tree/${env.BRANCH_NAME}"
- env.GITHUB_COMMIT_URL = "${GITHUB_PROJECT_URL}/commit/${env.GIT_COMMIT}"
-
- env.MAVEN_HOME = "${env.HOME}/.mvn/apache-maven-3.2.5"
- env.PATH = "${env.MAVEN_HOME}/bin:${env.PATH}"
- env.JAVA_HOME = sh(label: 'Get JAVA_HOME',script: '''#!/bin/bash -le
- . ${JABBA_SHELL}
- jabba which ${JABBA_VERSION}''', returnStdout: true).trim()
- env.JAVA8_HOME = sh(label: 'Get JAVA8_HOME',script: '''#!/bin/bash -le
- . ${JABBA_SHELL}
- jabba which 1.8''', returnStdout: true).trim()
-
- sh label: 'Download Apache CassandraⓇ',script: '''#!/bin/bash -le
- . ${JABBA_SHELL}
- jabba use ${JABBA_VERSION}
- . ${CCM_ENVIRONMENT_SHELL} ${SERVER_VERSION}
- '''
-
- sh label: 'Display Java and environment information',script: '''#!/bin/bash -le
- # Load CCM environment variables
- set -o allexport
- . ${HOME}/environment.txt
- set +o allexport
-
- . ${JABBA_SHELL}
- jabba use ${JABBA_VERSION}
-
- java -version
- mvn -v
- printenv | sort
- '''
-}
-
-def buildDriver(jabbaVersion) {
- withEnv(["BUILD_JABBA_VERSION=${jabbaVersion}"]) {
- sh label: 'Build driver', script: '''#!/bin/bash -le
- . ${JABBA_SHELL}
- jabba use ${BUILD_JABBA_VERSION}
-
- mvn -B -V install -DskipTests
- '''
- }
-}
-
-def executeTests() {
- sh label: 'Execute tests', script: '''#!/bin/bash -le
- # Load CCM environment variables
- set -o allexport
- . ${HOME}/environment.txt
- set +o allexport
-
- . ${JABBA_SHELL}
- jabba use ${JABBA_VERSION}
-
- printenv | sort
-
- mvn -B -V verify \
- -fail-never -P${TEST_PROFILE} \
- -Dcom.datastax.driver.TEST_BASE_NODE_WAIT=120 \
- -Dcom.datastax.driver.NEW_NODE_DELAY_SECONDS=100 \
- -Dcassandra.version=${CCM_CASSANDRA_VERSION} \
- -Ddse=${CCM_IS_DSE} \
- -Dccm.java.home=${CCM_JAVA_HOME} \
- -Dccm.path=${CCM_JAVA_HOME}/bin \
- -Dccm.maxNumberOfNodes=3 \
- -DfailIfNoTests=false \
- -Dmaven.test.failure.ignore=true \
- -Dmaven.javadoc.skip=true \
- -Dproxy.path=${HOME}/proxy
-
- # run isolated tests
- mvn -B -V verify \
- -fail-never -Pisolated \
- -Dcom.datastax.driver.TEST_BASE_NODE_WAIT=120 \
- -Dcom.datastax.driver.NEW_NODE_DELAY_SECONDS=100 \
- -Dcassandra.version=${CCM_CASSANDRA_VERSION} \
- -Ddse=${CCM_IS_DSE} \
- -Dccm.java.home=${CCM_JAVA_HOME} \
- -Dccm.path=${CCM_JAVA_HOME}/bin \
- -Dccm.maxNumberOfNodes=3 \
- -DfailIfNoTests=false \
- -Dmaven.test.failure.ignore=true \
- -Dmaven.javadoc.skip=true
- '''
-}
-
-def executeCodeCoverage() {
- jacoco(
- execPattern: '**/target/jacoco.exec',
- classPattern: '**/classes',
- sourcePattern: '**/src/main/java'
- )
-}
-
-def notifySlack(status = 'started') {
- // Notify Slack channel for every build except adhoc executions
- if (params.ADHOC_BUILD_TYPE != 'BUILD-AND-EXECUTE-TESTS') {
- // Set the global pipeline scoped environment (this is above each matrix)
- env.BUILD_STATED_SLACK_NOTIFIED = 'true'
-
- def buildType = 'Commit'
- if (params.CI_SCHEDULE != 'DO-NOT-CHANGE-THIS-SELECTION') {
- buildType = "${params.CI_SCHEDULE.toLowerCase().capitalize()}"
- }
-
- def color = 'good' // Green
- if (status.equalsIgnoreCase('aborted')) {
- color = '808080' // Grey
- } else if (status.equalsIgnoreCase('unstable')) {
- color = 'warning' // Orange
- } else if (status.equalsIgnoreCase('failed')) {
- color = 'danger' // Red
- }
-
- def message = """Build ${status} for ${env.DRIVER_DISPLAY_NAME} [${buildType}]
-<${env.GITHUB_BRANCH_URL}|${env.BRANCH_NAME}> - <${env.RUN_DISPLAY_URL}|#${env.BUILD_NUMBER}> - <${env.GITHUB_COMMIT_URL}|${env.GIT_SHA}>"""
- if (!status.equalsIgnoreCase('Started')) {
- message += """
-${status} after ${currentBuild.durationString - ' and counting'}"""
- }
-
- slackSend color: "${color}",
- channel: "#java-driver-dev-bots",
- message: "${message}"
- }
-}
-
-def describePerCommitStage() {
- script {
- currentBuild.displayName = "Per-Commit build"
- currentBuild.description = 'Per-Commit build and testing of development Apache CassandraⓇ against Oracle JDK 8'
- }
-}
-
-def describeAdhocAndScheduledTestingStage() {
- script {
- if (params.CI_SCHEDULE == 'DO-NOT-CHANGE-THIS-SELECTION') {
- // Ad-hoc build
- currentBuild.displayName = "Adhoc testing"
- currentBuild.description = "Testing ${params.ADHOC_BUILD_AND_EXECUTE_TESTS_SERVER_VERSION} against JDK version ${params.ADHOC_BUILD_AND_EXECUTE_TESTS_JABBA_VERSION}"
- } else {
- // Scheduled build
- currentBuild.displayName = "${params.CI_SCHEDULE.toLowerCase().replaceAll('_', ' ').capitalize()} schedule"
- currentBuild.description = "Testing server versions [${params.CI_SCHEDULE_SERVER_VERSIONS}] against JDK version ${params.CI_SCHEDULE_JABBA_VERSION}"
- }
- }
-}
-
-// branch pattern for cron
-// should match 3.x, 4.x, 4.5.x, etc
-def branchPatternCron() {
- ~"((\\d+(\\.[\\dx]+)+))"
-}
-
-pipeline {
- agent none
-
- // Global pipeline timeout
- options {
- timeout(time: 10, unit: 'HOURS')
- buildDiscarder(logRotator(artifactNumToKeepStr: '10', // Keep only the last 10 artifacts
- numToKeepStr: '50')) // Keep only the last 50 build records
- }
-
- parameters {
- choice(
- name: 'ADHOC_BUILD_TYPE',
- choices: ['BUILD', 'BUILD-AND-EXECUTE-TESTS'],
- description: '''
Perform a adhoc build operation
-
-
-
-
- Choice
- Description
-
-
- BUILD
- Performs a Per-Commit build
-
-
- BUILD-AND-EXECUTE-TESTS
- Performs a build and executes the integration and unit tests
-
-
''')
- choice(
- name: 'ADHOC_BUILD_AND_EXECUTE_TESTS_SERVER_VERSION',
- choices: ['2.1', // Legacy Apache CassandraⓇ
- '2.2', // Legacy Apache CassandraⓇ
- '3.0', // Previous Apache CassandraⓇ
- '3.11', // Current Apache CassandraⓇ
- '4.0', // Development Apache CassandraⓇ
- 'dse-5.1', // Legacy DataStax Enterprise
- 'dse-6.0', // Previous DataStax Enterprise
- 'dse-6.7', // Previous DataStax Enterprise
- 'dse-6.8.0', // Current DataStax Enterprise
- 'ALL'],
- description: '''Apache Cassandra® or DataStax Enterprise server version to use for adhoc BUILD-AND-EXECUTE-TESTS builds
-
-
-
-
- Choice
- Description
-
-
- 2.1
- Apache Cassandra® v2.1.x
-
-
- 2.2
- Apache Cassandra® v2.2.x
-
-
- 3.0
- Apache Cassandra® v3.0.x
-
-
- 3.11
- Apache Cassandra® v3.11.x
-
-
- 4.0
- Apache Cassandra® v4.x (CURRENTLY UNDER DEVELOPMENT )
-
-
- dse-5.1
- DataStax Enterprise v5.1.x
-
-
- dse-6.0
- DataStax Enterprise v6.0.x
-
-
- dse-6.7
- DataStax Enterprise v6.7.x
-
-
- dse-6.8.0
- DataStax Enterprise v6.8.0
-
-
''')
- choice(
- name: 'ADHOC_BUILD_AND_EXECUTE_TESTS_JABBA_VERSION',
- choices: ['zulu@1.6', // Zulu JDK 1.6
- 'zulu@1.7', // Zulu JDK 1.7
- '1.8', // Oracle JDK version 1.8 (current default)
- 'openjdk@1.11'], // OpenJDK version 11
- description: '''JDK version to use for TESTING when running adhoc BUILD-AND-EXECUTE-TESTS builds. All builds will use JDK8 for building the driver
-
-
-
-
- Choice
- Description
-
-
- zulu@1.6
- Zulu JDK version 1.6
-
-
- zulu@1.7
- Zulu JDK version 1.7
-
-
- 1.8
- Oracle JDK version 1.8 (Used for compiling regardless of choice )
-
-
- openjdk@1.11
- OpenJDK version 11
-
-
''')
- choice(
- name: 'ADHOC_BUILD_AND_EXECUTE_TESTS_TEST_PROFILE',
- choices: ['short', 'long'],
- description: 'Test profile to execute during test phase of the build')
- choice(
- name: 'CI_SCHEDULE',
- choices: ['DO-NOT-CHANGE-THIS-SELECTION', 'WEEKNIGHTS', 'WEEKENDS', 'MONTHLY'],
- description: 'CI testing schedule to execute periodically scheduled builds and tests of the driver (DO NOT CHANGE THIS SELECTION )')
- string(
- name: 'CI_SCHEDULE_SERVER_VERSIONS',
- defaultValue: 'DO-NOT-CHANGE-THIS-SELECTION',
- description: 'CI testing server version(s) to utilize for scheduled test runs of the driver (DO NOT CHANGE THIS SELECTION )')
- string(
- name: 'CI_SCHEDULE_JABBA_VERSION',
- defaultValue: 'DO-NOT-CHANGE-THIS-SELECTION',
- description: 'CI testing JDK version(s) to utilize for scheduled test runs of the driver (DO NOT CHANGE THIS SELECTION )')
- string(
- name: 'CI_SCHEDULE_TEST_PROFILE',
- defaultValue: 'DO-NOT-CHANGE-THIS-SELECTION',
- description: 'CI testing profile to execute (DO NOT CHANGE THIS SELECTION )')
- }
-
- triggers {
- // schedules only run against release branches (i.e. 3.x, 4.x, 4.5.x, etc.)
- parameterizedCron(branchPatternCron().matcher(env.BRANCH_NAME).matches() ? """
- # Every weeknight (Monday - Friday) around 3:00 AM
- ### JDK8 tests against 2.1, 3.0, 3.11 and 4.0
- H 3 * * 1-5 %CI_SCHEDULE=WEEKNIGHTS;CI_SCHEDULE_SERVER_VERSIONS=2.1 3.0 3.11 4.0;CI_SCHEDULE_JABBA_VERSION=1.8;CI_SCHEDULE_TEST_PROFILE=long
- # Every weekend (Sunday) around 2:00 PM
- ### JDK11 tests against 2.1, 3.0, 3.11 and 4.0
- H 14 * * 0 %CI_SCHEDULE=WEEKENDS;CI_SCHEDULE_SERVER_VERSIONS=2.1 3.0 3.11 4.0;CI_SCHEDULE_JABBA_VERSION=openjdk@1.11;CI_SCHEDULE_TEST_PROFILE=long
- """ : "")
- }
-
- environment {
- OS_VERSION = 'ubuntu/bionic64/java-driver'
- JABBA_SHELL = '/usr/lib/jabba/jabba.sh'
- CCM_ENVIRONMENT_SHELL = '/usr/local/bin/ccm_environment.sh'
- }
-
- stages {
- stage ('Per-Commit') {
- options {
- timeout(time: 2, unit: 'HOURS')
- }
- when {
- beforeAgent true
- allOf {
- expression { params.ADHOC_BUILD_TYPE == 'BUILD' }
- expression { params.CI_SCHEDULE == 'DO-NOT-CHANGE-THIS-SELECTION' }
- expression { params.CI_SCHEDULE_SERVER_VERSIONS == 'DO-NOT-CHANGE-THIS-SELECTION' }
- expression { params.CI_SCHEDULE_JABBA_VERSION == 'DO-NOT-CHANGE-THIS-SELECTION' }
- expression { params.CI_SCHEDULE_TEST_PROFILE == 'DO-NOT-CHANGE-THIS-SELECTION' }
- not { buildingTag() }
- }
- }
-
- matrix {
- axes {
- axis {
- name 'SERVER_VERSION'
- values '3.11', // Current Apache CassandraⓇ
- '4.0' // Development Apache CassandraⓇ
- }
- }
-
- agent {
- label "${OS_VERSION}"
- }
- environment {
- // Per-commit builds are only going to run against JDK8
- JABBA_VERSION = '1.8'
- TEST_PROFILE = 'short'
- }
-
- stages {
- stage('Initialize-Environment') {
- steps {
- initializeEnvironment()
- script {
- if (env.BUILD_STATED_SLACK_NOTIFIED != 'true') {
- notifySlack()
- }
- }
- }
- }
- stage('Describe-Build') {
- steps {
- describePerCommitStage()
- }
- }
- stage('Build-Driver') {
- steps {
- buildDriver(env.JABBA_VERSION)
- }
- }
- stage('Execute-Tests') {
- steps {
- catchError {
- // Use the matrix JDK for testing
- executeTests()
- }
- }
- post {
- always {
- /*
- * Empty results are possible
- *
- * - Build failures during mvn verify may exist so report may not be available
- */
- junit testResults: '**/target/surefire-reports/TEST-*.xml', allowEmptyResults: true
- junit testResults: '**/target/failsafe-reports/TEST-*.xml', allowEmptyResults: true
- }
- }
- }
- stage('Execute-Code-Coverage') {
- // Ensure the code coverage is run only once per-commit
- when { environment name: 'SERVER_VERSION', value: '4.0' }
- steps {
- executeCodeCoverage()
- }
- }
- }
- }
- post {
- aborted {
- notifySlack('aborted')
- }
- success {
- notifySlack('completed')
- }
- unstable {
- notifySlack('unstable')
- }
- failure {
- notifySlack('FAILED')
- }
- }
- }
-
- stage('Adhoc-And-Scheduled-Testing') {
- when {
- beforeAgent true
- allOf {
- expression { (params.ADHOC_BUILD_TYPE == 'BUILD' && params.CI_SCHEDULE != 'DO-NOT-CHANGE-THIS-SELECTION') ||
- params.ADHOC_BUILD_TYPE == 'BUILD-AND-EXECUTE-TESTS' }
- not { buildingTag() }
- anyOf {
- expression { params.ADHOC_BUILD_TYPE == 'BUILD-AND-EXECUTE-TESTS' }
- allOf {
- expression { params.ADHOC_BUILD_TYPE == 'BUILD' }
- expression { params.CI_SCHEDULE != 'DO-NOT-CHANGE-THIS-SELECTION' }
- expression { params.CI_SCHEDULE_SERVER_VERSIONS != 'DO-NOT-CHANGE-THIS-SELECTION' }
- }
- }
- }
- }
-
- environment {
- SERVER_VERSIONS = "${params.CI_SCHEDULE_SERVER_VERSIONS == 'DO-NOT-CHANGE-THIS-SELECTION' ? params.ADHOC_BUILD_AND_EXECUTE_TESTS_SERVER_VERSION : params.CI_SCHEDULE_SERVER_VERSIONS}"
- JABBA_VERSION = "${params.CI_SCHEDULE_JABBA_VERSION == 'DO-NOT-CHANGE-THIS-SELECTION' ? params.ADHOC_BUILD_AND_EXECUTE_TESTS_JABBA_VERSION : params.CI_SCHEDULE_JABBA_VERSION}"
- TEST_PROFILE = "${params.CI_SCHEDULE_TEST_PROFILE == 'DO-NOT-CHANGE-THIS-SELECTION' ? params.ADHOC_BUILD_AND_EXECUTE_TESTS_TEST_PROFILE : params.CI_SCHEDULE_TEST_PROFILE}"
- }
-
- matrix {
- axes {
- axis {
- name 'SERVER_VERSION'
- values '2.1', // Legacy Apache CassandraⓇ
- '3.0', // Previous Apache CassandraⓇ
- '3.11', // Current Apache CassandraⓇ
- '4.0', // Development Apache CassandraⓇ
- 'dse-5.1', // Legacy DataStax Enterprise
- 'dse-6.0', // Previous DataStax Enterprise
- 'dse-6.7', // Previous DataStax Enterprise
- 'dse-6.8.0' // Current DataStax Enterprise
- }
- }
- when {
- beforeAgent true
- allOf {
- expression { return env.SERVER_VERSIONS.split(' ').any { it =~ /(ALL|${env.SERVER_VERSION})/ } }
- }
- }
- agent {
- label "${env.OS_VERSION}"
- }
-
- stages {
- stage('Initialize-Environment') {
- steps {
- initializeEnvironment()
- script {
- if (env.BUILD_STATED_SLACK_NOTIFIED != 'true') {
- notifySlack()
- }
- }
- }
- }
- stage('Describe-Build') {
- steps {
- describeAdhocAndScheduledTestingStage()
- }
- }
- stage('Build-Driver') {
- steps {
- // Jabba default should be a JDK8 for now
- buildDriver('default')
- }
- }
- stage('Execute-Tests') {
- steps {
- catchError {
- // Use the matrix JDK for testing
- executeTests()
- }
- }
- post {
- always {
- /*
- * Empty results are possible
- *
- * - Build failures during mvn verify may exist so report may not be available
- * - With boolean parameters to skip tests a failsafe report may not be available
- */
- junit testResults: '**/target/surefire-reports/TEST-*.xml', allowEmptyResults: true
- junit testResults: '**/target/failsafe-reports/TEST-*.xml', allowEmptyResults: true
- }
- }
- }
- stage('Execute-Code-Coverage') {
- // Ensure the code coverage is run only once per-commit
- when {
- allOf {
- environment name: 'SERVER_VERSION', value: '4.0'
- environment name: 'JABBA_VERSION', value: '1.8'
- }
- }
- steps {
- executeCodeCoverage()
- }
- }
- }
- }
- post {
- aborted {
- notifySlack('aborted')
- }
- success {
- notifySlack('completed')
- }
- unstable {
- notifySlack('unstable')
- }
- failure {
- notifySlack('FAILED')
- }
- }
- }
- }
-}
diff --git a/README.md b/README.md
index eef132ac85f..06baa564e02 100644
--- a/README.md
+++ b/README.md
@@ -1,135 +1,71 @@
# Datastax Java Driver for Apache Cassandra®
-*If you're reading this on github.com, please note that this is the readme
-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.5](https://github.com/datastax/java-driver/tree/3.11.5).*
-
-A modern, [feature-rich](manual/) and highly tunable Java client
-library for Apache Cassandra (2.1+) and using exclusively Cassandra's binary protocol
-and Cassandra Query Language v3. _Use the [DataStax Enterprise Java driver][dse-driver]
-for better compatibility and support for DataStax Enterprise._
-
-**Features:**
-
-* [Sync](manual/) and [Async](manual/async/) API
-* [Simple](manual/statements/simple/), [Prepared](manual/statements/prepared/), and [Batch](manual/statements/batch/)
- statements
-* Asynchronous IO, parallel execution, request pipelining
-* [Connection pooling](manual/pooling/)
-* Auto node discovery
-* Automatic reconnection
-* Configurable [load balancing](manual/load_balancing/) and [retry policies](manual/retries/)
-* Works with any cluster size
-* [Query builder](manual/statements/built/)
-* [Object mapper](manual/object_mapper/)
-
-The driver architecture is based on layers. At the bottom lies the driver core.
-This core handles everything related to the connections to a Cassandra
-cluster (for example, connection pool, discovering new nodes, etc.) and exposes a simple,
-relatively low-level API on top of which higher level layers can be built.
-
-The driver contains the following modules:
-
-- driver-core: the core layer.
-- driver-mapping: the object mapper.
-- driver-extras: optional features for the Java driver.
-- driver-examples: example applications using the other modules which are
- only meant for demonstration purposes.
-- driver-tests: tests for the java-driver.
-
-**Useful links:**
-
-- JIRA (bug tracking): https://datastax-oss.atlassian.net/browse/JAVA
-- MAILING LIST: https://groups.google.com/a/lists.datastax.com/forum/#!forum/java-driver-user
-- DATASTAX ACADEMY SLACK: #datastax-drivers on https://academy.datastax.com/slack
-- TWITTER: [@dsJavaDriver](https://twitter.com/dsJavaDriver) tweets Java
- 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.11/manual/) has quick
- start material and technical details about the driver and its features.
-- API: https://docs.datastax.com/en/drivers/java/3.11
-- GITHUB REPOSITORY: https://github.com/datastax/java-driver
-- [changelog](changelog/)
+*If you're reading this on github.com, please note that this is the readme for the development
+version and that some features described here might not yet have been released. You can find the
+documentation for latest version through [DataStax Docs] or via the release tags, e.g.
+[4.0.0](https://github.com/datastax/java-driver/tree/4.0.0).*
-## Getting the driver
+A modern, feature-rich and highly tunable Java client library for [Apache Cassandra®] \(2.1+) and
+[DataStax Enterprise] \(4.7+), using exclusively Cassandra's binary protocol and Cassandra Query
+Language v3.
-The last release of the driver is available on Maven Central. You can install
-it in your application using the following Maven dependency (_if
-using DataStax Enterprise, install the [DataStax Enterprise Java driver][dse-driver] instead_):
+[DataStax Docs]: http://docs.datastax.com/en/developer/java-driver/
+[Apache Cassandra®]: http://cassandra.apache.org/
+[DataStax Enterprise]: http://www.datastax.com/products/datastax-enterprise
-```xml
-
- com.datastax.cassandra
- cassandra-driver-core
- 3.11.5
-
-```
+## Getting the driver
-Note that the object mapper is published as a separate artifact:
+The driver artifacts are published in Maven central, under the group id [com.datastax.oss]; there
+are multiple modules, all prefixed with `java-driver-`.
```xml
- com.datastax.cassandra
- cassandra-driver-mapping
- 3.11.5
+ com.datastax.oss
+ java-driver-core
+ 4.0.0
-```
-The 'extras' module is also published as a separate artifact:
-
-```xml
- com.datastax.cassandra
- cassandra-driver-extras
- 3.11.5/version>
+ com.datastax.oss
+ java-driver-query-builder
+ 4.0.0
```
+Refer to the [manual] for more details.
-We also provide a [shaded JAR](manual/shaded_jar/)
-to avoid the explicit dependency to Netty.
+[com.datastax.oss]: http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22com.datastax.oss%22
+[manual]: manual/
-If you can't use a dependency management tool, a
-[binary tarball](https://github.com/datastax/java-driver/releases/3.11.5)
-is available for download.
+## Migrating from previous versions
-## Compatibility
+Java driver 4 is **not binary compatible** with previous versions. However, most of the concepts
+remain unchanged, and the new API will look very familiar to 2.x and 3.x users.
-The Java client driver 3.11.5 ([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).
+See the [upgrade guide](upgrade_guide/) for details.
-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)).
+## Useful links
-Other features are available only when using Apache Cassandra 2.0 or higher (e.g. result set paging,
-[BatchStatement](https://github.com/datastax/java-driver/blob/3.x/driver-core/src/main/java/com/datastax/driver/core/BatchStatement.java),
-[lightweight transactions](http://www.datastax.com/documentation/cql/3.1/cql/cql_using/use_ltweight_transaction_t.html)
--- see [What's new in Cassandra 2.0](http://www.datastax.com/documentation/cassandra/2.0/cassandra/features/features_key_c.html)).
-Trying to use these with a cluster running Cassandra 1.2 will result in
-an [UnsupportedFeatureException](https://github.com/datastax/java-driver/blob/3.x/driver-core/src/main/java/com/datastax/driver/core/exceptions/UnsupportedFeatureException.java) being thrown.
+* [Manual][manual]
+* [API docs]
+* Bug tracking: [JIRA]
+* [Mailing list]
+* Twitter: [@dsJavaDriver] tweets Java driver releases and important announcements (low frequency).
+ [@DataStaxEng] has more news, including other drivers, Cassandra, and DSE.
+* [Changelog]
+* [FAQ]
-The java driver supports Java JDK versions 6 and above.
-
-If using _DataStax Enterprise_, the [DataStax Enterprise Java driver][dse-driver] provides
-more features and better compatibility.
-
-__Disclaimer__: Some _DataStax/DataStax Enterprise_ products might partially work on
-big-endian systems, but _DataStax_ does not officially support these systems.
-
-## Upgrading from previous versions
-
-If you are upgrading from a previous version of the driver, be sure to have a look at
-the [upgrade guide](/upgrade_guide/).
-
-If you are upgrading to _DataStax Enterprise_, use the [DataStax Enterprise Java driver][dse-driver] for more
-features and better compatibility.
+[API docs]: http://www.datastax.com/drivers/java/4.0
+[JIRA]: https://datastax-oss.atlassian.net/browse/JAVA
+[Mailing list]: https://groups.google.com/a/lists.datastax.com/forum/#!forum/java-driver-user
+[@dsJavaDriver]: https://twitter.com/dsJavaDriver
+[@DataStaxEng]: https://twitter.com/datastaxeng
+[Changelog]: changelog/
+[FAQ]: faq/
## License
-© DataStax, Inc.
+
+Copyright 2017, DataStax
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -143,4 +79,11 @@ 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.
-[dse-driver]: http://docs.datastax.com/en/developer/java-driver-dse/latest/
+----
+
+DataStax is a registered trademark of DataStax, Inc. and its subsidiaries in the United States
+and/or other countries.
+
+Apache Cassandra, Apache, Tomcat, Lucene, Solr, Hadoop, Spark, TinkerPop, and Cassandra are
+trademarks of the [Apache Software Foundation](http://www.apache.org/) or its subsidiaries in
+Canada, the United States and/or other countries.
diff --git a/build.yaml b/build.yaml
new file mode 100644
index 00000000000..79dd3b2c84e
--- /dev/null
+++ b/build.yaml
@@ -0,0 +1,22 @@
+java:
+ - openjdk8
+os:
+ - ubuntu/bionic64/java-driver
+cassandra:
+ - '2.1'
+ - '2.2'
+ - '3.0'
+ - '3.11'
+build:
+ - type: maven
+ version: 3.2.5
+ goals: verify --batch-mode
+ properties: |
+ ccm.version=$CCM_CASSANDRA_VERSION
+ - xunit:
+ - "**/target/surefire-reports/TEST-*.xml"
+ - "**/target/failsafe-reports/TEST-*.xml"
+ - jacoco: true
+disable_commit_status: true
+notify:
+ slack: java-driver-dev-bots
diff --git a/changelog/README.md b/changelog/README.md
index 822b9f3fef1..abf3e12fe7a 100644
--- a/changelog/README.md
+++ b/changelog/README.md
@@ -1,1706 +1,218 @@
## Changelog
-
-
-## 3.11.5
-- [improvement] JAVA-3114: Shade io.dropwizard.metrics:metrics-core in shaded driver
-- [improvement] JAVA-3115: SchemaChangeListener#onKeyspaceChanged can fire when keyspace has not changed if using SimpleStrategy replication
-
-## 3.11.4
-- [improvement] JAVA-3079: Upgrade Netty to 4.1.94, 3.x edition
-- [improvement] JAVA-3082: Fix maven build for Apple-silicon
-- [improvement] PR 1671: Fix LatencyAwarePolicy scale docstring
-
-## 3.11.3
-- [improvement] JAVA-3023: Upgrade Netty to 4.1.77, 3.x edition
-
-
-## 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.
-
-
-## 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.
-
-
-## 3.9.0
-
-- [bug] JAVA-2627: Avoid logging error message including stack trace in request handler.
-- [new feature] JAVA-2706: Add now_in_seconds to protocol v5 query messages.
-- [improvement] JAVA-2730: Add support for Cassandra® 4.0 table options
-- [improvement] JAVA-2702: Transient Replication Support for Cassandra® 4.0
-
-
-## 3.8.0
-
-- [new feature] JAVA-2356: Support for DataStax Cloud API.
-- [improvement] JAVA-2483: Allow to provide secure bundle via URL.
-- [improvement] JAVA-2499: Allow to read the secure bundle from an InputStream.
-- [improvement] JAVA-2457: Detect CaaS and change default consistency.
-- [improvement] JAVA-2485: Add errors for Cloud misconfiguration.
-- [documentation] JAVA-2504: Migrate Cloud "getting started" page to driver manual.
-- [improvement] JAVA-2516: Enable hostname validation with Cloud
-- [bug] JAVA-2515: NEW_NODE and REMOVED_NODE events should trigger ADDED and REMOVED.
-
-
-### 3.7.2
-
-- [bug] JAVA-2249: Stop stripping trailing zeros in ByteOrderedTokens.
-- [bug] JAVA-1492: Don't immediately reuse busy connections for another request.
-- [bug] JAVA-2198: Handle UDTs with names that clash with collection types.
-- [bug] JAVA-2204: Avoid memory leak when client holds onto a stale TableMetadata instance.
-
-
-### 3.7.1
-
-- [bug] JAVA-2174: Metadata.needsQuote should accept empty strings.
-- [bug] JAVA-2193: Fix flaky tests in WarningsTest.
-
-
-### 3.7.0
-
-- [improvement] JAVA-2025: Include exception message in Abstract\*Codec.accepts(null).
-- [improvement] JAVA-1980: Use covariant return types in RemoteEndpointAwareJdkSSLOptions.Builder methods.
-- [documentation] JAVA-2062: Document frozen collection preference with Mapper.
-- [bug] JAVA-2071: Fix NPE in ArrayBackedRow.toString().
-- [bug] JAVA-2070: Call onRemove instead of onDown when rack and/or DC information changes for a host.
-- [improvement] JAVA-1256: Log parameters of BuiltStatement in QueryLogger.
-- [documentation] JAVA-2074: Document preference for LZ4 over Snappy.
-- [bug] JAVA-1612: Include netty-common jar in binary tarball.
-- [improvement] JAVA-2003: Simplify CBUtil internal API to improve performance.
-- [improvement] JAVA-2002: Reimplement TypeCodec.accepts to improve performance.
-- [documentation] JAVA-2041: Deprecate cross-DC failover in DCAwareRoundRobinPolicy.
-- [documentation] JAVA-1159: Document workaround for using tuple with udt field in Mapper.
-- [documentation] JAVA-1964: Complete remaining "Coming Soon" sections in docs.
-- [improvement] JAVA-1950: Log server side warnings returned from a query.
-- [improvement] JAVA-2123: Allow to use QueryBuilder for building queries against Materialized Views.
-- [bug] JAVA-2082: Avoid race condition during cluster close and schema refresh.
-
-
-### 3.6.0
-
-- [improvement] JAVA-1394: Add request-queue-depth metric.
-- [improvement] JAVA-1857: Add Statement.setHost.
-- [bug] JAVA-1920: Use nanosecond precision in LocalTimeCodec#format().
-- [bug] JAVA-1794: Driver tries to create a connection array of size -1.
-- [new feature] JAVA-1899: Support virtual tables.
-- [bug] JAVA-1908: TableMetadata.asCQLQuery does not add table option 'memtable_flush_period_in_ms' in the generated query.
-- [bug] JAVA-1924: StatementWrapper setters should return the wrapping statement.
-- [new feature] JAVA-1532: Add Codec support for Java 8's LocalDateTime and ZoneId.
-- [improvement] JAVA-1786: Use Google code formatter.
-- [bug] JAVA-1871: Change LOCAL\_SERIAL.isDCLocal() to return true.
-- [documentation] JAVA-1902: Clarify unavailable & request error in DefaultRetryPolicy javadoc.
-- [new feature] JAVA-1903: Add WhiteListPolicy.ofHosts.
-- [bug] JAVA-1928: Fix GuavaCompatibility for Guava 26.
-- [bug] JAVA-1935: Add null check in QueryConsistencyException.getHost.
-- [improvement] JAVA-1771: Send driver name and version in STARTUP message.
-- [improvement] JAVA-1388: Add dynamic port discovery for system.peers\_v2.
-- [documentation] JAVA-1810: Note which setters are not propagated to PreparedStatement.
-- [bug] JAVA-1944: Surface Read and WriteFailureException to RetryPolicy.
-- [bug] JAVA-1211: Fix NPE in cluster close when cluster init fails.
-- [bug] JAVA-1220: Fail fast on cluster init if previous init failed.
-- [bug] JAVA-1929: Preempt session execute queries if session was closed.
-
-Merged from 3.5.x:
-
-- [bug] JAVA-1872: Retain table's views when processing table update.
-
-
-### 3.5.0
-
-- [improvement] JAVA-1448: TokenAwarePolicy should respect child policy ordering.
-- [bug] JAVA-1751: Include defaultTimestamp length in encodedSize for protocol version >= 3.
-- [bug] JAVA-1770: Fix message size when using Custom Payload.
-- [documentation] JAVA-1760: Add metrics documentation.
-- [improvement] JAVA-1765: Update dependencies to latest patch versions.
-- [improvement] JAVA-1752: Deprecate DowngradingConsistencyRetryPolicy.
-- [improvement] JAVA-1735: Log driver version on first use.
-- [documentation] JAVA-1380: Add FAQ entry for errors arising from incompatibilities.
-- [improvement] JAVA-1748: Support IS NOT NULL and != in query builder.
-- [documentation] JAVA-1740: Mention C*2.2/3.0 incompatibilities in paging state manual.
-- [improvement] JAVA-1725: Add a getNodeCount method to CCMAccess for easier automation.
-- [new feature] JAVA-708: Add means to measure request sizes.
-- [documentation] JAVA-1788: Add example for enabling host name verification to SSL docs.
-- [improvement] JAVA-1791: Revert "JAVA-1677: Warn if auth is configured on the client but not the server."
-- [bug] JAVA-1789: Account for flags in Prepare encodedSize.
-- [bug] JAVA-1797: Use jnr-ffi version required by jnr-posix.
-
-
-### 3.4.0
-
-- [improvement] JAVA-1671: Remove unnecessary test on prepared statement metadata.
-- [bug] JAVA-1694: Upgrade to jackson-databind 2.7.9.2 to address CVE-2015-15095.
-- [documentation] JAVA-1685: Clarify recommendation on preparing SELECT *.
-- [improvement] JAVA-1679: Improve error message on batch log write timeout.
-- [improvement] JAVA-1672: Remove schema agreement check when repreparing on up.
-- [improvement] JAVA-1677: Warn if auth is configured on the client but not the server.
-- [new feature] JAVA-1651: Add NO_COMPACT startup option.
-- [improvement] JAVA-1683: Add metrics to track writes to nodes.
-- [new feature] JAVA-1229: Allow specifying the keyspace for individual queries.
-- [improvement] JAVA-1682: Provide a way to record latencies for cancelled speculative executions.
-- [improvement] JAVA-1717: Add metrics to latency-aware policy.
-- [improvement] JAVA-1675: Remove dates from copyright headers.
-
-Merged from 3.3.x:
-
-- [bug] JAVA-1555: Include VIEW and CDC in WriteType.
-- [bug] JAVA-1599: exportAsString improvements (sort, format, clustering order)
-- [improvement] JAVA-1587: Deterministic ordering of columns used in Mapper#saveQuery
-- [improvement] JAVA-1500: Add a metric to report number of in-flight requests.
-- [bug] JAVA-1438: QueryBuilder check for empty orderings.
-- [improvement] JAVA-1490: Allow zero delay for speculative executions.
-- [documentation] JAVA-1607: Add FAQ entry for netty-transport-native-epoll.
-- [bug] JAVA-1630: Fix Metadata.addIfAbsent.
-- [improvement] JAVA-1619: Update QueryBuilder methods to support Iterable input.
-- [improvement] JAVA-1527: Expose host_id and schema_version on Host metadata.
-- [new feature] JAVA-1377: Add support for TWCS in SchemaBuilder.
-- [improvement] JAVA-1631: Publish a sources jar for driver-core-tests.
-- [improvement] JAVA-1632: Add a withIpPrefix(String) method to CCMBridge.Builder.
-- [bug] JAVA-1639: VersionNumber does not fullfill equals/hashcode contract.
-- [bug] JAVA-1613: Fix broken shaded Netty detection in NettyUtil.
-- [bug] JAVA-1666: Fix keyspace export when a UDT has case-sensitive field names.
-- [improvement] JAVA-1196: Include hash of result set metadata in prepared statement id.
-- [improvement] JAVA-1670: Support user-provided JMX ports for CCMBridge.
-- [improvement] JAVA-1661: Avoid String.toLowerCase if possible in Metadata.
-- [improvement] JAVA-1659: Expose low-level flusher tuning options.
-- [improvement] JAVA-1660: Support netty-transport-native-epoll in OSGi container.
-
-
-### 3.3.2
-
-- [bug] JAVA-1666: Fix keyspace export when a UDT has case-sensitive field names.
-- [improvement] JAVA-1196: Include hash of result set metadata in prepared statement id.
-- [improvement] JAVA-1670: Support user-provided JMX ports for CCMBridge.
-- [improvement] JAVA-1661: Avoid String.toLowerCase if possible in Metadata.
-- [improvement] JAVA-1659: Expose low-level flusher tuning options.
-- [improvement] JAVA-1660: Support netty-transport-native-epoll in OSGi container.
-
-
-### 3.3.1
-
-- [bug] JAVA-1555: Include VIEW and CDC in WriteType.
-- [bug] JAVA-1599: exportAsString improvements (sort, format, clustering order)
-- [improvement] JAVA-1587: Deterministic ordering of columns used in Mapper#saveQuery
-- [improvement] JAVA-1500: Add a metric to report number of in-flight requests.
-- [bug] JAVA-1438: QueryBuilder check for empty orderings.
-- [improvement] JAVA-1490: Allow zero delay for speculative executions.
-- [documentation] JAVA-1607: Add FAQ entry for netty-transport-native-epoll.
-- [bug] JAVA-1630: Fix Metadata.addIfAbsent.
-- [improvement] JAVA-1619: Update QueryBuilder methods to support Iterable input.
-- [improvement] JAVA-1527: Expose host_id and schema_version on Host metadata.
-- [new feature] JAVA-1377: Add support for TWCS in SchemaBuilder.
-- [improvement] JAVA-1631: Publish a sources jar for driver-core-tests.
-- [improvement] JAVA-1632: Add a withIpPrefix(String) method to CCMBridge.Builder.
-- [bug] JAVA-1639: VersionNumber does not fullfill equals/hashcode contract.
-- [bug] JAVA-1613: Fix broken shaded Netty detection in NettyUtil.
-
-
-### 3.3.0
-
-- [bug] JAVA-1469: Update LoggingRetryPolicy to deal with SLF4J-353.
-- [improvement] JAVA-1203: Upgrade Metrics to allow usage in OSGi.
-- [bug] JAVA-1407: KeyspaceMetadata exportAsString should export user types in topological sort order.
-- [bug] JAVA-1455: Mapper support using unset for null values.
-- [bug] JAVA-1464: Allow custom codecs with non public constructors in @Param.
-- [bug] JAVA-1470: Querying multiple pages overrides WrappedStatement.
-- [improvement] JAVA-1428: Upgrade logback and jackson dependencies.
-- [documentation] JAVA-1463: Revisit speculative execution docs.
-- [documentation] JAVA-1466: Revisit timestamp docs.
-- [documentation] JAVA-1445: Clarify how nodes are penalized in LatencyAwarePolicy docs.
-- [improvement] JAVA-1446: Support 'DEFAULT UNSET' in Query Builder JSON Insert.
-- [improvement] JAVA-1443: Add groupBy method to Select statement.
-- [improvement] JAVA-1458: Check thread in mapper sync methods.
-- [improvement] JAVA-1488: Upgrade Netty to 4.0.47.Final.
-- [improvement] JAVA-1460: Add speculative execution number to ExecutionInfo
-- [improvement] JAVA-1431: Improve error handling during pool initialization.
-
-
-### 3.2.0
-
-- [new feature] JAVA-1347: Add support for duration type.
-- [new feature] JAVA-1248: Implement "beta" flag for native protocol v5.
-- [new feature] JAVA-1362: Send query options flags as [int] for Protocol V5+.
-- [new feature] JAVA-1364: Enable creation of SSLHandler with remote address information.
-- [improvement] JAVA-1367: Make protocol negotiation more resilient.
-- [bug] JAVA-1397: Handle duration as native datatype in protocol v5+.
-- [improvement] JAVA-1308: CodecRegistry performance improvements.
-- [improvement] JAVA-1287: Add CDC to TableOptionsMetadata and Schema Builder.
-- [improvement] JAVA-1392: Reduce lock contention in RPTokenFactory.
-- [improvement] JAVA-1328: Provide compatibility with Guava 20.
-- [improvement] JAVA-1247: Disable idempotence warnings.
-- [improvement] JAVA-1286: Support setting and retrieving udt fields in QueryBuilder.
-- [bug] JAVA-1415: Correctly report if a UDT column is frozen.
-- [bug] JAVA-1418: Make Guava version detection more reliable.
-- [new feature] JAVA-1174: Add ifNotExists option to mapper.
-- [improvement] JAVA-1414: Optimize Metadata.escapeId and Metadata.handleId.
-- [improvement] JAVA-1310: Make mapper's ignored properties configurable.
-- [improvement] JAVA-1316: Add strategy for resolving properties into CQL names.
-- [bug] JAVA-1424: Handle new WRITE_FAILURE and READ_FAILURE format in v5 protocol.
-
-Merged from 3.1.x branch:
-
-- [bug] JAVA-1371: Reintroduce connection pool timeout.
-- [bug] JAVA-1313: Copy SerialConsistencyLevel to PreparedStatement.
-- [documentation] JAVA-1334: Clarify documentation of method `addContactPoints`.
-- [improvement] JAVA-1357: Document that getReplicas only returns replicas of the last token in range.
-- [bug] JAVA-1404: Fix min token handling in TokenRange.contains.
-- [bug] JAVA-1429: Prevent heartbeats until connection is fully initialized.
-
-
-### 3.1.4
-
-Merged from 3.0.x branch:
-
-- [bug] JAVA-1371: Reintroduce connection pool timeout.
-- [bug] JAVA-1313: Copy SerialConsistencyLevel to PreparedStatement.
-- [documentation] JAVA-1334: Clarify documentation of method `addContactPoints`.
-- [improvement] JAVA-1357: Document that getReplicas only returns replicas of the last token in range.
-
-
-### 3.1.3
-
-Merged from 3.0.x branch:
-
-- [bug] JAVA-1330: Add un/register for SchemaChangeListener in DelegatingCluster
-- [bug] JAVA-1351: Include Custom Payload in Request.copy.
-- [bug] JAVA-1346: Reset heartbeat only on client reads (not writes).
-- [improvement] JAVA-866: Support tuple notation in QueryBuilder.eq/in.
-
-
-### 3.1.2
-
-- [bug] JAVA-1321: Wrong OSGi dependency version for Guava.
-
-Merged from 3.0.x branch:
-
-- [bug] JAVA-1312: QueryBuilder modifies selected columns when manually selected.
-- [improvement] JAVA-1303: Add missing BoundStatement.setRoutingKey(ByteBuffer...)
-- [improvement] JAVA-262: Make internal executors customizable
-
-
-### 3.1.1
-
-- [bug] JAVA-1284: ClockFactory should check system property before attempting to load Native class.
-- [bug] JAVA-1255: Allow nested UDTs to be used in Mapper.
-- [bug] JAVA-1279: Mapper should exclude Groovy's "metaClass" property when looking for mapped properties
-
-Merged from 3.0.x branch:
-
-- [improvement] JAVA-1246: Driver swallows the real exception in a few cases
-- [improvement] JAVA-1261: Throw error when attempting to page in I/O thread.
-- [bug] JAVA-1258: Regression: Mapper cannot map a materialized view after JAVA-1126.
-- [bug] JAVA-1101: Batch and BatchStatement should consider inner statements to determine query idempotence
-- [improvement] JAVA-1262: Use ParseUtils for quoting & unquoting.
-- [improvement] JAVA-1275: Use Netty's default thread factory
-- [bug] JAVA-1285: QueryBuilder routing key auto-discovery should handle case-sensitive column names.
-- [bug] JAVA-1283: Don't cache failed query preparations in the mapper.
-- [improvement] JAVA-1277: Expose AbstractSession.checkNotInEventLoop.
-- [bug] JAVA-1272: BuiltStatement not able to print its query string if it contains mapped UDTs.
-- [bug] JAVA-1292: 'Adjusted frame length' error breaks driver's ability to read data.
-- [improvement] JAVA-1293: Make DecoderForStreamIdSize.MAX_FRAME_LENGTH configurable.
-- [improvement] JAVA-1053: Add a metric for authentication errors
-- [improvement] JAVA-1263: Eliminate unnecessary memory copies in FrameCompressor implementations.
-- [improvement] JAVA-893: Make connection pool non-blocking
-
-
-### 3.1.0
-
-- [new feature] JAVA-1153: Add PER PARTITION LIMIT to Select QueryBuilder.
-- [improvement] JAVA-743: Add JSON support to QueryBuilder.
-- [improvement] JAVA-1233: Update HdrHistogram to 2.1.9.
-- [improvement] JAVA-1233: Update Snappy to 1.1.2.6.
-- [bug] JAVA-1161: Preserve full time zone info in ZonedDateTimeCodec and DateTimeCodec.
-- [new feature] JAVA-1157: Allow asynchronous paging of Mapper Result.
-- [improvement] JAVA-1212: Don't retry non-idempotent statements by default.
-- [improvement] JAVA-1192: Make EventDebouncer settings updatable at runtime.
-- [new feature] JAVA-541: Add polymorphism support to object mapper.
-- [new feature] JAVA-636: Allow @Column annotations on getters/setters as well as fields.
-- [new feature] JAVA-984: Allow non-void setters in object mapping.
-- [new feature] JAVA-1055: Add ErrorAware load balancing policy.
-
-Merged from 3.0.x branch:
-
-- [bug] JAVA-1179: Request objects should be copied when executed.
-- [improvement] JAVA-1182: Throw error when synchronous call made on I/O thread.
-- [bug] JAVA-1184: Unwrap StatementWrappers when extracting column definitions.
-- [bug] JAVA-1132: Executing bound statement with no variables results in exception with protocol v1.
-- [improvement] JAVA-1040: SimpleStatement parameters support in QueryLogger.
-- [improvement] JAVA-1151: Fail fast if HdrHistogram is not in the classpath.
-- [improvement] JAVA-1154: Allow individual Statement to cancel the read timeout.
-- [bug] JAVA-1074: Fix documentation around default timestamp generator.
-- [improvement] JAVA-1109: Document SSLOptions changes in upgrade guide.
-- [improvement] JAVA-1065: Add method to create token from partition key values.
-- [improvement] JAVA-1136: Enable JDK signature check in module driver-extras.
-- [improvement] JAVA-866: Support tuple notation in QueryBuilder.eq/in.
-- [bug] JAVA-1140: Use same connection to check for schema agreement after a DDL query.
-- [improvement] JAVA-1113: Support Cassandra 3.4 LIKE operator in QueryBuilder.
-- [improvement] JAVA-1086: Support Cassandra 3.2 CAST function in QueryBuilder.
-- [bug] JAVA-1095: Check protocol version for custom payload before sending the query.
-- [improvement] JAVA-1133: Add OSGi headers to cassandra-driver-extras.
-- [bug] JAVA-1137: Incorrect string returned by DataType.asFunctionParameterString() for collections and tuples.
-- [bug] JAVA-1046: (Dynamic)CompositeTypes need to be parsed as string literal, not blob.
-- [improvement] JAVA-1164: Clarify documentation on Host.listenAddress and broadcastAddress.
-- [improvement] JAVA-1171: Add Host method to determine if DSE Graph is enabled.
-- [improvement] JAVA-1069: Bootstrap driver-examples module.
-- [documentation] JAVA-1150: Add example and FAQ entry about ByteBuffer/BLOB.
-- [improvement] JAVA-1011: Expose PoolingOptions default values.
-- [improvement] JAVA-630: Don't process DOWN events for nodes that have active connections.
-- [improvement] JAVA-851: Improve UUIDs javadoc with regard to user-provided timestamps.
-- [improvement] JAVA-979: Update javadoc for RegularStatement toString() and getQueryString() to indicate that consistency level and other parameters are not maintained in the query string.
-- [bug] JAVA-1068: Unwrap StatementWrappers when hashing the paging state.
-- [improvement] JAVA-1021: Improve error message when connect() is called with an invalid keyspace name.
-- [improvement] JAVA-879: Mapper.map() accepts mapper-generated and user queries.
-- [bug] JAVA-1100: Exception when connecting with shaded java driver in OSGI
-- [bug] JAVA-1064: getTable create statement doesn't properly handle quotes in primary key.
-- [bug] JAVA-1089: Set LWT made from BuiltStatements to non-idempotent.
-- [improvement] JAVA-923: Position idempotent flag on object mapper queries.
-- [bug] JAVA-1070: The Mapper should not prepare queries synchronously.
-- [new feature] JAVA-982: Introduce new method ConsistencyLevel.isSerial().
-- [bug] JAVA-764: Retry with the normal consistency level (not the serial one) when a write times out on the Paxos phase.
-- [improvement] JAVA-852: Ignore peers with null entries during discovery.
-- [bug] JAVA-1005: DowngradingConsistencyRetryPolicy does not work with EACH_QUORUM when 1 DC is down.
-- [bug] JAVA-1002: Avoid deadlock when re-preparing a statement on other hosts.
-- [bug] JAVA-1072: Ensure defunct connections are properly evicted from the pool.
-- [bug] JAVA-1152: Fix NPE at ControlConnection.refreshNodeListAndTokenMap().
-
-Merged from 2.1 branch:
-
-- [improvement] JAVA-1038: Fetch node info by rpc_address if its broadcast_address is not in system.peers.
-- [improvement] JAVA-888: Add cluster-wide percentile tracker.
-- [improvement] JAVA-963: Automatically register PercentileTracker from components that use it.
-- [new feature] JAVA-1019: SchemaBuilder support for CREATE/ALTER/DROP KEYSPACE.
-- [bug] JAVA-727: Allow monotonic timestamp generators to drift in the future + use microsecond precision when possible.
-- [improvement] JAVA-444: Add Java process information to UUIDs.makeNode() hash.
-
-
-### 3.0.7
-
-- [bug] JAVA-1371: Reintroduce connection pool timeout.
-- [bug] JAVA-1313: Copy SerialConsistencyLevel to PreparedStatement.
-- [documentation] JAVA-1334: Clarify documentation of method `addContactPoints`.
-- [improvement] JAVA-1357: Document that getReplicas only returns replicas of the last token in range.
-
-
-### 3.0.6
-
-- [bug] JAVA-1330: Add un/register for SchemaChangeListener in DelegatingCluster
-- [bug] JAVA-1351: Include Custom Payload in Request.copy.
-- [bug] JAVA-1346: Reset heartbeat only on client reads (not writes).
-- [improvement] JAVA-866: Support tuple notation in QueryBuilder.eq/in.
-
-
-### 3.0.5
-
-- [bug] JAVA-1312: QueryBuilder modifies selected columns when manually selected.
-- [improvement] JAVA-1303: Add missing BoundStatement.setRoutingKey(ByteBuffer...)
-- [improvement] JAVA-262: Make internal executors customizable
-- [bug] JAVA-1320: prevent unnecessary task creation on empty pool
-
-
-### 3.0.4
-
-- [improvement] JAVA-1246: Driver swallows the real exception in a few cases
-- [improvement] JAVA-1261: Throw error when attempting to page in I/O thread.
-- [bug] JAVA-1258: Regression: Mapper cannot map a materialized view after JAVA-1126.
-- [bug] JAVA-1101: Batch and BatchStatement should consider inner statements to determine query idempotence
-- [improvement] JAVA-1262: Use ParseUtils for quoting & unquoting.
-- [improvement] JAVA-1275: Use Netty's default thread factory
-- [bug] JAVA-1285: QueryBuilder routing key auto-discovery should handle case-sensitive column names.
-- [bug] JAVA-1283: Don't cache failed query preparations in the mapper.
-- [improvement] JAVA-1277: Expose AbstractSession.checkNotInEventLoop.
-- [bug] JAVA-1272: BuiltStatement not able to print its query string if it contains mapped UDTs.
-- [bug] JAVA-1292: 'Adjusted frame length' error breaks driver's ability to read data.
-- [improvement] JAVA-1293: Make DecoderForStreamIdSize.MAX_FRAME_LENGTH configurable.
-- [improvement] JAVA-1053: Add a metric for authentication errors
-- [improvement] JAVA-1263: Eliminate unnecessary memory copies in FrameCompressor implementations.
-- [improvement] JAVA-893: Make connection pool non-blocking
-
-
-### 3.0.3
-
-- [improvement] JAVA-1147: Upgrade Netty to 4.0.37.
-- [bug] JAVA-1213: Allow updates and inserts to BLOB column using read-only ByteBuffer.
-- [bug] JAVA-1209: ProtocolOptions.getProtocolVersion() should return null instead of throwing NPE if Cluster has not
- been init'd.
-- [improvement] JAVA-1204: Update documentation to indicate tcnative version requirement.
-- [bug] JAVA-1186: Fix duplicated hosts in DCAwarePolicy warn message.
-- [bug] JAVA-1187: Fix warning message when local CL used with RoundRobinPolicy.
-- [improvement] JAVA-1175: Warn if DCAwarePolicy configuration is inconsistent.
-- [bug] JAVA-1139: ConnectionException.getMessage() throws NPE if address is null.
-- [bug] JAVA-1202: Handle null rpc_address when checking schema agreement.
-- [improvement] JAVA-1198: Document that BoundStatement is not thread-safe.
-- [improvement] JAVA-1200: Upgrade LZ4 to 1.3.0.
-- [bug] JAVA-1232: Fix NPE in IdempotenceAwareRetryPolicy.isIdempotent.
-- [improvement] JAVA-1227: Document "SELECT *" issue with prepared statement.
-- [bug] JAVA-1160: Fix NPE in VersionNumber.getPreReleaseLabels().
-- [improvement] JAVA-1126: Handle schema changes in Mapper.
-- [bug] JAVA-1193: Refresh token and replica metadata synchronously when schema is altered.
-- [bug] JAVA-1120: Skip schema refresh debouncer when checking for agreement as a result of schema change made by client.
-- [improvement] JAVA-1242: Fix driver-core dependency in driver-stress
-- [improvement] JAVA-1235: Move the query to the end of "re-preparing .." log message as a key value.
-
-
-### 3.0.2
-
-Merged from 2.1 branch:
-
-- [bug] JAVA-1179: Request objects should be copied when executed.
-- [improvement] JAVA-1182: Throw error when synchronous call made on I/O thread.
-- [bug] JAVA-1184: Unwrap StatementWrappers when extracting column definitions.
-
-
-### 3.0.1
-
-- [bug] JAVA-1132: Executing bound statement with no variables results in exception with protocol v1.
-- [improvement] JAVA-1040: SimpleStatement parameters support in QueryLogger.
-- [improvement] JAVA-1151: Fail fast if HdrHistogram is not in the classpath.
-- [improvement] JAVA-1154: Allow individual Statement to cancel the read timeout.
-- [bug] JAVA-1074: Fix documentation around default timestamp generator.
-- [improvement] JAVA-1109: Document SSLOptions changes in upgrade guide.
-- [improvement] JAVA-1065: Add method to create token from partition key values.
-- [improvement] JAVA-1136: Enable JDK signature check in module driver-extras.
-- [improvement] JAVA-866: Support tuple notation in QueryBuilder.eq/in.
-- [bug] JAVA-1140: Use same connection to check for schema agreement after a DDL query.
-- [improvement] JAVA-1113: Support Cassandra 3.4 LIKE operator in QueryBuilder.
-- [improvement] JAVA-1086: Support Cassandra 3.2 CAST function in QueryBuilder.
-- [bug] JAVA-1095: Check protocol version for custom payload before sending the query.
-- [improvement] JAVA-1133: Add OSGi headers to cassandra-driver-extras.
-- [bug] JAVA-1137: Incorrect string returned by DataType.asFunctionParameterString() for collections and tuples.
-- [bug] JAVA-1046: (Dynamic)CompositeTypes need to be parsed as string literal, not blob.
-- [improvement] JAVA-1164: Clarify documentation on Host.listenAddress and broadcastAddress.
-- [improvement] JAVA-1171: Add Host method to determine if DSE Graph is enabled.
-- [improvement] JAVA-1069: Bootstrap driver-examples module.
-- [documentation] JAVA-1150: Add example and FAQ entry about ByteBuffer/BLOB.
-
-Merged from 2.1 branch:
-
-- [improvement] JAVA-1011: Expose PoolingOptions default values.
-- [improvement] JAVA-630: Don't process DOWN events for nodes that have active connections.
-- [improvement] JAVA-851: Improve UUIDs javadoc with regard to user-provided timestamps.
-- [improvement] JAVA-979: Update javadoc for RegularStatement toString() and getQueryString() to indicate that consistency level and other parameters are not maintained in the query string.
-- [bug] JAVA-1068: Unwrap StatementWrappers when hashing the paging state.
-- [improvement] JAVA-1021: Improve error message when connect() is called with an invalid keyspace name.
-- [improvement] JAVA-879: Mapper.map() accepts mapper-generated and user queries.
-- [bug] JAVA-1100: Exception when connecting with shaded java driver in OSGI
-- [bug] JAVA-1064: getTable create statement doesn't properly handle quotes in primary key.
-- [bug] JAVA-1089: Set LWT made from BuiltStatements to non-idempotent.
-- [improvement] JAVA-923: Position idempotent flag on object mapper queries.
-- [bug] JAVA-1070: The Mapper should not prepare queries synchronously.
-- [new feature] JAVA-982: Introduce new method ConsistencyLevel.isSerial().
-- [bug] JAVA-764: Retry with the normal consistency level (not the serial one) when a write times out on the Paxos phase.
-- [improvement] JAVA-852: Ignore peers with null entries during discovery.
-- [bug] JAVA-1005: DowngradingConsistencyRetryPolicy does not work with EACH_QUORUM when 1 DC is down.
-- [bug] JAVA-1002: Avoid deadlock when re-preparing a statement on other hosts.
-- [bug] JAVA-1072: Ensure defunct connections are properly evicted from the pool.
-- [bug] JAVA-1152: Fix NPE at ControlConnection.refreshNodeListAndTokenMap().
-
-
-### 3.0.0
-
-- [bug] JAVA-1034: fix metadata parser for collections of custom types.
-- [improvement] JAVA-1035: Expose host broadcast_address and listen_address if available.
-- [new feature] JAVA-1037: Allow named parameters in simple statements.
-- [improvement] JAVA-1033: Allow per-statement read timeout.
-- [improvement] JAVA-1042: Include DSE version and workload in Host data.
-
-Merged from 2.1 branch:
-
-- [improvement] JAVA-1030: Log token to replica map computation times.
-- [bug] JAVA-1039: Minor bugs in Event Debouncer.
-
-
-### 3.0.0-rc1
-
-- [bug] JAVA-890: fix mapper for case-sensitive UDT.
-
-
-### 3.0.0-beta1
-
-- [bug] JAVA-993: Support for "custom" types after CASSANDRA-10365.
-- [bug] JAVA-999: Handle unset parameters in QueryLogger.
-- [bug] JAVA-998: SchemaChangeListener not invoked for Functions or Aggregates having UDT arguments.
-- [bug] JAVA-1009: use CL ONE to compute query plan when reconnecting
- control connection.
-- [improvement] JAVA-1003: Change default consistency level to LOCAL_ONE (amends JAVA-926).
-- [improvement] JAVA-863: Idempotence propagation in prepared statements.
-- [improvement] JAVA-996: Make CodecRegistry available to ProtocolDecoder.
-- [bug] JAVA-819: Driver shouldn't retry on client timeout if statement is not idempotent.
-- [improvement] JAVA-1007: Make SimpleStatement and QueryBuilder "detached" again.
-
-Merged from 2.1 branch:
-
-- [improvement] JAVA-989: Include keyspace name when invalid replication found when generating token map.
-- [improvement] JAVA-664: Reduce heap consumption for TokenMap.
-- [bug] JAVA-994: Don't call on(Up|Down|Add|Remove) methods if Cluster is closed/closing.
-
-
-### 3.0.0-alpha5
-
-- [improvement] JAVA-958: Make TableOrView.Order visible.
-- [improvement] JAVA-968: Update metrics to the latest version.
-- [improvement] JAVA-965: Improve error handling for when a non-type 1 UUID is given to bind() on a timeuuid column.
-- [improvement] JAVA-885: Pass the authenticator name from the server to the auth provider.
-- [improvement] JAVA-961: Raise an exception when an older version of guava (<16.01) is found.
-- [bug] JAVA-972: TypeCodec.parse() implementations should be case insensitive when checking for keyword NULL.
-- [bug] JAVA-971: Make type codecs invariant.
-- [bug] JAVA-986: Update documentation links to reference 3.0.
-- [improvement] JAVA-841: Refactor SSLOptions API.
-- [improvement] JAVA-948: Don't limit cipher suites by default.
-- [improvement] JAVA-917: Document SSL configuration.
-- [improvement] JAVA-936: Adapt schema metadata parsing logic to new storage format of CQL types in C* 3.0.
-- [new feature] JAVA-846: Provide custom codecs library as an extra module.
-- [new feature] JAVA-742: Codec Support for JSON.
-- [new feature] JAVA-606: Codec support for Java 8.
-- [new feature] JAVA-565: Codec support for Java arrays.
-- [new feature] JAVA-605: Codec support for Java enums.
-- [bug] JAVA-884: Fix UDT mapper to process fields in the correct order.
-
-Merged from 2.1 branch:
-
-- [bug] JAVA-854: avoid early return in Cluster.init when a node doesn't support the protocol version.
-- [bug] JAVA-978: Fix quoting issue that caused Mapper.getTableMetadata() to return null.
-- [improvement] JAVA-920: Downgrade "error creating pool" message to WARN.
-- [bug] JAVA-954: Don't trigger reconnection before initialization complete.
-- [improvement] JAVA-914: Avoid rejected tasks at shutdown.
-- [improvement] JAVA-921: Add SimpleStatement.getValuesCount().
-- [bug] JAVA-901: Move call to connection.release() out of cancelHandler.
-- [bug] JAVA-960: Avoid race in control connection shutdown.
-- [bug] JAVA-656: Fix NPE in ControlConnection.updateLocationInfo.
-- [bug] JAVA-966: Count uninitialized connections in conviction policy.
-- [improvement] JAVA-917: Document SSL configuration.
-- [improvement] JAVA-652: Add DCAwareRoundRobinPolicy builder.
-- [improvement] JAVA-808: Add generic filtering policy that can be used to exclude specific DCs.
-- [bug] JAVA-988: Metadata.handleId should handle escaped double quotes.
-- [bug] JAVA-983: QueryBuilder cannot handle collections containing function calls.
-
-
-### 3.0.0-alpha4
-
-- [improvement] JAVA-926: Change default consistency level to LOCAL_QUORUM.
-- [bug] JAVA-942: Fix implementation of UserType.hashCode().
-- [improvement] JAVA-877: Don't delay UP/ADDED notifications if protocol version = V4.
-- [improvement] JAVA-938: Parse 'extensions' column in table metadata.
-- [bug] JAVA-900: Fix Configuration builder to allow disabled metrics.
-- [new feature] JAVA-902: Prepare API for async query trace.
-- [new feature] JAVA-930: Add BoundStatement#unset.
-- [bug] JAVA-946: Make table metadata options class visible.
-- [bug] JAVA-939: Add crcCheckChance to TableOptionsMetadata#equals/hashCode.
-- [bug] JAVA-922: Make TypeCodec return mutable collections.
-- [improvement] JAVA-932: Limit visibility of codec internals.
-- [improvement] JAVA-934: Warn if a custom codec collides with an existing one.
-- [improvement] JAVA-940: Allow typed getters/setters to target any CQL type.
-- [bug] JAVA-950: Fix Cluster.connect with a case-sensitive keyspace.
-- [bug] JAVA-953: Fix MaterializedViewMetadata when base table name is case sensitive.
-
-
-### 3.0.0-alpha3
-
-- [new feature] JAVA-571: Support new system tables in C* 3.0.
-- [improvement] JAVA-919: Move crc_check_chance out of compressions options.
-
-Merged from 2.0 branch:
-
-- [improvement] JAVA-718: Log streamid at the trace level on sending request and receiving response.
-- [bug] JAVA-796: Fix SpeculativeExecutionPolicy.init() and close() are never called.
-- [improvement] JAVA-710: Suppress unnecessary warning at shutdown.
-- [improvement] #340: Allow DNS name with multiple A-records as contact point.
-- [bug] JAVA-794: Allow tracing across multiple result pages.
-- [bug] JAVA-737: DowngradingConsistencyRetryPolicy ignores write timeouts.
-- [bug] JAVA-736: Forbid bind marker in QueryBuilder add/append/prepend.
-- [bug] JAVA-712: Prevent QueryBuilder.quote() from applying duplicate double quotes.
-- [bug] JAVA-688: Prevent QueryBuilder from trying to serialize raw string.
-- [bug] JAVA-679: Support bind marker in QueryBuilder DELETE's list index.
-- [improvement] JAVA-475: Improve QueryBuilder API for SELECT DISTINCT.
-- [improvement] JAVA-225: Create values() function for Insert builder using List.
-- [improvement] JAVA-702: Warn when ReplicationStrategy encounters invalid
- replication factors.
-- [improvement] JAVA-662: Add PoolingOptions method to set both core and max
- connections.
-- [improvement] JAVA-766: Do not include epoll JAR in binary distribution.
-- [improvement] JAVA-726: Optimize internal copies of Request objects.
-- [bug] JAVA-815: Preserve tracing across retries.
-- [improvement] JAVA-709: New RetryDecision.tryNextHost().
-- [bug] JAVA-733: Handle function calls and raw strings as non-idempotent in QueryBuilder.
-- [improvement] JAVA-765: Provide API to retrieve values of a Parameterized SimpleStatement.
-- [improvement] JAVA-827: implement UPDATE .. IF EXISTS in QueryBuilder.
-- [improvement] JAVA-618: Randomize contact points list to prevent hotspots.
-- [improvement] JAVA-720: Surface the coordinator used on query failure.
-- [bug] JAVA-792: Handle contact points removed during init.
-- [improvement] JAVA-719: Allow PlainTextAuthProvider to change its credentials at runtime.
-- [new feature] JAVA-151: Make it possible to register for SchemaChange Events.
-- [improvement] JAVA-861: Downgrade "Asked to rebuild table" log from ERROR to INFO level.
-- [improvement] JAVA-797: Provide an option to prepare statements only on one node.
-- [improvement] JAVA-658: Provide an option to not re-prepare all statements in onUp.
-- [improvement] JAVA-853: Customizable creation of netty timer.
-- [bug] JAVA-859: Avoid quadratic ring processing with invalid replication factors.
-- [improvement] JAVA-657: Debounce control connection queries.
-- [bug] JAVA-784: LoadBalancingPolicy.distance() called before init().
-- [new feature] JAVA-828: Make driver-side metadata optional.
-- [improvement] JAVA-544: Allow hosts to remain partially up.
-- [improvement] JAVA-821, JAVA-822: Remove internal blocking calls and expose async session
- creation.
-- [improvement] JAVA-725: Use parallel calls when re-preparing statement on other
- hosts.
-- [bug] JAVA-629: Don't use connection timeout for unrelated internal queries.
-- [bug] JAVA-892: Fix NPE in speculative executions when metrics disabled.
-
-
-### 3.0.0-alpha2
-
-- [new feature] JAVA-875, JAVA-882: Move secondary index metadata out of column definitions.
-
-Merged from 2.2 branch:
-
-- [bug] JAVA-847: Propagate CodecRegistry to nested UDTs.
-- [improvement] JAVA-848: Ability to store a default, shareable CodecRegistry
- instance.
-- [bug] JAVA-880: Treat empty ByteBuffers as empty values in TupleCodec and
- UDTCodec.
-
-
-### 3.0.0-alpha1
-
-- [new feature] JAVA-876: Support new system tables in C* 3.0.0-alpha1.
-
-Merged from 2.2 branch:
-
-- [improvement] JAVA-810: Rename DateWithoutTime to LocalDate.
-- [bug] JAVA-816: DateCodec does not format values correctly.
-- [bug] JAVA-817: TimeCodec does not format values correctly.
-- [bug] JAVA-818: TypeCodec.getDataTypeFor() does not handle LocalDate instances.
-- [improvement] JAVA-836: Make ResultSet#fetchMoreResult return a
- ListenableFuture.
-- [improvement] JAVA-843: Disable frozen checks in mapper.
-- [improvement] JAVA-721: Allow user to register custom type codecs.
-- [improvement] JAVA-722: Support custom type codecs in mapper.
-
-
-### 2.2.0-rc3
-
-- [bug] JAVA-847: Propagate CodecRegistry to nested UDTs.
-- [improvement] JAVA-848: Ability to store a default, shareable CodecRegistry
- instance.
-- [bug] JAVA-880: Treat empty ByteBuffers as empty values in TupleCodec and
- UDTCodec.
-
-
-### 2.2.0-rc2
-
-- [improvement] JAVA-810: Rename DateWithoutTime to LocalDate.
-- [bug] JAVA-816: DateCodec does not format values correctly.
-- [bug] JAVA-817: TimeCodec does not format values correctly.
-- [bug] JAVA-818: TypeCodec.getDataTypeFor() does not handle LocalDate instances.
-- [improvement] JAVA-836: Make ResultSet#fetchMoreResult return a
- ListenableFuture.
-- [improvement] JAVA-843: Disable frozen checks in mapper.
-- [improvement] JAVA-721: Allow user to register custom type codecs.
-- [improvement] JAVA-722: Support custom type codecs in mapper.
-
-Merged from 2.1 branch:
-
-- [bug] JAVA-834: Special case check for 'null' string in index_options column.
-- [improvement] JAVA-835: Allow accessor methods with less parameters in case
- named bind markers are repeated.
-- [improvement] JAVA-475: Improve QueryBuilder API for SELECT DISTINCT.
-- [improvement] JAVA-715: Make NativeColumnType a top-level class.
-- [improvement] JAVA-700: Expose ProtocolVersion#toInt.
-- [bug] JAVA-542: Handle void return types in accessors.
-- [improvement] JAVA-225: Create values() function for Insert builder using List.
-- [improvement] JAVA-713: HashMap throws an OOM Exception when logging level is set to TRACE.
-- [bug] JAVA-679: Support bind marker in QueryBuilder DELETE's list index.
-- [improvement] JAVA-732: Expose KEYS and FULL indexing options in IndexMetadata.
-- [improvement] JAVA-589: Allow @Enumerated in Accessor method parameters.
-- [improvement] JAVA-554: Allow access to table metadata from Mapper.
-- [improvement] JAVA-661: Provide a way to map computed fields.
-- [improvement] JAVA-824: Ignore missing columns in mapper.
-- [bug] JAVA-724: Preserve default timestamp for retries and speculative executions.
-- [improvement] JAVA-738: Use same pool implementation for protocol v2 and v3.
-- [improvement] JAVA-677: Support CONTAINS / CONTAINS KEY in QueryBuilder.
-- [improvement] JAVA-477/JAVA-540: Add USING options in mapper for delete and save
- operations.
-- [improvement] JAVA-473: Add mapper option to configure whether to save null fields.
-
-Merged from 2.0 branch:
-
-- [bug] JAVA-737: DowngradingConsistencyRetryPolicy ignores write timeouts.
-- [bug] JAVA-736: Forbid bind marker in QueryBuilder add/append/prepend.
-- [bug] JAVA-712: Prevent QueryBuilder.quote() from applying duplicate double quotes.
-- [bug] JAVA-688: Prevent QueryBuilder from trying to serialize raw string.
-- [bug] JAVA-679: Support bind marker in QueryBuilder DELETE's list index.
-- [improvement] JAVA-475: Improve QueryBuilder API for SELECT DISTINCT.
-- [improvement] JAVA-225: Create values() function for Insert builder using List.
-- [improvement] JAVA-702: Warn when ReplicationStrategy encounters invalid
- replication factors.
-- [improvement] JAVA-662: Add PoolingOptions method to set both core and max
- connections.
-- [improvement] JAVA-766: Do not include epoll JAR in binary distribution.
-- [improvement] JAVA-726: Optimize internal copies of Request objects.
-- [bug] JAVA-815: Preserve tracing across retries.
-- [improvement] JAVA-709: New RetryDecision.tryNextHost().
-- [bug] JAVA-733: Handle function calls and raw strings as non-idempotent in QueryBuilder.
-
-
-### 2.2.0-rc1
-
-- [new feature] JAVA-783: Protocol V4 enum support.
-- [new feature] JAVA-776: Use PK columns in protocol v4 PREPARED response.
-- [new feature] JAVA-777: Distinguish NULL and UNSET values.
-- [new feature] JAVA-779: Add k/v payload for 3rd party usage.
-- [new feature] JAVA-780: Expose server-side warnings on ExecutionInfo.
-- [new feature] JAVA-749: Expose new read/write failure exceptions.
-- [new feature] JAVA-747: Expose function and aggregate metadata.
-- [new feature] JAVA-778: Add new client exception for CQL function failure.
-- [improvement] JAVA-700: Expose ProtocolVersion#toInt.
-- [new feature] JAVA-404: Support new C* 2.2 CQL date and time types.
-
-Merged from 2.1 branch:
-
-- [improvement] JAVA-782: Unify "Target" enum for schema elements.
-
-
-### 2.1.10.2
-
-Merged from 2.0 branch:
-
-- [bug] JAVA-1179: Request objects should be copied when executed.
-- [improvement] JAVA-1182: Throw error when synchronous call made on I/O thread.
-- [bug] JAVA-1184: Unwrap StatementWrappers when extracting column definitions.
-
-
-### 2.1.10.1
-
-- [bug] JAVA-1152: Fix NPE at ControlConnection.refreshNodeListAndTokenMap().
-- [bug] JAVA-1156: Fix NPE at TableMetadata.equals().
-
-
-### 2.1.10
-
-- [bug] JAVA-988: Metadata.handleId should handle escaped double quotes.
-- [bug] JAVA-983: QueryBuilder cannot handle collections containing function calls.
-- [improvement] JAVA-863: Idempotence propagation in PreparedStatements.
-- [bug] JAVA-937: TypeCodec static initializers not always correctly executed.
-- [improvement] JAVA-989: Include keyspace name when invalid replication found when generating token map.
-- [improvement] JAVA-664: Reduce heap consumption for TokenMap.
-- [improvement] JAVA-1030: Log token to replica map computation times.
-- [bug] JAVA-1039: Minor bugs in Event Debouncer.
-- [improvement] JAVA-843: Disable frozen checks in mapper.
-- [improvement] JAVA-833: Improve message when a nested type can't be serialized.
-- [improvement] JAVA-1011: Expose PoolingOptions default values.
-- [improvement] JAVA-630: Don't process DOWN events for nodes that have active connections.
-- [improvement] JAVA-851: Improve UUIDs javadoc with regard to user-provided timestamps.
-- [improvement] JAVA-979: Update javadoc for RegularStatement toString() and getQueryString() to indicate that consistency level and other parameters are not maintained in the query string.
-- [improvement] JAVA-1038: Fetch node info by rpc_address if its broadcast_address is not in system.peers.
-- [improvement] JAVA-974: Validate accessor parameter types against bound statement.
-- [bug] JAVA-1068: Unwrap StatementWrappers when hashing the paging state.
-- [bug] JAVA-831: Mapper can't load an entity where the PK is a UDT.
-- [improvement] JAVA-1021: Improve error message when connect() is called with an invalid keyspace name.
-- [improvement] JAVA-879: Mapper.map() accepts mapper-generated and user queries.
-- [bug] JAVA-1100: Exception when connecting with shaded java driver in OSGI
-- [bug] JAVA-819: Expose more errors in RetryPolicy + provide idempotent-aware wrapper.
-- [improvement] JAVA-1040: SimpleStatement parameters support in QueryLogger.
-- [bug] JAVA-1064: getTable create statement doesn't properly handle quotes in primary key.
-- [improvement] JAVA-888: Add cluster-wide percentile tracker.
-- [improvement] JAVA-963: Automatically register PercentileTracker from components that use it.
-- [bug] JAVA-1089: Set LWT made from BuiltStatements to non-idempotent.
-- [improvement] JAVA-923: Position idempotent flag on object mapper queries.
-- [new feature] JAVA-1019: SchemaBuilder support for CREATE/ALTER/DROP KEYSPACE.
-- [bug] JAVA-1070: The Mapper should not prepare queries synchronously.
-- [new feature] JAVA-982: Introduce new method ConsistencyLevel.isSerial().
-- [bug] JAVA-764: Retry with the normal consistency level (not the serial one) when a write times out on the Paxos phase.
-- [bug] JAVA-727: Allow monotonic timestamp generators to drift in the future + use microsecond precision when possible.
-- [improvement] JAVA-444: Add Java process information to UUIDs.makeNode() hash.
-- [improvement] JAVA-977: Preserve original cause when BuiltStatement value can't be serialized.
-- [bug] JAVA-1094: Backport TypeCodec parse and format fixes from 3.0.
-- [improvement] JAVA-852: Ignore peers with null entries during discovery.
-- [bug] JAVA-1132: Executing bound statement with no variables results in exception with protocol v1.
-- [bug] JAVA-1005: DowngradingConsistencyRetryPolicy does not work with EACH_QUORUM when 1 DC is down.
-- [bug] JAVA-1002: Avoid deadlock when re-preparing a statement on other hosts.
-
-Merged from 2.0 branch:
-
-- [bug] JAVA-994: Don't call on(Up|Down|Add|Remove) methods if Cluster is closed/closing.
-- [improvement] JAVA-805: Document that metrics are null until Cluster is initialized.
-- [bug] JAVA-1072: Ensure defunct connections are properly evicted from the pool.
-
-
-### 2.1.9
-
-- [bug] JAVA-942: Fix implementation of UserType.hashCode().
-- [bug] JAVA-854: avoid early return in Cluster.init when a node doesn't support the protocol version.
-- [bug] JAVA-978: Fix quoting issue that caused Mapper.getTableMetadata() to return null.
-
-Merged from 2.0 branch:
-
-- [bug] JAVA-950: Fix Cluster.connect with a case-sensitive keyspace.
-- [improvement] JAVA-920: Downgrade "error creating pool" message to WARN.
-- [bug] JAVA-954: Don't trigger reconnection before initialization complete.
-- [improvement] JAVA-914: Avoid rejected tasks at shutdown.
-- [improvement] JAVA-921: Add SimpleStatement.getValuesCount().
-- [bug] JAVA-901: Move call to connection.release() out of cancelHandler.
-- [bug] JAVA-960: Avoid race in control connection shutdown.
-- [bug] JAVA-656: Fix NPE in ControlConnection.updateLocationInfo.
-- [bug] JAVA-966: Count uninitialized connections in conviction policy.
-- [improvement] JAVA-917: Document SSL configuration.
-- [improvement] JAVA-652: Add DCAwareRoundRobinPolicy builder.
-- [improvement] JAVA-808: Add generic filtering policy that can be used to exclude specific DCs.
-
-
-### 2.1.8
-
-Merged from 2.0 branch:
-
-- [improvement] JAVA-718: Log streamid at the trace level on sending request and receiving response.
-
-- [bug] JAVA-796: Fix SpeculativeExecutionPolicy.init() and close() are never called.
-- [improvement] JAVA-710: Suppress unnecessary warning at shutdown.
-- [improvement] #340: Allow DNS name with multiple A-records as contact point.
-- [bug] JAVA-794: Allow tracing across multiple result pages.
-- [bug] JAVA-737: DowngradingConsistencyRetryPolicy ignores write timeouts.
-- [bug] JAVA-736: Forbid bind marker in QueryBuilder add/append/prepend.
-- [bug] JAVA-712: Prevent QueryBuilder.quote() from applying duplicate double quotes.
-- [bug] JAVA-688: Prevent QueryBuilder from trying to serialize raw string.
-- [bug] JAVA-679: Support bind marker in QueryBuilder DELETE's list index.
-- [improvement] JAVA-475: Improve QueryBuilder API for SELECT DISTINCT.
-- [improvement] JAVA-225: Create values() function for Insert builder using List.
-- [improvement] JAVA-702: Warn when ReplicationStrategy encounters invalid
- replication factors.
-- [improvement] JAVA-662: Add PoolingOptions method to set both core and max
- connections.
-- [improvement] JAVA-766: Do not include epoll JAR in binary distribution.
-- [improvement] JAVA-726: Optimize internal copies of Request objects.
-- [bug] JAVA-815: Preserve tracing across retries.
-- [improvement] JAVA-709: New RetryDecision.tryNextHost().
-- [bug] JAVA-733: Handle function calls and raw strings as non-idempotent in QueryBuilder.
-- [improvement] JAVA-765: Provide API to retrieve values of a Parameterized SimpleStatement.
-- [improvement] JAVA-827: implement UPDATE .. IF EXISTS in QueryBuilder.
-- [improvement] JAVA-618: Randomize contact points list to prevent hotspots.
-- [improvement] JAVA-720: Surface the coordinator used on query failure.
-- [bug] JAVA-792: Handle contact points removed during init.
-- [improvement] JAVA-719: Allow PlainTextAuthProvider to change its credentials at runtime.
-- [new feature] JAVA-151: Make it possible to register for SchemaChange Events.
-- [improvement] JAVA-861: Downgrade "Asked to rebuild table" log from ERROR to INFO level.
-- [improvement] JAVA-797: Provide an option to prepare statements only on one node.
-- [improvement] JAVA-658: Provide an option to not re-prepare all statements in onUp.
-- [improvement] JAVA-853: Customizable creation of netty timer.
-- [bug] JAVA-859: Avoid quadratic ring processing with invalid replication factors.
-- [improvement] JAVA-657: Debounce control connection queries.
-- [bug] JAVA-784: LoadBalancingPolicy.distance() called before init().
-- [new feature] JAVA-828: Make driver-side metadata optional.
-- [improvement] JAVA-544: Allow hosts to remain partially up.
-- [improvement] JAVA-821, JAVA-822: Remove internal blocking calls and expose async session
- creation.
-- [improvement] JAVA-725: Use parallel calls when re-preparing statement on other
- hosts.
-- [bug] JAVA-629: Don't use connection timeout for unrelated internal queries.
-- [bug] JAVA-892: Fix NPE in speculative executions when metrics disabled.
-
-
-### 2.1.7.1
-
-- [bug] JAVA-834: Special case check for 'null' string in index_options column.
-- [improvement] JAVA-835: Allow accessor methods with less parameters in case
- named bind markers are repeated.
-
-
-### 2.1.7
-
-- [improvement] JAVA-475: Improve QueryBuilder API for SELECT DISTINCT.
-- [improvement] JAVA-715: Make NativeColumnType a top-level class.
-- [improvement] JAVA-782: Unify "Target" enum for schema elements.
-- [improvement] JAVA-700: Expose ProtocolVersion#toInt.
-- [bug] JAVA-542: Handle void return types in accessors.
-- [improvement] JAVA-225: Create values() function for Insert builder using List.
-- [improvement] JAVA-713: HashMap throws an OOM Exception when logging level is set to TRACE.
-- [bug] JAVA-679: Support bind marker in QueryBuilder DELETE's list index.
-- [improvement] JAVA-732: Expose KEYS and FULL indexing options in IndexMetadata.
-- [improvement] JAVA-589: Allow @Enumerated in Accessor method parameters.
-- [improvement] JAVA-554: Allow access to table metadata from Mapper.
-- [improvement] JAVA-661: Provide a way to map computed fields.
-- [improvement] JAVA-824: Ignore missing columns in mapper.
-- [bug] JAVA-724: Preserve default timestamp for retries and speculative executions.
-- [improvement] JAVA-738: Use same pool implementation for protocol v2 and v3.
-- [improvement] JAVA-677: Support CONTAINS / CONTAINS KEY in QueryBuilder.
-- [improvement] JAVA-477/JAVA-540: Add USING options in mapper for delete and save
- operations.
-- [improvement] JAVA-473: Add mapper option to configure whether to save null fields.
-
-Merged from 2.0 branch:
-
-- [bug] JAVA-737: DowngradingConsistencyRetryPolicy ignores write timeouts.
-- [bug] JAVA-736: Forbid bind marker in QueryBuilder add/append/prepend.
-- [bug] JAVA-712: Prevent QueryBuilder.quote() from applying duplicate double quotes.
-- [bug] JAVA-688: Prevent QueryBuilder from trying to serialize raw string.
-- [bug] JAVA-679: Support bind marker in QueryBuilder DELETE's list index.
-- [improvement] JAVA-475: Improve QueryBuilder API for SELECT DISTINCT.
-- [improvement] JAVA-225: Create values() function for Insert builder using List.
-- [improvement] JAVA-702: Warn when ReplicationStrategy encounters invalid
- replication factors.
-- [improvement] JAVA-662: Add PoolingOptions method to set both core and max
- connections.
-- [improvement] JAVA-766: Do not include epoll JAR in binary distribution.
-- [improvement] JAVA-726: Optimize internal copies of Request objects.
-- [bug] JAVA-815: Preserve tracing across retries.
-- [improvement] JAVA-709: New RetryDecision.tryNextHost().
-- [bug] JAVA-733: Handle function calls and raw strings as non-idempotent in QueryBuilder.
-
-
-### 2.1.6
-
-Merged from 2.0 branch:
-
-- [new feature] JAVA-584: Add getObject to BoundStatement and Row.
-- [improvement] JAVA-419: Improve connection pool resizing algorithm.
-- [bug] JAVA-599: Fix race condition between pool expansion and shutdown.
-- [improvement] JAVA-622: Upgrade Netty to 4.0.27.
-- [improvement] JAVA-562: Coalesce frames before flushing them to the connection.
-- [improvement] JAVA-583: Rename threads to indicate that they are for the driver.
-- [new feature] JAVA-550: Expose paging state.
-- [new feature] JAVA-646: Slow Query Logger.
-- [improvement] JAVA-698: Exclude some errors from measurements in LatencyAwarePolicy.
-- [bug] JAVA-641: Fix issue when executing a PreparedStatement from another cluster.
-- [improvement] JAVA-534: Log keyspace xxx does not exist at WARN level.
-- [improvement] JAVA-619: Allow Cluster subclasses to delegate to another instance.
-- [new feature] JAVA-669: Expose an API to check for schema agreement after a
- schema-altering statement.
-- [improvement] JAVA-692: Make connection and pool creation fully async.
-- [improvement] JAVA-505: Optimize connection use after reconnection.
-- [improvement] JAVA-617: Remove "suspected" mechanism.
-- [improvement] reverts JAVA-425: Don't mark connection defunct on client timeout.
-- [new feature] JAVA-561: Speculative query executions.
-- [bug] JAVA-666: Release connection before completing the ResultSetFuture.
-- [new feature BETA] JAVA-723: Percentile-based variant of query logger and speculative
- executions.
-- [bug] JAVA-734: Fix buffer leaks when compression is enabled.
-- [improvement] JAVA-756: Use Netty's pooled ByteBufAllocator by default.
-- [improvement] JAVA-759: Expose "unsafe" paging state API.
-- [bug] JAVA-768: Prevent race during pool initialization.
-
-
-### 2.1.5
-
-- [bug] JAVA-575: Authorize Null parameter in Accessor method.
-- [improvement] JAVA-570: Support C* 2.1.3's nested collections.
-- [bug] JAVA-612: Fix checks on mapped collection types.
-- [bug] JAVA-672: Fix QueryBuilder.putAll() when the collection contains UDTs.
-
-Merged from 2.0 branch:
-
-- [new feature] JAVA-518: Add AddressTranslater for EC2 multi-region deployment.
-- [improvement] JAVA-533: Add connection heartbeat.
-- [improvement] JAVA-568: Reduce level of logs on missing rpc_address.
-- [improvement] JAVA-312, JAVA-681: Expose node token and range information.
-- [bug] JAVA-595: Fix cluster name mismatch check at startup.
-- [bug] JAVA-620: Fix guava dependency when using OSGI.
-- [bug] JAVA-678: Fix handling of DROP events when ks name is case-sensitive.
-- [improvement] JAVA-631: Use List> instead of List in QueryBuilder API.
-- [improvement] JAVA-654: Exclude Netty POM from META-INF in shaded JAR.
-- [bug] JAVA-655: Quote single quotes contained in table comments in asCQLQuery method.
-- [bug] JAVA-684: Empty TokenRange returned in a one token cluster.
-- [improvement] JAVA-687: Expose TokenRange#contains.
-- [bug] JAVA-614: Prevent race between cancellation and query completion.
-- [bug] JAVA-632: Prevent cancel and timeout from cancelling unrelated ResponseHandler if
- streamId was already released and reused.
-- [bug] JAVA-642: Fix issue when newly opened pool fails before we could mark the node UP.
-- [bug] JAVA-613: Fix unwanted LBP notifications when a contact host is down.
-- [bug] JAVA-651: Fix edge cases where a connection was released twice.
-- [bug] JAVA-653: Fix edge cases in query cancellation.
-
-
-### 2.1.4
-
-Merged from 2.0 branch:
-
-- [improvement] JAVA-538: Shade Netty dependency.
-- [improvement] JAVA-543: Target schema refreshes more precisely.
-- [bug] JAVA-546: Don't check rpc_address for control host.
-- [improvement] JAVA-409: Improve message of NoHostAvailableException.
-- [bug] JAVA-556: Rework connection reaper to avoid deadlock.
-- [bug] JAVA-557: Avoid deadlock when multiple connections to the same host get write
- errors.
-- [improvement] JAVA-504: Make shuffle=true the default for TokenAwarePolicy.
-- [bug] JAVA-577: Fix bug when SUSPECT reconnection succeeds, but one of the pooled
- connections fails while bringing the node back up.
-- [bug] JAVA-419: JAVA-587: Prevent faulty control connection from ignoring reconnecting hosts.
-- temporarily revert "Add idle timeout to the connection pool".
-- [bug] JAVA-593: Ensure updateCreatedPools does not add pools for suspected hosts.
-- [bug] JAVA-594: Ensure state change notifications for a given host are handled serially.
-- [bug] JAVA-597: Ensure control connection reconnects when control host is removed.
-
-
-### 2.1.3
-
-- [bug] JAVA-510: Ignore static fields in mapper.
-- [bug] JAVA-509: Fix UDT parsing at init when using the default protocol version.
-- [bug] JAVA-495: Fix toString, equals and hashCode on accessor proxies.
-- [bug] JAVA-528: Allow empty name on Column and Field annotations.
-
-Merged from 2.0 branch:
-
-- [bug] JAVA-497: Ensure control connection does not trigger concurrent reconnects.
-- [improvement] JAVA-472: Keep trying to reconnect on authentication errors.
-- [improvement] JAVA-463: Expose close method on load balancing policy.
-- [improvement] JAVA-459: Allow load balancing policy to trigger refresh for a single host.
-- [bug] JAVA-493: Expose an API to cancel reconnection attempts.
-- [bug] JAVA-503: Fix NPE when a connection fails during pool construction.
-- [improvement] JAVA-423: Log datacenter name in DCAware policy's init when it is explicitly provided.
-- [improvement] JAVA-504: Shuffle the replicas in TokenAwarePolicy.newQueryPlan.
-- [improvement] JAVA-507: Make schema agreement wait tuneable.
-- [improvement] JAVA-494: Document how to inject the driver metrics into another registry.
-- [improvement] JAVA-419: Add idle timeout to the connection pool.
-- [bug] JAVA-516: LatencyAwarePolicy does not shutdown executor on invocation of close.
-- [improvement] JAVA-451: Throw an exception when DCAwareRoundRobinPolicy is built with
- an explicit but null or empty local datacenter.
-- [bug] JAVA-511: Fix check for local contact points in DCAware policy's init.
-- [improvement] JAVA-457: Make timeout on saturated pool customizable.
-- [improvement] JAVA-521: Downgrade Guava to 14.0.1.
-- [bug] JAVA-526: Fix token awareness for case-sensitive keyspaces and tables.
-- [bug] JAVA-515: Check maximum number of values passed to SimpleStatement.
-- [improvement] JAVA-532: Expose the driver version through the API.
-- [improvement] JAVA-522: Optimize session initialization when some hosts are not
- responsive.
-
-
-### 2.1.2
-
-- [improvement] JAVA-361, JAVA-364, JAVA-467: Support for native protocol v3.
-- [bug] JAVA-454: Fix UDT fields of type inet in QueryBuilder.
-- [bug] JAVA-455: Exclude transient fields from Frozen checks.
-- [bug] JAVA-453: Fix handling of null collections in mapper.
-- [improvement] JAVA-452: Make implicit column names case-insensitive in mapper.
-- [bug] JAVA-433: Fix named bind markers in QueryBuilder.
-- [bug] JAVA-458: Fix handling of BigInteger in object mapper.
-- [bug] JAVA-465: Ignore synthetic fields in mapper.
-- [improvement] JAVA-451: Throw an exception when DCAwareRoundRobinPolicy is built with
- an explicit but null or empty local datacenter.
-- [improvement] JAVA-469: Add backwards-compatible DataType.serialize methods.
-- [bug] JAVA-487: Handle null enum fields in object mapper.
-- [bug] JAVA-499: Handle null UDT fields in object mapper.
-
-Merged from 2.0 branch:
-
-- [bug] JAVA-449: Handle null pool in PooledConnection.release.
-- [improvement] JAVA-425: Defunct connection on request timeout.
-- [improvement] JAVA-426: Try next host when we get a SERVER_ERROR.
-- [bug] JAVA-449, JAVA-460, JAVA-471: Handle race between query timeout and completion.
-- [bug] JAVA-496: Fix DCAwareRoundRobinPolicy datacenter auto-discovery.
-
-
-### 2.1.1
-
-- [new] JAVA-441: Support for new "frozen" keyword.
-
-Merged from 2.0 branch:
-
-- [bug] JAVA-397: Check cluster name when connecting to a new node.
-- [bug] JAVA-326: Add missing CAS delete support in QueryBuilder.
-- [bug] JAVA-363: Add collection and data length checks during serialization.
-- [improvement] JAVA-329: Surface number of retries in metrics.
-- [bug] JAVA-428: Do not use a host when no rpc_address found for it.
-- [improvement] JAVA-358: Add ResultSet.wasApplied() for conditional queries.
-- [bug] JAVA-349: Fix negative HostConnectionPool open count.
-- [improvement] JAVA-436: Log more connection details at trace and debug levels.
-- [bug] JAVA-445: Fix cluster shutdown.
-
-
-### 2.1.0
-
-- [bug] JAVA-408: ClusteringColumn annotation not working with specified ordering.
-- [improvement] JAVA-410: Fail BoundStatement if null values are not set explicitly.
-- [bug] JAVA-416: Handle UDT and tuples in BuiltStatement.toString.
-
-Merged from 2.0 branch:
-
-- [bug] JAVA-407: Release connections on ResultSetFuture#cancel.
-- [bug] JAVA-393: Fix handling of SimpleStatement with values in query builder
- batches.
-- [bug] JAVA-417: Ensure pool is properly closed in onDown.
-- [bug] JAVA-415: Fix tokenMap initialization at startup.
-- [bug] JAVA-418: Avoid deadlock on close.
-
-
-### 2.1.0-rc1
-
-Merged from 2.0 branch:
-
-- [bug] JAVA-394: Ensure defunct connections are completely closed.
-- [bug] JAVA-342, JAVA-390: Fix memory and resource leak on closed Sessions.
-
-
-### 2.1.0-beta1
-
-- [new] Support for User Defined Types and tuples
-- [new] Simple object mapper
-
-Merged from 2.0 branch: everything up to 2.0.3 (included), and the following.
-
-- [improvement] JAVA-204: Better handling of dead connections.
-- [bug] JAVA-373: Fix potential NPE in ControlConnection.
-- [bug] JAVA-291: Throws NPE when passed null for a contact point.
-- [bug] JAVA-315: Avoid LoadBalancingPolicy onDown+onUp at startup.
-- [bug] JAVA-343: Avoid classloader leak in Tomcat.
-- [bug] JAVA-387: Avoid deadlock in onAdd/onUp.
-- [bug] JAVA-377, JAVA-391: Make metadata parsing more lenient.
-
-
-### 2.0.12.2
-
-- [bug] JAVA-1179: Request objects should be copied when executed.
-- [improvement] JAVA-1182: Throw error when synchronous call made on I/O thread.
-- [bug] JAVA-1184: Unwrap StatementWrappers when extracting column definitions.
-
-
-### 2.0.12.1
-
-- [bug] JAVA-994: Don't call on(Up|Down|Add|Remove) methods if Cluster is closed/closing.
-- [improvement] JAVA-805: Document that metrics are null until Cluster is initialized.
-- [bug] JAVA-1072: Ensure defunct connections are properly evicted from the pool.
-
-
-### 2.0.12
-
-- [bug] JAVA-950: Fix Cluster.connect with a case-sensitive keyspace.
-- [improvement] JAVA-920: Downgrade "error creating pool" message to WARN.
-- [bug] JAVA-954: Don't trigger reconnection before initialization complete.
-- [improvement] JAVA-914: Avoid rejected tasks at shutdown.
-- [improvement] JAVA-921: Add SimpleStatement.getValuesCount().
-- [bug] JAVA-901: Move call to connection.release() out of cancelHandler.
-- [bug] JAVA-960: Avoid race in control connection shutdown.
-- [bug] JAVA-656: Fix NPE in ControlConnection.updateLocationInfo.
-- [bug] JAVA-966: Count uninitialized connections in conviction policy.
-- [improvement] JAVA-917: Document SSL configuration.
-- [improvement] JAVA-652: Add DCAwareRoundRobinPolicy builder.
-- [improvement] JAVA-808: Add generic filtering policy that can be used to exclude specific DCs.
-
-
-### 2.0.11
-
-- [improvement] JAVA-718: Log streamid at the trace level on sending request and receiving response.
-- [bug] JAVA-796: Fix SpeculativeExecutionPolicy.init() and close() are never called.
-- [improvement] JAVA-710: Suppress unnecessary warning at shutdown.
-- [improvement] #340: Allow DNS name with multiple A-records as contact point.
-- [bug] JAVA-794: Allow tracing across multiple result pages.
-- [bug] JAVA-737: DowngradingConsistencyRetryPolicy ignores write timeouts.
-- [bug] JAVA-736: Forbid bind marker in QueryBuilder add/append/prepend.
-- [bug] JAVA-712: Prevent QueryBuilder.quote() from applying duplicate double quotes.
-- [bug] JAVA-688: Prevent QueryBuilder from trying to serialize raw string.
-- [bug] JAVA-679: Support bind marker in QueryBuilder DELETE's list index.
-- [improvement] JAVA-475: Improve QueryBuilder API for SELECT DISTINCT.
-- [improvement] JAVA-225: Create values() function for Insert builder using List.
-- [improvement] JAVA-702: Warn when ReplicationStrategy encounters invalid
- replication factors.
-- [improvement] JAVA-662: Add PoolingOptions method to set both core and max
- connections.
-- [improvement] JAVA-766: Do not include epoll JAR in binary distribution.
-- [improvement] JAVA-726: Optimize internal copies of Request objects.
-- [bug] JAVA-815: Preserve tracing across retries.
-- [improvement] JAVA-709: New RetryDecision.tryNextHost().
-- [bug] JAVA-733: Handle function calls and raw strings as non-idempotent in QueryBuilder.
-- [improvement] JAVA-765: Provide API to retrieve values of a Parameterized SimpleStatement.
-- [improvement] JAVA-827: implement UPDATE .. IF EXISTS in QueryBuilder.
-- [improvement] JAVA-618: Randomize contact points list to prevent hotspots.
-- [improvement] JAVA-720: Surface the coordinator used on query failure.
-- [bug] JAVA-792: Handle contact points removed during init.
-- [improvement] JAVA-719: Allow PlainTextAuthProvider to change its credentials at runtime.
-- [new feature] JAVA-151: Make it possible to register for SchemaChange Events.
-- [improvement] JAVA-861: Downgrade "Asked to rebuild table" log from ERROR to INFO level.
-- [improvement] JAVA-797: Provide an option to prepare statements only on one node.
-- [improvement] JAVA-658: Provide an option to not re-prepare all statements in onUp.
-- [improvement] JAVA-853: Customizable creation of netty timer.
-- [bug] JAVA-859: Avoid quadratic ring processing with invalid replication factors.
-- [improvement] JAVA-657: Debounce control connection queries.
-- [bug] JAVA-784: LoadBalancingPolicy.distance() called before init().
-- [new feature] JAVA-828: Make driver-side metadata optional.
-- [improvement] JAVA-544: Allow hosts to remain partially up.
-- [improvement] JAVA-821, JAVA-822: Remove internal blocking calls and expose async session
- creation.
-- [improvement] JAVA-725: Use parallel calls when re-preparing statement on other
- hosts.
-- [bug] JAVA-629: Don't use connection timeout for unrelated internal queries.
-- [bug] JAVA-892: Fix NPE in speculative executions when metrics disabled.
-
-Merged from 2.0.10_fixes branch:
-
-- [improvement] JAVA-756: Use Netty's pooled ByteBufAllocator by default.
-- [improvement] JAVA-759: Expose "unsafe" paging state API.
-- [bug] JAVA-767: Fix getObject by name.
-- [bug] JAVA-768: Prevent race during pool initialization.
-
-
-### 2.0.10.1
-
-- [improvement] JAVA-756: Use Netty's pooled ByteBufAllocator by default.
-- [improvement] JAVA-759: Expose "unsafe" paging state API.
-- [bug] JAVA-767: Fix getObject by name.
-- [bug] JAVA-768: Prevent race during pool initialization.
-
-
-### 2.0.10
-
-- [new feature] JAVA-518: Add AddressTranslater for EC2 multi-region deployment.
-- [improvement] JAVA-533: Add connection heartbeat.
-- [improvement] JAVA-568: Reduce level of logs on missing rpc_address.
-- [improvement] JAVA-312, JAVA-681: Expose node token and range information.
-- [bug] JAVA-595: Fix cluster name mismatch check at startup.
-- [bug] JAVA-620: Fix guava dependency when using OSGI.
-- [bug] JAVA-678: Fix handling of DROP events when ks name is case-sensitive.
-- [improvement] JAVA-631: Use List> instead of List in QueryBuilder API.
-- [improvement] JAVA-654: Exclude Netty POM from META-INF in shaded JAR.
-- [bug] JAVA-655: Quote single quotes contained in table comments in asCQLQuery method.
-- [bug] JAVA-684: Empty TokenRange returned in a one token cluster.
-- [improvement] JAVA-687: Expose TokenRange#contains.
-- [new feature] JAVA-547: Expose values of BoundStatement.
-- [new feature] JAVA-584: Add getObject to BoundStatement and Row.
-- [improvement] JAVA-419: Improve connection pool resizing algorithm.
-- [bug] JAVA-599: Fix race condition between pool expansion and shutdown.
-- [improvement] JAVA-622: Upgrade Netty to 4.0.27.
-- [improvement] JAVA-562: Coalesce frames before flushing them to the connection.
-- [improvement] JAVA-583: Rename threads to indicate that they are for the driver.
-- [new feature] JAVA-550: Expose paging state.
-- [new feature] JAVA-646: Slow Query Logger.
-- [improvement] JAVA-698: Exclude some errors from measurements in LatencyAwarePolicy.
-- [bug] JAVA-641: Fix issue when executing a PreparedStatement from another cluster.
-- [improvement] JAVA-534: Log keyspace xxx does not exist at WARN level.
-- [improvement] JAVA-619: Allow Cluster subclasses to delegate to another instance.
-- [new feature] JAVA-669: Expose an API to check for schema agreement after a
- schema-altering statement.
-- [improvement] JAVA-692: Make connection and pool creation fully async.
-- [improvement] JAVA-505: Optimize connection use after reconnection.
-- [improvement] JAVA-617: Remove "suspected" mechanism.
-- [improvement] reverts JAVA-425: Don't mark connection defunct on client timeout.
-- [new feature] JAVA-561: Speculative query executions.
-- [bug] JAVA-666: Release connection before completing the ResultSetFuture.
-- [new feature BETA] JAVA-723: Percentile-based variant of query logger and speculative
- executions.
-- [bug] JAVA-734: Fix buffer leaks when compression is enabled.
-
-Merged from 2.0.9_fixes branch:
-
-- [bug] JAVA-614: Prevent race between cancellation and query completion.
-- [bug] JAVA-632: Prevent cancel and timeout from cancelling unrelated ResponseHandler if
- streamId was already released and reused.
-- [bug] JAVA-642: Fix issue when newly opened pool fails before we could mark the node UP.
-- [bug] JAVA-613: Fix unwanted LBP notifications when a contact host is down.
-- [bug] JAVA-651: Fix edge cases where a connection was released twice.
-- [bug] JAVA-653: Fix edge cases in query cancellation.
-
-
-### 2.0.9.2
-
-- [bug] JAVA-651: Fix edge cases where a connection was released twice.
-- [bug] JAVA-653: Fix edge cases in query cancellation.
-
-
-### 2.0.9.1
-
-- [bug] JAVA-614: Prevent race between cancellation and query completion.
-- [bug] JAVA-632: Prevent cancel and timeout from cancelling unrelated ResponseHandler if
- streamId was already released and reused.
-- [bug] JAVA-642: Fix issue when newly opened pool fails before we could mark the node UP.
-- [bug] JAVA-613: Fix unwanted LBP notifications when a contact host is down.
-
-
-### 2.0.9
-
-- [improvement] JAVA-538: Shade Netty dependency.
-- [improvement] JAVA-543: Target schema refreshes more precisely.
-- [bug] JAVA-546: Don't check rpc_address for control host.
-- [improvement] JAVA-409: Improve message of NoHostAvailableException.
-- [bug] JAVA-556: Rework connection reaper to avoid deadlock.
-- [bug] JAVA-557: Avoid deadlock when multiple connections to the same host get write
- errors.
-- [improvement] JAVA-504: Make shuffle=true the default for TokenAwarePolicy.
-- [bug] JAVA-577: Fix bug when SUSPECT reconnection succeeds, but one of the pooled
- connections fails while bringing the node back up.
-- [bug] JAVA-419: JAVA-587: Prevent faulty control connection from ignoring reconnecting hosts.
-- temporarily revert "Add idle timeout to the connection pool".
-- [bug] JAVA-593: Ensure updateCreatedPools does not add pools for suspected hosts.
-- [bug] JAVA-594: Ensure state change notifications for a given host are handled serially.
-- [bug] JAVA-597: Ensure control connection reconnects when control host is removed.
-
-
-### 2.0.8
-
-- [bug] JAVA-526: Fix token awareness for case-sensitive keyspaces and tables.
-- [bug] JAVA-515: Check maximum number of values passed to SimpleStatement.
-- [improvement] JAVA-532: Expose the driver version through the API.
-- [improvement] JAVA-522: Optimize session initialization when some hosts are not
- responsive.
-
-
-### 2.0.7
-
-- [bug] JAVA-449: Handle null pool in PooledConnection.release.
-- [improvement] JAVA-425: Defunct connection on request timeout.
-- [improvement] JAVA-426: Try next host when we get a SERVER_ERROR.
-- [bug] JAVA-449, JAVA-460, JAVA-471: Handle race between query timeout and completion.
-- [bug] JAVA-496: Fix DCAwareRoundRobinPolicy datacenter auto-discovery.
-- [bug] JAVA-497: Ensure control connection does not trigger concurrent reconnects.
-- [improvement] JAVA-472: Keep trying to reconnect on authentication errors.
-- [improvement] JAVA-463: Expose close method on load balancing policy.
-- [improvement] JAVA-459: Allow load balancing policy to trigger refresh for a single host.
-- [bug] JAVA-493: Expose an API to cancel reconnection attempts.
-- [bug] JAVA-503: Fix NPE when a connection fails during pool construction.
-- [improvement] JAVA-423: Log datacenter name in DCAware policy's init when it is explicitly provided.
-- [improvement] JAVA-504: Shuffle the replicas in TokenAwarePolicy.newQueryPlan.
-- [improvement] JAVA-507: Make schema agreement wait tuneable.
-- [improvement] JAVA-494: Document how to inject the driver metrics into another registry.
-- [improvement] JAVA-419: Add idle timeout to the connection pool.
-- [bug] JAVA-516: LatencyAwarePolicy does not shutdown executor on invocation of close.
-- [improvement] JAVA-451: Throw an exception when DCAwareRoundRobinPolicy is built with
- an explicit but null or empty local datacenter.
-- [bug] JAVA-511: Fix check for local contact points in DCAware policy's init.
-- [improvement] JAVA-457: Make timeout on saturated pool customizable.
-- [improvement] JAVA-521: Downgrade Guava to 14.0.1.
-
-
-### 2.0.6
-
-- [bug] JAVA-397: Check cluster name when connecting to a new node.
-- [bug] JAVA-326: Add missing CAS delete support in QueryBuilder.
-- [bug] JAVA-363: Add collection and data length checks during serialization.
-- [improvement] JAVA-329: Surface number of retries in metrics.
-- [bug] JAVA-428: Do not use a host when no rpc_address found for it.
-- [improvement] JAVA-358: Add ResultSet.wasApplied() for conditional queries.
-- [bug] JAVA-349: Fix negative HostConnectionPool open count.
-- [improvement] JAVA-436: Log more connection details at trace and debug levels.
-- [bug] JAVA-445: Fix cluster shutdown.
-- [improvement] JAVA-439: Expose child policy in chainable load balancing policies.
-
-
-### 2.0.5
-
-- [bug] JAVA-407: Release connections on ResultSetFuture#cancel.
-- [bug] JAVA-393: Fix handling of SimpleStatement with values in query builder
- batches.
-- [bug] JAVA-417: Ensure pool is properly closed in onDown.
-- [bug] JAVA-415: Fix tokenMap initialization at startup.
-- [bug] JAVA-418: Avoid deadlock on close.
-
-
-### 2.0.4
-
-- [improvement] JAVA-204: Better handling of dead connections.
-- [bug] JAVA-373: Fix potential NPE in ControlConnection.
-- [bug] JAVA-291: Throws NPE when passed null for a contact point.
-- [bug] JAVA-315: Avoid LoadBalancingPolicy onDown+onUp at startup.
-- [bug] JAVA-343: Avoid classloader leak in Tomcat.
-- [bug] JAVA-387: Avoid deadlock in onAdd/onUp.
-- [bug] JAVA-377, JAVA-391: Make metadata parsing more lenient.
-- [bug] JAVA-394: Ensure defunct connections are completely closed.
-- [bug] JAVA-342, JAVA-390: Fix memory and resource leak on closed Sessions.
-
-
-### 2.0.3
-
-- [new] The new AbsractSession makes mocking of Session easier.
-- [new] JAVA-309: Allow to trigger a refresh of connected hosts.
-- [new] JAVA-265: New Session#getState method allows to grab information on
- which nodes a session is connected to.
-- [new] JAVA-327: Add QueryBuilder syntax for tuples in where clauses (syntax
- introduced in Cassandra 2.0.6).
-- [improvement] JAVA-359: Properly validate arguments of PoolingOptions methods.
-- [bug] JAVA-368: Fix bogus rejection of BigInteger in 'execute with values'.
-- [bug] JAVA-367: Signal connection failure sooner to avoid missing them.
-- [bug] JAVA-337: Throw UnsupportedOperationException for protocol batch
- setSerialCL.
-
-Merged from 1.0 branch:
-
-- [bug] JAVA-325: Fix periodic reconnection to down hosts.
-
-
-### 2.0.2
-
-- [api] The type of the map key returned by NoHostAvailable#getErrors has changed from
- InetAddress to InetSocketAddress. Same for Initializer#getContactPoints return and
- for AuthProvider#newAuthenticator.
-- [api] JAVA-296: The default load balacing policy is now DCAwareRoundRobinPolicy, and the local
- datacenter is automatically picked based on the first connected node. Furthermore,
- the TokenAwarePolicy is also used by default.
-- [new] JAVA-145: New optional AddressTranslater.
-- [bug] JAVA-321: Don't remove quotes on keyspace in the query builder.
-- [bug] JAVA-320: Fix potential NPE while cluster undergo schema changes.
-- [bug] JAVA-319: Fix thread-safety of page fetching.
-- [bug] JAVA-318: Fix potential NPE using fetchMoreResults.
-
-Merged from 1.0 branch:
-
-- [new] JAVA-179: Expose the name of the partitioner in use in the cluster metadata.
-- [new] Add new WhiteListPolicy to limit the nodes connected to a particular list.
-- [improvement] JAVA-289: Do not hop DC for LOCAL_* CL in DCAwareRoundRobinPolicy.
-- [bug] JAVA-313: Revert back to longs for dates in the query builder.
-- [bug] JAVA-314: Don't reconnect to nodes ignored by the load balancing policy.
-
-
-### 2.0.1
-
-- [improvement] JAVA-278: Handle the static columns introduced in Cassandra 2.0.6.
-- [improvement] JAVA-208: Add Cluster#newSession method to create Session without connecting
- right away.
-- [bug] JAVA-279: Add missing iso8601 patterns for parsing dates.
-- [bug] Properly parse BytesType as the blob type.
-- [bug] JAVA-280: Potential NPE when parsing schema of pre-CQL tables of C* 1.2 nodes.
-
-Merged from 1.0 branch:
-
-- [bug] JAVA-275: LatencyAwarePolicy.Builder#withScale doesn't set the scale.
-- [new] JAVA-114: Add methods to check if a Cluster/Session instance has been closed already.
-
-
-### 2.0.0
-
-- [api] JAVA-269: Case sensitive identifier by default in Metadata.
-- [bug] JAVA-274: Fix potential NPE in Cluster#connect.
-
-Merged from 1.0 branch:
-
-- [bug] JAVA-263: Always return the PreparedStatement object that is cache internally.
-- [bug] JAVA-261: Fix race when multiple connect are done in parallel.
-- [bug] JAVA-270: Don't connect at all to nodes that are ignored by the load balancing
- policy.
-
-
-### 2.0.0-rc3
-
-- [improvement] The protocol version 1 is now supported (features only supported by the
- version 2 of the protocol throw UnsupportedFeatureException).
-- [improvement] JAVA-195: Make most main objects interface to facilitate testing/mocking.
-- [improvement] Adds new getStatements and clear methods to BatchStatement.
-- [api] JAVA-247: Renamed shutdown to closeAsync and ShutdownFuture to CloseFuture. Clustering
- and Session also now implement Closeable.
-- [bug] JAVA-232: Fix potential thread leaks when shutting down Metrics.
-- [bug] JAVA-231: Fix potential NPE in HostConnectionPool.
-- [bug] JAVA-244: Avoid NPE when node is in an unconfigured DC.
-- [bug] JAVA-258: Don't block for scheduled reconnections on Cluster#close.
-
-Merged from 1.0 branch:
-
-- [new] JAVA-224: Added Session#prepareAsync calls.
-- [new] JAVA-249: Added Cluster#getLoggedKeyspace.
-- [improvement] Avoid preparing a statement multiple time per host with multiple sessions.
-- [bug] JAVA-255: Make sure connections are returned to the right pools.
-- [bug] JAVA-264: Use date string in query build to work-around CASSANDRA-6718.
-
-
-### 2.0.0-rc2
-
-- [new] JAVA-207: Add LOCAL_ONE consistency level support (requires using C* 2.0.2+).
-- [bug] JAVA-219: Fix parsing of counter types.
-- [bug] JAVA-218: Fix missing whitespace for IN clause in the query builder.
-- [bug] JAVA-221: Fix replicas computation for token aware balancing.
-
-Merged from 1.0 branch:
-
-- [bug] JAVA-213: Fix regression from JAVA-201.
-- [improvement] New getter to obtain a snapshot of the scores maintained by
- LatencyAwarePolicy.
-
-
-### 2.0.0-rc1
-
-- [new] JAVA-199: Mark compression dependencies optional in maven.
-- [api] Renamed TableMetadata#getClusteringKey to TableMetadata#getClusteringColumns.
-
-Merged from 1.0 branch:
-
-- [new] JAVA-142: OSGi bundle.
-- [improvement] JAVA-205: Make collections returned by Row immutable.
-- [improvement] JAVA-203: Limit internal thread pool size.
-- [bug] JAVA-201: Don't retain unused PreparedStatement in memory.
-- [bug] Add missing clustering order info in TableMetadata
-- [bug] JAVA-196: Allow bind markers for collections in the query builder.
-
-
-### 2.0.0-beta2
-
-- [api] BoundStatement#setX(String, X) methods now set all values (if there is
- more than one) having the provided name, not just the first occurence.
-- [api] The Authenticator interface now has a onAuthenticationSuccess method that
- allows to handle the potential last token sent by the server.
-- [new] The query builder don't serialize large values to strings anymore by
- default by making use the new ability to send values alongside the query string.
-- [new] JAVA-140: The query builder has been updated for new CQL features.
-- [bug] Fix exception when a conditional write timeout C* side.
-- [bug] JAVA-182: Ensure connection is created when Cluster metadata are asked for.
-- [bug] JAVA-187: Fix potential NPE during authentication.
-
-
-### 2.0.0-beta1
-
-- [api] The 2.0 version is an API-breaking upgrade of the driver. While most
- of the breaking changes are minor, there are too numerous to be listed here
- and you are encouraged to look at the Upgrade_guide_to_2.0 file that describe
- those changes in details.
-- [new] LZ4 compression is supported for the protocol.
-- [new] JAVA-39: The driver does not depend on cassandra-all anymore.
-- [new] New BatchStatement class allows to execute batch other statements.
-- [new] Large ResultSet are now paged (incrementally fetched) by default.
-- [new] SimpleStatement support values for bind-variables, to allow
- prepare+execute behavior with one roundtrip.
-- [new] Query parameters defaults (Consistency level, page size, ...) can be
- configured globally.
-- [new] New Cassandra 2.0 SERIAL and LOCAL_SERIAL consistency levels are
- supported.
-- [new] JAVA-116: Cluster#shutdown now waits for ongoing queries to complete by default.
-- [new] Generic authentication through SASL is now exposed.
-- [bug] JAVA-88: TokenAwarePolicy now takes all replica into account, instead of only the
- first one.
-
-
-### 1.0.5
-
-- [new] JAVA-142: OSGi bundle.
-- [new] JAVA-207: Add support for ConsistencyLevel.LOCAL_ONE; note that this
- require Cassandra 1.2.12+.
-- [improvement] JAVA-205: Make collections returned by Row immutable.
-- [improvement] JAVA-203: Limit internal thread pool size.
-- [improvement] New getter to obtain a snapshot of the scores maintained by
- LatencyAwarePolicy.
-- [improvement] JAVA-222: Avoid synchronization when getting codec for collection
- types.
-- [bug] JAVA-201, JAVA-213: Don't retain unused PreparedStatement in memory.
-- [bug] Add missing clustering order info in TableMetadata
-- [bug] JAVA-196: Allow bind markers for collections in the query builder.
-
-
-### 1.0.4
-
-- [api] JAVA-163: The Cluster.Builder#poolingOptions and Cluster.Builder#socketOptions
- are now deprecated. They are replaced by the new withPoolingOptions and
- withSocketOptions methods.
-- [new] JAVA-129: A new LatencyAwarePolicy wrapping policy has been added, allowing to
- add latency awareness to a wrapped load balancing policy.
-- [new] JAVA-161: Cluster.Builder#deferInitialization: Allow defering cluster initialization.
-- [new] JAVA-117: Add truncate statement in query builder.
-- [new] JAVA-106: Support empty IN in the query builder.
-- [bug] JAVA-166: Fix spurious "No current pool set; this should not happen" error
- message.
-- [bug] JAVA-184: Fix potential overflow in RoundRobinPolicy and correctly errors if
- a balancing policy throws.
-- [bug] Don't release Stream ID for timeouted queries (unless we do get back
- the response)
-- [bug] Correctly escape identifiers and use fully qualified table names when
- exporting schema as string.
-
-
-### 1.0.3
-
-- [api] The query builder now correctly throw an exception when given a value
- of a type it doesn't know about.
-- [new] SocketOptions#setReadTimeout allows to set a timeout on how long we
- wait for the answer of one node. See the javadoc for more details.
-- [new] New Session#prepare method that takes a Statement.
-- [bug] JAVA-143: Always take per-query CL, tracing, etc. into account for QueryBuilder
- statements.
-- [bug] Temporary fixup for TimestampType when talking to C* 2.0 nodes.
-
-
-### 1.0.2
-
-- [api] Host#getMonitor and all Host.HealthMonitor methods have been
- deprecated. The new Host#isUp method is now prefered to the method
- in the monitor and you should now register Host.StateListener against
- the Cluster object directly (registering against a host HealthMonitor
- was much more limited anyway).
-- [new] JAVA-92: New serialize/deserialize methods in DataType to serialize/deserialize
- values to/from bytes.
-- [new] JAVA-128: New getIndexOf() method in ColumnDefinitions to find the index of
- a given column name.
-- [bug] JAVA-131: Fix a bug when thread could get blocked while setting the current
- keyspace.
-- [bug] JAVA-136: Quote inet addresses in the query builder since CQL3 requires it.
-
-
-### 1.0.1
-
-- [api] JAVA-100: Function call handling in the query builder has been modified in a
- backward incompatible way. Function calls are not parsed from string values
- anymore as this wasn't safe. Instead the new 'fcall' method should be used.
-- [api] Some typos in method names in PoolingOptions have been fixed in a
- backward incompatible way before the API get widespread.
-- [bug] JAVA-123: Don't destroy composite partition key with BoundStatement and
- TokenAwarePolicy.
-- [new] null values support in the query builder.
-- [new] JAVA-5: SSL support (requires C* >= 1.2.1).
-- [new] JAVA-113: Allow generating unlogged batch in the query builder.
-- [improvement] Better error message when no host are available.
-- [improvement] Improves performance of the stress example application been.
-
-
-### 1.0.0
-
-- [api] The AuthInfoProvider has be (temporarily) removed. Instead, the
- Cluster builder has a new withCredentials() method to provide a username
- and password for use with Cassandra's PasswordAuthenticator. Custom
- authenticator will be re-introduced in a future version but are not
- supported at the moment.
-- [api] The isMetricsEnabled() method in Configuration has been replaced by
- getMetricsOptions(). An option to disabled JMX reporting (on by default)
- has been added.
-- [bug] JAVA-91: Don't make default load balancing policy a static singleton since it
- is stateful.
-
-
-### 1.0.0-RC1
-
-- [new] JAVA-79: Null values are now supported in BoundStatement (but you will need at
- least Cassandra 1.2.3 for it to work). The API of BoundStatement has been
- slightly changed so that not binding a variable is not an error anymore,
- the variable is simply considered null by default. The isReady() method has
- been removed.
-- [improvement] JAVA-75: The Cluster/Session shutdown methods now properly block until
- the shutdown is complete. A version with at timeout has been added.
-- [bug] JAVA-44: Fix use of CQL3 functions in the query builder.
-- [bug] JAVA-77: Fix case where multiple schema changes too quickly wouldn't work
- (only triggered when 0.0.0.0 was used for the rpc_address on the Cassandra
- nodes).
-- [bug] JAVA-72: Fix IllegalStateException thrown due to a reconnection made on an I/O
- thread.
-- [bug] JAVA-82: Correctly reports errors during authentication phase.
-
-
-### 1.0.0-beta2
-
-- [new] JAVA-51, JAVA-60, JAVA-58: Support blob constants, BigInteger, BigDecimal and counter batches in
- the query builder.
-- [new] JAVA-61: Basic support for custom CQL3 types.
-- [new] JAVA-65: Add "execution infos" for a result set (this also move the query
- trace in the new ExecutionInfos object, so users of beta1 will have to
- update).
-- [bug] JAVA-62: Fix failover bug in DCAwareRoundRobinPolicy.
-- [bug] JAVA-66: Fix use of bind markers for routing keys in the query builder.
-
-
-### 1.0.0-beta1
-
-- initial release
+
+
+### 4.0.0
+
+- [improvement] JAVA-2192: Don't return generic types with wildcards
+- [improvement] JAVA-2148: Add examples
+- [bug] JAVA-2189: Exclude virtual keyspaces from token map computation
+- [improvement] JAVA-2183: Enable materialized views when testing against Cassandra 4
+- [improvement] JAVA-2182: Add insertInto().json() variant that takes an object in QueryBuilder
+- [improvement] JAVA-2161: Annotate mutating methods with `@CheckReturnValue`
+- [bug] JAVA-2177: Don't exclude down nodes when initializing LBPs
+- [improvement] JAVA-2143: Rename Statement.setTimestamp() to setQueryTimestamp()
+- [improvement] JAVA-2165: Abstract node connection information
+- [improvement] JAVA-2090: Add support for additional_write_policy and read_repair table options
+- [improvement] JAVA-2164: Rename statement builder methods to setXxx
+- [bug] JAVA-2178: QueryBuilder: Alias after function column is not included in a query
+- [improvement] JAVA-2158: Allow BuildableQuery to build statement with values
+- [improvement] JAVA-2150: Improve query builder error message on unsupported literal type
+- [documentation] JAVA-2149: Improve Term javadocs in the query builder
+
+### 4.0.0-rc1
+
+- [improvement] JAVA-2106: Log server side warnings returned from a query
+- [improvement] JAVA-2151: Drop "Dsl" suffix from query builder main classes
+- [new feature] JAVA-2144: Expose internal API to hook into the session lifecycle
+- [improvement] JAVA-2119: Add PagingIterable abstraction as a supertype of ResultSet
+- [bug] JAVA-2063: Normalize authentication logging
+- [documentation] JAVA-2034: Add performance recommendations in the manual
+- [improvement] JAVA-2077: Allow reconnection policy to detect first connection attempt
+- [improvement] JAVA-2067: Publish javadocs JAR for the shaded module
+- [improvement] JAVA-2103: Expose partitioner name in TokenMap API
+- [documentation] JAVA-2075: Document preference for LZ4 over Snappy
+
+### 4.0.0-beta3
+
+- [bug] JAVA-2066: Array index range error when fetching routing keys on bound statements
+- [documentation] JAVA-2061: Add section to upgrade guide about updated type mappings
+- [improvement] JAVA-2038: Add jitter to delays between reconnection attempts
+- [improvement] JAVA-2053: Cache results of session.prepare()
+- [improvement] JAVA-2058: Make programmatic config reloading part of the public API
+- [improvement] JAVA-1943: Fail fast in execute() when the session is closed
+- [improvement] JAVA-2056: Reduce HashedWheelTimer tick duration
+- [bug] JAVA-2057: Do not create pool when SUGGEST\_UP topology event received
+- [improvement] JAVA-2049: Add shorthand method to SessionBuilder to specify local DC
+- [bug] JAVA-2037: Fix NPE when preparing statement with no bound variables
+- [improvement] JAVA-2014: Schedule timeouts on a separate Timer
+- [bug] JAVA-2029: Handle schema refresh failure after a DDL query
+- [bug] JAVA-1947: Make schema parsing more lenient and allow missing system_virtual_schema
+- [bug] JAVA-2028: Use CQL form when parsing UDT types in system tables
+- [improvement] JAVA-1918: Document temporal types
+- [improvement] JAVA-1914: Optimize use of System.nanoTime in CqlRequestHandlerBase
+- [improvement] JAVA-1945: Document corner cases around UDT and tuple attachment
+- [improvement] JAVA-2026: Make CqlDuration implement TemporalAmount
+- [improvement] JAVA-2017: Slightly optimize conversion methods on the hot path
+- [improvement] JAVA-2010: Make dependencies to annotations required again
+- [improvement] JAVA-1978: Add a config option to keep contact points unresolved
+- [bug] JAVA-2000: Fix ConcurrentModificationException during channel shutdown
+- [improvement] JAVA-2002: Reimplement TypeCodec.accepts to improve performance
+- [improvement] JAVA-2011: Re-add ResultSet.getAvailableWithoutFetching() and isFullyFetched()
+- [improvement] JAVA-2007: Make driver threads extend FastThreadLocalThread
+- [bug] JAVA-2001: Handle zero timeout in admin requests
+
+### 4.0.0-beta2
+
+- [new feature] JAVA-1919: Provide a timestamp <=> ZonedDateTime codec
+- [improvement] JAVA-1989: Add BatchStatement.newInstance(BatchType, Iterable)
+- [improvement] JAVA-1988: Remove pre-fetching from ResultSet API
+- [bug] JAVA-1948: Close session properly when LBP fails to initialize
+- [improvement] JAVA-1949: Improve error message when contact points are wrong
+- [improvement] JAVA-1956: Add statementsCount accessor to BatchStatementBuilder
+- [bug] JAVA-1946: Ignore protocol version in equals comparison for UdtValue/TupleValue
+- [new feature] JAVA-1932: Send Driver Name and Version in Startup message
+- [new feature] JAVA-1917: Add ability to set node on statement
+- [improvement] JAVA-1916: Base TimestampCodec.parse on java.util.Date.
+- [improvement] JAVA-1940: Clean up test resources when CCM integration tests finish
+- [bug] JAVA-1938: Make CassandraSchemaQueries classes public
+- [improvement] JAVA-1925: Rename context getters
+- [improvement] JAVA-1544: Check API compatibility with Revapi
+- [new feature] JAVA-1900: Add support for virtual tables
+
+### 4.0.0-beta1
+
+- [new feature] JAVA-1869: Add DefaultDriverConfigLoaderBuilder
+- [improvement] JAVA-1913: Expose additional counters on Node
+- [improvement] JAVA-1880: Rename "config profile" to "execution profile"
+- [improvement] JAVA-1889: Upgrade dependencies to the latest minor versions
+- [improvement] JAVA-1819: Propagate more attributes to bound statements
+- [improvement] JAVA-1897: Improve extensibility of schema metadata classes
+- [improvement] JAVA-1437: Enable SSL hostname validation by default
+- [improvement] JAVA-1879: Duplicate basic.request options as Request/Statement attributes
+- [improvement] JAVA-1870: Use sensible defaults in RequestLogger if config options are missing
+- [improvement] JAVA-1877: Use a separate reconnection schedule for the control connection
+- [improvement] JAVA-1763: Generate a binary tarball as part of the build process
+- [improvement] JAVA-1884: Add additional methods from TypeToken to GenericType
+- [improvement] JAVA-1883: Use custom queue implementation for LBP's query plan
+- [improvement] JAVA-1890: Add more configuration options to DefaultSslEngineFactory
+- [bug] JAVA-1895: Rename PreparedStatement.getPrimaryKeyIndices to getPartitionKeyIndices
+- [bug] JAVA-1891: Allow null items when setting values in bulk
+- [improvement] JAVA-1767: Improve message when column not in result set
+- [improvement] JAVA-1624: Expose ExecutionInfo on exceptions where applicable
+- [improvement] JAVA-1766: Revisit nullability
+- [new feature] JAVA-1860: Allow reconnection at startup if no contact point is available
+- [improvement] JAVA-1866: Make all public policies implement AutoCloseable
+- [new feature] JAVA-1762: Build alternate core artifact with Netty shaded
+- [new feature] JAVA-1761: Add OSGi descriptors
+- [bug] JAVA-1560: Correctly propagate policy initialization errors
+- [improvement] JAVA-1865: Add RelationMetadata.getPrimaryKey()
+- [improvement] JAVA-1862: Add ConsistencyLevel.isDcLocal and isSerial
+- [improvement] JAVA-1858: Implement Serializable in implementations, not interfaces
+- [improvement] JAVA-1830: Surface response frame size in ExecutionInfo
+- [improvement] JAVA-1853: Add newValue(Object...) to TupleType and UserDefinedType
+- [improvement] JAVA-1815: Reorganize configuration into basic/advanced categories
+- [improvement] JAVA-1848: Add logs to DefaultRetryPolicy
+- [new feature] JAVA-1832: Add Ec2MultiRegionAddressTranslator
+- [improvement] JAVA-1825: Add remaining Typesafe config primitive types to DriverConfigProfile
+- [new feature] JAVA-1846: Add ConstantReconnectionPolicy
+- [improvement] JAVA-1824: Make policies overridable in profiles
+- [bug] JAVA-1569: Allow null to be used in positional and named values in statements
+- [new feature] JAVA-1592: Expose request's total Frame size through API
+- [new feature] JAVA-1829: Add metrics for bytes-sent and bytes-received
+- [improvement] JAVA-1755: Normalize usage of DEBUG/TRACE log levels
+- [improvement] JAVA-1803: Log driver version on first use
+- [improvement] JAVA-1792: Add AuthProvider callback to handle missing challenge from server
+- [improvement] JAVA-1775: Assume default packages for built-in policies
+- [improvement] JAVA-1774: Standardize policy locations
+- [improvement] JAVA-1798: Allow passing the default LBP filter as a session builder argument
+- [new feature] JAVA-1523: Add query logger
+- [improvement] JAVA-1801: Revisit NodeStateListener and SchemaChangeListener APIs
+- [improvement] JAVA-1759: Revisit metrics API
+- [improvement] JAVA-1776: Use concurrency annotations
+- [improvement] JAVA-1799: Use CqlIdentifier for simple statement named values
+- [new feature] JAVA-1515: Add query builder
+- [improvement] JAVA-1773: Make DriverConfigProfile enumerable
+- [improvement] JAVA-1787: Use standalone shaded Guava artifact
+- [improvement] JAVA-1769: Allocate exact buffer size for outgoing requests
+- [documentation] JAVA-1780: Add manual section about case sensitivity
+- [new feature] JAVA-1536: Add request throttling
+- [improvement] JAVA-1772: Revisit multi-response callbacks
+- [new feature] JAVA-1537: Add remaining socket options
+- [bug] JAVA-1756: Propagate custom payload when preparing a statement
+- [improvement] JAVA-1847: Add per-node request tracking
+
+### 4.0.0-alpha3
+
+- [new feature] JAVA-1518: Expose metrics
+- [improvement] JAVA-1739: Add host_id and schema_version to node metadata
+- [improvement] JAVA-1738: Convert enums to allow extensibility
+- [bug] JAVA-1727: Override DefaultUdtValue.equals
+- [bug] JAVA-1729: Override DefaultTupleValue.equals
+- [improvement] JAVA-1720: Merge Cluster and Session into a single interface
+- [improvement] JAVA-1713: Use less nodes in DefaultLoadBalancingPolicyIT
+- [improvement] JAVA-1707: Add test infrastructure for running DSE clusters with CCM
+- [bug] JAVA-1715: Propagate unchecked exceptions to CompletableFuture in SyncAuthenticator methods
+- [improvement] JAVA-1714: Make replication strategies pluggable
+- [new feature] JAVA-1647: Handle metadata_changed flag in protocol v5
+- [new feature] JAVA-1633: Handle per-request keyspace in protocol v5
+- [improvement] JAVA-1678: Warn if auth is configured on the client but not the server
+- [improvement] JAVA-1673: Remove schema agreement check when repreparing on up
+- [new feature] JAVA-1526: Provide a single load balancing policy implementation
+- [improvement] JAVA-1680: Improve error message on batch log write timeout
+- [improvement] JAVA-1675: Remove dates from copyright headers
+- [improvement] JAVA-1645: Don't log stack traces at WARN level
+- [new feature] JAVA-1524: Add query trace API
+- [improvement] JAVA-1646: Provide a more readable error when connecting to Cassandra 2.0 or lower
+- [improvement] JAVA-1662: Raise default request timeout
+- [improvement] JAVA-1566: Enforce API rules automatically
+- [bug] JAVA-1584: Validate that no bound values are unset in protocol v3
+
+### 4.0.0-alpha2
+
+- [new feature] JAVA-1525: Handle token metadata
+- [new feature] JAVA-1638: Check schema agreement
+- [new feature] JAVA-1494: Implement Snappy and LZ4 compression
+- [new feature] JAVA-1514: Port Uuids utility class
+- [new feature] JAVA-1520: Add node state listeners
+- [new feature] JAVA-1493: Handle schema metadata
+- [improvement] JAVA-1605: Refactor request execution model
+- [improvement] JAVA-1597: Fix raw usages of Statement
+- [improvement] JAVA-1542: Enable JaCoCo code coverage
+- [improvement] JAVA-1295: Auto-detect best protocol version in mixed cluster
+- [bug] JAVA-1565: Mark node down when it loses its last connection and was already reconnecting
+- [bug] JAVA-1594: Don't create pool if node comes back up but is ignored
+- [bug] JAVA-1593: Reconnect control connection if current node is removed, forced down or ignored
+- [bug] JAVA-1595: Don't use system.local.rpc_address when refreshing node list
+- [bug] JAVA-1568: Handle Reconnection#reconnectNow/stop while the current attempt is still in
+ progress
+- [improvement] JAVA-1585: Add GenericType#where
+- [improvement] JAVA-1590: Properly skip deployment of integration-tests module
+- [improvement] JAVA-1576: Expose AsyncResultSet's iterator through a currentPage() method
+- [improvement] JAVA-1591: Add programmatic way to get driver version
+
+### 4.0.0-alpha1
+
+- [improvement] JAVA-1586: Throw underlying exception when codec not found in cache
+- [bug] JAVA-1583: Handle write failure in ChannelHandlerRequest
+- [improvement] JAVA-1541: Reorganize configuration
+- [improvement] JAVA-1577: Set default consistency level to LOCAL_ONE
+- [bug] JAVA-1548: Retry idempotent statements on READ_TIMEOUT and UNAVAILABLE
+- [bug] JAVA-1562: Fix various issues around heart beats
+- [improvement] JAVA-1546: Make all statement implementations immutable
+- [bug] JAVA-1554: Include VIEW and CDC in WriteType
+- [improvement] JAVA-1498: Add a cache above Typesafe config
+- [bug] JAVA-1547: Abort pending requests when connection dropped
+- [new feature] JAVA-1497: Port timestamp generators from 3.x
+- [improvement] JAVA-1539: Configure for deployment to Maven central
+- [new feature] JAVA-1519: Close channel if number of orphan stream ids exceeds a configurable
+ threshold
+- [new feature] JAVA-1529: Make configuration reloadable
+- [new feature] JAVA-1502: Reprepare statements on newly added/up nodes
+- [new feature] JAVA-1530: Add ResultSet.wasApplied
+- [improvement] JAVA-1531: Merge CqlSession and Session
+- [new feature] JAVA-1513: Handle batch statements
+- [improvement] JAVA-1496: Improve log messages
+- [new feature] JAVA-1501: Reprepare on the fly when we get an UNPREPARED response
+- [bug] JAVA-1499: Wait for load balancing policy at cluster initialization
+- [new feature] JAVA-1495: Add prepared statements
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/install-jdk.sh b/ci/install-jdk.sh
new file mode 100644
index 00000000000..674961c2daf
--- /dev/null
+++ b/ci/install-jdk.sh
@@ -0,0 +1,318 @@
+#!/usr/bin/env bash
+
+#
+# Install JDK for Linux and Mac OS
+#
+# This script determines the most recent early-access build number,
+# downloads the JDK archive to the user home directory and extracts
+# it there.
+#
+# Exported environment variables (when sourcing this script)
+#
+# JAVA_HOME is set to the extracted JDK directory
+# PATH is prepended with ${JAVA_HOME}/bin
+#
+# (C) 2018 Christian Stein
+#
+# https://github.com/sormuras/bach/blob/master/install-jdk.sh
+#
+
+set -o errexit
+#set -o nounset # https://github.com/travis-ci/travis-ci/issues/5434
+#set -o xtrace
+
+function initialize() {
+ readonly script_name="$(basename "${BASH_SOURCE[0]}")"
+ readonly script_version='2018-10-17'
+
+ dry=false
+ silent=false
+ verbose=false
+ emit_java_home=false
+
+ feature='ea'
+ license='GPL'
+ os='?'
+ url='?'
+ workspace="${HOME}"
+ target='?'
+ cacerts=false
+}
+
+function usage() {
+cat << EOF
+Usage: ${script_name} [OPTION]...
+Download and extract the latest-and-greatest JDK from java.net or Oracle.
+
+Version: ${script_version}
+Options:
+ -h|--help Displays this help
+ -d|--dry-run Activates dry-run mode
+ -s|--silent Displays no output
+ -e|--emit-java-home Print value of "JAVA_HOME" to stdout (ignores silent mode)
+ -v|--verbose Displays verbose output
+
+ -f|--feature 9|10|...|ea JDK feature release number, defaults to "ea"
+ -l|--license GPL|BCL License defaults to "GPL", BCL also indicates OTN-LA for Oracle Java SE
+ -o|--os linux-x64|osx-x64 Operating system identifier (works best with GPL license)
+ -u|--url "https://..." Use custom JDK archive (provided as .tar.gz file)
+ -w|--workspace PATH Working directory defaults to \${HOME} [${HOME}]
+ -t|--target PATH Target directory, defaults to first component of the tarball
+ -c|--cacerts Link system CA certificates (currently only Debian/Ubuntu is supported)
+EOF
+}
+
+function script_exit() {
+ if [[ $# -eq 1 ]]; then
+ printf '%s\n' "$1"
+ exit 0
+ fi
+
+ if [[ $# -eq 2 && $2 =~ ^[0-9]+$ ]]; then
+ printf '%b\n' "$1"
+ exit "$2"
+ fi
+
+ script_exit 'Invalid arguments passed to script_exit()!' 2
+}
+
+function say() {
+ if [[ ${silent} != true ]]; then
+ echo "$@"
+ fi
+}
+
+function verbose() {
+ if [[ ${verbose} == true ]]; then
+ echo "$@"
+ fi
+}
+
+function parse_options() {
+ local option
+ while [[ $# -gt 0 ]]; do
+ option="$1"
+ shift
+ case ${option} in
+ -h|-H|--help)
+ usage
+ exit 0
+ ;;
+ -v|-V|--verbose)
+ verbose=true
+ ;;
+ -s|-S|--silent)
+ silent=true
+ verbose "Silent mode activated"
+ ;;
+ -d|-D|--dry-run)
+ dry=true
+ verbose "Dry-run mode activated"
+ ;;
+ -e|-E|--emit-java-home)
+ emit_java_home=true
+ verbose "Emitting JAVA_HOME"
+ ;;
+ -f|-F|--feature)
+ feature="$1"
+ verbose "feature=${feature}"
+ shift
+ ;;
+ -l|-L|--license)
+ license="$1"
+ verbose "license=${license}"
+ shift
+ ;;
+ -o|-O|--os)
+ os="$1"
+ verbose "os=${os}"
+ shift
+ ;;
+ -u|-U|--url)
+ url="$1"
+ verbose "url=${url}"
+ shift
+ ;;
+ -w|-W|--workspace)
+ workspace="$1"
+ verbose "workspace=${workspace}"
+ shift
+ ;;
+ -t|-T|--target)
+ target="$1"
+ verbose "target=${target}"
+ shift
+ ;;
+ -c|-C|--cacerts)
+ cacerts=true
+ verbose "Linking system CA certificates"
+ ;;
+ *)
+ script_exit "Invalid argument was provided: ${option}" 2
+ ;;
+ esac
+ done
+}
+
+function determine_latest_jdk() {
+ local number
+ local curl_result
+ local url
+
+ verbose "Determine latest JDK feature release number"
+ number=9
+ while [[ ${number} != 99 ]]
+ do
+ url=http://jdk.java.net/${number}
+ curl_result=$(curl -o /dev/null --silent --head --write-out %{http_code} ${url})
+ if [[ ${curl_result} -ge 400 ]]; then
+ break
+ fi
+ verbose " Found ${url} [${curl_result}]"
+ latest_jdk=${number}
+ number=$[$number +1]
+ done
+
+ verbose "Latest JDK feature release number is: ${latest_jdk}"
+}
+
+function perform_sanity_checks() {
+ if [[ ${feature} == '?' ]] || [[ ${feature} == 'ea' ]]; then
+ feature=${latest_jdk}
+ fi
+ if [[ ${feature} -lt 9 ]] || [[ ${feature} -gt ${latest_jdk} ]]; then
+ script_exit "Expected feature release number in range of 9 to ${latest_jdk}, but got: ${feature}" 3
+ fi
+ if [[ -d "$target" ]]; then
+ script_exit "Target directory must not exist, but it does: $(du -hs '${target}')" 3
+ fi
+}
+
+function determine_url() {
+ local DOWNLOAD='https://download.java.net/java'
+ local ORACLE='http://download.oracle.com/otn-pub/java/jdk'
+
+ # Archived feature or official GA build?
+ case "${feature}-${license}" in
+ 9-GPL) url="${DOWNLOAD}/GA/jdk9/9.0.4/binaries/openjdk-9.0.4_${os}_bin.tar.gz"; return;;
+ 9-BCL) url="${ORACLE}/9.0.4+11/c2514751926b4512b076cc82f959763f/jdk-9.0.4_${os}_bin.tar.gz"; return;;
+ 10-GPL) url="${DOWNLOAD}/GA/jdk10/10.0.2/19aef61b38124481863b1413dce1855f/13/openjdk-10.0.2_${os}_bin.tar.gz"; return;;
+ 10-BCL) url="${ORACLE}/10.0.2+13/19aef61b38124481863b1413dce1855f/jdk-10.0.2_${os}_bin.tar.gz"; return;;
+ 11-GPL) url="${DOWNLOAD}/GA/jdk11/13/GPL/openjdk-11.0.1_${os}_bin.tar.gz"; return;;
+ 11-BCL) url="${ORACLE}/11.0.1+13/90cf5d8f270a4347a95050320eef3fb7/jdk-11.0.1_${os}_bin.tar.gz"; return;;
+ esac
+
+ # EA or RC build?
+ local JAVA_NET="http://jdk.java.net/${feature}"
+ local candidates=$(wget --quiet --output-document - ${JAVA_NET} | grep -Eo 'href[[:space:]]*=[[:space:]]*"[^\"]+"' | grep -Eo '(http|https)://[^"]+')
+ url=$(echo "${candidates}" | grep -Eo "${DOWNLOAD}/.+/jdk${feature}/.+/${license}/.*jdk-${feature}.+${os}_bin.tar.gz$" || true)
+
+ if [[ -z ${url} ]]; then
+ script_exit "Couldn't determine a download url for ${feature}-${license} on ${os}" 1
+ fi
+}
+
+function prepare_variables() {
+ if [[ ${os} == '?' ]]; then
+ if [[ "$OSTYPE" == "darwin"* ]]; then
+ os='osx-x64'
+ else
+ os='linux-x64'
+ fi
+ fi
+ if [[ ${url} == '?' ]]; then
+ determine_latest_jdk
+ perform_sanity_checks
+ determine_url
+ else
+ feature=''
+ license=''
+ os=''
+ fi
+ archive="${workspace}/$(basename ${url})"
+ status=$(curl -o /dev/null --silent --head --write-out %{http_code} ${url})
+}
+
+function print_variables() {
+cat << EOF
+Variables:
+ feature = ${feature}
+ license = ${license}
+ os = ${os}
+ url = ${url}
+ status = ${status}
+ archive = ${archive}
+EOF
+}
+
+function download_and_extract_and_set_target() {
+ local quiet='--quiet'; if [[ ${verbose} == true ]]; then quiet=''; fi
+ local local="--directory-prefix ${workspace}"
+ local remote='--timestamping --continue'
+ local wget_options="${quiet} ${local} ${remote}"
+ local tar_options="--file ${archive}"
+
+ say "Downloading JDK from ${url}..."
+ verbose "Using wget options: ${wget_options}"
+ if [[ ${license} == 'GPL' ]]; then
+ wget ${wget_options} ${url}
+ else
+ wget ${wget_options} --header "Cookie: oraclelicense=accept-securebackup-cookie" ${url}
+ fi
+
+ verbose "Using tar options: ${tar_options}"
+ if [[ ${target} == '?' ]]; then
+ tar --extract ${tar_options} -C "${workspace}"
+ if [[ "$OSTYPE" != "darwin"* ]]; then
+ target="${workspace}"/$(tar --list ${tar_options} | grep 'bin/javac' | tr '/' '\n' | tail -3 | head -1)
+ else
+ target="${workspace}"/$(tar --list ${tar_options} | head -2 | tail -1 | cut -f 2 -d '/' -)/Contents/Home
+ fi
+ else
+ if [[ "$OSTYPE" != "darwin"* ]]; then
+ mkdir --parents "${target}"
+ tar --extract ${tar_options} -C "${target}" --strip-components=1
+ else
+ mkdir -p "${target}"
+ tar --extract ${tar_options} -C "${target}" --strip-components=4 # . / / Contents / Home
+ fi
+ fi
+
+ if [[ ${verbose} == true ]]; then
+ echo "Set target to: ${target}"
+ echo "Content of target directory:"
+ ls "${target}"
+ echo "Content of release file:"
+ [[ ! -f "${target}/release" ]] || cat "${target}/release"
+ fi
+
+ # Link to system certificates
+ # http://openjdk.java.net/jeps/319
+ # https://bugs.openjdk.java.net/browse/JDK-8196141
+ # TODO: Provide support for other distributions than Debian/Ubuntu
+ if [[ ${cacerts} == true ]]; then
+ mv "${target}/lib/security/cacerts" "${target}/lib/security/cacerts.jdk"
+ ln -s /etc/ssl/certs/java/cacerts "${target}/lib/security/cacerts"
+ fi
+}
+
+function main() {
+ initialize
+ say "$script_name $script_version"
+
+ parse_options "$@"
+ prepare_variables
+
+ if [[ ${silent} == false ]]; then print_variables; fi
+ if [[ ${dry} == true ]]; then exit 0; fi
+
+ download_and_extract_and_set_target
+
+ export JAVA_HOME=$(cd "${target}"; pwd)
+ export PATH=${JAVA_HOME}/bin:$PATH
+
+ if [[ ${silent} == false ]]; then java -version; fi
+ if [[ ${emit_java_home} == true ]]; then echo "${JAVA_HOME}"; fi
+}
+
+main "$@"
\ No newline at end of file
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."
diff --git a/clirr-ignores.xml b/clirr-ignores.xml
deleted file mode 100644
index 8c1bd47ab4c..00000000000
--- a/clirr-ignores.xml
+++ /dev/null
@@ -1,354 +0,0 @@
-
-
-
-
- 8001
- com/datastax/driver/mapping/ColumnMapper$Kind
- False positive, the enclosing class is package-private so this was never exposed
-
-
-
- 1001
- com/datastax/driver/mapping/ColumnMapper$Kind
- False positive, the enclosing class is package-private so this was never exposed
-
-
-
- 7012
- com/datastax/driver/mapping/annotations/QueryParameters
- boolean[] idempotent()
- False positive, it's an annotation and the new method has a default value
-
-
-
- 8001
- com/datastax/driver/extras/codecs/jdk8/InstantCodec
- This class is only present if the project was compiled with JDK 8+
-
-
-
- 8001
- com/datastax/driver/extras/codecs/jdk8/LocalDateCodec
- This class is only present if the project was compiled with JDK 8+
-
-
-
- 8001
- com/datastax/driver/extras/codecs/jdk8/LocalTimeCodec
- This class is only present if the project was compiled with JDK 8+
-
-
-
- 8001
- com/datastax/driver/extras/codecs/jdk8/OptionalCodec
- This class is only present if the project was compiled with JDK 8+
-
-
-
- 8001
- com/datastax/driver/extras/codecs/jdk8/ZonedDateTimeCodec
- This class is only present if the project was compiled with JDK 8+
-
-
-
- 7002
- com/datastax/driver/core/PerHostPercentileTracker
- com.datastax.driver.core.PerHostPercentileTracker$Builder builderWithHighestTrackableLatencyMillis(long)
-
- Renamed (API was marked as beta and still subject to change)
-
-
-
- 7002
- com/datastax/driver/core/PerHostPercentileTracker
- long getLatencyAtPercentile(com.datastax.driver.core.Host, double)
- Moved to new parent class with more parameters (API was marked as beta and still subject to change)
-
-
-
- 7002
- com/datastax/driver/core/PerHostPercentileTracker$Builder
- com.datastax.driver.core.PerHostPercentileTracker$Builder withInterval(long, java.util.concurrent.TimeUnit)
- False positive, method now inherited from generic parent class
-
-
-
- 7002
- com/datastax/driver/core/PerHostPercentileTracker$Builder
- com.datastax.driver.core.PerHostPercentileTracker$Builder withMinRecordedValues(int)
- False positive, method now inherited from generic parent class
-
-
-
- 7002
- com/datastax/driver/core/PerHostPercentileTracker$Builder
- com.datastax.driver.core.PerHostPercentileTracker$Builder withNumberOfSignificantValueDigits(int)
- False positive, method now inherited from generic parent class
-
-
-
- 7002
- com/datastax/driver/core/PerHostPercentileTracker$Builder
- com.datastax.driver.core.PerHostPercentileTracker$Builder withNumberOfHosts(int)
- Removed (API was marked as beta and still subject to change)
-
-
-
- 7005
- com/datastax/driver/core/QueryLogger$Builder
- com.datastax.driver.core.QueryLogger$Builder withDynamicThreshold(com.datastax.driver.core.PerHostPercentileTracker, double)
- com.datastax.driver.core.QueryLogger$Builder withDynamicThreshold(com.datastax.driver.core.PercentileTracker, double)
- Introduced more generic parent type PercentileTracker (API was marked as beta and still subject to change)
-
-
-
- 7002
- com/datastax/driver/core/QueryLogger$DynamicThresholdQueryLogger
- com.datastax.driver.core.PerHostPercentileTracker getPerHostPercentileLatencyTracker()
- Introduced more generic parent type PercentileTracker (API was marked as beta and still subject to change)
-
-
-
- 7002
- com/datastax/driver/core/QueryLogger$DynamicThresholdQueryLogger
- void setPerHostPercentileLatencyTracker(com.datastax.driver.core.PerHostPercentileTracker)
- Introduced more generic parent type PercentileTracker (API was marked as beta and still subject to change)
-
-
-
- 7005
- com/datastax/driver/core/policies/PercentileSpeculativeExecutionPolicy
- PercentileSpeculativeExecutionPolicy(com.datastax.driver.core.PerHostPercentileTracker, double, int)
- *
- Introduced more generic parent type PercentileTracker (API was marked as beta and still subject to change)
-
-
-
- 8001
- com/datastax/driver/core/FrameCompressor$SnappyCompressor
- False positive, the enclosing class is package-private so this was never exposed
-
-
- 8001
- com/datastax/driver/core/FrameCompressor$LZ4Compressor
- False positive, the enclosing class is package-private so this was never exposed
-
-
-
- 7005
- com/datastax/driver/core/querybuilder/QueryBuilder
-
- *
- *
- Relaxed parameters from List to Iterable for in, lt, lte, eq, gt, and gte
-
-
- 7005
- com/datastax/driver/core/exceptions/AlreadyExistsException
- *java.net.InetSocketAddress*
- *com.datastax.driver.core.EndPoint*
- JAVA-2355: Abstract connection information into new EndPoint type for sni support
-
-
- 7005
- com/datastax/driver/core/exceptions/AuthenticationException
- *java.net.InetSocketAddress*
- *com.datastax.driver.core.EndPoint*
- JAVA-2355: Abstract connection information into new EndPoint type for sni support
-
-
- 7005
- com/datastax/driver/core/exceptions/BootstrappingException
- *java.net.InetSocketAddress*
- *com.datastax.driver.core.EndPoint*
- JAVA-2355: Abstract connection information into new EndPoint type for sni support
-
-
- 7005
- com/datastax/driver/core/exceptions/BusyConnectionException
- *java.net.InetSocketAddress*
- *com.datastax.driver.core.EndPoint*
- JAVA-2355: Abstract connection information into new EndPoint type for sni support
-
-
- 7005
- com/datastax/driver/core/exceptions/BusyPoolException
- *java.net.InetSocketAddress*
- *com.datastax.driver.core.EndPoint*
- JAVA-2355: Abstract connection information into new EndPoint type for sni support
-
-
- 6001
- com/datastax/driver/core/exceptions/ConnectionException
- address
- JAVA-2355: Abstract connection information into new EndPoint type for sni support
-
-
- 7005
- com/datastax/driver/core/exceptions/ConnectionException
- *java.net.InetSocketAddress*
- *com.datastax.driver.core.EndPoint*
- JAVA-2355: Abstract connection information into new EndPoint type for sni support
-
-
- 7012
- com/datastax/driver/core/exceptions/CoordinatorException
- com.datastax.driver.core.EndPoint getEndPoint()
- JAVA-2355: Abstract connection information into new EndPoint type for sni support
-
-
- 7005
- com/datastax/driver/core/exceptions/FunctionExecutionException
- *java.net.InetSocketAddress*
- *com.datastax.driver.core.EndPoint*
- JAVA-2355: Abstract connection information into new EndPoint type for sni support
-
-
- 7005
- com/datastax/driver/core/exceptions/InvalidConfigurationInQueryException
- *java.net.InetSocketAddress*
- *com.datastax.driver.core.EndPoint*
- JAVA-2355: Abstract connection information into new EndPoint type for sni support
-
-
- 7005
- com/datastax/driver/core/exceptions/InvalidQueryException
- *java.net.InetSocketAddress*
- *com.datastax.driver.core.EndPoint*
- JAVA-2355: Abstract connection information into new EndPoint type for sni support
-
-
- 7005
- com/datastax/driver/core/exceptions/OperationTimedOutException
- *java.net.InetSocketAddress*
- *com.datastax.driver.core.EndPoint*
- JAVA-2355: Abstract connection information into new EndPoint type for sni support
-
-
- 7005
- com/datastax/driver/core/exceptions/OperationTimedOutException
- *java.net.InetSocketAddress*
- *com.datastax.driver.core.EndPoint*
- JAVA-2355: Abstract connection information into new EndPoint type for sni support
-
-
- 7005
- com/datastax/driver/core/exceptions/OverloadedException
- *java.net.InetSocketAddress*
- *com.datastax.driver.core.EndPoint*
- JAVA-2355: Abstract connection information into new EndPoint type for sni support
-
-
- 7005
- com/datastax/driver/core/exceptions/ProtocolError
- *java.net.InetSocketAddress*
- *com.datastax.driver.core.EndPoint*
- JAVA-2355: Abstract connection information into new EndPoint type for sni support
-
-
- 7005
- com/datastax/driver/core/exceptions/QueryConsistencyException
- *java.net.InetSocketAddress*
- *com.datastax.driver.core.EndPoint*
- JAVA-2355: Abstract connection information into new EndPoint type for sni support
-
-
- 7005
- com/datastax/driver/core/exceptions/ReadFailureException
- *java.net.InetSocketAddress*
- *com.datastax.driver.core.EndPoint*
- JAVA-2355: Abstract connection information into new EndPoint type for sni support
-
-
- 7005
- com/datastax/driver/core/exceptions/ReadTimeoutException
- *java.net.InetSocketAddress*
- *com.datastax.driver.core.EndPoint*
- JAVA-2355: Abstract connection information into new EndPoint type for sni support
-
-
- 7005
- com/datastax/driver/core/exceptions/ServerError
- *java.net.InetSocketAddress*
- *com.datastax.driver.core.EndPoint*
- JAVA-2355: Abstract connection information into new EndPoint type for sni support
-
-
- 7005
- com/datastax/driver/core/exceptions/SyntaxError
- *java.net.InetSocketAddress*
- *com.datastax.driver.core.EndPoint*
- JAVA-2355: Abstract connection information into new EndPoint type for sni support
-
-
- 7005
- com/datastax/driver/core/exceptions/TransportException
- *java.net.InetSocketAddress*
- *com.datastax.driver.core.EndPoint*
- JAVA-2355: Abstract connection information into new EndPoint type for sni support
-
-
- 7005
- com/datastax/driver/core/exceptions/TruncateException
- *java.net.InetSocketAddress*
- *com.datastax.driver.core.EndPoint*
- JAVA-2355: Abstract connection information into new EndPoint type for sni support
-
-
- 7005
- com/datastax/driver/core/exceptions/UnauthorizedException
- *java.net.InetSocketAddress*
- *com.datastax.driver.core.EndPoint*
- JAVA-2355: Abstract connection information into new EndPoint type for sni support
-
-
- 7005
- com/datastax/driver/core/exceptions/UnavailableException
- *java.net.InetSocketAddress*
- *com.datastax.driver.core.EndPoint*
- JAVA-2355: Abstract connection information into new EndPoint type for sni support
-
-
- 7005
- com/datastax/driver/core/exceptions/UnpreparedException
- *java.net.InetSocketAddress*
- *com.datastax.driver.core.EndPoint*
- JAVA-2355: Abstract connection information into new EndPoint type for sni support
-
-
- 7005
- com/datastax/driver/core/exceptions/UnsupportedProtocolVersionException
- *java.net.InetSocketAddress*
- *com.datastax.driver.core.EndPoint*
- JAVA-2355: Abstract connection information into new EndPoint type for sni support
-
-
- 7005
- com/datastax/driver/core/exceptions/WriteFailureException
- *java.net.InetSocketAddress*
- *com.datastax.driver.core.EndPoint*
- JAVA-2355: Abstract connection information into new EndPoint type for sni support
-
-
- 7005
- com/datastax/driver/core/exceptions/WriteTimeoutException
- *java.net.InetSocketAddress*
- *com.datastax.driver.core.EndPoint*
- JAVA-2355: Abstract connection information into new EndPoint type for sni support
-
-
diff --git a/core-shaded/pom.xml b/core-shaded/pom.xml
new file mode 100644
index 00000000000..041da3a3b5f
--- /dev/null
+++ b/core-shaded/pom.xml
@@ -0,0 +1,317 @@
+
+
+
+ 4.0.0
+
+
+ com.datastax.oss
+ java-driver-parent
+ 4.0.0
+
+
+ java-driver-core-shaded
+
+ DataStax Java driver for Apache Cassandra(R) - core with shaded deps
+
+
+
+
+ com.datastax.oss
+ java-driver-core
+ ${project.version}
+
+
+
+ com.datastax.oss
+ native-protocol
+
+
+ com.datastax.oss
+ java-driver-shaded-guava
+
+
+ com.typesafe
+ config
+
+
+ com.github.jnr
+ jnr-ffi
+
+
+ com.github.jnr
+ jnr-posix
+
+
+ org.xerial.snappy
+ snappy-java
+ true
+
+
+ org.lz4
+ lz4-java
+ true
+
+
+ org.slf4j
+ slf4j-api
+
+
+ io.dropwizard.metrics
+ metrics-core
+
+
+ org.hdrhistogram
+ HdrHistogram
+
+
+ com.github.stephenc.jcip
+ jcip-annotations
+
+
+ com.github.spotbugs
+ spotbugs-annotations
+
+
+
+
+
+
+
+
+ maven-shade-plugin
+
+
+ shade-core-dependencies
+ package
+
+ shade
+
+
+ true
+ true
+
+
+
+ com.datastax.oss:java-driver-core
+ io.netty:*
+
+
+
+
+ io.netty
+ com.datastax.oss.driver.shaded.netty
+
+
+
+
+
+
+
+ maven-dependency-plugin
+
+
+ unpack-shaded-classes
+ package
+
+ unpack
+
+
+
+
+ com.datastax.oss
+ java-driver-core-shaded
+ ${project.version}
+ jar
+ ${project.build.outputDirectory}
+
+
+
+
+ META-INF/maven/com.datastax.oss/java-driver-core/**,
+ META-INF/maven/io.netty/**,
+
+
+
+
+
+ unpack-shaded-sources
+ package
+
+ unpack
+
+
+
+
+ com.datastax.oss
+ java-driver-core-shaded
+ ${project.version}
+ jar
+ sources
+ ${project.build.directory}/shaded-sources
+
+
+
+
+
+
+
+ maven-javadoc-plugin
+
+
+ attach-shaded-javadocs
+
+ jar
+
+
+ ${project.build.directory}/shaded-sources
+
+ com.datastax.oss.driver.internal:com.datastax.oss.driver.shaded
+
+
+
+
+ org.jctools
+ jctools-core
+ 2.1.2
+
+
+
+
+
+
+
+ org.apache.felix
+ maven-bundle-plugin
+ true
+
+
+ generate-shaded-manifest
+ package
+
+ manifest
+
+
+
+ com.datastax.oss.driver.core
+
+ *
+
+
+ !com.datastax.oss.driver.shaded.netty.*,
+ !jnr.*,
+ !net.jcip.annotations.*,
+ !edu.umd.cs.findbugs.annotations.*,
+ !com.google.protobuf.*,
+ !com.jcraft.jzlib.*,
+ !com.ning.compress.*,
+ !lzma.sdk.*,
+ !net.jpountz.xxhash.*,
+ !org.bouncycastle.*,
+ !org.conscrypt.*,
+ !org.apache.commons.logging.*,
+ !org.apache.log4j.*,
+ !org.apache.logging.log4j.*,
+ !org.eclipse.jetty.*,
+ !org.jboss.marshalling.*,
+ !sun.misc.*,
+ !sun.security.*,
+ *
+
+
+
+ com.datastax.oss.driver.api.core.*,
+ com.datastax.oss.driver.internal.core.*,
+ com.datastax.oss.driver.shaded.netty.*,
+
+
+ true
+
+
+
+
+
+ maven-assembly-plugin
+
+
+ generate-final-shaded-jar
+ package
+
+ single
+
+
+
+
+ ${project.build.outputDirectory}/META-INF/MANIFEST.MF
+
+
+ src/assembly/shaded-jar.xml
+
+
+ false
+
+
+
+
+
+ org.revapi
+ revapi-maven-plugin
+
+ true
+
+
+
+
+
diff --git a/core-shaded/src/assembly/shaded-jar.xml b/core-shaded/src/assembly/shaded-jar.xml
new file mode 100644
index 00000000000..3a735f36d2a
--- /dev/null
+++ b/core-shaded/src/assembly/shaded-jar.xml
@@ -0,0 +1,44 @@
+
+
+ shaded-jar
+
+ jar
+
+ false
+
+
+
+ ${project.build.outputDirectory}
+
+
+
+
+
+
+ ${project.basedir}/dependency-reduced-pom.xml
+ META-INF/maven/com.datastax.oss/java-driver-core-shaded
+ pom.xml
+
+
+
\ No newline at end of file
diff --git a/core/console.scala b/core/console.scala
new file mode 100644
index 00000000000..0ae13620ff8
--- /dev/null
+++ b/core/console.scala
@@ -0,0 +1,39 @@
+/*
+ * Allows quick manual tests from the Scala console:
+ *
+ * cd core/
+ * mvn scala:console
+ *
+ * The script below is run at init, then you can do `val cluster = builder.build()` and play with
+ * it.
+ *
+ * Note: on MacOS, the Scala plugin seems to break the terminal if you exit the console with `:q`.
+ * Use Ctrl+C instead.
+ */
+import com.datastax.oss.driver.api.core._
+import com.datastax.oss.driver.internal.core.metadata.TopologyEvent
+import com.datastax.oss.driver.internal.core.context.InternalDriverContext
+import java.net.InetSocketAddress
+
+import CqlSession
+
+// Heartbeat logs every 30 seconds are annoying in the console, raise the interval
+System.setProperty("datastax-java-driver.advanced.heartbeat.interval", "1 hour")
+
+val address1 = new InetSocketAddress("127.0.0.1", 9042)
+val address2 = new InetSocketAddress("127.0.0.2", 9042)
+val address3 = new InetSocketAddress("127.0.0.3", 9042)
+val address4 = new InetSocketAddress("127.0.0.4", 9042)
+val address5 = new InetSocketAddress("127.0.0.5", 9042)
+val address6 = new InetSocketAddress("127.0.0.6", 9042)
+
+val builder = CqlSession.builder().addContactPoint(address1)
+
+println("********************************************")
+println("* To start a driver instance, run: *")
+println("* implicit val session = builder.build *")
+println("********************************************")
+
+def fire(event: AnyRef)(implicit session: CqlSession): Unit = {
+ session.getContext.asInstanceOf[InternalDriverContext].getEventBus().fire(event)
+}
\ No newline at end of file
diff --git a/core/pom.xml b/core/pom.xml
new file mode 100644
index 00000000000..e46538ebb6d
--- /dev/null
+++ b/core/pom.xml
@@ -0,0 +1,203 @@
+
+
+ 4.0.0
+
+
+ com.datastax.oss
+ java-driver-parent
+ 4.0.0
+
+
+ java-driver-core
+ bundle
+
+ DataStax Java driver for Apache Cassandra(R) - core
+
+
+
+ com.datastax.oss
+ native-protocol
+
+
+ io.netty
+ netty-handler
+
+
+ com.datastax.oss
+ java-driver-shaded-guava
+
+
+ com.typesafe
+ config
+
+
+
+ com.github.jnr
+ jnr-ffi
+
+
+ com.github.jnr
+ jnr-posix
+
+
+ org.xerial.snappy
+ snappy-java
+ true
+
+
+ org.lz4
+ lz4-java
+ true
+
+
+ org.slf4j
+ slf4j-api
+
+
+ io.dropwizard.metrics
+ metrics-core
+
+
+ org.hdrhistogram
+ HdrHistogram
+
+
+ com.github.stephenc.jcip
+ jcip-annotations
+
+
+ com.github.spotbugs
+ spotbugs-annotations
+
+
+ ch.qos.logback
+ logback-classic
+ test
+
+
+ junit
+ junit
+ test
+
+
+ com.tngtech.java
+ junit-dataprovider
+ test
+
+
+ org.assertj
+ assertj-core
+ test
+
+
+ org.mockito
+ mockito-core
+ test
+
+
+
+
+
+
+ src/main/resources
+
+ com/datastax/oss/driver/Driver.properties
+
+ true
+
+
+ src/main/resources
+
+ com/datastax/oss/driver/Driver.properties
+
+ false
+
+
+
+
+ maven-jar-plugin
+
+
+ test-jar
+
+ test-jar
+
+
+
+ logback-test.xml
+
+
+
+
+
+
+ maven-surefire-plugin
+
+
+
+ listener
+ com.datastax.oss.driver.DriverRunListener
+
+
+
+
+
+ org.apache.felix
+ maven-bundle-plugin
+ true
+
+
+
+ bundle
+
+
+
+ com.datastax.oss.driver.core
+
+ *
+
+
+ !net.jcip.annotations.*,
+ !edu.umd.cs.findbugs.annotations.*,
+ !jnr.*,
+ *
+
+
+ com.datastax.oss.driver.*.core.*
+
+
+
+
+
+
+
+
+
diff --git a/core/revapi.json b/core/revapi.json
new file mode 100644
index 00000000000..b4b80558561
--- /dev/null
+++ b/core/revapi.json
@@ -0,0 +1,4727 @@
+// Configures Revapi (https://revapi.org/getting-started.html) to check API compatibility between
+// successive driver versions.
+{
+ "revapi": {
+ "java": {
+ "filter": {
+ "packages": {
+ "regex": true,
+ "exclude": [
+ "com\\.datastax\\.oss\\.protocol\\.internal(\\..+)?",
+ "com\\.datastax\\.oss\\.driver\\.internal(\\..+)?",
+ "com\\.datastax\\.oss\\.driver\\.shaded(\\..+)?",
+ "org\\.assertj(\\..+)?"
+ ]
+ }
+ }
+ },
+ "ignore": [
+ {
+ "code": "java.method.removed",
+ "old": "method com.datastax.oss.driver.api.core.cql.BatchStatementBuilder com.datastax.oss.driver.api.core.cql.BatchStatementBuilder::withKeyspace(com.datastax.oss.driver.api.core.CqlIdentifier)",
+ "justification": "JAVA-2164: Rename statement builder methods to setXxx"
+ },
+ {
+ "code": "java.method.removed",
+ "old": "method com.datastax.oss.driver.api.core.cql.BatchStatementBuilder com.datastax.oss.driver.api.core.cql.BatchStatementBuilder::withKeyspace(java.lang.String)",
+ "justification": "JAVA-2164: Rename statement builder methods to setXxx"
+ },
+ {
+ "code": "java.method.removed",
+ "old": "method com.datastax.oss.driver.api.core.cql.SimpleStatementBuilder com.datastax.oss.driver.api.core.cql.SimpleStatementBuilder::withKeyspace(com.datastax.oss.driver.api.core.CqlIdentifier)",
+ "justification": "JAVA-2164: Rename statement builder methods to setXxx"
+ },
+ {
+ "code": "java.method.removed",
+ "old": "method com.datastax.oss.driver.api.core.cql.SimpleStatementBuilder com.datastax.oss.driver.api.core.cql.SimpleStatementBuilder::withKeyspace(java.lang.String)",
+ "justification": "JAVA-2164: Rename statement builder methods to setXxx"
+ },
+ {
+ "code": "java.method.removed",
+ "old": "method com.datastax.oss.driver.api.core.cql.SimpleStatementBuilder com.datastax.oss.driver.api.core.cql.SimpleStatementBuilder::withQuery(java.lang.String)",
+ "justification": "JAVA-2164: Rename statement builder methods to setXxx"
+ },
+ {
+ "code": "java.method.removed",
+ "old": "method SelfT com.datastax.oss.driver.api.core.cql.StatementBuilder>, StatementT>, StatementT extends com.datastax.oss.driver.api.core.cql.Statement>>::withConsistencyLevel(com.datastax.oss.driver.api.core.ConsistencyLevel)",
+ "justification": "JAVA-2164: Rename statement builder methods to setXxx"
+ },
+ {
+ "code": "java.method.removed",
+ "old": "method SelfT com.datastax.oss.driver.api.core.cql.StatementBuilder>, StatementT>, StatementT extends com.datastax.oss.driver.api.core.cql.Statement>>::withExecutionProfile(com.datastax.oss.driver.api.core.config.DriverExecutionProfile)",
+ "justification": "JAVA-2164: Rename statement builder methods to setXxx"
+ },
+ {
+ "code": "java.method.removed",
+ "old": "method SelfT com.datastax.oss.driver.api.core.cql.StatementBuilder>, StatementT>, StatementT extends com.datastax.oss.driver.api.core.cql.Statement>>::withExecutionProfileName(java.lang.String)",
+ "justification": "JAVA-2164: Rename statement builder methods to setXxx"
+ },
+ {
+ "code": "java.method.removed",
+ "old": "method SelfT com.datastax.oss.driver.api.core.cql.StatementBuilder>, StatementT>, StatementT extends com.datastax.oss.driver.api.core.cql.Statement>>::withIdempotence(java.lang.Boolean)",
+ "justification": "JAVA-2164: Rename statement builder methods to setXxx"
+ },
+ {
+ "code": "java.method.removed",
+ "old": "method SelfT com.datastax.oss.driver.api.core.cql.StatementBuilder>, StatementT>, StatementT extends com.datastax.oss.driver.api.core.cql.Statement>>::withNode(com.datastax.oss.driver.api.core.metadata.Node)",
+ "justification": "JAVA-2164: Rename statement builder methods to setXxx"
+ },
+ {
+ "code": "java.method.removed",
+ "old": "method SelfT com.datastax.oss.driver.api.core.cql.StatementBuilder>, StatementT>, StatementT extends com.datastax.oss.driver.api.core.cql.Statement>>::withPageSize(int)",
+ "justification": "JAVA-2164: Rename statement builder methods to setXxx"
+ },
+ {
+ "code": "java.method.removed",
+ "old": "method SelfT com.datastax.oss.driver.api.core.cql.StatementBuilder>, StatementT>, StatementT extends com.datastax.oss.driver.api.core.cql.Statement>>::withPagingState(java.nio.ByteBuffer)",
+ "justification": "JAVA-2164: Rename statement builder methods to setXxx"
+ },
+ {
+ "code": "java.method.removed",
+ "old": "method SelfT com.datastax.oss.driver.api.core.cql.StatementBuilder>, StatementT>, StatementT extends com.datastax.oss.driver.api.core.cql.Statement>>::withRoutingKey(java.nio.ByteBuffer)",
+ "justification": "JAVA-2164: Rename statement builder methods to setXxx"
+ },
+ {
+ "code": "java.method.removed",
+ "old": "method SelfT com.datastax.oss.driver.api.core.cql.StatementBuilder>, StatementT>, StatementT extends com.datastax.oss.driver.api.core.cql.Statement>>::withRoutingKeyspace(com.datastax.oss.driver.api.core.CqlIdentifier)",
+ "justification": "JAVA-2164: Rename statement builder methods to setXxx"
+ },
+ {
+ "code": "java.method.removed",
+ "old": "method SelfT com.datastax.oss.driver.api.core.cql.StatementBuilder>, StatementT>, StatementT extends com.datastax.oss.driver.api.core.cql.Statement>>::withRoutingKeyspace(java.lang.String)",
+ "justification": "JAVA-2164: Rename statement builder methods to setXxx"
+ },
+ {
+ "code": "java.method.removed",
+ "old": "method SelfT com.datastax.oss.driver.api.core.cql.StatementBuilder>, StatementT>, StatementT extends com.datastax.oss.driver.api.core.cql.Statement>>::withRoutingToken(com.datastax.oss.driver.api.core.metadata.token.Token)",
+ "justification": "JAVA-2164: Rename statement builder methods to setXxx"
+ },
+ {
+ "code": "java.method.removed",
+ "old": "method SelfT com.datastax.oss.driver.api.core.cql.StatementBuilder>, StatementT>, StatementT extends com.datastax.oss.driver.api.core.cql.Statement>>::withSerialConsistencyLevel(com.datastax.oss.driver.api.core.ConsistencyLevel)",
+ "justification": "JAVA-2164: Rename statement builder methods to setXxx"
+ },
+ {
+ "code": "java.method.removed",
+ "old": "method SelfT com.datastax.oss.driver.api.core.cql.StatementBuilder>, StatementT>, StatementT extends com.datastax.oss.driver.api.core.cql.Statement>>::withTimeout(java.time.Duration)",
+ "justification": "JAVA-2164: Rename statement builder methods to setXxx"
+ },
+ {
+ "code": "java.method.removed",
+ "old": "method SelfT com.datastax.oss.driver.api.core.cql.StatementBuilder>, StatementT>, StatementT extends com.datastax.oss.driver.api.core.cql.Statement>>::withTimestamp(long)",
+ "justification": "JAVA-2164: Rename statement builder methods to setXxx"
+ },
+ {
+ "code": "java.method.removed",
+ "old": "method SelfT com.datastax.oss.driver.api.core.cql.StatementBuilder>, StatementT>, StatementT extends com.datastax.oss.driver.api.core.cql.Statement>>::withTracing()",
+ "justification": "JAVA-2164: Rename statement builder methods to setXxx"
+ },
+ {
+ "code": "java.method.parameterTypeChanged",
+ "old": "parameter void com.datastax.oss.driver.api.core.UnsupportedProtocolVersionException::(===java.net.SocketAddress===, java.lang.String, java.util.List)",
+ "new": "parameter void com.datastax.oss.driver.api.core.UnsupportedProtocolVersionException::(===com.datastax.oss.driver.api.core.metadata.EndPoint===, java.lang.String, java.util.List)",
+ "justification": "JAVA-2165: Abstract node connection information"
+ },
+ {
+ "code": "java.method.parameterTypeChanged",
+ "old": "parameter com.datastax.oss.driver.api.core.UnsupportedProtocolVersionException com.datastax.oss.driver.api.core.UnsupportedProtocolVersionException::forNegotiation(===java.net.SocketAddress===, java.util.List)",
+ "new": "parameter com.datastax.oss.driver.api.core.UnsupportedProtocolVersionException com.datastax.oss.driver.api.core.UnsupportedProtocolVersionException::forNegotiation(===com.datastax.oss.driver.api.core.metadata.EndPoint===, java.util.List)",
+ "justification": "JAVA-2165: Abstract node connection information"
+ },
+ {
+ "code": "java.method.parameterTypeChanged",
+ "old": "parameter com.datastax.oss.driver.api.core.UnsupportedProtocolVersionException com.datastax.oss.driver.api.core.UnsupportedProtocolVersionException::forSingleAttempt(===java.net.SocketAddress===, com.datastax.oss.driver.api.core.ProtocolVersion)",
+ "new": "parameter com.datastax.oss.driver.api.core.UnsupportedProtocolVersionException com.datastax.oss.driver.api.core.UnsupportedProtocolVersionException::forSingleAttempt(===com.datastax.oss.driver.api.core.metadata.EndPoint===, com.datastax.oss.driver.api.core.ProtocolVersion)",
+ "justification": "JAVA-2165: Abstract node connection information"
+ },
+ {
+ "code": "java.method.removed",
+ "old": "method java.net.SocketAddress com.datastax.oss.driver.api.core.UnsupportedProtocolVersionException::getAddress()",
+ "justification": "JAVA-2165: Abstract node connection information"
+ },
+ {
+ "code": "java.method.parameterTypeChanged",
+ "old": "parameter com.datastax.oss.driver.api.core.auth.Authenticator com.datastax.oss.driver.api.core.auth.AuthProvider::newAuthenticator(===java.net.SocketAddress===, java.lang.String) throws com.datastax.oss.driver.api.core.auth.AuthenticationException",
+ "new": "parameter com.datastax.oss.driver.api.core.auth.Authenticator com.datastax.oss.driver.api.core.auth.AuthProvider::newAuthenticator(===com.datastax.oss.driver.api.core.metadata.EndPoint===, java.lang.String) throws com.datastax.oss.driver.api.core.auth.AuthenticationException",
+ "justification": "JAVA-2165: Abstract node connection information"
+ },
+ {
+ "code": "java.method.parameterTypeChanged",
+ "old": "parameter void com.datastax.oss.driver.api.core.auth.AuthProvider::onMissingChallenge(===java.net.SocketAddress===) throws com.datastax.oss.driver.api.core.auth.AuthenticationException",
+ "new": "parameter void com.datastax.oss.driver.api.core.auth.AuthProvider::onMissingChallenge(===com.datastax.oss.driver.api.core.metadata.EndPoint===) throws com.datastax.oss.driver.api.core.auth.AuthenticationException",
+ "justification": "JAVA-2165: Abstract node connection information"
+ },
+ {
+ "code": "java.method.parameterTypeChanged",
+ "old": "parameter void com.datastax.oss.driver.api.core.auth.AuthenticationException::(===java.net.SocketAddress===, java.lang.String)",
+ "new": "parameter void com.datastax.oss.driver.api.core.auth.AuthenticationException::(===com.datastax.oss.driver.api.core.metadata.EndPoint===, java.lang.String)",
+ "justification": "JAVA-2165: Abstract node connection information"
+ },
+ {
+ "code": "java.method.parameterTypeChanged",
+ "old": "parameter void com.datastax.oss.driver.api.core.auth.AuthenticationException::(===java.net.SocketAddress===, java.lang.String, java.lang.Throwable)",
+ "new": "parameter void com.datastax.oss.driver.api.core.auth.AuthenticationException::(===com.datastax.oss.driver.api.core.metadata.EndPoint===, java.lang.String, java.lang.Throwable)",
+ "justification": "JAVA-2165: Abstract node connection information"
+ },
+ {
+ "code": "java.method.removed",
+ "old": "method java.net.SocketAddress com.datastax.oss.driver.api.core.auth.AuthenticationException::getAddress()",
+ "justification": "JAVA-2165: Abstract node connection information"
+ },
+ {
+ "code": "java.method.numberOfParametersChanged",
+ "old": "method void com.datastax.oss.driver.api.core.loadbalancing.LoadBalancingPolicy::init(java.util.Map, com.datastax.oss.driver.api.core.loadbalancing.LoadBalancingPolicy.DistanceReporter, java.util.Set)",
+ "new": "method void com.datastax.oss.driver.api.core.loadbalancing.LoadBalancingPolicy::init(java.util.Map, com.datastax.oss.driver.api.core.loadbalancing.LoadBalancingPolicy.DistanceReporter)",
+ "justification": "JAVA-2165: Abstract node connection information"
+ },
+ {
+ "code": "java.method.returnTypeTypeParametersChanged",
+ "old": "method java.util.Map com.datastax.oss.driver.api.core.metadata.Metadata::getNodes()",
+ "new": "method java.util.Map com.datastax.oss.driver.api.core.metadata.Metadata::getNodes()",
+ "justification": "JAVA-2165: Abstract node connection information"
+ },
+ {
+ "code": "java.method.addedToInterface",
+ "new": "method java.util.Optional com.datastax.oss.driver.api.core.metadata.Node::getBroadcastRpcAddress()",
+ "justification": "JAVA-2165: Abstract node connection information"
+ },
+ {
+ "code": "java.method.removed",
+ "old": "method java.net.InetSocketAddress com.datastax.oss.driver.api.core.metadata.Node::getConnectAddress()",
+ "justification": "JAVA-2165: Abstract node connection information"
+ },
+ {
+ "code": "java.method.addedToInterface",
+ "new": "method com.datastax.oss.driver.api.core.metadata.EndPoint com.datastax.oss.driver.api.core.metadata.Node::getEndPoint()",
+ "package": "com.datastax.oss.driver.api.core.metadata",
+ "justification": "JAVA-2165: Abstract node connection information"
+ },
+ {
+ "code": "java.method.parameterTypeChanged",
+ "old": "parameter javax.net.ssl.SSLEngine com.datastax.oss.driver.api.core.ssl.SslEngineFactory::newSslEngine(===java.net.SocketAddress===)",
+ "new": "parameter javax.net.ssl.SSLEngine com.datastax.oss.driver.api.core.ssl.SslEngineFactory::newSslEngine(===com.datastax.oss.driver.api.core.metadata.EndPoint===)",
+ "justification": "JAVA-2165: Abstract node connection information"
+ },
+ {
+ "code": "java.method.addedToInterface",
+ "new": "method long com.datastax.oss.driver.api.core.cql.Statement>>::getQueryTimestamp()",
+ "justification": "JAVA-2143: Rename Statement.setTimestamp() to setQueryTimestamp()"
+ },
+ {
+ "code": "java.method.removed",
+ "old": "method long com.datastax.oss.driver.api.core.cql.Statement>>::getTimestamp()",
+ "justification": "JAVA-2143: Rename Statement.setTimestamp() to setQueryTimestamp()"
+ },
+ {
+ "code": "java.method.addedToInterface",
+ "new": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setQueryTimestamp(long)",
+ "justification": "JAVA-2143: Rename Statement.setTimestamp() to setQueryTimestamp()"
+ },
+ {
+ "code": "java.method.removed",
+ "old": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setTimestamp(long)",
+ "justification": "JAVA-2143: Rename Statement.setTimestamp() to setQueryTimestamp()"
+ },
+ {
+ "code": "java.annotation.added",
+ "old": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::copy(java.nio.ByteBuffer) @ com.datastax.oss.driver.api.core.cql.BatchStatement",
+ "new": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::copy(java.nio.ByteBuffer) @ com.datastax.oss.driver.api.core.cql.BatchStatement",
+ "annotation": "@edu.umd.cs.findbugs.annotations.CheckReturnValue",
+ "justification": "JAVA-2161: Annotate mutating methods with @CheckReturnValue"
+ },
+ {
+ "code": "java.annotation.added",
+ "old": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setConsistencyLevel(com.datastax.oss.driver.api.core.ConsistencyLevel) @ com.datastax.oss.driver.api.core.cql.BatchStatement",
+ "new": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setConsistencyLevel(com.datastax.oss.driver.api.core.ConsistencyLevel) @ com.datastax.oss.driver.api.core.cql.BatchStatement",
+ "annotation": "@edu.umd.cs.findbugs.annotations.CheckReturnValue",
+ "justification": "JAVA-2161: Annotate mutating methods with @CheckReturnValue"
+ },
+ {
+ "code": "java.annotation.added",
+ "old": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setCustomPayload(java.util.Map) @ com.datastax.oss.driver.api.core.cql.BatchStatement",
+ "new": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setCustomPayload(java.util.Map) @ com.datastax.oss.driver.api.core.cql.BatchStatement",
+ "annotation": "@edu.umd.cs.findbugs.annotations.CheckReturnValue",
+ "justification": "JAVA-2161: Annotate mutating methods with @CheckReturnValue"
+ },
+ {
+ "code": "java.annotation.added",
+ "old": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setExecutionProfile(com.datastax.oss.driver.api.core.config.DriverExecutionProfile) @ com.datastax.oss.driver.api.core.cql.BatchStatement",
+ "new": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setExecutionProfile(com.datastax.oss.driver.api.core.config.DriverExecutionProfile) @ com.datastax.oss.driver.api.core.cql.BatchStatement",
+ "annotation": "@edu.umd.cs.findbugs.annotations.CheckReturnValue",
+ "justification": "JAVA-2161: Annotate mutating methods with @CheckReturnValue"
+ },
+ {
+ "code": "java.annotation.added",
+ "old": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setExecutionProfileName(java.lang.String) @ com.datastax.oss.driver.api.core.cql.BatchStatement",
+ "new": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setExecutionProfileName(java.lang.String) @ com.datastax.oss.driver.api.core.cql.BatchStatement",
+ "annotation": "@edu.umd.cs.findbugs.annotations.CheckReturnValue",
+ "justification": "JAVA-2161: Annotate mutating methods with @CheckReturnValue"
+ },
+ {
+ "code": "java.annotation.added",
+ "old": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setIdempotent(java.lang.Boolean) @ com.datastax.oss.driver.api.core.cql.BatchStatement",
+ "new": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setIdempotent(java.lang.Boolean) @ com.datastax.oss.driver.api.core.cql.BatchStatement",
+ "annotation": "@edu.umd.cs.findbugs.annotations.CheckReturnValue",
+ "justification": "JAVA-2161: Annotate mutating methods with @CheckReturnValue"
+ },
+ {
+ "code": "java.annotation.added",
+ "old": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setNode(com.datastax.oss.driver.api.core.metadata.Node) @ com.datastax.oss.driver.api.core.cql.BatchStatement",
+ "new": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setNode(com.datastax.oss.driver.api.core.metadata.Node) @ com.datastax.oss.driver.api.core.cql.BatchStatement",
+ "annotation": "@edu.umd.cs.findbugs.annotations.CheckReturnValue",
+ "justification": "JAVA-2161: Annotate mutating methods with @CheckReturnValue"
+ },
+ {
+ "code": "java.annotation.added",
+ "old": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setPageSize(int) @ com.datastax.oss.driver.api.core.cql.BatchStatement",
+ "new": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setPageSize(int) @ com.datastax.oss.driver.api.core.cql.BatchStatement",
+ "annotation": "@edu.umd.cs.findbugs.annotations.CheckReturnValue",
+ "justification": "JAVA-2161: Annotate mutating methods with @CheckReturnValue"
+ },
+ {
+ "code": "java.annotation.added",
+ "old": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setPagingState(java.nio.ByteBuffer) @ com.datastax.oss.driver.api.core.cql.BatchStatement",
+ "new": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setPagingState(java.nio.ByteBuffer) @ com.datastax.oss.driver.api.core.cql.BatchStatement",
+ "annotation": "@edu.umd.cs.findbugs.annotations.CheckReturnValue",
+ "justification": "JAVA-2161: Annotate mutating methods with @CheckReturnValue"
+ },
+ {
+ "code": "java.annotation.added",
+ "old": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setRoutingKey(java.nio.ByteBuffer) @ com.datastax.oss.driver.api.core.cql.BatchStatement",
+ "new": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setRoutingKey(java.nio.ByteBuffer) @ com.datastax.oss.driver.api.core.cql.BatchStatement",
+ "annotation": "@edu.umd.cs.findbugs.annotations.CheckReturnValue",
+ "justification": "JAVA-2161: Annotate mutating methods with @CheckReturnValue"
+ },
+ {
+ "code": "java.annotation.added",
+ "old": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setRoutingKey(java.nio.ByteBuffer[]) @ com.datastax.oss.driver.api.core.cql.BatchStatement",
+ "new": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setRoutingKey(java.nio.ByteBuffer[]) @ com.datastax.oss.driver.api.core.cql.BatchStatement",
+ "annotation": "@edu.umd.cs.findbugs.annotations.CheckReturnValue",
+ "justification": "JAVA-2161: Annotate mutating methods with @CheckReturnValue"
+ },
+ {
+ "code": "java.annotation.added",
+ "old": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setRoutingKeyspace(com.datastax.oss.driver.api.core.CqlIdentifier) @ com.datastax.oss.driver.api.core.cql.BatchStatement",
+ "new": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setRoutingKeyspace(com.datastax.oss.driver.api.core.CqlIdentifier) @ com.datastax.oss.driver.api.core.cql.BatchStatement",
+ "annotation": "@edu.umd.cs.findbugs.annotations.CheckReturnValue",
+ "justification": "JAVA-2161: Annotate mutating methods with @CheckReturnValue"
+ },
+ {
+ "code": "java.annotation.added",
+ "old": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setRoutingKeyspace(java.lang.String) @ com.datastax.oss.driver.api.core.cql.BatchStatement",
+ "new": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setRoutingKeyspace(java.lang.String) @ com.datastax.oss.driver.api.core.cql.BatchStatement",
+ "annotation": "@edu.umd.cs.findbugs.annotations.CheckReturnValue",
+ "justification": "JAVA-2161: Annotate mutating methods with @CheckReturnValue"
+ },
+ {
+ "code": "java.annotation.added",
+ "old": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setRoutingToken(com.datastax.oss.driver.api.core.metadata.token.Token) @ com.datastax.oss.driver.api.core.cql.BatchStatement",
+ "new": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setRoutingToken(com.datastax.oss.driver.api.core.metadata.token.Token) @ com.datastax.oss.driver.api.core.cql.BatchStatement",
+ "annotation": "@edu.umd.cs.findbugs.annotations.CheckReturnValue",
+ "justification": "JAVA-2161: Annotate mutating methods with @CheckReturnValue"
+ },
+ {
+ "code": "java.annotation.added",
+ "old": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setSerialConsistencyLevel(com.datastax.oss.driver.api.core.ConsistencyLevel) @ com.datastax.oss.driver.api.core.cql.BatchStatement",
+ "new": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setSerialConsistencyLevel(com.datastax.oss.driver.api.core.ConsistencyLevel) @ com.datastax.oss.driver.api.core.cql.BatchStatement",
+ "annotation": "@edu.umd.cs.findbugs.annotations.CheckReturnValue",
+ "justification": "JAVA-2161: Annotate mutating methods with @CheckReturnValue"
+ },
+ {
+ "code": "java.annotation.added",
+ "old": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setTimeout(java.time.Duration) @ com.datastax.oss.driver.api.core.cql.BatchStatement",
+ "new": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setTimeout(java.time.Duration) @ com.datastax.oss.driver.api.core.cql.BatchStatement",
+ "annotation": "@edu.umd.cs.findbugs.annotations.CheckReturnValue",
+ "justification": "JAVA-2161: Annotate mutating methods with @CheckReturnValue"
+ },
+ {
+ "code": "java.annotation.added",
+ "old": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setTracing(boolean) @ com.datastax.oss.driver.api.core.cql.BatchStatement",
+ "new": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setTracing(boolean) @ com.datastax.oss.driver.api.core.cql.BatchStatement",
+ "annotation": "@edu.umd.cs.findbugs.annotations.CheckReturnValue",
+ "justification": "JAVA-2161: Annotate mutating methods with @CheckReturnValue"
+ },
+ {
+ "code": "java.annotation.added",
+ "old": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::copy(java.nio.ByteBuffer) @ com.datastax.oss.driver.api.core.cql.BatchableStatement>>",
+ "new": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::copy(java.nio.ByteBuffer) @ com.datastax.oss.driver.api.core.cql.BatchableStatement>>",
+ "annotation": "@edu.umd.cs.findbugs.annotations.CheckReturnValue",
+ "justification": "JAVA-2161: Annotate mutating methods with @CheckReturnValue"
+ },
+ {
+ "code": "java.annotation.added",
+ "old": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setConsistencyLevel(com.datastax.oss.driver.api.core.ConsistencyLevel) @ com.datastax.oss.driver.api.core.cql.BatchableStatement>>",
+ "new": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setConsistencyLevel(com.datastax.oss.driver.api.core.ConsistencyLevel) @ com.datastax.oss.driver.api.core.cql.BatchableStatement>>",
+ "annotation": "@edu.umd.cs.findbugs.annotations.CheckReturnValue",
+ "justification": "JAVA-2161: Annotate mutating methods with @CheckReturnValue"
+ },
+ {
+ "code": "java.annotation.added",
+ "old": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setCustomPayload(java.util.Map) @ com.datastax.oss.driver.api.core.cql.BatchableStatement>>",
+ "new": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setCustomPayload(java.util.Map) @ com.datastax.oss.driver.api.core.cql.BatchableStatement>>",
+ "annotation": "@edu.umd.cs.findbugs.annotations.CheckReturnValue",
+ "justification": "JAVA-2161: Annotate mutating methods with @CheckReturnValue"
+ },
+ {
+ "code": "java.annotation.added",
+ "old": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setExecutionProfile(com.datastax.oss.driver.api.core.config.DriverExecutionProfile) @ com.datastax.oss.driver.api.core.cql.BatchableStatement>>",
+ "new": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setExecutionProfile(com.datastax.oss.driver.api.core.config.DriverExecutionProfile) @ com.datastax.oss.driver.api.core.cql.BatchableStatement>>",
+ "annotation": "@edu.umd.cs.findbugs.annotations.CheckReturnValue",
+ "justification": "JAVA-2161: Annotate mutating methods with @CheckReturnValue"
+ },
+ {
+ "code": "java.annotation.added",
+ "old": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setExecutionProfileName(java.lang.String) @ com.datastax.oss.driver.api.core.cql.BatchableStatement>>",
+ "new": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setExecutionProfileName(java.lang.String) @ com.datastax.oss.driver.api.core.cql.BatchableStatement>>",
+ "annotation": "@edu.umd.cs.findbugs.annotations.CheckReturnValue",
+ "justification": "JAVA-2161: Annotate mutating methods with @CheckReturnValue"
+ },
+ {
+ "code": "java.annotation.added",
+ "old": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setIdempotent(java.lang.Boolean) @ com.datastax.oss.driver.api.core.cql.BatchableStatement>>",
+ "new": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setIdempotent(java.lang.Boolean) @ com.datastax.oss.driver.api.core.cql.BatchableStatement>>",
+ "annotation": "@edu.umd.cs.findbugs.annotations.CheckReturnValue",
+ "justification": "JAVA-2161: Annotate mutating methods with @CheckReturnValue"
+ },
+ {
+ "code": "java.annotation.added",
+ "old": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setNode(com.datastax.oss.driver.api.core.metadata.Node) @ com.datastax.oss.driver.api.core.cql.BatchableStatement>>",
+ "new": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setNode(com.datastax.oss.driver.api.core.metadata.Node) @ com.datastax.oss.driver.api.core.cql.BatchableStatement>>",
+ "annotation": "@edu.umd.cs.findbugs.annotations.CheckReturnValue",
+ "justification": "JAVA-2161: Annotate mutating methods with @CheckReturnValue"
+ },
+ {
+ "code": "java.annotation.added",
+ "old": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setPageSize(int) @ com.datastax.oss.driver.api.core.cql.BatchableStatement>>",
+ "new": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setPageSize(int) @ com.datastax.oss.driver.api.core.cql.BatchableStatement>>",
+ "annotation": "@edu.umd.cs.findbugs.annotations.CheckReturnValue",
+ "justification": "JAVA-2161: Annotate mutating methods with @CheckReturnValue"
+ },
+ {
+ "code": "java.annotation.added",
+ "old": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setPagingState(java.nio.ByteBuffer) @ com.datastax.oss.driver.api.core.cql.BatchableStatement>>",
+ "new": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setPagingState(java.nio.ByteBuffer) @ com.datastax.oss.driver.api.core.cql.BatchableStatement>>",
+ "annotation": "@edu.umd.cs.findbugs.annotations.CheckReturnValue",
+ "justification": "JAVA-2161: Annotate mutating methods with @CheckReturnValue"
+ },
+ {
+ "code": "java.annotation.added",
+ "old": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setRoutingKey(java.nio.ByteBuffer) @ com.datastax.oss.driver.api.core.cql.BatchableStatement>>",
+ "new": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setRoutingKey(java.nio.ByteBuffer) @ com.datastax.oss.driver.api.core.cql.BatchableStatement>>",
+ "annotation": "@edu.umd.cs.findbugs.annotations.CheckReturnValue",
+ "justification": "JAVA-2161: Annotate mutating methods with @CheckReturnValue"
+ },
+ {
+ "code": "java.annotation.added",
+ "old": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setRoutingKey(java.nio.ByteBuffer[]) @ com.datastax.oss.driver.api.core.cql.BatchableStatement>>",
+ "new": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setRoutingKey(java.nio.ByteBuffer[]) @ com.datastax.oss.driver.api.core.cql.BatchableStatement>>",
+ "annotation": "@edu.umd.cs.findbugs.annotations.CheckReturnValue",
+ "justification": "JAVA-2161: Annotate mutating methods with @CheckReturnValue"
+ },
+ {
+ "code": "java.annotation.added",
+ "old": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setRoutingKeyspace(com.datastax.oss.driver.api.core.CqlIdentifier) @ com.datastax.oss.driver.api.core.cql.BatchableStatement>>",
+ "new": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setRoutingKeyspace(com.datastax.oss.driver.api.core.CqlIdentifier) @ com.datastax.oss.driver.api.core.cql.BatchableStatement>>",
+ "annotation": "@edu.umd.cs.findbugs.annotations.CheckReturnValue",
+ "justification": "JAVA-2161: Annotate mutating methods with @CheckReturnValue"
+ },
+ {
+ "code": "java.annotation.added",
+ "old": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setRoutingKeyspace(java.lang.String) @ com.datastax.oss.driver.api.core.cql.BatchableStatement>>",
+ "new": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setRoutingKeyspace(java.lang.String) @ com.datastax.oss.driver.api.core.cql.BatchableStatement>>",
+ "annotation": "@edu.umd.cs.findbugs.annotations.CheckReturnValue",
+ "justification": "JAVA-2161: Annotate mutating methods with @CheckReturnValue"
+ },
+ {
+ "code": "java.annotation.added",
+ "old": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setRoutingToken(com.datastax.oss.driver.api.core.metadata.token.Token) @ com.datastax.oss.driver.api.core.cql.BatchableStatement>>",
+ "new": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setRoutingToken(com.datastax.oss.driver.api.core.metadata.token.Token) @ com.datastax.oss.driver.api.core.cql.BatchableStatement>>",
+ "annotation": "@edu.umd.cs.findbugs.annotations.CheckReturnValue",
+ "justification": "JAVA-2161: Annotate mutating methods with @CheckReturnValue"
+ },
+ {
+ "code": "java.annotation.added",
+ "old": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setSerialConsistencyLevel(com.datastax.oss.driver.api.core.ConsistencyLevel) @ com.datastax.oss.driver.api.core.cql.BatchableStatement>>",
+ "new": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setSerialConsistencyLevel(com.datastax.oss.driver.api.core.ConsistencyLevel) @ com.datastax.oss.driver.api.core.cql.BatchableStatement>>",
+ "annotation": "@edu.umd.cs.findbugs.annotations.CheckReturnValue",
+ "justification": "JAVA-2161: Annotate mutating methods with @CheckReturnValue"
+ },
+ {
+ "code": "java.annotation.added",
+ "old": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setTimeout(java.time.Duration) @ com.datastax.oss.driver.api.core.cql.BatchableStatement>>",
+ "new": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setTimeout(java.time.Duration) @ com.datastax.oss.driver.api.core.cql.BatchableStatement>>",
+ "annotation": "@edu.umd.cs.findbugs.annotations.CheckReturnValue",
+ "justification": "JAVA-2161: Annotate mutating methods with @CheckReturnValue"
+ },
+ {
+ "code": "java.annotation.added",
+ "old": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setTracing(boolean) @ com.datastax.oss.driver.api.core.cql.BatchableStatement>>",
+ "new": "method SelfT com.datastax.oss.driver.api.core.cql.Statement>>::setTracing(boolean) @ com.datastax.oss.driver.api.core.cql.BatchableStatement>>",
+ "annotation": "@edu.umd.cs.findbugs.annotations.CheckReturnValue",
+ "justification": "JAVA-2161: Annotate mutating methods with @CheckReturnValue"
+ },
+ {
+ "code": "java.annotation.added",
+ "old": "method SelfT com.datastax.oss.driver.api.core.data.SettableById>>::set(com.datastax.oss.driver.api.core.CqlIdentifier, ValueT, com.datastax.oss.driver.api.core.type.codec.TypeCodec) @ com.datastax.oss.driver.api.core.cql.Bindable>>",
+ "new": "method SelfT com.datastax.oss.driver.api.core.data.SettableById>>::set(com.datastax.oss.driver.api.core.CqlIdentifier, ValueT, com.datastax.oss.driver.api.core.type.codec.TypeCodec) @ com.datastax.oss.driver.api.core.cql.Bindable>>",
+ "annotation": "@edu.umd.cs.findbugs.annotations.CheckReturnValue",
+ "justification": "JAVA-2161: Annotate mutating methods with @CheckReturnValue"
+ },
+ {
+ "code": "java.annotation.added",
+ "old": "method SelfT com.datastax.oss.driver.api.core.data.SettableById>>::set(com.datastax.oss.driver.api.core.CqlIdentifier, ValueT, com.datastax.oss.driver.api.core.type.reflect.GenericType) @ com.datastax.oss.driver.api.core.cql.Bindable>>",
+ "new": "method SelfT com.datastax.oss.driver.api.core.data.SettableById>>::set(com.datastax.oss.driver.api.core.CqlIdentifier, ValueT, com.datastax.oss.driver.api.core.type.reflect.GenericType) @ com.datastax.oss.driver.api.core.cql.Bindable>>",
+ "annotation": "@edu.umd.cs.findbugs.annotations.CheckReturnValue",
+ "justification": "JAVA-2161: Annotate mutating methods with @CheckReturnValue"
+ },
+ {
+ "code": "java.annotation.added",
+ "old": "method SelfT com.datastax.oss.driver.api.core.data.SettableById>>::set(com.datastax.oss.driver.api.core.CqlIdentifier, ValueT, java.lang.Class) @ com.datastax.oss.driver.api.core.cql.Bindable>>",
+ "new": "method SelfT com.datastax.oss.driver.api.core.data.SettableById>>::set(com.datastax.oss.driver.api.core.CqlIdentifier, ValueT, java.lang.Class) @ com.datastax.oss.driver.api.core.cql.Bindable>>",
+ "annotation": "@edu.umd.cs.findbugs.annotations.CheckReturnValue",
+ "justification": "JAVA-2161: Annotate mutating methods with @CheckReturnValue"
+ },
+ {
+ "code": "java.annotation.added",
+ "old": "method SelfT com.datastax.oss.driver.api.core.data.SettableByIndex>>::set(int, ValueT, com.datastax.oss.driver.api.core.type.codec.TypeCodec) @ com.datastax.oss.driver.api.core.cql.Bindable>>",
+ "new": "method SelfT com.datastax.oss.driver.api.core.data.SettableByIndex>>::set(int, ValueT, com.datastax.oss.driver.api.core.type.codec.TypeCodec) @ com.datastax.oss.driver.api.core.cql.Bindable>>",
+ "annotation": "@edu.umd.cs.findbugs.annotations.CheckReturnValue",
+ "justification": "JAVA-2161: Annotate mutating methods with @CheckReturnValue"
+ },
+ {
+ "code": "java.annotation.added",
+ "old": "method SelfT com.datastax.oss.driver.api.core.data.SettableByIndex>>::set(int, ValueT, com.datastax.oss.driver.api.core.type.reflect.GenericType) @ com.datastax.oss.driver.api.core.cql.Bindable>>",
+ "new": "method SelfT com.datastax.oss.driver.api.core.data.SettableByIndex>>::set(int, ValueT, com.datastax.oss.driver.api.core.type.reflect.GenericType) @ com.datastax.oss.driver.api.core.cql.Bindable>>",
+ "annotation": "@edu.umd.cs.findbugs.annotations.CheckReturnValue",
+ "justification": "JAVA-2161: Annotate mutating methods with @CheckReturnValue"
+ },
+ {
+ "code": "java.annotation.added",
+ "old": "method SelfT com.datastax.oss.driver.api.core.data.SettableByIndex>>::set(int, ValueT, java.lang.Class) @ com.datastax.oss.driver.api.core.cql.Bindable>>",
+ "new": "method SelfT com.datastax.oss.driver.api.core.data.SettableByIndex>>::set(int, ValueT, java.lang.Class) @ com.datastax.oss.driver.api.core.cql.Bindable>>",
+ "annotation": "@edu.umd.cs.findbugs.annotations.CheckReturnValue",
+ "justification": "JAVA-2161: Annotate mutating methods with @CheckReturnValue"
+ },
+ {
+ "code": "java.annotation.added",
+ "old": "method SelfT com.datastax.oss.driver.api.core.data.SettableByName>>::set(java.lang.String, ValueT, com.datastax.oss.driver.api.core.type.codec.TypeCodec) @ com.datastax.oss.driver.api.core.cql.Bindable>>",
+ "new": "method SelfT com.datastax.oss.driver.api.core.data.SettableByName>>::set(java.lang.String, ValueT, com.datastax.oss.driver.api.core.type.codec.TypeCodec) @ com.datastax.oss.driver.api.core.cql.Bindable>>",
+ "annotation": "@edu.umd.cs.findbugs.annotations.CheckReturnValue",
+ "justification": "JAVA-2161: Annotate mutating methods with @CheckReturnValue"
+ },
+ {
+ "code": "java.annotation.added",
+ "old": "method SelfT com.datastax.oss.driver.api.core.data.SettableByName>>::set(java.lang.String, ValueT, com.datastax.oss.driver.api.core.type.reflect.GenericType) @ com.datastax.oss.driver.api.core.cql.Bindable>>",
+ "new": "method SelfT com.datastax.oss.driver.api.core.data.SettableByName>>::set(java.lang.String, ValueT, com.datastax.oss.driver.api.core.type.reflect.GenericType) @ com.datastax.oss.driver.api.core.cql.Bindable>>",
+ "annotation": "@edu.umd.cs.findbugs.annotations.CheckReturnValue",
+ "justification": "JAVA-2161: Annotate mutating methods with @CheckReturnValue"
+ },
+ {
+ "code": "java.annotation.added",
+ "old": "method SelfT com.datastax.oss.driver.api.core.data.SettableByName>>::set(java.lang.String, ValueT, java.lang.Class) @ com.datastax.oss.driver.api.core.cql.Bindable>>",
+ "new": "method SelfT com.datastax.oss.driver.api.core.data.SettableByName>>::set(java.lang.String, ValueT, java.lang.Class) @ com.datastax.oss.driver.api.core.cql.Bindable>>",
+ "annotation": "@edu.umd.cs.findbugs.annotations.CheckReturnValue",
+ "justification": "JAVA-2161: Annotate mutating methods with @CheckReturnValue"
+ },
+ {
+ "code": "java.annotation.added",
+ "old": "method SelfT com.datastax.oss.driver.api.core.data.SettableById>>::setBigDecimal(com.datastax.oss.driver.api.core.CqlIdentifier, java.math.BigDecimal) @ com.datastax.oss.driver.api.core.cql.Bindable>>",
+ "new": "method SelfT com.datastax.oss.driver.api.core.data.SettableById>>::setBigDecimal(com.datastax.oss.driver.api.core.CqlIdentifier, java.math.BigDecimal) @ com.datastax.oss.driver.api.core.cql.Bindable>>",
+ "annotation": "@edu.umd.cs.findbugs.annotations.CheckReturnValue",
+ "justification": "JAVA-2161: Annotate mutating methods with @CheckReturnValue"
+ },
+ {
+ "code": "java.annotation.added",
+ "old": "method SelfT com.datastax.oss.driver.api.core.data.SettableByIndex>>::setBigDecimal(int, java.math.BigDecimal) @ com.datastax.oss.driver.api.core.cql.Bindable>>",
+ "new": "method SelfT com.datastax.oss.driver.api.core.data.SettableByIndex>>::setBigDecimal(int, java.math.BigDecimal) @ com.datastax.oss.driver.api.core.cql.Bindable>>",
+ "annotation": "@edu.umd.cs.findbugs.annotations.CheckReturnValue",
+ "justification": "JAVA-2161: Annotate mutating methods with @CheckReturnValue"
+ },
+ {
+ "code": "java.annotation.added",
+ "old": "method SelfT com.datastax.oss.driver.api.core.data.SettableByName>>::setBigDecimal(java.lang.String, java.math.BigDecimal) @ com.datastax.oss.driver.api.core.cql.Bindable>>",
+ "new": "method SelfT com.datastax.oss.driver.api.core.data.SettableByName>>::setBigDecimal(java.lang.String, java.math.BigDecimal) @ com.datastax.oss.driver.api.core.cql.Bindable>>",
+ "annotation": "@edu.umd.cs.findbugs.annotations.CheckReturnValue",
+ "justification": "JAVA-2161: Annotate mutating methods with @CheckReturnValue"
+ },
+ {
+ "code": "java.annotation.added",
+ "old": "method SelfT com.datastax.oss.driver.api.core.data.SettableById>>::setBigInteger(com.datastax.oss.driver.api.core.CqlIdentifier, java.math.BigInteger) @ com.datastax.oss.driver.api.core.cql.Bindable>>",
+ "new": "method SelfT com.datastax.oss.driver.api.core.data.SettableById>>::setBigInteger(com.datastax.oss.driver.api.core.CqlIdentifier, java.math.BigInteger) @ com.datastax.oss.driver.api.core.cql.Bindable>>",
+ "annotation": "@edu.umd.cs.findbugs.annotations.CheckReturnValue",
+ "justification": "JAVA-2161: Annotate mutating methods with @CheckReturnValue"
+ },
+ {
+ "code": "java.annotation.added",
+ "old": "method SelfT com.datastax.oss.driver.api.core.data.SettableByIndex