diff --git a/.github/workflows/docs-pages.yml b/.github/workflows/docs-pages.yml index 973da8bfaa2..7ec207fad09 100644 --- a/.github/workflows/docs-pages.yml +++ b/.github/workflows/docs-pages.yml @@ -36,10 +36,10 @@ jobs: with: python-version: '3.13' - - name: Set up JDK 8.0 + - name: Set up JDK 11 uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 with: - java-version: '8' + java-version: '11' distribution: 'temurin' - name: Install uv diff --git a/.github/workflows/docs-pr.yml b/.github/workflows/docs-pr.yml index 58143e854f6..744838e1dc3 100644 --- a/.github/workflows/docs-pr.yml +++ b/.github/workflows/docs-pr.yml @@ -31,10 +31,10 @@ jobs: with: python-version: '3.13' - - name: Set up JDK 8.0 + - name: Set up JDK 11 uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 with: - java-version: '8' + java-version: '11' distribution: 'temurin' - name: Install uv @@ -44,4 +44,4 @@ jobs: run: make -C docs setupenv - name: Build docs - run: make -C docs test \ No newline at end of file + run: make -C docs test diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3a55f680e7e..8c1aed7c783 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -39,10 +39,10 @@ jobs: RELEASE_TARGET_TAG: ${{ inputs.target-tag }} run: make checkout-one-commit-before - - name: Set up Java + - name: Set up JDK 11 uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 with: - java-version: '8' + java-version: '11' distribution: 'temurin' server-id: central gpg-private-key: ${{ secrets.GPG_PRIVATE_KEY }} diff --git a/.github/workflows/tests@v1.yml b/.github/workflows/tests@v1.yml index 0f8d9dac934..0e3d9c411be 100644 --- a/.github/workflows/tests@v1.yml +++ b/.github/workflows/tests@v1.yml @@ -35,12 +35,14 @@ jobs: strategy: matrix: - java-version: [8] + java-version: [11, 17] fail-fast: false steps: - name: Checkout source uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1 + with: + persist-credentials: false - name: Set up JDK ${{ matrix.java-version }} uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 @@ -80,7 +82,7 @@ jobs: strategy: matrix: - java-version: [8] + java-version: [11, 17] fail-fast: false steps: @@ -109,14 +111,16 @@ jobs: strategy: matrix: - java-version: [8] + java-version: [11, 17] fail-fast: false steps: - name: Checkout source uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1 + with: + persist-credentials: false - - name: Set up JDK 8 + - name: Set up JDK ${{ matrix.java-version }} uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 with: java-version: ${{ matrix.java-version }} @@ -142,14 +146,14 @@ jobs: uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 if: always() with: - name: test-results + name: test-results-${{ matrix.java-version }} path: "*/**/target/*-reports/*.xml" - name: Parse test results uses: mikepenz/action-junit-report@3585e9575db828022551b4231f165eb59a0e74e3 # v5.6.2 if: always() with: - check_name: Unit tests report + check_name: Unit tests report (JDK ${{ matrix.java-version }}) require_tests: true report_paths: "*/**/target/*-reports/*.xml" follow_symlink: true @@ -180,8 +184,13 @@ jobs: strategy: matrix: cassandra-version: [3-LATEST, 4-LATEST] - java-version: [8] + java-version: [11, 17] test-group: [parallelizable, serial, isolated] + exclude: + - cassandra-version: 3-LATEST + java-version: 17 + - cassandra-version: 4-LATEST + java-version: 11 fail-fast: false steps: @@ -212,6 +221,7 @@ jobs: id: cassandra-version env: CASSANDRA_VERSION: ${{ matrix.cassandra-version }} + GET_VERSION_VERSION: 0.4.5 GH_TOKEN: ${{ github.token }} run: make resolve-cassandra-version @@ -226,6 +236,7 @@ jobs: if: steps.ccm-cache.outputs.cache-hit != 'true' env: CASSANDRA_VERSION_RESOLVED: ${{ steps.cassandra-version.outputs.value }} + GET_VERSION_VERSION: 0.4.5 run: make download-cassandra - name: Save CCM image into the cache @@ -249,6 +260,7 @@ jobs: env: CASSANDRA_VERSION: ${{ matrix.cassandra-version }} CASSANDRA_VERSION_RESOLVED: ${{ steps.cassandra-version.outputs.value }} + GET_VERSION_VERSION: 0.4.5 GH_TOKEN: ${{ github.token }} MAVEN_EXTRA_ARGS: ${{ steps.test-skip-args.outputs.value }} run: make test-integration-cassandra @@ -278,7 +290,7 @@ jobs: uses: mikepenz/action-junit-report@3585e9575db828022551b4231f165eb59a0e74e3 # v5.6.2 if: always() with: - check_name: Integration tests report for Cassandra ${{ steps.cassandra-version.outputs.value }} (${{ matrix.test-group }}) + check_name: Integration tests report for Cassandra ${{ steps.cassandra-version.outputs.value }} (${{ matrix.test-group }}, JDK ${{ matrix.java-version }}) require_tests: true report_paths: "*/**/target/*-reports/*.xml" follow_symlink: true @@ -295,8 +307,15 @@ jobs: strategy: matrix: scylla-version: [LTS-LATEST, LTS-PRIOR, LATEST] - java-version: [8] + java-version: [11, 17] test-group: [parallelizable, serial, isolated] + exclude: + - scylla-version: LTS-PRIOR + java-version: 17 + - scylla-version: LTS-LATEST + java-version: 17 + - scylla-version: LATEST + java-version: 11 fail-fast: false steps: @@ -391,7 +410,7 @@ jobs: uses: mikepenz/action-junit-report@3585e9575db828022551b4231f165eb59a0e74e3 # v5.6.2 if: always() with: - check_name: Integration tests report for Scylla ${{ steps.scylla-version.outputs.value }} (${{ matrix.test-group }}) + check_name: Integration tests report for Scylla ${{ steps.scylla-version.outputs.value }} (${{ matrix.test-group }}, JDK ${{ matrix.java-version }}) require_tests: true report_paths: "*/**/target/*-reports/*.xml" follow_symlink: true diff --git a/.mvn/jvm.config b/.mvn/jvm.config new file mode 100644 index 00000000000..c3ad3948530 --- /dev/null +++ b/.mvn/jvm.config @@ -0,0 +1,11 @@ +--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED +--add-exports=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED +--add-exports=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED +--add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED +--add-exports=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED +--add-exports=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED +--add-exports=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED +--add-exports=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED +--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED +--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED +--add-exports=jdk.compiler/com.sun.tools.javac.jvm=ALL-UNNAMED diff --git a/LICENSE_binary b/LICENSE_binary index b59c6ec22bb..b4e9444159b 100644 --- a/LICENSE_binary +++ b/LICENSE_binary @@ -222,7 +222,7 @@ Copyright (C) 2018 Christian Stein This product includes software developed by Christian Stein see ci/install-jdk.sh -This product bundles Java Native Runtime - POSIX 3.1.15, +This product bundles Java Native Runtime - POSIX 3.1.22, which is available under the Eclipse Public License version 2.0. see licenses/jnr-posix.txt @@ -234,14 +234,14 @@ This product bundles ASM 9.2: a very small and fast Java bytecode manipulation f which is available under the 3-Clause BSD License. see licenses/asm.txt -This product bundles HdrHistogram 2.1.12: A High Dynamic Range (HDR) Histogram, +This product bundles HdrHistogram 2.2.2: A High Dynamic Range (HDR) Histogram, which is available under the 2-Clause BSD License. see licenses/HdrHistogram.txt -This product bundles The Simple Logging Facade for Java (SLF4J) API 1.7.26, +This product bundles The Simple Logging Facade for Java (SLF4J) API 2.0.18, which is available under the MIT License. see licenses/slf4j-api.txt -This product bundles Reactive Streams 1.0.3, +This product bundles Reactive Streams 1.0.4, which is available under the MIT License. see licenses/reactive-streams.txt diff --git a/README-dev.md b/README-dev.md index 5b8c85c6f92..07a4673f8a2 100644 --- a/README-dev.md +++ b/README-dev.md @@ -6,7 +6,7 @@ To build the documentation of this project, you need a UNIX-based operating syst You also need the following software installed to generate the reference documentation of the driver: -- Java JDK 8 or higher +- Java JDK 11 or higher - Maven Once you have installed the above software, you can build and preview the documentation by following the steps outlined in the `Quickstart guide `_. diff --git a/README.md b/README.md index 97447249ca0..cc0e3f8fae1 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ builder](manual/query_builder/), [mapper](manual/mapper)). The driver is compatible with Scylla and Apache Cassandra® 2.1 and higher. -It requires Java 8 or higher. +It requires Java 11 or higher. ## Migrating from previous versions diff --git a/core-shaded/pom.xml b/core-shaded/pom.xml index bf776b91e67..7775d4ad2a7 100644 --- a/core-shaded/pom.xml +++ b/core-shaded/pom.xml @@ -280,6 +280,9 @@ maven-javadoc-plugin + + true + attach-javadocs diff --git a/core/src/main/java/com/datastax/dse/driver/api/core/data/time/DateRangePrecision.java b/core/src/main/java/com/datastax/dse/driver/api/core/data/time/DateRangePrecision.java index ce811466c38..a0b5d0e5500 100644 --- a/core/src/main/java/com/datastax/dse/driver/api/core/data/time/DateRangePrecision.java +++ b/core/src/main/java/com/datastax/dse/driver/api/core/data/time/DateRangePrecision.java @@ -131,9 +131,9 @@ public enum DateRangePrecision { private final ChronoUnit roundingUnit; // The formatter is only used for formatting (parsing is done with DateRangeUtil.parseCalendar to // be exactly the same as DSE's). - // If that ever were to change, note that DateTimeFormatters with a time zone have a parsing bug - // in Java 8: the formatter's zone will always be used, even if the input string specifies one - // explicitly. + // If that ever were to change, note that DateTimeFormatters with a time zone had a parsing bug + // on older JDKs: the formatter's zone would always be used, even if the input string specified + // one explicitly. // See https://stackoverflow.com/questions/41999421 private final DateTimeFormatter formatter; diff --git a/core/src/main/java/com/datastax/dse/driver/internal/core/graph/GraphSON2SerdeTP.java b/core/src/main/java/com/datastax/dse/driver/internal/core/graph/GraphSON2SerdeTP.java index d79afc71822..05e09b018ab 100644 --- a/core/src/main/java/com/datastax/dse/driver/internal/core/graph/GraphSON2SerdeTP.java +++ b/core/src/main/java/com/datastax/dse/driver/internal/core/graph/GraphSON2SerdeTP.java @@ -403,7 +403,7 @@ static final class ObjectGraphNodeGraphSON2Serializer extends StdSerializer new Date().getTime(), + System::currentTimeMillis, insightsConfiguration, new PlatformInfoFinder(), new ReconnectionPolicyInfoFinder(), diff --git a/core/src/main/java/com/datastax/dse/driver/internal/core/insights/PackageUtil.java b/core/src/main/java/com/datastax/dse/driver/internal/core/insights/PackageUtil.java index 3c61dec4f20..c7e15bbdfae 100644 --- a/core/src/main/java/com/datastax/dse/driver/internal/core/insights/PackageUtil.java +++ b/core/src/main/java/com/datastax/dse/driver/internal/core/insights/PackageUtil.java @@ -18,9 +18,6 @@ package com.datastax.dse.driver.internal.core.insights; import com.datastax.oss.driver.shaded.guava.common.annotations.VisibleForTesting; -import com.datastax.oss.driver.shaded.guava.common.base.Joiner; -import java.util.Arrays; -import java.util.regex.Pattern; class PackageUtil { static final String DEFAULT_SPECULATIVE_EXECUTION_PACKAGE = @@ -28,8 +25,6 @@ class PackageUtil { static final String DEFAULT_LOAD_BALANCING_PACKAGE = "com.datastax.oss.driver.internal.core.loadbalancing"; static final String DEFAULT_AUTH_PROVIDER_PACKAGE = "com.datastax.oss.driver.internal.core.auth"; - private static final Pattern PACKAGE_SPLIT_REGEX = Pattern.compile("\\."); - private static final Joiner DOT_JOINER = Joiner.on("."); static String getNamespace(Class tClass) { String namespace = ""; @@ -61,18 +56,14 @@ private static ClassSettingDetails getClassSettingDetails( @VisibleForTesting static String getClassName(String classSetting) { - String[] split = PACKAGE_SPLIT_REGEX.split(classSetting); - if (split.length == 0) { - return ""; - } - return split[split.length - 1]; + int lastDot = classSetting.lastIndexOf('.'); + return lastDot < 0 ? classSetting : classSetting.substring(lastDot + 1); } @VisibleForTesting static String getFullPackageOrDefault(String classSetting, String defaultValue) { - String[] split = PACKAGE_SPLIT_REGEX.split(classSetting); - if (split.length <= 1) return defaultValue; - return DOT_JOINER.join(Arrays.copyOf(split, split.length - 1)); + int lastDot = classSetting.lastIndexOf('.'); + return lastDot < 0 ? defaultValue : classSetting.substring(0, lastDot); } static class ClassSettingDetails { diff --git a/core/src/main/java/com/datastax/dse/driver/internal/core/insights/PlatformInfoFinder.java b/core/src/main/java/com/datastax/dse/driver/internal/core/insights/PlatformInfoFinder.java index 30d41d40836..84b4d76e8b7 100644 --- a/core/src/main/java/com/datastax/dse/driver/internal/core/insights/PlatformInfoFinder.java +++ b/core/src/main/java/com/datastax/dse/driver/internal/core/insights/PlatformInfoFinder.java @@ -24,6 +24,7 @@ import com.datastax.dse.driver.internal.core.insights.schema.InsightsPlatformInfo.CPUS; import com.datastax.oss.driver.internal.core.os.Native; import com.datastax.oss.driver.shaded.guava.common.annotations.VisibleForTesting; +import com.datastax.oss.driver.shaded.guava.common.base.Splitter; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; @@ -37,11 +38,10 @@ import java.util.Objects; import java.util.Properties; import java.util.function.Function; -import java.util.regex.Pattern; class PlatformInfoFinder { private static final String MAVEN_IGNORE_LINE = "The following files have been resolved:"; - private static final Pattern DEPENDENCY_SPLIT_REGEX = Pattern.compile(":"); + private static final Splitter DEPENDENCY_SPLITTER = Splitter.on(':'); static final String UNVERIFIED_RUNTIME_VERSION = "UNVERIFIED"; private final Function propertiesUrlProvider; @@ -197,11 +197,13 @@ private List extractMavenDependenciesFromFile(InputStream in } private DependencyFromFile extractDependencyFromLine(String line) { - String[] split = DEPENDENCY_SPLIT_REGEX.split(line); - if (split.length == 6) { // case for i.e.: com.github.jnr:jffi:jar:native:1.2.16:compile - return new DependencyFromFile(split[0], split[1], split[4], checkIsOptional(split[5])); + List split = DEPENDENCY_SPLITTER.splitToList(line); + if (split.size() == 6) { // case for i.e.: com.github.jnr:jffi:jar:native:1.2.16:compile + return new DependencyFromFile( + split.get(0), split.get(1), split.get(4), checkIsOptional(split.get(5))); } else { // case for normal: org.ow2.asm:asm:jar:5.0.3:compile - return new DependencyFromFile(split[0], split[1], split[3], checkIsOptional(split[4])); + return new DependencyFromFile( + split.get(0), split.get(1), split.get(3), checkIsOptional(split.get(4))); } } diff --git a/core/src/main/java/com/datastax/dse/driver/internal/core/insights/schema/InsightMetadata.java b/core/src/main/java/com/datastax/dse/driver/internal/core/insights/schema/InsightMetadata.java index cfa2644b0c7..d7397d813aa 100644 --- a/core/src/main/java/com/datastax/dse/driver/internal/core/insights/schema/InsightMetadata.java +++ b/core/src/main/java/com/datastax/dse/driver/internal/core/insights/schema/InsightMetadata.java @@ -68,7 +68,7 @@ public boolean equals(Object o) { } InsightMetadata that = (InsightMetadata) o; return Objects.equals(name, that.name) - && Objects.equals(timestamp, that.timestamp) + && timestamp == that.timestamp && Objects.equals(tags, that.tags) && insightType == that.insightType && Objects.equals(insightMappingId, that.insightMappingId); diff --git a/core/src/main/java/com/datastax/dse/driver/internal/core/metadata/schema/DefaultDseAggregateMetadata.java b/core/src/main/java/com/datastax/dse/driver/internal/core/metadata/schema/DefaultDseAggregateMetadata.java index 52a0b846076..1baa50e7fb8 100644 --- a/core/src/main/java/com/datastax/dse/driver/internal/core/metadata/schema/DefaultDseAggregateMetadata.java +++ b/core/src/main/java/com/datastax/dse/driver/internal/core/metadata/schema/DefaultDseAggregateMetadata.java @@ -64,7 +64,6 @@ public boolean isDeterministic() { } @Override - @Nullable public Optional getDeterministic() { return Optional.ofNullable(deterministic); } diff --git a/core/src/main/java/com/datastax/oss/driver/api/core/CqlIdentifier.java b/core/src/main/java/com/datastax/oss/driver/api/core/CqlIdentifier.java index 82e4c2b30a6..f11d7fa601a 100644 --- a/core/src/main/java/com/datastax/oss/driver/api/core/CqlIdentifier.java +++ b/core/src/main/java/com/datastax/oss/driver/api/core/CqlIdentifier.java @@ -43,7 +43,8 @@ * * Examples: * - * + *
+ * * * * diff --git a/core/src/main/java/com/datastax/oss/driver/api/core/context/DriverContext.java b/core/src/main/java/com/datastax/oss/driver/api/core/context/DriverContext.java index 6f0afd3df8a..0bb7098d445 100644 --- a/core/src/main/java/com/datastax/oss/driver/api/core/context/DriverContext.java +++ b/core/src/main/java/com/datastax/oss/driver/api/core/context/DriverContext.java @@ -49,25 +49,26 @@ public interface DriverContext extends AttachmentPoint { @NonNull String getSessionName(); - /** @return The driver's configuration; never {@code null}. */ + /** Returns the driver's configuration; never {@code null}. */ @NonNull DriverConfig getConfig(); - /** @return The driver's configuration loader; never {@code null}. */ + /** Returns the driver's configuration loader; never {@code null}. */ @NonNull DriverConfigLoader getConfigLoader(); /** - * @return The driver's load balancing policies, keyed by profile name; the returned map is - * guaranteed to never be {@code null} and to always contain an entry for the {@value - * DriverExecutionProfile#DEFAULT_NAME} profile. + * Returns the driver's load balancing policies, keyed by profile name; the returned map is + * guaranteed to never be {@code null} and to always contain an entry for the {@value + * DriverExecutionProfile#DEFAULT_NAME} profile. */ @NonNull Map getLoadBalancingPolicies(); /** + * Returns the driver's load balancing policy for the given profile; never {@code null}. + * * @param profileName the profile name; never {@code null}. - * @return The driver's load balancing policy for the given profile; never {@code null}. */ @NonNull default LoadBalancingPolicy getLoadBalancingPolicy(@NonNull String profileName) { @@ -79,16 +80,17 @@ default LoadBalancingPolicy getLoadBalancingPolicy(@NonNull String profileName) } /** - * @return The driver's retry policies, keyed by profile name; the returned map is guaranteed to - * never be {@code null} and to always contain an entry for the {@value - * DriverExecutionProfile#DEFAULT_NAME} profile. + * Returns the driver's retry policies, keyed by profile name; the returned map is guaranteed to + * never be {@code null} and to always contain an entry for the {@value + * DriverExecutionProfile#DEFAULT_NAME} profile. */ @NonNull Map getRetryPolicies(); /** + * Returns the driver's retry policy for the given profile; never {@code null}. + * * @param profileName the profile name; never {@code null}. - * @return The driver's retry policy for the given profile; never {@code null}. */ @NonNull default RetryPolicy getRetryPolicy(@NonNull String profileName) { @@ -97,16 +99,17 @@ default RetryPolicy getRetryPolicy(@NonNull String profileName) { } /** - * @return The driver's speculative execution policies, keyed by profile name; the returned map is - * guaranteed to never be {@code null} and to always contain an entry for the {@value - * DriverExecutionProfile#DEFAULT_NAME} profile. + * Returns the driver's speculative execution policies, keyed by profile name; the returned map is + * guaranteed to never be {@code null} and to always contain an entry for the {@value + * DriverExecutionProfile#DEFAULT_NAME} profile. */ @NonNull Map getSpeculativeExecutionPolicies(); /** + * Returns the driver's speculative execution policy for the given profile; never {@code null}. + * * @param profileName the profile name; never {@code null}. - * @return The driver's speculative execution policy for the given profile; never {@code null}. */ @NonNull default SpeculativeExecutionPolicy getSpeculativeExecutionPolicy(@NonNull String profileName) { @@ -116,27 +119,27 @@ default SpeculativeExecutionPolicy getSpeculativeExecutionPolicy(@NonNull String : getSpeculativeExecutionPolicies().get(DriverExecutionProfile.DEFAULT_NAME); } - /** @return The driver's timestamp generator; never {@code null}. */ + /** Returns the driver's timestamp generator; never {@code null}. */ @NonNull TimestampGenerator getTimestampGenerator(); - /** @return The driver's reconnection policy; never {@code null}. */ + /** Returns the driver's reconnection policy; never {@code null}. */ @NonNull ReconnectionPolicy getReconnectionPolicy(); - /** @return The driver's address translator; never {@code null}. */ + /** Returns the driver's address translator; never {@code null}. */ @NonNull AddressTranslator getAddressTranslator(); - /** @return The authentication provider, if authentication was configured. */ + /** Returns the authentication provider, if authentication was configured. */ @NonNull Optional getAuthProvider(); - /** @return The SSL engine factory, if SSL was configured. */ + /** Returns the SSL engine factory, if SSL was configured. */ @NonNull Optional getSslEngineFactory(); - /** @return The driver's request tracker; never {@code null}. */ + /** Returns the driver's request tracker; never {@code null}. */ @NonNull RequestTracker getRequestTracker(); @@ -144,15 +147,15 @@ default SpeculativeExecutionPolicy getSpeculativeExecutionPolicy(@NonNull String @NonNull Optional getRequestIdGenerator(); - /** @return The driver's request throttler; never {@code null}. */ + /** Returns the driver's request throttler; never {@code null}. */ @NonNull RequestThrottler getRequestThrottler(); - /** @return The driver's node state listener; never {@code null}. */ + /** Returns the driver's node state listener; never {@code null}. */ @NonNull NodeStateListener getNodeStateListener(); - /** @return The driver's schema change listener; never {@code null}. */ + /** Returns the driver's schema change listener; never {@code null}. */ @NonNull SchemaChangeListener getSchemaChangeListener(); } diff --git a/core/src/main/java/com/datastax/oss/driver/api/core/data/CqlVector.java b/core/src/main/java/com/datastax/oss/driver/api/core/data/CqlVector.java index 8089d551750..a3bbe2c8020 100644 --- a/core/src/main/java/com/datastax/oss/driver/api/core/data/CqlVector.java +++ b/core/src/main/java/com/datastax/oss/driver/api/core/data/CqlVector.java @@ -80,7 +80,7 @@ public static CqlVector newInstance(List list) { * Create a new CqlVector instance from the specified string representation. * * @param str a String representation of a CqlVector - * @param subtypeCodec + * @param subtypeCodec the codec used to parse individual vector elements * @return a new CqlVector built from the String representation */ public static CqlVector from(@NonNull String str, @NonNull TypeCodec subtypeCodec) { diff --git a/core/src/main/java/com/datastax/oss/driver/api/core/metadata/token/Partitioner.java b/core/src/main/java/com/datastax/oss/driver/api/core/metadata/token/Partitioner.java index 033058a7084..530cca9d22d 100644 --- a/core/src/main/java/com/datastax/oss/driver/api/core/metadata/token/Partitioner.java +++ b/core/src/main/java/com/datastax/oss/driver/api/core/metadata/token/Partitioner.java @@ -18,7 +18,7 @@ import java.nio.ByteBuffer; -/** Allows to hash partition key to a @code{Token}. */ +/** Allows to hash partition key to a {@code Token}. */ public interface Partitioner { Token hash(ByteBuffer partitionKey); } diff --git a/core/src/main/java/com/datastax/oss/driver/api/core/metrics/Metrics.java b/core/src/main/java/com/datastax/oss/driver/api/core/metrics/Metrics.java index 58d531b3464..2cd294f6d3a 100644 --- a/core/src/main/java/com/datastax/oss/driver/api/core/metrics/Metrics.java +++ b/core/src/main/java/com/datastax/oss/driver/api/core/metrics/Metrics.java @@ -42,6 +42,7 @@ public interface Metrics { * (Dropwizard Metrics manual) * @leaks-private-api */ + @SuppressWarnings("InvalidBlockTag") @NonNull MetricRegistry getRegistry(); diff --git a/core/src/main/java/com/datastax/oss/driver/api/core/paging/OffsetPager.java b/core/src/main/java/com/datastax/oss/driver/api/core/paging/OffsetPager.java index 3cb838f3171..03f48652907 100644 --- a/core/src/main/java/com/datastax/oss/driver/api/core/paging/OffsetPager.java +++ b/core/src/main/java/com/datastax/oss/driver/api/core/paging/OffsetPager.java @@ -46,7 +46,7 @@ * a reasonable trade-off if the cardinality stays low. This class provides a way to emulate this * behavior on the client side. * - *

Performance considerations

+ *

Performance considerations

* * For each page that you want to retrieve: * @@ -71,7 +71,7 @@ * OffsetPager.Page<Row> page5 = pager.getPage(rs, 5); * * - *

Establishing application-level guardrails

+ *

Establishing application-level guardrails

* * Linear performance should be fine for the values typically encountered in real-world * applications: for example, if the page size is 25 and users never go past page 10, the worst case @@ -81,7 +81,7 @@ * maximum, so that an attacker can't inject a large value that could potentially fetch millions of * rows. * - *

Relation with protocol-level paging

+ *

Relation with protocol-level paging

* * Protocol-level paging refers to the ability to split large response into multiple network chunks: * see {@link Statement#setPageSize(int)} and {@code basic.request.page-size} in the configuration. diff --git a/core/src/main/java/com/datastax/oss/driver/api/core/retry/RetryVerdict.java b/core/src/main/java/com/datastax/oss/driver/api/core/retry/RetryVerdict.java index 9abb54156db..ee51059da07 100644 --- a/core/src/main/java/com/datastax/oss/driver/api/core/retry/RetryVerdict.java +++ b/core/src/main/java/com/datastax/oss/driver/api/core/retry/RetryVerdict.java @@ -27,6 +27,7 @@ * where, and a method that allows the original request to be modified before the retry. */ @FunctionalInterface +@SuppressWarnings("ClassInitializationDeadlock") public interface RetryVerdict { /** A retry verdict that retries the same request on the same node. */ diff --git a/core/src/main/java/com/datastax/oss/driver/api/core/type/codec/registry/CodecRegistry.java b/core/src/main/java/com/datastax/oss/driver/api/core/type/codec/registry/CodecRegistry.java index 36472f34c79..42bfe6535c2 100644 --- a/core/src/main/java/com/datastax/oss/driver/api/core/type/codec/registry/CodecRegistry.java +++ b/core/src/main/java/com/datastax/oss/driver/api/core/type/codec/registry/CodecRegistry.java @@ -57,6 +57,7 @@ public interface CodecRegistry { * but any attempt to {@linkplain MutableCodecRegistry#register(TypeCodec) register new codecs} * will throw {@link UnsupportedOperationException}. */ + @SuppressWarnings("ClassInitializationDeadlock") CodecRegistry DEFAULT = new DefaultCodecRegistry("default") { @Override diff --git a/core/src/main/java/com/datastax/oss/driver/api/core/type/reflect/GenericType.java b/core/src/main/java/com/datastax/oss/driver/api/core/type/reflect/GenericType.java index d22b6f1bfaf..efe869660bb 100644 --- a/core/src/main/java/com/datastax/oss/driver/api/core/type/reflect/GenericType.java +++ b/core/src/main/java/com/datastax/oss/driver/api/core/type/reflect/GenericType.java @@ -370,6 +370,7 @@ public final Type getType() { * * @leaks-private-api */ + @SuppressWarnings("InvalidBlockTag") @NonNull public TypeToken __getToken() { return token; diff --git a/core/src/main/java/com/datastax/oss/driver/internal/core/addresstranslation/Ec2MultiRegionAddressTranslator.java b/core/src/main/java/com/datastax/oss/driver/internal/core/addresstranslation/Ec2MultiRegionAddressTranslator.java index 88e6cdb3bb2..bee22dc5335 100644 --- a/core/src/main/java/com/datastax/oss/driver/internal/core/addresstranslation/Ec2MultiRegionAddressTranslator.java +++ b/core/src/main/java/com/datastax/oss/driver/internal/core/addresstranslation/Ec2MultiRegionAddressTranslator.java @@ -54,6 +54,7 @@ * the domain name of the target instance. Then it performs a forward DNS lookup of the domain name; * the EC2 DNS does the private/public switch automatically based on location. */ +@SuppressWarnings("BanJNDI") public class Ec2MultiRegionAddressTranslator implements AddressTranslator { private static final Logger LOG = LoggerFactory.getLogger(Ec2MultiRegionAddressTranslator.class); diff --git a/core/src/main/java/com/datastax/oss/driver/internal/core/addresstranslation/SubnetAddressTranslator.java b/core/src/main/java/com/datastax/oss/driver/internal/core/addresstranslation/SubnetAddressTranslator.java index 85f29e3fadd..59f614cad59 100644 --- a/core/src/main/java/com/datastax/oss/driver/internal/core/addresstranslation/SubnetAddressTranslator.java +++ b/core/src/main/java/com/datastax/oss/driver/internal/core/addresstranslation/SubnetAddressTranslator.java @@ -61,8 +61,12 @@ public SubnetAddressTranslator(@NonNull DriverContext context) { .getDefaultProfile() .getBoolean(ADDRESS_TRANSLATOR_RESOLVE_ADDRESSES, false); this.subnetAddresses = - context.getConfig().getDefaultProfile().getStringMap(ADDRESS_TRANSLATOR_SUBNET_ADDRESSES) - .entrySet().stream() + context + .getConfig() + .getDefaultProfile() + .getStringMap(ADDRESS_TRANSLATOR_SUBNET_ADDRESSES) + .entrySet() + .stream() .map( e -> { // Quoted and/or containing forward slashes map keys in reference.conf are read to diff --git a/core/src/main/java/com/datastax/oss/driver/internal/core/channel/ChannelFactory.java b/core/src/main/java/com/datastax/oss/driver/internal/core/channel/ChannelFactory.java index 5ad8c111262..6bfc355f910 100644 --- a/core/src/main/java/com/datastax/oss/driver/internal/core/channel/ChannelFactory.java +++ b/core/src/main/java/com/datastax/oss/driver/internal/core/channel/ChannelFactory.java @@ -410,8 +410,7 @@ protected void initChannel(Channel channel) { ChannelPipeline pipeline = channel.pipeline(); context .getSslHandlerFactory() - .map(f -> f.newSslHandler(channel, endPoint)) - .map(h -> pipeline.addLast(SSL_HANDLER_NAME, h)); + .ifPresent(f -> pipeline.addLast(SSL_HANDLER_NAME, f.newSslHandler(channel, endPoint))); // Only add meter handlers on the pipeline if metrics are enabled. SessionMetricUpdater sessionMetricUpdater = context.getMetricsFactory().getSessionUpdater(); diff --git a/core/src/main/java/com/datastax/oss/driver/internal/core/cql/DefaultTraceEvent.java b/core/src/main/java/com/datastax/oss/driver/internal/core/cql/DefaultTraceEvent.java index 9bf7ff7c8ee..e092f8302ec 100644 --- a/core/src/main/java/com/datastax/oss/driver/internal/core/cql/DefaultTraceEvent.java +++ b/core/src/main/java/com/datastax/oss/driver/internal/core/cql/DefaultTraceEvent.java @@ -78,6 +78,7 @@ public String getThreadName() { } @Override + @SuppressWarnings("JavaUtilDate") public String toString() { return String.format("%s on %s[%s] at %s", activity, source, threadName, new Date(timestamp)); } diff --git a/core/src/main/java/com/datastax/oss/driver/internal/core/loadbalancing/DefaultLoadBalancingPolicy.java b/core/src/main/java/com/datastax/oss/driver/internal/core/loadbalancing/DefaultLoadBalancingPolicy.java index 09a4dff653f..ee563dbc770 100644 --- a/core/src/main/java/com/datastax/oss/driver/internal/core/loadbalancing/DefaultLoadBalancingPolicy.java +++ b/core/src/main/java/com/datastax/oss/driver/internal/core/loadbalancing/DefaultLoadBalancingPolicy.java @@ -331,10 +331,6 @@ private NodeResponseRateSample() { this.newest = OptionalLong.empty(); } - private NodeResponseRateSample(long oldestSample) { - this(oldestSample, nanoTime()); - } - private NodeResponseRateSample(long oldestSample, long newestSample) { this.oldest = oldestSample; this.newest = OptionalLong.of(newestSample); diff --git a/core/src/main/java/com/datastax/oss/driver/internal/core/metadata/ClientRoutesTopologyMonitor.java b/core/src/main/java/com/datastax/oss/driver/internal/core/metadata/ClientRoutesTopologyMonitor.java index 569637e0873..1ffc35fd9f4 100644 --- a/core/src/main/java/com/datastax/oss/driver/internal/core/metadata/ClientRoutesTopologyMonitor.java +++ b/core/src/main/java/com/datastax/oss/driver/internal/core/metadata/ClientRoutesTopologyMonitor.java @@ -55,8 +55,8 @@ public class ClientRoutesTopologyMonitor extends DefaultTopologyMonitor { private static final Logger LOG = LoggerFactory.getLogger(ClientRoutesTopologyMonitor.class); - private static final String SELECT_ROUTES_COLUMNS = - "SELECT host_id, address, port, tls_port, connection_id FROM %s"; + private static final String SELECT_ROUTES_PREFIX = + "SELECT host_id, address, port, tls_port, connection_id FROM "; /** Disables result-set paging, matching the convention used by {@link DefaultTopologyMonitor}. */ private static final int NO_PAGING = -1; @@ -508,8 +508,7 @@ private static String buildQuery( boolean hasConnectionIds = !connectionIds.isEmpty(); boolean hasHostIds = eventHostIds != null && !eventHostIds.isEmpty(); - StringBuilder stmt = - new StringBuilder(String.format(SELECT_ROUTES_COLUMNS, config.getTableName())); + StringBuilder stmt = new StringBuilder(SELECT_ROUTES_PREFIX).append(config.getTableName()); if (hasConnectionIds) { // Prepared statements cannot be used here because AdminRequestHandler only supports diff --git a/core/src/main/java/com/datastax/oss/driver/internal/core/metadata/DefaultTabletMap.java b/core/src/main/java/com/datastax/oss/driver/internal/core/metadata/DefaultTabletMap.java index c6467a62ca8..a37ba434d0f 100644 --- a/core/src/main/java/com/datastax/oss/driver/internal/core/metadata/DefaultTabletMap.java +++ b/core/src/main/java/com/datastax/oss/driver/internal/core/metadata/DefaultTabletMap.java @@ -33,11 +33,12 @@ * *

Thread-safety notes: This class uses ConcurrentMap and ConcurrentSkipListSet underneath. It is * safe to have multiple threads accessing it. However, multiple modifications i.e. multiple calls - * of {@link DefaultTabletMap#addTablet(CqlIdentifier, CqlIdentifier, Tablet) will race with each + * of {@link DefaultTabletMap#addTablet(CqlIdentifier, CqlIdentifier, Tablet)} will race with each * other. This may result in unexpected state of this structure when used in a vacuum. For example - * it may end up containing overlapping tablet ranges.

In actual use by the driver {@link - * MetadataManager} solves this by running modifications sequentially. It schedules them on {@link - * MetadataManager#adminExecutor}}'s thread. + * it may end up containing overlapping tablet ranges. + * + *

In actual use by the driver {@link MetadataManager} solves this by running modifications + * sequentially. It schedules them on the {@link MetadataManager#adminExecutor} thread. */ @Beta public class DefaultTabletMap implements TabletMap { @@ -209,7 +210,7 @@ public static DefaultTablet parseTabletPayloadV1(TupleValue tupleValue, Map 0) { - builder.append(Strings.repeat(" ", indent * INDENT_SIZE)); + builder.append(" ".repeat(indent * INDENT_SIZE)); } isAtLineStart = false; builder.append(s); @@ -65,7 +64,7 @@ public ScriptBuilder newLine() { } public ScriptBuilder forceNewLine(int count) { - builder.append(Strings.repeat("\n", count)); + builder.append("\n".repeat(count)); isAtLineStart = true; return this; } diff --git a/core/src/main/java/com/datastax/oss/driver/internal/core/metadata/schema/parsing/RawColumn.java b/core/src/main/java/com/datastax/oss/driver/internal/core/metadata/schema/parsing/RawColumn.java index 5dc0679deaf..db541df48cb 100644 --- a/core/src/main/java/com/datastax/oss/driver/internal/core/metadata/schema/parsing/RawColumn.java +++ b/core/src/main/java/com/datastax/oss/driver/internal/core/metadata/schema/parsing/RawColumn.java @@ -27,7 +27,6 @@ import com.datastax.oss.driver.api.core.metadata.schema.ColumnMetadata; import com.datastax.oss.driver.internal.core.adminrequest.AdminRow; import com.datastax.oss.driver.shaded.guava.common.collect.Lists; -import com.datastax.oss.driver.shaded.guava.common.primitives.Ints; import edu.umd.cs.findbugs.annotations.NonNull; import java.util.Collection; import java.util.Collections; @@ -128,7 +127,7 @@ public int compareTo(@NonNull RawColumn that) { // First, order by kind. Then order partition key and clustering columns by position. For // other kinds, order by column name. if (!this.kind.equals(that.kind)) { - return Ints.compare(rank(this.kind), rank(that.kind)); + return Integer.compare(rank(this.kind), rank(that.kind)); } else if (kind.equals(KIND_PARTITION_KEY) || kind.equals(KIND_CLUSTERING_COLUMN)) { return Integer.compare(this.position, that.position); } else { diff --git a/core/src/main/java/com/datastax/oss/driver/internal/core/metadata/schema/queries/RuleBasedKeyspaceFilter.java b/core/src/main/java/com/datastax/oss/driver/internal/core/metadata/schema/queries/RuleBasedKeyspaceFilter.java index 38a8c116c45..d78147f41c9 100644 --- a/core/src/main/java/com/datastax/oss/driver/internal/core/metadata/schema/queries/RuleBasedKeyspaceFilter.java +++ b/core/src/main/java/com/datastax/oss/driver/internal/core/metadata/schema/queries/RuleBasedKeyspaceFilter.java @@ -79,9 +79,9 @@ class RuleBasedKeyspaceFilter implements KeyspaceFilter { exactExcludes.add(name); } } else if ((matcher = REGEX_INCLUDE.matcher(spec)).matches()) { - compile(matcher.group(1)).map(regexIncludes::add); + compile(matcher.group(1)).ifPresent(regexIncludes::add); } else if ((matcher = REGEX_EXCLUDE.matcher(spec)).matches()) { - compile(matcher.group(1)).map(regexExcludes::add); + compile(matcher.group(1)).ifPresent(regexExcludes::add); } else { LOG.warn( "[{}] Error while parsing {}: invalid element '{}', skipping", diff --git a/core/src/main/java/com/datastax/oss/driver/internal/core/metadata/token/RandomTokenFactory.java b/core/src/main/java/com/datastax/oss/driver/internal/core/metadata/token/RandomTokenFactory.java index 59f1bcc865b..88881bffaa7 100644 --- a/core/src/main/java/com/datastax/oss/driver/internal/core/metadata/token/RandomTokenFactory.java +++ b/core/src/main/java/com/datastax/oss/driver/internal/core/metadata/token/RandomTokenFactory.java @@ -43,8 +43,7 @@ public RandomTokenFactory() { prototype = createMessageDigest(); boolean supportsClone; try { - prototype.clone(); - supportsClone = true; + supportsClone = prototype.clone() instanceof MessageDigest; } catch (CloneNotSupportedException e) { supportsClone = false; } @@ -104,7 +103,8 @@ private MessageDigest newMessageDigest() { if (supportsClone) { try { return (MessageDigest) prototype.clone(); - } catch (CloneNotSupportedException ignored) { + } catch (CloneNotSupportedException e) { + return createMessageDigest(); } } return createMessageDigest(); diff --git a/core/src/main/java/com/datastax/oss/driver/internal/core/metadata/token/TokenLong64.java b/core/src/main/java/com/datastax/oss/driver/internal/core/metadata/token/TokenLong64.java index 4d9d20c1470..32de62a31eb 100644 --- a/core/src/main/java/com/datastax/oss/driver/internal/core/metadata/token/TokenLong64.java +++ b/core/src/main/java/com/datastax/oss/driver/internal/core/metadata/token/TokenLong64.java @@ -18,7 +18,6 @@ import com.datastax.oss.driver.api.core.metadata.token.Token; import com.datastax.oss.driver.shaded.guava.common.base.Preconditions; -import com.datastax.oss.driver.shaded.guava.common.primitives.Longs; import edu.umd.cs.findbugs.annotations.NonNull; import net.jcip.annotations.Immutable; @@ -57,6 +56,6 @@ public int compareTo(@NonNull Token other) { Preconditions.checkArgument( other instanceof TokenLong64, "Cannot compare with non-64-bit-integer token"); TokenLong64 that = (TokenLong64) other; - return Longs.compare(this.value, that.value); + return Long.compare(this.value, that.value); } } diff --git a/core/src/main/java/com/datastax/oss/driver/internal/core/ssl/ReloadingKeyManagerFactory.java b/core/src/main/java/com/datastax/oss/driver/internal/core/ssl/ReloadingKeyManagerFactory.java index 8a9e11bb2e9..7131652e182 100644 --- a/core/src/main/java/com/datastax/oss/driver/internal/core/ssl/ReloadingKeyManagerFactory.java +++ b/core/src/main/java/com/datastax/oss/driver/internal/core/ssl/ReloadingKeyManagerFactory.java @@ -71,7 +71,7 @@ public class ReloadingKeyManagerFactory extends KeyManagerFactory implements Aut * @param keystorePassword the keystore password * @param reloadInterval the duration between reload attempts. Set to {@link Optional#empty()} to * disable scheduled reloading. - * @return + * @return a reloading key manager factory backed by the given keystore */ static ReloadingKeyManagerFactory create( Path keystorePath, String keystorePassword, Optional reloadInterval) diff --git a/core/src/main/java/com/datastax/oss/driver/internal/core/type/codec/extras/OptionalCodec.java b/core/src/main/java/com/datastax/oss/driver/internal/core/type/codec/extras/OptionalCodec.java index e62e244bf5e..b47771c9d0e 100644 --- a/core/src/main/java/com/datastax/oss/driver/internal/core/type/codec/extras/OptionalCodec.java +++ b/core/src/main/java/com/datastax/oss/driver/internal/core/type/codec/extras/OptionalCodec.java @@ -52,14 +52,14 @@ public boolean accepts(@NonNull Object value) { return false; } - @Nullable @Override protected Optional innerToOuter(@Nullable T value) { - return Optional.ofNullable(isAbsent(value) ? null : value); + return isAbsent(value) ? Optional.empty() : Optional.of(value); } @Nullable @Override + @SuppressWarnings("NullableOptional") protected T outerToInner(@Nullable Optional value) { return value != null && value.isPresent() ? value.get() : null; } diff --git a/core/src/main/java/com/datastax/oss/driver/internal/core/type/codec/extras/enums/EnumOrdinalCodec.java b/core/src/main/java/com/datastax/oss/driver/internal/core/type/codec/extras/enums/EnumOrdinalCodec.java index 4d6ca26484e..091652569b7 100644 --- a/core/src/main/java/com/datastax/oss/driver/internal/core/type/codec/extras/enums/EnumOrdinalCodec.java +++ b/core/src/main/java/com/datastax/oss/driver/internal/core/type/codec/extras/enums/EnumOrdinalCodec.java @@ -54,6 +54,7 @@ protected EnumT innerToOuter(@Nullable Integer value) { @Nullable @Override + @SuppressWarnings("EnumOrdinal") protected Integer outerToInner(@Nullable EnumT value) { return value == null ? null : value.ordinal(); } diff --git a/core/src/main/java/com/datastax/oss/driver/internal/core/type/codec/registry/CodecRegistryConstants.java b/core/src/main/java/com/datastax/oss/driver/internal/core/type/codec/registry/CodecRegistryConstants.java index bbf77bdf5dc..01f7156a4c9 100644 --- a/core/src/main/java/com/datastax/oss/driver/internal/core/type/codec/registry/CodecRegistryConstants.java +++ b/core/src/main/java/com/datastax/oss/driver/internal/core/type/codec/registry/CodecRegistryConstants.java @@ -19,6 +19,7 @@ import com.datastax.oss.driver.api.core.type.codec.TypeCodec; import com.datastax.oss.driver.api.core.type.codec.TypeCodecs; +import java.util.List; import java.util.function.BiConsumer; import java.util.function.BiFunction; @@ -31,7 +32,12 @@ public class CodecRegistryConstants { *

This is exposed in case you want to call {@link * DefaultCodecRegistry#DefaultCodecRegistry(String, int, BiFunction, int, BiConsumer, * TypeCodec[])} but only customize the caching options. + * + * @deprecated use {@link #getPrimitiveCodecs()} instead. This array remains public for binary + * compatibility and will be made non-public in a future release. */ + @Deprecated + @SuppressWarnings("MutablePublicArray") public static final TypeCodec[] PRIMITIVE_CODECS = new TypeCodec[] { // Must be declared before AsciiCodec so it gets chosen when CQL type not available @@ -57,4 +63,12 @@ public class CodecRegistryConstants { TypeCodecs.COUNTER, TypeCodecs.ASCII }; + + /** + * Returns the driver's default primitive codecs (map all primitive CQL types to their "natural" + * Java equivalent). + */ + public static List> getPrimitiveCodecs() { + return List.of(PRIMITIVE_CODECS); + } } diff --git a/core/src/main/java/com/datastax/oss/driver/internal/core/util/collection/QueryPlan.java b/core/src/main/java/com/datastax/oss/driver/internal/core/util/collection/QueryPlan.java index 371e100a0e2..a5ca3443efc 100644 --- a/core/src/main/java/com/datastax/oss/driver/internal/core/util/collection/QueryPlan.java +++ b/core/src/main/java/com/datastax/oss/driver/internal/core/util/collection/QueryPlan.java @@ -52,6 +52,7 @@ @ThreadSafe public interface QueryPlan extends Queue { + @SuppressWarnings("ClassInitializationDeadlock") QueryPlan EMPTY = new EmptyQueryPlan(); /** diff --git a/core/src/test/java/com/datastax/dse/driver/internal/core/graph/GraphSupportCheckerTest.java b/core/src/test/java/com/datastax/dse/driver/internal/core/graph/GraphSupportCheckerTest.java index ec31bd4b12d..eda3bbed446 100644 --- a/core/src/test/java/com/datastax/dse/driver/internal/core/graph/GraphSupportCheckerTest.java +++ b/core/src/test/java/com/datastax/dse/driver/internal/core/graph/GraphSupportCheckerTest.java @@ -25,7 +25,7 @@ import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verifyZeroInteractions; +import static org.mockito.Mockito.verifyNoInteractions; import static org.mockito.Mockito.when; import com.datastax.dse.driver.DseTestDataProviders; @@ -250,7 +250,7 @@ public void should_pickup_graph_protocol_from_statement(GraphProtocol graphProto graphStatement, executionProfile, mock(InternalDriverContext.class)); assertThat(inferredProtocol).isEqualTo(graphProtocol); - verifyZeroInteractions(executionProfile); + verifyNoInteractions(executionProfile); } @Test diff --git a/core/src/test/java/com/datastax/dse/driver/internal/core/insights/InsightsClientTest.java b/core/src/test/java/com/datastax/dse/driver/internal/core/insights/InsightsClientTest.java index 74869893b72..5085432dbec 100644 --- a/core/src/test/java/com/datastax/dse/driver/internal/core/insights/InsightsClientTest.java +++ b/core/src/test/java/com/datastax/dse/driver/internal/core/insights/InsightsClientTest.java @@ -109,7 +109,7 @@ public void should_construct_json_event_startup_message() throws IOException { OS os = new OS("linux", "1.2", "x64"); CPUS cpus = new CPUS(8, "intel i7"); Map javaDeps = - ImmutableMap.of("version", new RuntimeAndCompileTimeVersions("1.8.0", "1.8.0", false)); + ImmutableMap.of("version", new RuntimeAndCompileTimeVersions("11.0.0", "11.0.0", false)); Map> runtimeInfo = ImmutableMap.of("java", javaDeps); InsightsPlatformInfo insightsPlatformInfo = new InsightsPlatformInfo(os, cpus, runtimeInfo); diff --git a/core/src/test/java/com/datastax/oss/driver/internal/core/CompletionStageAssert.java b/core/src/test/java/com/datastax/oss/driver/internal/core/CompletionStageAssert.java index 6c0d78d62dd..f7996a95235 100644 --- a/core/src/test/java/com/datastax/oss/driver/internal/core/CompletionStageAssert.java +++ b/core/src/test/java/com/datastax/oss/driver/internal/core/CompletionStageAssert.java @@ -69,6 +69,7 @@ public CompletionStageAssert isFailed() { return isFailed(f -> {}); } + @SuppressWarnings("EmptyCatch") public CompletionStageAssert isCancelled() { boolean cancelled = false; try { @@ -83,6 +84,7 @@ public CompletionStageAssert isCancelled() { return this; } + @SuppressWarnings("EmptyCatch") public CompletionStageAssert isNotCancelled() { boolean cancelled = false; try { diff --git a/core/src/test/java/com/datastax/oss/driver/internal/core/ContactPointsTest.java b/core/src/test/java/com/datastax/oss/driver/internal/core/ContactPointsTest.java index 72b875b8602..4428e36c53f 100644 --- a/core/src/test/java/com/datastax/oss/driver/internal/core/ContactPointsTest.java +++ b/core/src/test/java/com/datastax/oss/driver/internal/core/ContactPointsTest.java @@ -73,8 +73,7 @@ public void should_parse_ipv4_address_and_port_in_configuration() { Set endPoints = ContactPoints.merge(Collections.emptySet(), ImmutableList.of("127.0.0.1:9042"), true); - assertThat(endPoints) - .containsExactly(new DefaultEndPoint(new InetSocketAddress("127.0.0.1", 9042))); + assertThat(endPoints).containsExactly(new DefaultEndPoint(socketAddress("127.0.0.1", 9042))); } @Test @@ -85,8 +84,8 @@ public void should_parse_ipv6_address_and_port_in_configuration() { assertThat(endPoints) .containsExactly( - new DefaultEndPoint(new InetSocketAddress("::1", 9042)), - new DefaultEndPoint(new InetSocketAddress("::2", 9042))); + new DefaultEndPoint(socketAddress("::1", 9042)), + new DefaultEndPoint(socketAddress("::2", 9042))); } @Test @@ -139,26 +138,25 @@ public void should_ignore_malformed_port_and_warn() { public void should_merge_programmatic_and_configuration() { Set endPoints = ContactPoints.merge( - ImmutableSet.of(new DefaultEndPoint(new InetSocketAddress("127.0.0.1", 9042))), + ImmutableSet.of(new DefaultEndPoint(socketAddress("127.0.0.1", 9042))), ImmutableList.of("127.0.0.2:9042"), true); assertThat(endPoints) .containsOnly( - new DefaultEndPoint(new InetSocketAddress("127.0.0.1", 9042)), - new DefaultEndPoint(new InetSocketAddress("127.0.0.2", 9042))); + new DefaultEndPoint(socketAddress("127.0.0.1", 9042)), + new DefaultEndPoint(socketAddress("127.0.0.2", 9042))); } @Test public void should_warn_if_duplicate_between_programmatic_and_configuration() { Set endPoints = ContactPoints.merge( - ImmutableSet.of(new DefaultEndPoint(new InetSocketAddress("127.0.0.1", 9042))), + ImmutableSet.of(new DefaultEndPoint(socketAddress("127.0.0.1", 9042))), ImmutableList.of("127.0.0.1:9042"), true); - assertThat(endPoints) - .containsOnly(new DefaultEndPoint(new InetSocketAddress("127.0.0.1", 9042))); + assertThat(endPoints).containsOnly(new DefaultEndPoint(socketAddress("127.0.0.1", 9042))); assertLog(Level.WARN, "Duplicate contact point /127.0.0.1:9042"); } @@ -168,11 +166,33 @@ public void should_warn_if_duplicate_in_configuration() { ContactPoints.merge( Collections.emptySet(), ImmutableList.of("127.0.0.1:9042", "127.0.0.1:9042"), true); - assertThat(endPoints) - .containsOnly(new DefaultEndPoint(new InetSocketAddress("127.0.0.1", 9042))); + assertThat(endPoints).containsOnly(new DefaultEndPoint(socketAddress("127.0.0.1", 9042))); assertLog(Level.WARN, "Duplicate contact point /127.0.0.1:9042"); } + private static InetSocketAddress socketAddress(String host, int port) { + try { + switch (host) { + case "127.0.0.1": + return new InetSocketAddress(InetAddress.getByAddress(new byte[] {127, 0, 0, 1}), port); + case "127.0.0.2": + return new InetSocketAddress(InetAddress.getByAddress(new byte[] {127, 0, 0, 2}), port); + case "::1": + return new InetSocketAddress( + InetAddress.getByAddress(new byte[] {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}), + port); + case "::2": + return new InetSocketAddress( + InetAddress.getByAddress(new byte[] {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2}), + port); + default: + return new InetSocketAddress(InetAddress.getByName(host), port); + } + } catch (UnknownHostException e) { + throw new AssertionError(e); + } + } + private void assertLog(Level level, String message) { verify(appender, atLeast(1)).doAppend(loggingEventCaptor.capture()); Iterable logs = diff --git a/core/src/test/java/com/datastax/oss/driver/internal/core/addresstranslation/FixedHostNameAddressTranslatorTest.java b/core/src/test/java/com/datastax/oss/driver/internal/core/addresstranslation/FixedHostNameAddressTranslatorTest.java index 92800998056..da9c40f033c 100644 --- a/core/src/test/java/com/datastax/oss/driver/internal/core/addresstranslation/FixedHostNameAddressTranslatorTest.java +++ b/core/src/test/java/com/datastax/oss/driver/internal/core/addresstranslation/FixedHostNameAddressTranslatorTest.java @@ -42,6 +42,7 @@ public void should_translate_address() { new FixedHostNameAddressTranslator(defaultDriverContext); InetSocketAddress address = new InetSocketAddress("192.0.2.5", 6061); - assertThat(translator.translate(address)).isEqualTo(new InetSocketAddress("myaddress", 6061)); + assertThat(translator.translate(address)) + .isEqualTo(InetSocketAddress.createUnresolved("myaddress", 6061)); } } diff --git a/core/src/test/java/com/datastax/oss/driver/internal/core/channel/MockChannelFactoryHelper.java b/core/src/test/java/com/datastax/oss/driver/internal/core/channel/MockChannelFactoryHelper.java index 43768131108..6bc5f2b2025 100644 --- a/core/src/test/java/com/datastax/oss/driver/internal/core/channel/MockChannelFactoryHelper.java +++ b/core/src/test/java/com/datastax/oss/driver/internal/core/channel/MockChannelFactoryHelper.java @@ -23,7 +23,7 @@ import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.inOrder; import static org.mockito.Mockito.timeout; -import static org.mockito.Mockito.verifyZeroInteractions; +import static org.mockito.Mockito.verifyNoInteractions; import static org.mockito.Mockito.when; import com.datastax.oss.driver.api.core.metadata.Node; @@ -122,7 +122,7 @@ public static class Builder { public Builder(ChannelFactory channelFactory) { assertThat(MockUtil.isMock(channelFactory)).as("expected a mock").isTrue(); - verifyZeroInteractions(channelFactory); + verifyNoInteractions(channelFactory); this.channelFactory = channelFactory; } diff --git a/core/src/test/java/com/datastax/oss/driver/internal/core/data/AccessibleByIdTestBase.java b/core/src/test/java/com/datastax/oss/driver/internal/core/data/AccessibleByIdTestBase.java index c27b55e3f25..fb03a7646da 100644 --- a/core/src/test/java/com/datastax/oss/driver/internal/core/data/AccessibleByIdTestBase.java +++ b/core/src/test/java/com/datastax/oss/driver/internal/core/data/AccessibleByIdTestBase.java @@ -22,7 +22,7 @@ import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.verifyZeroInteractions; +import static org.mockito.Mockito.verifyNoInteractions; import static org.mockito.Mockito.when; import com.datastax.oss.driver.api.core.CqlIdentifier; @@ -83,7 +83,7 @@ public void should_set_bytes_by_id() { t = t.setBytesUnsafe(FIELD0_ID, Bytes.fromHexString("0x00000001")); // Then - verifyZeroInteractions(codecRegistry); + verifyNoInteractions(codecRegistry); assertThat(t.getBytesUnsafe(FIELD0_ID)).isEqualTo(Bytes.fromHexString("0x00000001")); } @@ -97,7 +97,7 @@ public void should_set_to_null_by_id() { t = t.setToNull(FIELD0_ID); // Then - verifyZeroInteractions(codecRegistry); + verifyNoInteractions(codecRegistry); assertThat(t.getBytesUnsafe(FIELD0_ID)).isNull(); } @@ -144,7 +144,7 @@ public void should_set_with_explicit_codec_by_id() { t = t.set(FIELD0_ID, "1", intToStringCodec); // Then - verifyZeroInteractions(codecRegistry); + verifyNoInteractions(codecRegistry); verify(intToStringCodec).encode("1", ProtocolVersion.DEFAULT); assertThat(t.getBytesUnsafe(FIELD0_ID)).isEqualTo(Bytes.fromHexString("0x00000001")); } @@ -189,7 +189,7 @@ public void should_get_bytes_by_id() { ByteBuffer bytes = t.getBytesUnsafe(FIELD0_ID); // Then - verifyZeroInteractions(codecRegistry); + verifyNoInteractions(codecRegistry); assertThat(bytes).isEqualTo(Bytes.fromHexString("0x00000001")); } @@ -203,7 +203,7 @@ public void should_test_if_null_by_id() { boolean isNull = t.isNull(FIELD0_ID); // Then - verifyZeroInteractions(codecRegistry); + verifyNoInteractions(codecRegistry); assertThat(isNull).isTrue(); } @@ -253,7 +253,7 @@ public void should_get_with_explicit_codec_by_id() { String s = t.get(FIELD0_ID, intToStringCodec); // Then - verifyZeroInteractions(codecRegistry); + verifyNoInteractions(codecRegistry); verify(intToStringCodec).decode(any(ByteBuffer.class), eq(ProtocolVersion.DEFAULT)); assertThat(s).isEqualTo("1"); } @@ -295,7 +295,7 @@ public void should_set_bytes_by_name() { t = t.setBytesUnsafe(FIELD0_NAME, Bytes.fromHexString("0x00000001")); // Then - verifyZeroInteractions(codecRegistry); + verifyNoInteractions(codecRegistry); assertThat(t.getBytesUnsafe(FIELD0_NAME)).isEqualTo(Bytes.fromHexString("0x00000001")); } @@ -309,7 +309,7 @@ public void should_set_to_null_by_name() { t = t.setToNull(FIELD0_NAME); // Then - verifyZeroInteractions(codecRegistry); + verifyNoInteractions(codecRegistry); assertThat(t.getBytesUnsafe(FIELD0_NAME)).isNull(); } @@ -356,7 +356,7 @@ public void should_set_with_explicit_codec_by_name() { t = t.set(FIELD0_NAME, "1", intToStringCodec); // Then - verifyZeroInteractions(codecRegistry); + verifyNoInteractions(codecRegistry); verify(intToStringCodec).encode("1", ProtocolVersion.DEFAULT); assertThat(t.getBytesUnsafe(FIELD0_NAME)).isEqualTo(Bytes.fromHexString("0x00000001")); } @@ -401,7 +401,7 @@ public void should_get_bytes_by_name() { ByteBuffer bytes = t.getBytesUnsafe(FIELD0_NAME); // Then - verifyZeroInteractions(codecRegistry); + verifyNoInteractions(codecRegistry); assertThat(bytes).isEqualTo(Bytes.fromHexString("0x00000001")); } @@ -415,7 +415,7 @@ public void should_test_if_null_by_name() { boolean isNull = t.isNull(FIELD0_NAME); // Then - verifyZeroInteractions(codecRegistry); + verifyNoInteractions(codecRegistry); assertThat(isNull).isTrue(); } @@ -465,7 +465,7 @@ public void should_get_with_explicit_codec_by_name() { String s = t.get(FIELD0_NAME, intToStringCodec); // Then - verifyZeroInteractions(codecRegistry); + verifyNoInteractions(codecRegistry); verify(intToStringCodec).decode(any(ByteBuffer.class), eq(ProtocolVersion.DEFAULT)); assertThat(s).isEqualTo("1"); } diff --git a/core/src/test/java/com/datastax/oss/driver/internal/core/data/AccessibleByIndexTestBase.java b/core/src/test/java/com/datastax/oss/driver/internal/core/data/AccessibleByIndexTestBase.java index 94da926f2bc..39ddc3fe12c 100644 --- a/core/src/test/java/com/datastax/oss/driver/internal/core/data/AccessibleByIndexTestBase.java +++ b/core/src/test/java/com/datastax/oss/driver/internal/core/data/AccessibleByIndexTestBase.java @@ -22,7 +22,7 @@ import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.verifyZeroInteractions; +import static org.mockito.Mockito.verifyNoInteractions; import static org.mockito.Mockito.when; import com.datastax.oss.driver.api.core.DefaultProtocolVersion; @@ -121,7 +121,7 @@ public void should_set_bytes_by_index() { t = t.setBytesUnsafe(0, Bytes.fromHexString("0x00000001")); // Then - verifyZeroInteractions(codecRegistry); + verifyNoInteractions(codecRegistry); assertThat(t.getBytesUnsafe(0)).isEqualTo(Bytes.fromHexString("0x00000001")); } @@ -135,7 +135,7 @@ public void should_set_to_null_by_index() { t = t.setToNull(0); // Then - verifyZeroInteractions(codecRegistry); + verifyNoInteractions(codecRegistry); assertThat(t.getBytesUnsafe(0)).isNull(); } @@ -182,7 +182,7 @@ public void should_set_with_explicit_codec_by_index() { t = t.set(0, "1", intToStringCodec); // Then - verifyZeroInteractions(codecRegistry); + verifyNoInteractions(codecRegistry); verify(intToStringCodec).encode("1", ProtocolVersion.DEFAULT); assertThat(t.getBytesUnsafe(0)).isEqualTo(Bytes.fromHexString("0x00000001")); } @@ -273,7 +273,7 @@ public void should_get_bytes_by_index() { ByteBuffer bytes = t.getBytesUnsafe(0); // Then - verifyZeroInteractions(codecRegistry); + verifyNoInteractions(codecRegistry); assertThat(bytes).isEqualTo(Bytes.fromHexString("0x00000001")); } @@ -287,7 +287,7 @@ public void should_test_if_null_by_index() { boolean isNull = t.isNull(0); // Then - verifyZeroInteractions(codecRegistry); + verifyNoInteractions(codecRegistry); assertThat(isNull).isTrue(); } @@ -337,7 +337,7 @@ public void should_get_with_explicit_codec_by_index() { String s = t.get(0, intToStringCodec); // Then - verifyZeroInteractions(codecRegistry); + verifyNoInteractions(codecRegistry); verify(intToStringCodec).decode(any(ByteBuffer.class), eq(ProtocolVersion.DEFAULT)); assertThat(s).isEqualTo("1"); } diff --git a/core/src/test/java/com/datastax/oss/driver/internal/core/metadata/MetadataManagerTest.java b/core/src/test/java/com/datastax/oss/driver/internal/core/metadata/MetadataManagerTest.java index 9c5cbdba8ee..6fb1384d889 100644 --- a/core/src/test/java/com/datastax/oss/driver/internal/core/metadata/MetadataManagerTest.java +++ b/core/src/test/java/com/datastax/oss/driver/internal/core/metadata/MetadataManagerTest.java @@ -389,9 +389,9 @@ public void refreshSchema_should_drain_queued_refresh_after_newInstance_failure( CompletionStage result2 = metadataManager.refreshSchema("bar", true, true); - // Now complete the agreement check - first refresh will fail at newInstance(), - // and onSchemaRefreshComplete should drain the queued second refresh - agreementFuture.complete(true); + // Now complete the agreement check on the admin event loop - first refresh will fail at + // newInstance(), and onSchemaRefreshComplete should drain the queued second refresh. + adminEventLoopGroup.next().execute(() -> agreementFuture.complete(true)); // Then both requests should complete (not hang forever) waitForPendingAdminTasks( diff --git a/core/src/test/java/com/datastax/oss/driver/internal/core/session/MockChannelPoolFactoryHelper.java b/core/src/test/java/com/datastax/oss/driver/internal/core/session/MockChannelPoolFactoryHelper.java index 6c3dc7f3689..e4b96a4427b 100644 --- a/core/src/test/java/com/datastax/oss/driver/internal/core/session/MockChannelPoolFactoryHelper.java +++ b/core/src/test/java/com/datastax/oss/driver/internal/core/session/MockChannelPoolFactoryHelper.java @@ -23,7 +23,7 @@ import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.inOrder; import static org.mockito.Mockito.timeout; -import static org.mockito.Mockito.verifyZeroInteractions; +import static org.mockito.Mockito.verifyNoInteractions; import static org.mockito.Mockito.when; import com.datastax.oss.driver.api.core.CqlIdentifier; @@ -124,7 +124,7 @@ public static class Builder { private Builder(ChannelPoolFactory channelPoolFactory) { assertThat(MockUtil.isMock(channelPoolFactory)).as("expected a mock").isTrue(); - verifyZeroInteractions(channelPoolFactory); + verifyNoInteractions(channelPoolFactory); this.channelPoolFactory = channelPoolFactory; } diff --git a/core/src/test/java/com/datastax/oss/driver/internal/core/type/codec/TupleCodecTest.java b/core/src/test/java/com/datastax/oss/driver/internal/core/type/codec/TupleCodecTest.java index c51eea20c2e..16fa9d9f1c1 100644 --- a/core/src/test/java/com/datastax/oss/driver/internal/core/type/codec/TupleCodecTest.java +++ b/core/src/test/java/com/datastax/oss/driver/internal/core/type/codec/TupleCodecTest.java @@ -21,8 +21,8 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoInteractions; import static org.mockito.Mockito.verifyNoMoreInteractions; -import static org.mockito.Mockito.verifyZeroInteractions; import static org.mockito.Mockito.when; import com.datastax.oss.driver.api.core.ProtocolVersion; @@ -104,7 +104,7 @@ public void should_encode_tuple() { verify(intCodec).encodePrimitive(1, ProtocolVersion.DEFAULT); // null values are handled directly in the tuple codec, without calling the child codec: - verifyZeroInteractions(doubleCodec); + verifyNoInteractions(doubleCodec); verify(textCodec).encode("a", ProtocolVersion.DEFAULT); } @@ -122,7 +122,7 @@ public void should_decode_tuple() { assertThat(tuple.getString(2)).isEqualTo("a"); verify(intCodec).decodePrimitive(Bytes.fromHexString("0x00000001"), ProtocolVersion.DEFAULT); - verifyZeroInteractions(doubleCodec); + verifyNoInteractions(doubleCodec); verify(textCodec).decode(Bytes.fromHexString("0x61"), ProtocolVersion.DEFAULT); } @@ -141,9 +141,9 @@ public void should_decode_negative_element_length_as_null_field() { assertThat(tuple.isNull(1)).isTrue(); assertThat(tuple.isNull(2)).isTrue(); - verifyZeroInteractions(intCodec); - verifyZeroInteractions(doubleCodec); - verifyZeroInteractions(textCodec); + verifyNoInteractions(intCodec); + verifyNoInteractions(doubleCodec); + verifyNoInteractions(textCodec); } @Test diff --git a/core/src/test/java/com/datastax/oss/driver/internal/core/type/codec/UdtCodecTest.java b/core/src/test/java/com/datastax/oss/driver/internal/core/type/codec/UdtCodecTest.java index af94247f937..cb48ae1e58a 100644 --- a/core/src/test/java/com/datastax/oss/driver/internal/core/type/codec/UdtCodecTest.java +++ b/core/src/test/java/com/datastax/oss/driver/internal/core/type/codec/UdtCodecTest.java @@ -21,8 +21,8 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoInteractions; import static org.mockito.Mockito.verifyNoMoreInteractions; -import static org.mockito.Mockito.verifyZeroInteractions; import static org.mockito.Mockito.when; import com.datastax.oss.driver.api.core.CqlIdentifier; @@ -113,7 +113,7 @@ public void should_encode_udt() { verify(intCodec).encodePrimitive(1, ProtocolVersion.DEFAULT); // null values are handled directly in the udt codec, without calling the child codec: - verifyZeroInteractions(doubleCodec); + verifyNoInteractions(doubleCodec); verify(textCodec).encode("a", ProtocolVersion.DEFAULT); } @@ -131,7 +131,7 @@ public void should_decode_udt() { assertThat(udt.getString(2)).isEqualTo("a"); verify(intCodec).decodePrimitive(Bytes.fromHexString("0x00000001"), ProtocolVersion.DEFAULT); - verifyZeroInteractions(doubleCodec); + verifyNoInteractions(doubleCodec); verify(textCodec).decode(Bytes.fromHexString("0x61"), ProtocolVersion.DEFAULT); } @@ -165,9 +165,9 @@ public void should_decode_negative_element_length_as_null_field() { assertThat(udt.isNull(1)).isTrue(); assertThat(udt.isNull(2)).isTrue(); - verifyZeroInteractions(intCodec); - verifyZeroInteractions(doubleCodec); - verifyZeroInteractions(textCodec); + verifyNoInteractions(intCodec); + verifyNoInteractions(doubleCodec); + verifyNoInteractions(textCodec); } @Test @@ -178,9 +178,9 @@ public void should_decode_absent_element_as_null_field() { assertThat(udt.isNull(1)).isTrue(); assertThat(udt.isNull(2)).isTrue(); - verifyZeroInteractions(intCodec); - verifyZeroInteractions(doubleCodec); - verifyZeroInteractions(textCodec); + verifyNoInteractions(intCodec); + verifyNoInteractions(doubleCodec); + verifyNoInteractions(textCodec); } @Test diff --git a/core/src/test/java/com/datastax/oss/driver/internal/core/type/codec/registry/CachingCodecRegistryTest.java b/core/src/test/java/com/datastax/oss/driver/internal/core/type/codec/registry/CachingCodecRegistryTest.java index 231f67a93e7..de5fefd88ae 100644 --- a/core/src/test/java/com/datastax/oss/driver/internal/core/type/codec/registry/CachingCodecRegistryTest.java +++ b/core/src/test/java/com/datastax/oss/driver/internal/core/type/codec/registry/CachingCodecRegistryTest.java @@ -22,7 +22,8 @@ import static org.assertj.core.api.Assertions.fail; import static org.mockito.Mockito.inOrder; import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.verifyZeroInteractions; +import static org.mockito.Mockito.verifyNoInteractions; +import static org.mockito.Mockito.verifyNoMoreInteractions; import com.datastax.oss.driver.api.core.ProtocolVersion; import com.datastax.oss.driver.api.core.data.TupleValue; @@ -80,7 +81,7 @@ public void should_find_primitive_codecs_for_types(TypeCodec codec) { Class javaClass = (Class) javaType.__getToken().getType(); assertThat(registry.codecFor(cqlType, javaClass)).isSameAs(codec); // Primitive mappings never hit the cache - verifyZeroInteractions(mockCache); + verifyNoInteractions(mockCache); } @Test @@ -90,7 +91,7 @@ public void should_find_primitive_codecs_for_types(TypeCodec codec) { public void should_find_primitive_codecs_for_value(Object value, TypeCodec codec) { TestCachingCodecRegistry registry = new TestCachingCodecRegistry(mockCache); assertThat(registry.codecFor(value)).isEqualTo(codec); - verifyZeroInteractions(mockCache); + verifyNoInteractions(mockCache); } @Test @@ -101,7 +102,7 @@ public void should_find_primitive_codecs_for_cql_type_and_value( DataType cqlType, Object value, TypeCodec codec) { TestCachingCodecRegistry registry = new TestCachingCodecRegistry(mockCache); assertThat(registry.codecFor(cqlType, value)).isEqualTo(codec); - verifyZeroInteractions(mockCache); + verifyNoInteractions(mockCache); } @Test @@ -123,7 +124,7 @@ public void should_find_user_codec_for_built_in_java_type() { assertThat(registry.codecFor(DataTypes.INT)).isSameAs(TypeCodecs.INT); assertThat(registry.codecFor("123")).isSameAs(TypeCodecs.TEXT); - verifyZeroInteractions(mockCache); + verifyNoMoreInteractions(mockCache); } @Test @@ -144,7 +145,7 @@ public void should_find_user_codec_for_custom_java_type() { // The search by CQL type only still returns the built-in codec assertThat(registry.codecFor(DataTypes.TEXT)).isSameAs(TypeCodecs.TEXT); - verifyZeroInteractions(mockCache); + verifyNoMoreInteractions(mockCache); } @Test @@ -521,7 +522,7 @@ public void should_register_user_codec_at_runtime() { assertThat(registry.codecFor(DataTypes.INT)).isSameAs(TypeCodecs.INT); assertThat(registry.codecFor("123")).isSameAs(TypeCodecs.TEXT); - verifyZeroInteractions(mockCache); + verifyNoMoreInteractions(mockCache); } @Test diff --git a/core/src/test/java/com/datastax/oss/driver/internal/core/type/util/VIntCodingTest.java b/core/src/test/java/com/datastax/oss/driver/internal/core/type/util/VIntCodingTest.java index b85d6d66844..12a2d10c82d 100644 --- a/core/src/test/java/com/datastax/oss/driver/internal/core/type/util/VIntCodingTest.java +++ b/core/src/test/java/com/datastax/oss/driver/internal/core/type/util/VIntCodingTest.java @@ -41,7 +41,7 @@ public static Object[] roundTripTestValues() { -1, 1 }; - }; + } private static final long[] LONGS = new long[] { diff --git a/distribution/pom.xml b/distribution/pom.xml index bf86d2e1fe8..b73b60e09cc 100644 --- a/distribution/pom.xml +++ b/distribution/pom.xml @@ -115,6 +115,26 @@ Java driver for Scylla and Apache Cassandra® ${project.version} API Java driver for Scylla and Apache Cassandra(R) ${project.version} API + + com.github.stephenc.jcip + jcip-annotations + 1.0-1 + + + com.github.spotbugs + spotbugs-annotations + 4.9.8 + + + com.google.code.findbugs + jsr305 + 3.0.2 + + + com.esri.geometry + esri-geometry-api + ${esri.version} + at.yawk.lz4 lz4-java @@ -135,6 +155,11 @@ tinkergraph-gremlin ${tinkerpop.version} + + org.javatuples + javatuples + 1.2 + diff --git a/examples/pom.xml b/examples/pom.xml index 0d9a5c64373..5ec1487798c 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -33,6 +33,9 @@ java-driver-examples Java driver for Scylla and Apache Cassandra(R) - examples. A collection of examples to demonstrate Java Driver for Scylla and Apache Cassandra(R). + + true + @@ -130,7 +133,7 @@ at.favre.lib bcrypt - 0.8.0 + 0.10.2 @@ -148,9 +151,14 @@ maven-compiler-plugin - 1.8 - 1.8 + 11 + 11 + + com.google.errorprone + error_prone_core + 2.31.0 + com.scylladb java-driver-mapper-processor diff --git a/examples/src/main/java/com/datastax/oss/driver/examples/paging/ForwardPagingRestUi.java b/examples/src/main/java/com/datastax/oss/driver/examples/paging/ForwardPagingRestUi.java index a512457d618..fe4d6cfa820 100644 --- a/examples/src/main/java/com/datastax/oss/driver/examples/paging/ForwardPagingRestUi.java +++ b/examples/src/main/java/com/datastax/oss/driver/examples/paging/ForwardPagingRestUi.java @@ -119,7 +119,7 @@ private static void populateSchema(CqlSession session) { int videoid = i * 100 + j; session.execute( prepare.bind( - i, "user " + i, Instant.ofEpochMilli(j * 100000), videoid, "video " + videoid)); + i, "user " + i, Instant.ofEpochMilli(j * 100000L), videoid, "video " + videoid)); } } } diff --git a/examples/src/main/java/com/datastax/oss/driver/examples/paging/RandomPagingRestUi.java b/examples/src/main/java/com/datastax/oss/driver/examples/paging/RandomPagingRestUi.java index 7eb3249b0ac..f88c93241ab 100644 --- a/examples/src/main/java/com/datastax/oss/driver/examples/paging/RandomPagingRestUi.java +++ b/examples/src/main/java/com/datastax/oss/driver/examples/paging/RandomPagingRestUi.java @@ -129,7 +129,7 @@ private static void populateSchema(CqlSession session) { int videoid = i * 100 + j; session.execute( prepare.bind( - i, "user " + i, Instant.ofEpochMilli(j * 100000), videoid, "video " + videoid)); + i, "user " + i, Instant.ofEpochMilli(j * 100000L), videoid, "video " + videoid)); } } } diff --git a/faq/README.md b/faq/README.md index 97cb4decd00..5bd02fab6f6 100644 --- a/faq/README.md +++ b/faq/README.md @@ -106,7 +106,7 @@ available. ### I want to set a date on a bound statement, where did `setTimestamp()` go? -The driver now uses Java 8's improved date and time API. CQL type `timestamp` is mapped to +The driver now uses the JDK's improved date and time API. CQL type `timestamp` is mapped to `java.time.Instant`, and the corresponding getter and setter are `getInstant` and `setInstant`. See [Temporal types](../manual/core/temporal_types/) for more details. diff --git a/guava-shaded/pom.xml b/guava-shaded/pom.xml index 27d5b69077d..8578787660b 100644 --- a/guava-shaded/pom.xml +++ b/guava-shaded/pom.xml @@ -57,32 +57,6 @@ - - - org.codehaus.mojo - build-helper-maven-plugin - 1.12 - - - regex-property - - regex-property - - - maven.main.skip - ${java.version} - ^(?!1.8).+ - true - false - - - - maven-shade-plugin @@ -159,6 +133,7 @@ java-driver-guava-shaded ${project.version} jar + **/module-info.class diff --git a/guava-shaded/src/assembly/shaded-jar.xml b/guava-shaded/src/assembly/shaded-jar.xml index 4a2eac46316..f660d62a196 100644 --- a/guava-shaded/src/assembly/shaded-jar.xml +++ b/guava-shaded/src/assembly/shaded-jar.xml @@ -38,6 +38,7 @@ ${project.build.outputDirectory} META-INF/maven/com.scylladb/java-driver-guava-shaded/pom.xml + **/module-info.class diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml index 05a3e0a315d..6f790752635 100644 --- a/integration-tests/pom.xml +++ b/integration-tests/pom.xml @@ -231,6 +231,42 @@ + + maven-compiler-plugin + + + -processor + com.datastax.oss.driver.internal.mapper.processor.MapperProcessor,com.datastax.oss.driver.internal.gremlin.PatchedGremlinDslProcessor + + + + com.google.errorprone + error_prone_core + 2.31.0 + + + com.scylladb + java-driver-test-infra + ${project.version} + + + com.scylladb + java-driver-mapper-processor + ${project.version} + + + com.scylladb + java-driver-mapper-runtime + ${project.version} + + + org.apache.tinkerpop + gremlin-core + ${tinkerpop.version} + + + + org.apache.maven.plugins maven-failsafe-plugin diff --git a/integration-tests/src/test/java/com/datastax/oss/driver/core/config/DriverExecutionProfileReloadIT.java b/integration-tests/src/test/java/com/datastax/oss/driver/core/config/DriverExecutionProfileReloadIT.java index 48ccc850060..b8c3b73ddaa 100644 --- a/integration-tests/src/test/java/com/datastax/oss/driver/core/config/DriverExecutionProfileReloadIT.java +++ b/integration-tests/src/test/java/com/datastax/oss/driver/core/config/DriverExecutionProfileReloadIT.java @@ -125,8 +125,8 @@ public void should_reload_configuration_when_event_fired() { // Bump up request timeout to 10 seconds and trigger a manual reload. configSource.set("basic.request.timeout = 10s"); - session.getContext().getConfigLoader().reload(); - waitForConfigChange(session, 500, TimeUnit.MILLISECONDS); + waitForConfigChange( + session, () -> session.getContext().getConfigLoader().reload(), 3, TimeUnit.SECONDS); // Execute again, should not timeout. session.execute(query); @@ -217,11 +217,17 @@ public void should_reload_profile_config_when_reloading_config() { } private void waitForConfigChange(CqlSession session, long timeout, TimeUnit unit) { + waitForConfigChange(session, () -> {}, timeout, unit); + } + + private void waitForConfigChange( + CqlSession session, Runnable trigger, long timeout, TimeUnit unit) { CountDownLatch latch = new CountDownLatch(1); ((InternalDriverContext) session.getContext()) .getEventBus() .register(ConfigChangeEvent.class, (e) -> latch.countDown()); try { + trigger.run(); boolean success = latch.await(timeout, unit); assertThat(success).isTrue(); } catch (InterruptedException e) { diff --git a/integration-tests/src/test/java/com/datastax/oss/driver/core/metadata/NodeStateIT.java b/integration-tests/src/test/java/com/datastax/oss/driver/core/metadata/NodeStateIT.java index 41e7b73f2ed..6307b3cec6e 100644 --- a/integration-tests/src/test/java/com/datastax/oss/driver/core/metadata/NodeStateIT.java +++ b/integration-tests/src/test/java/com/datastax/oss/driver/core/metadata/NodeStateIT.java @@ -81,12 +81,9 @@ import org.junit.experimental.categories.Category; import org.junit.rules.RuleChain; import org.junit.rules.TestRule; -import org.junit.runner.RunWith; import org.mockito.InOrder; -import org.mockito.junit.MockitoJUnitRunner; @Category(ParallelizableTests.class) -@RunWith(MockitoJUnitRunner.class) public class NodeStateIT { private SimulacronRule simulacron = new SimulacronRule(ClusterSpec.builder().withNodes(2)); @@ -213,10 +210,13 @@ public void should_keep_regular_node_up_when_still_one_connection() { simulacron.cluster().closeConnection(report.getConnections().get(0), CloseType.DISCONNECT); await() - .alias("Reconnection started") + .alias("Regular node stayed up after one connection closed") .pollInterval(500, TimeUnit.MILLISECONDS) .untilAsserted( - () -> assertThat(metadataRegularNode).isUp().hasOpenConnections(1).isReconnecting()); + () -> { + assertThat(metadataRegularNode).isUp(); + assertThat(metadataRegularNode.getOpenConnections()).isBetween(1, 2); + }); inOrder.verify(nodeStateListener, never()).onDown(metadataRegularNode); } diff --git a/integration-tests/src/test/java/com/datastax/oss/driver/core/session/ListenersIT.java b/integration-tests/src/test/java/com/datastax/oss/driver/core/session/ListenersIT.java index e23b7fba4e6..c00e4cf863a 100644 --- a/integration-tests/src/test/java/com/datastax/oss/driver/core/session/ListenersIT.java +++ b/integration-tests/src/test/java/com/datastax/oss/driver/core/session/ListenersIT.java @@ -42,19 +42,19 @@ import java.util.Collections; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; +import org.junit.After; +import org.junit.Before; import org.junit.ClassRule; import org.junit.Ignore; import org.junit.Test; import org.junit.experimental.categories.Category; -import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.InOrder; import org.mockito.Mock; -import org.mockito.junit.MockitoJUnitRunner; +import org.mockito.MockitoAnnotations; @Category(ParallelizableTests.class) -@RunWith(MockitoJUnitRunner.class) public class ListenersIT { @ClassRule @@ -71,6 +71,18 @@ public class ListenersIT { @Captor private ArgumentCaptor nodeCaptor1; @Captor private ArgumentCaptor nodeCaptor2; + private AutoCloseable mocks; + + @Before + public void setup() { + mocks = MockitoAnnotations.openMocks(this); + } + + @After + public void teardown() throws Exception { + mocks.close(); + } + @Test @Ignore( "@IntegrationTestDisabledFlaky") // sleep after build() fixes the flakiness, session readiness diff --git a/integration-tests/src/test/java/com/datastax/oss/driver/core/ssl/DefaultSslEngineFactoryIT.java b/integration-tests/src/test/java/com/datastax/oss/driver/core/ssl/DefaultSslEngineFactoryIT.java index 50c9561ff9a..1c7b8b06fa2 100644 --- a/integration-tests/src/test/java/com/datastax/oss/driver/core/ssl/DefaultSslEngineFactoryIT.java +++ b/integration-tests/src/test/java/com/datastax/oss/driver/core/ssl/DefaultSslEngineFactoryIT.java @@ -117,7 +117,7 @@ protected String hostNoLookup(InetSocketAddress addr) { countNoLookups++; return super.hostNoLookup(addr); } - }; + } @Test public void should_respect_config_for_san_resolution() { diff --git a/integration-tests/src/test/java/com/datastax/oss/driver/core/tracker/RequestLoggerIT.java b/integration-tests/src/test/java/com/datastax/oss/driver/core/tracker/RequestLoggerIT.java index 20ab395c5a6..45ef528ea36 100644 --- a/integration-tests/src/test/java/com/datastax/oss/driver/core/tracker/RequestLoggerIT.java +++ b/integration-tests/src/test/java/com/datastax/oss/driver/core/tracker/RequestLoggerIT.java @@ -59,16 +59,14 @@ import org.junit.experimental.categories.Category; import org.junit.rules.RuleChain; import org.junit.rules.TestRule; -import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.Mock; +import org.mockito.MockitoAnnotations; import org.mockito.internal.verification.VerificationModeFactory; -import org.mockito.junit.MockitoJUnitRunner; import org.mockito.verification.Timeout; import org.slf4j.LoggerFactory; -@RunWith(MockitoJUnitRunner.class) @Category(ParallelizableTests.class) public class RequestLoggerIT { private static final Pattern LOG_PREFIX_PER_REQUEST = Pattern.compile("\\[s\\d*\\|\\d*]"); @@ -192,9 +190,11 @@ public class RequestLoggerIT { @Mock private Appender appender; private Logger logger; private Level oldLevel; + private AutoCloseable mocks; @Before public void setup() { + mocks = MockitoAnnotations.openMocks(this); logger = (Logger) LoggerFactory.getLogger(RequestLogger.class); oldLevel = logger.getLevel(); logger.setLevel(Level.INFO); @@ -202,9 +202,14 @@ public void setup() { } @After - public void teardown() { - logger.detachAppender(appender); - logger.setLevel(oldLevel); + public void teardown() throws Exception { + if (logger != null) { + logger.detachAppender(appender); + logger.setLevel(oldLevel); + } + if (mocks != null) { + mocks.close(); + } } @Test diff --git a/manual/core/address_resolution/README.md b/manual/core/address_resolution/README.md index 0d80312d82d..ae44feea3ea 100644 --- a/manual/core/address_resolution/README.md +++ b/manual/core/address_resolution/README.md @@ -185,7 +185,7 @@ datastax-java-driver { DNS is resolved at connection time (not at route discovery time). The driver delegates to `InetAddress.getByName()`, which is a blocking call that uses the JVM's built-in DNS cache -(30 s default TTL in Java 8+). Because this runs on Netty I/O threads, slow or unresponsive +(30 s default TTL in the JDK). Because this runs on Netty I/O threads, slow or unresponsive DNS can block connection establishment and impact driver throughput. To mitigate this, configure the JVM DNS cache TTL via the `networkaddress.cache.ttl` security property (e.g. in `$JAVA_HOME/conf/security/java.security` or programmatically with diff --git a/manual/core/async/README.md b/manual/core/async/README.md index 5b4bac3dccf..24601020b32 100644 --- a/manual/core/async/README.md +++ b/manual/core/async/README.md @@ -21,7 +21,7 @@ under the License. ### Quick overview -Async driver methods return Java 8's [CompletionStage]. +Async driver methods return the JDK's [CompletionStage]. * don't call synchronous methods from asynchronous callbacks (the driver detects that and throws). * callbacks execute on I/O threads: consider providing your own executor for expensive computations. @@ -224,6 +224,6 @@ even when iterating through the results of a request. `session.executeAsync` ret This greatly simplifies asynchronous paging; see the [paging](../paging/#asynchronous-paging) documentation for more details and an example. -[CompletionStage]: https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletionStage.html +[CompletionStage]: https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/concurrent/CompletionStage.html [AsyncResultSet]: https://docs.datastax.com/en/drivers/java/4.17/com/datastax/oss/driver/api/core/cql/AsyncResultSet.html diff --git a/manual/core/custom_codecs/README.md b/manual/core/custom_codecs/README.md index f3b7be1e3d9..038766a56f1 100644 --- a/manual/core/custom_codecs/README.md +++ b/manual/core/custom_codecs/README.md @@ -698,17 +698,17 @@ private static String formatRow(Row row) { [MappingCodec]: https://docs.datastax.com/en/drivers/java/4.17/com/datastax/oss/driver/api/core/type/codec/MappingCodec.html [SessionBuilder.addTypeCodecs]: https://docs.datastax.com/en/drivers/java/4.17/com/datastax/oss/driver/api/core/session/SessionBuilder.html#addTypeCodecs-com.datastax.oss.driver.api.core.type.codec.TypeCodec...- -[Enums]: https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html -[Enum.name()]: https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html#name-- -[Enum.ordinal()]: https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html#ordinal-- -[java.nio.ByteBuffer]: https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html -[java.util.List]: https://docs.oracle.com/javase/8/docs/api/java/util/List.html -[java.util.Optional]: https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html -[Optional.empty()]: https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html#empty-- -[java.time.Instant]: https://docs.oracle.com/javase/8/docs/api/java/time/Instant.html -[java.time.ZonedDateTime]: https://docs.oracle.com/javase/8/docs/api/java/time/ZonedDateTime.html -[java.time.LocalDateTime]: https://docs.oracle.com/javase/8/docs/api/java/time/LocalDateTime.html -[java.time.ZoneId]: https://docs.oracle.com/javase/8/docs/api/java/time/ZoneId.html +[Enums]: https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Enum.html +[Enum.name()]: https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Enum.html#name-- +[Enum.ordinal()]: https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Enum.html#ordinal-- +[java.nio.ByteBuffer]: https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/nio/ByteBuffer.html +[java.util.List]: https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/List.html +[java.util.Optional]: https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Optional.html +[Optional.empty()]: https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Optional.html#empty-- +[java.time.Instant]: https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/time/Instant.html +[java.time.ZonedDateTime]: https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/time/ZonedDateTime.html +[java.time.LocalDateTime]: https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/time/LocalDateTime.html +[java.time.ZoneId]: https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/time/ZoneId.html [ExtraTypeCodecs]: https://docs.datastax.com/en/drivers/java/4.17/com/datastax/oss/driver/api/core/type/codec/ExtraTypeCodecs.html [ExtraTypeCodecs.BLOB_TO_ARRAY]: https://docs.datastax.com/en/drivers/java/4.17/com/datastax/oss/driver/api/core/type/codec/ExtraTypeCodecs.html#BLOB_TO_ARRAY diff --git a/manual/core/integration/README.md b/manual/core/integration/README.md index af52bad6792..4ec1dd59312 100644 --- a/manual/core/integration/README.md +++ b/manual/core/integration/README.md @@ -134,7 +134,7 @@ $ find . -type f ##### Project descriptor `pom.xml` is the [Project Object Model][maven_pom] that describes your application. We declare the -dependencies, and tell Maven that we're going to use Java 8: +dependencies, and tell Maven that we're going to use Java 11: ```xml @@ -165,8 +165,8 @@ dependencies, and tell Maven that we're going to use Java 8: maven-compiler-plugin - 1.8 - 1.8 + 11 + 11 @@ -281,7 +281,7 @@ version '1.0.0-SNAPSHOT' apply plugin: 'java' -sourceCompatibility = 1.8 +sourceCompatibility = 11 repositories { mavenCentral() diff --git a/manual/core/metadata/schema/README.md b/manual/core/metadata/schema/README.md index 673c87e57ed..ae119a20b57 100644 --- a/manual/core/metadata/schema/README.md +++ b/manual/core/metadata/schema/README.md @@ -352,4 +352,4 @@ take a look at the [Performance](../../performance/#schema-updates) page for a f [DseAggregateMetadata]: https://docs.datastax.com/en/drivers/java/4.17/com/datastax/dse/driver/api/core/metadata/schema/DseAggregateMetadata.html [JAVA-750]: https://datastax-oss.atlassian.net/browse/JAVA-750 -[java.util.regex.Pattern]: https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html +[java.util.regex.Pattern]: https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/regex/Pattern.html diff --git a/manual/core/paging/README.md b/manual/core/paging/README.md index 2df92bd69d1..99c7cecde9b 100644 --- a/manual/core/paging/README.md +++ b/manual/core/paging/README.md @@ -279,6 +279,6 @@ and offset paging. [OffsetPager]: https://docs.datastax.com/en/drivers/java/4.17/com/datastax/oss/driver/api/core/paging/OffsetPager.html [PagingState]: https://docs.datastax.com/en/drivers/java/4.17/com/datastax/oss/driver/api/core/cql/PagingState.html -[CompletionStage]: https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletionStage.html +[CompletionStage]: https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/concurrent/CompletionStage.html [driver examples]: https://github.com/datastax/java-driver/tree/4.x/examples/src/main/java/com/datastax/oss/driver/examples/paging diff --git a/manual/mapper/config/README.md b/manual/mapper/config/README.md index 0154b03deaf..c4fe9ef0ce7 100644 --- a/manual/mapper/config/README.md +++ b/manual/mapper/config/README.md @@ -52,8 +52,8 @@ configuration (make sure you use version 3.5 or higher): maven-compiler-plugin 3.8.1 - 1.8 - 1.8 + 11 + 11 com.scylladb @@ -65,7 +65,7 @@ configuration (make sure you use version 3.5 or higher): org.slf4j slf4j-nop - 1.7.26 + 2.0.18 diff --git a/manual/mapper/daos/delete/README.md b/manual/mapper/daos/delete/README.md index e67ecdc8a6e..1d9f9c6cb9b 100644 --- a/manual/mapper/daos/delete/README.md +++ b/manual/mapper/daos/delete/README.md @@ -181,5 +181,5 @@ entity class and the [naming strategy](../../entities/#naming-strategy)). [ReactiveResultSet]: https://docs.datastax.com/en/drivers/java/4.17/com/datastax/dse/driver/api/core/cql/reactive/ReactiveResultSet.html -[CompletionStage]: https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletionStage.html -[CompletableFuture]: https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html +[CompletionStage]: https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/concurrent/CompletionStage.html +[CompletableFuture]: https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/concurrent/CompletableFuture.html diff --git a/manual/mapper/daos/getentity/README.md b/manual/mapper/daos/getentity/README.md index de9a530b558..7b54aeddc38 100644 --- a/manual/mapper/daos/getentity/README.md +++ b/manual/mapper/daos/getentity/README.md @@ -159,7 +159,6 @@ If the return type doesn't match the parameter type (for example [PagingIterable [Row]: https://docs.datastax.com/en/drivers/java/4.17/com/datastax/oss/driver/api/core/cql/Row.html [UdtValue]: https://docs.datastax.com/en/drivers/java/4.17/com/datastax/oss/driver/api/core/data/UdtValue.html -[Stream]: https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html - +[Stream]: https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/stream/Stream.html diff --git a/manual/mapper/daos/increment/README.md b/manual/mapper/daos/increment/README.md index 44b017be2e1..275c2272139 100644 --- a/manual/mapper/daos/increment/README.md +++ b/manual/mapper/daos/increment/README.md @@ -101,5 +101,5 @@ entity class and the naming convention). [@PartitionKey]: https://docs.datastax.com/en/drivers/java/4.17/com/datastax/oss/driver/api/mapper/annotations/PartitionKey.html [@CqlName]: https://docs.datastax.com/en/drivers/java/4.17/com/datastax/oss/driver/api/mapper/annotations/CqlName.html -[CompletionStage]: https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletionStage.html -[CompletableFuture]: https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html +[CompletionStage]: https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/concurrent/CompletionStage.html +[CompletableFuture]: https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/concurrent/CompletableFuture.html diff --git a/manual/mapper/daos/insert/README.md b/manual/mapper/daos/insert/README.md index b90ffa33a32..bf9e5f223f8 100644 --- a/manual/mapper/daos/insert/README.md +++ b/manual/mapper/daos/insert/README.md @@ -135,6 +135,6 @@ entity class and the [naming strategy](../../entities/#naming-strategy)). [BoundStatement]: https://docs.datastax.com/en/drivers/java/4.17/com/datastax/oss/driver/api/core/cql/BoundStatement.html [ReactiveResultSet]: https://docs.datastax.com/en/drivers/java/4.17/com/datastax/dse/driver/api/core/cql/reactive/ReactiveResultSet.html -[CompletionStage]: https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletionStage.html -[CompletableFuture]: https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html -[Optional]: https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html +[CompletionStage]: https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/concurrent/CompletionStage.html +[CompletableFuture]: https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/concurrent/CompletableFuture.html +[Optional]: https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Optional.html diff --git a/manual/mapper/daos/query/README.md b/manual/mapper/daos/query/README.md index a11753da880..e7b3c62e974 100644 --- a/manual/mapper/daos/query/README.md +++ b/manual/mapper/daos/query/README.md @@ -145,7 +145,7 @@ Then: [ReactiveResultSet]: https://docs.datastax.com/en/drivers/java/4.17/com/datastax/dse/driver/api/core/cql/reactive/ReactiveResultSet.html [MappedReactiveResultSet]: https://docs.datastax.com/en/drivers/java/4.17/com/datastax/dse/driver/api/mapper/reactive/MappedReactiveResultSet.html -[CompletionStage]: https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletionStage.html -[CompletableFuture]: https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html -[Optional]: https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html -[Stream]: https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html +[CompletionStage]: https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/concurrent/CompletionStage.html +[CompletableFuture]: https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/concurrent/CompletableFuture.html +[Optional]: https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Optional.html +[Stream]: https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/stream/Stream.html diff --git a/manual/mapper/daos/select/README.md b/manual/mapper/daos/select/README.md index fb6c4ca2077..d72715f61c4 100644 --- a/manual/mapper/daos/select/README.md +++ b/manual/mapper/daos/select/README.md @@ -194,7 +194,7 @@ entity class and the [naming strategy](../../entities/#naming-strategy)). [PagingIterable.spliterator]: https://docs.datastax.com/en/drivers/java/4.17/com/datastax/oss/driver/api/core/PagingIterable.html#spliterator-- [MappedReactiveResultSet]: https://docs.datastax.com/en/drivers/java/4.17/com/datastax/dse/driver/api/mapper/reactive/MappedReactiveResultSet.html -[CompletionStage]: https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletionStage.html -[CompletableFuture]: https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html -[Optional]: https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html -[Stream]: https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html +[CompletionStage]: https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/concurrent/CompletionStage.html +[CompletableFuture]: https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/concurrent/CompletableFuture.html +[Optional]: https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Optional.html +[Stream]: https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/stream/Stream.html diff --git a/manual/mapper/daos/update/README.md b/manual/mapper/daos/update/README.md index 87e9286c800..c87441a6e9d 100644 --- a/manual/mapper/daos/update/README.md +++ b/manual/mapper/daos/update/README.md @@ -166,9 +166,9 @@ entity class and the naming convention). [@Update]: https://docs.datastax.com/en/drivers/java/4.17/com/datastax/oss/driver/api/mapper/annotations/Update.html [AsyncResultSet]: https://docs.datastax.com/en/drivers/java/4.17/com/datastax/oss/driver/api/core/cql/AsyncResultSet.html -[Boolean]: https://docs.oracle.com/javase/8/docs/api/index.html?java/lang/Boolean.html -[CompletionStage]: https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletionStage.html -[CompletableFuture]: https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html +[Boolean]: https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Boolean.html +[CompletionStage]: https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/concurrent/CompletionStage.html +[CompletableFuture]: https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/concurrent/CompletableFuture.html [ResultSet]: https://docs.datastax.com/en/drivers/java/4.17/com/datastax/oss/driver/api/core/cql/ResultSet.html [BoundStatement]: https://docs.datastax.com/en/drivers/java/4.17/com/datastax/oss/driver/api/core/cql/BoundStatement.html [ReactiveResultSet]: https://docs.datastax.com/en/drivers/java/4.17/com/datastax/dse/driver/api/core/cql/reactive/ReactiveResultSet.html diff --git a/mapper-processor/src/main/java/com/datastax/oss/driver/internal/mapper/processor/MapperProcessor.java b/mapper-processor/src/main/java/com/datastax/oss/driver/internal/mapper/processor/MapperProcessor.java index 619a07ea886..ffd1527893e 100644 --- a/mapper-processor/src/main/java/com/datastax/oss/driver/internal/mapper/processor/MapperProcessor.java +++ b/mapper-processor/src/main/java/com/datastax/oss/driver/internal/mapper/processor/MapperProcessor.java @@ -20,7 +20,6 @@ import com.datastax.oss.driver.api.mapper.annotations.Dao; import com.datastax.oss.driver.api.mapper.annotations.Entity; import com.datastax.oss.driver.api.mapper.annotations.Mapper; -import com.datastax.oss.driver.shaded.guava.common.base.Strings; import com.datastax.oss.driver.shaded.guava.common.base.Throwables; import com.datastax.oss.driver.shaded.guava.common.collect.ImmutableSet; import java.lang.annotation.Annotation; @@ -93,7 +92,7 @@ public boolean process( roundEnvironment, Dao.class, ElementKind.INTERFACE, generatorFactory::newDaoImplementation); processAnnotatedTypes( roundEnvironment, Mapper.class, ElementKind.INTERFACE, generatorFactory::newMapper); - return true; + return false; } protected ProcessorContext buildContext( @@ -167,7 +166,7 @@ private String computeIndent(Map options) { if (amountSpec != null) { try { int amount = Integer.parseInt(amountSpec); - return Strings.repeat(tabs ? "\t" : " ", amount); + return (tabs ? "\t" : " ").repeat(amount); } catch (NumberFormatException e) { messager.warn( "Could not parse %s: expected a number, got '%s'. Defaulting to %s.", diff --git a/mapper-processor/src/main/java/com/datastax/oss/driver/internal/mapper/processor/dao/DaoReturnTypeKind.java b/mapper-processor/src/main/java/com/datastax/oss/driver/internal/mapper/processor/dao/DaoReturnTypeKind.java index 72089fdccb3..233bf946406 100644 --- a/mapper-processor/src/main/java/com/datastax/oss/driver/internal/mapper/processor/dao/DaoReturnTypeKind.java +++ b/mapper-processor/src/main/java/com/datastax/oss/driver/internal/mapper/processor/dao/DaoReturnTypeKind.java @@ -40,7 +40,7 @@ public interface DaoReturnTypeKind { * @param helperFieldName the name of the helper for entity conversions (might not get used for * certain kinds, in that case it's ok to pass null). * @param methodElement the return type of the method (in case the result must be cast). - * @param typeParameters + * @param typeParameters the type parameters declared on the DAO method. */ void addExecuteStatement( CodeBlock.Builder methodBuilder, diff --git a/mapper-processor/src/main/java/com/datastax/oss/driver/internal/mapper/processor/util/Classes.java b/mapper-processor/src/main/java/com/datastax/oss/driver/internal/mapper/processor/util/Classes.java index de45d36769d..ffd2651d033 100644 --- a/mapper-processor/src/main/java/com/datastax/oss/driver/internal/mapper/processor/util/Classes.java +++ b/mapper-processor/src/main/java/com/datastax/oss/driver/internal/mapper/processor/util/Classes.java @@ -106,7 +106,7 @@ public boolean isMap(DeclaredType declaredType) { } /** - * Whether a type mirror is a parameterized Java 8 future ({@code CompletionStage or + * Whether a type mirror is a parameterized future such as {@code CompletionStage} or {@code * CompletableFuture}. */ public boolean isFuture(DeclaredType declaredType) { diff --git a/mapper-runtime/src/main/java/com/datastax/oss/driver/api/mapper/annotations/Delete.java b/mapper-runtime/src/main/java/com/datastax/oss/driver/api/mapper/annotations/Delete.java index a9d2c03912f..e1f87e9d414 100644 --- a/mapper-runtime/src/main/java/com/datastax/oss/driver/api/mapper/annotations/Delete.java +++ b/mapper-runtime/src/main/java/com/datastax/oss/driver/api/mapper/annotations/Delete.java @@ -47,7 +47,7 @@ * } * * - *

Parameters

+ *

Parameters

* * The method can operate either on an entity instance, or on a primary key (partition key + * clustering columns). @@ -77,7 +77,7 @@ * parameter. It will be applied to the statement before execution. This allows you to customize * certain aspects of the request (page size, timeout, etc) at runtime. * - *

Return type

+ *

Return type

* * The method can return: * @@ -127,7 +127,7 @@ * practical purpose for that since those queries always return {@code wasApplied = true} and an * empty result set. * - *

Target keyspace and table

+ *

Target keyspace and table

* * If a keyspace was specified when creating the DAO (see {@link DaoFactory}), then the generated * query targets that keyspace. Otherwise, it doesn't specify a keyspace, and will only work if the diff --git a/mapper-runtime/src/main/java/com/datastax/oss/driver/api/mapper/annotations/GetEntity.java b/mapper-runtime/src/main/java/com/datastax/oss/driver/api/mapper/annotations/GetEntity.java index d86174bdc49..c80d928ee81 100644 --- a/mapper-runtime/src/main/java/com/datastax/oss/driver/api/mapper/annotations/GetEntity.java +++ b/mapper-runtime/src/main/java/com/datastax/oss/driver/api/mapper/annotations/GetEntity.java @@ -55,7 +55,7 @@ *

It does not perform a query. Instead, those methods are intended for cases where you already * have a query result, and just need the conversion logic. * - *

Parameters

+ *

Parameters

* * The method must have a single parameter. The following types are allowed: * @@ -69,7 +69,7 @@ * The data must match the target entity: the generated code will try to extract every mapped * property, and fail if one is missing. * - *

Return type

+ *

Return type

* * The method can return: * diff --git a/mapper-runtime/src/main/java/com/datastax/oss/driver/api/mapper/annotations/Increment.java b/mapper-runtime/src/main/java/com/datastax/oss/driver/api/mapper/annotations/Increment.java index bb86fa5b8ab..b6e0e6d7086 100644 --- a/mapper-runtime/src/main/java/com/datastax/oss/driver/api/mapper/annotations/Increment.java +++ b/mapper-runtime/src/main/java/com/datastax/oss/driver/api/mapper/annotations/Increment.java @@ -58,7 +58,7 @@ * } * * - *

Parameters

+ *

Parameters

* * The entity class must be specified with {@link #entityClass()}. * @@ -92,12 +92,12 @@ * parameter. It will be applied to the statement before execution. This allows you to customize * certain aspects of the request (page size, timeout, etc) at runtime. * - *

Return type

+ *

Return type

* *

The method can return {@code void}, a void {@link CompletionStage} or {@link * CompletableFuture}, or a {@link ReactiveResultSet}. * - *

Target keyspace and table

+ *

Target keyspace and table

* *

If a keyspace was specified when creating the DAO (see {@link DaoFactory}), then the generated * query targets that keyspace. Otherwise, it doesn't specify a keyspace, and will only work if the diff --git a/mapper-runtime/src/main/java/com/datastax/oss/driver/api/mapper/annotations/Insert.java b/mapper-runtime/src/main/java/com/datastax/oss/driver/api/mapper/annotations/Insert.java index a00c0e88c21..678c543a14c 100644 --- a/mapper-runtime/src/main/java/com/datastax/oss/driver/api/mapper/annotations/Insert.java +++ b/mapper-runtime/src/main/java/com/datastax/oss/driver/api/mapper/annotations/Insert.java @@ -48,7 +48,7 @@ * } * * - *

Parameters

+ *

Parameters

* * The first parameter must be the entity to insert. * @@ -66,7 +66,7 @@ * parameter. It will be applied to the statement before execution. This allows you to customize * certain aspects of the request (page size, timeout, etc) at runtime. * - *

Return type

+ *

Return type

* * The method can return: * @@ -122,7 +122,7 @@ *
  • a {@linkplain MapperResultProducer custom type}. * * - *

    Target keyspace and table

    + *

    Target keyspace and table

    * * If a keyspace was specified when creating the DAO (see {@link DaoFactory}), then the generated * query targets that keyspace. Otherwise, it doesn't specify a keyspace, and will only work if the diff --git a/mapper-runtime/src/main/java/com/datastax/oss/driver/api/mapper/annotations/Query.java b/mapper-runtime/src/main/java/com/datastax/oss/driver/api/mapper/annotations/Query.java index c362453bb3a..65543ab0a7d 100644 --- a/mapper-runtime/src/main/java/com/datastax/oss/driver/api/mapper/annotations/Query.java +++ b/mapper-runtime/src/main/java/com/datastax/oss/driver/api/mapper/annotations/Query.java @@ -55,7 +55,7 @@ * * This is the equivalent of what was called "accessor methods" in the driver 3 mapper. * - *

    Parameters

    + *

    Parameters

    * * The query string provided in {@link #value()} will typically contain CQL placeholders. The * method's parameters must match those placeholders: same name and a compatible Java type. @@ -70,7 +70,7 @@ * parameter. It will be applied to the statement before execution. This allows you to customize * certain aspects of the request (page size, timeout, etc) at runtime. * - *

    Return type

    + *

    Return type

    * * The method can return: * @@ -100,7 +100,7 @@ *
  • a {@linkplain MapperResultProducer custom type}. * * - *

    Target keyspace and table

    + *

    Target keyspace and table

    * * To avoid hard-coding the keyspace and table name, the query string supports 3 additional * placeholders: {@code ${keyspaceId}}, {@code ${tableId}} and {@code ${qualifiedTableId}}. They get diff --git a/mapper-runtime/src/main/java/com/datastax/oss/driver/api/mapper/annotations/Select.java b/mapper-runtime/src/main/java/com/datastax/oss/driver/api/mapper/annotations/Select.java index 53d9a58b6fc..58907049d73 100644 --- a/mapper-runtime/src/main/java/com/datastax/oss/driver/api/mapper/annotations/Select.java +++ b/mapper-runtime/src/main/java/com/datastax/oss/driver/api/mapper/annotations/Select.java @@ -48,7 +48,7 @@ * } * * - *

    Parameters

    + *

    Parameters

    * * If {@link #customWhereClause()} is empty, the mapper defaults to a selection by primary key * (partition key + clustering columns). The method's parameters must match the types of the primary @@ -87,7 +87,7 @@ * parameter. It will be applied to the statement before execution. This allows you to customize * certain aspects of the request (page size, timeout, etc) at runtime. * - *

    Return type

    + *

    Return type

    * *

    In all cases, the method can return: * @@ -132,7 +132,7 @@ *

  • a {@linkplain MapperResultProducer custom type}. * * - *

    Target keyspace and table

    + *

    Target keyspace and table

    * * If a keyspace was specified when creating the DAO (see {@link DaoFactory}), then the generated * query targets that keyspace. Otherwise, it doesn't specify a keyspace, and will only work if the diff --git a/mapper-runtime/src/main/java/com/datastax/oss/driver/api/mapper/annotations/SetEntity.java b/mapper-runtime/src/main/java/com/datastax/oss/driver/api/mapper/annotations/SetEntity.java index cc1cb9b7e88..82d988e4151 100644 --- a/mapper-runtime/src/main/java/com/datastax/oss/driver/api/mapper/annotations/SetEntity.java +++ b/mapper-runtime/src/main/java/com/datastax/oss/driver/api/mapper/annotations/SetEntity.java @@ -51,7 +51,7 @@ * It does not perform a query. Instead, those methods are intended for cases where you will execute * the query yourself, and just need the conversion logic. * - *

    Parameters

    + *

    Parameters

    * * The method must have two parameters: one is the entity instance, the other must be a subtype of * {@link SettableByName} (the most likely candidates are {@link BoundStatement}, {@link @@ -60,7 +60,7 @@ * *

    The order of the parameters does not matter. * - *

    Return type

    + *

    Return type

    * * The method can either be void, or return the exact same type as its settable parameter. * diff --git a/mapper-runtime/src/main/java/com/datastax/oss/driver/api/mapper/annotations/Update.java b/mapper-runtime/src/main/java/com/datastax/oss/driver/api/mapper/annotations/Update.java index 315ac1ecfe7..e8b2e77de04 100644 --- a/mapper-runtime/src/main/java/com/datastax/oss/driver/api/mapper/annotations/Update.java +++ b/mapper-runtime/src/main/java/com/datastax/oss/driver/api/mapper/annotations/Update.java @@ -49,7 +49,7 @@ * } * * - *

    Parameters

    + *

    Parameters

    * *

    The first parameter must be an entity instance. All of its non-PK properties will be * interpreted as values to update. @@ -88,7 +88,7 @@ * parameter. It will be applied to the statement before execution. This allows you to customize * certain aspects of the request (page size, timeout, etc) at runtime. * - *

    Return type

    + *

    Return type

    * *

    The method can return: * @@ -135,7 +135,7 @@ *

  • a {@linkplain MapperResultProducer custom type}. * * - *

    Target keyspace and table

    + *

    Target keyspace and table

    * *

    If a keyspace was specified when creating the DAO (see {@link DaoFactory}), then the generated * query targets that keyspace. Otherwise, it doesn't specify a keyspace, and will only work if the diff --git a/metrics/micrometer/src/main/java/com/datastax/oss/driver/internal/metrics/micrometer/MicrometerMetricUpdater.java b/metrics/micrometer/src/main/java/com/datastax/oss/driver/internal/metrics/micrometer/MicrometerMetricUpdater.java index b9507c8b7cf..808a963f096 100644 --- a/metrics/micrometer/src/main/java/com/datastax/oss/driver/internal/metrics/micrometer/MicrometerMetricUpdater.java +++ b/metrics/micrometer/src/main/java/com/datastax/oss/driver/internal/metrics/micrometer/MicrometerMetricUpdater.java @@ -55,14 +55,14 @@ protected MicrometerMetricUpdater( @Override public void incrementCounter(MetricT metric, @Nullable String profileName, long amount) { if (isEnabled(metric, profileName)) { - getOrCreateCounterFor(metric).increment(amount); + getOrCreateCounterFor(metric).increment((double) amount); } } @Override public void updateHistogram(MetricT metric, @Nullable String profileName, long value) { if (isEnabled(metric, profileName)) { - getOrCreateDistributionSummaryFor(metric).record(value); + getOrCreateDistributionSummaryFor(metric).record((double) value); } } @@ -70,7 +70,7 @@ public void updateHistogram(MetricT metric, @Nullable String profileName, long v public void markMeter(MetricT metric, @Nullable String profileName, long amount) { if (isEnabled(metric, profileName)) { // There is no meter type in Micrometer, so use a counter - getOrCreateCounterFor(metric).increment(amount); + getOrCreateCounterFor(metric).increment((double) amount); } } diff --git a/metrics/micrometer/src/test/java/com/datastax/oss/driver/internal/metrics/micrometer/MicrometerSessionMetricUpdaterTest.java b/metrics/micrometer/src/test/java/com/datastax/oss/driver/internal/metrics/micrometer/MicrometerSessionMetricUpdaterTest.java index 0deb377457a..79f7c3a8ff7 100644 --- a/metrics/micrometer/src/test/java/com/datastax/oss/driver/internal/metrics/micrometer/MicrometerSessionMetricUpdaterTest.java +++ b/metrics/micrometer/src/test/java/com/datastax/oss/driver/internal/metrics/micrometer/MicrometerSessionMetricUpdaterTest.java @@ -132,6 +132,9 @@ public void should_not_create_sla_percentiles( when(context.getMetricIdGenerator()).thenReturn(generator); when(profile.getDuration(DefaultDriverOption.METRICS_NODE_EXPIRE_AFTER)) .thenReturn(Duration.ofHours(1)); + when(profile.getDuration(lowest)).thenReturn(Duration.ofMillis(10)); + when(profile.getDuration(highest)).thenReturn(Duration.ofSeconds(1)); + when(profile.getInt(digits)).thenReturn(5); when(profile.isDefined(sla)).thenReturn(false); when(profile.getDurationList(sla)) .thenReturn(Arrays.asList(Duration.ofMillis(100), Duration.ofMillis(500))); diff --git a/osgi-tests/pom.xml b/osgi-tests/pom.xml index dc9eae882d7..0067d5a009e 100644 --- a/osgi-tests/pom.xml +++ b/osgi-tests/pom.xml @@ -33,6 +33,9 @@ java-driver-osgi-tests jar Java driver for Scylla and Apache Cassandra(R) - OSGi tests + + true + com.scylladb @@ -162,6 +165,23 @@ + + maven-compiler-plugin + + + + com.scylladb + java-driver-mapper-processor + ${project.version} + + + com.scylladb + java-driver-mapper-runtime + ${project.version} + + + + org.apache.servicemix.tooling depends-maven-plugin diff --git a/performance/duration-test.yaml b/performance/duration-test.yaml index 6e718f2add8..de76b9e1e1f 100644 --- a/performance/duration-test.yaml +++ b/performance/duration-test.yaml @@ -47,7 +47,7 @@ ensemble: configuration_manager: - name: ctool properties: - java.version: openjdk8 + java.version: openjdk11 product.install.type: tarball product.type: {{server_type}} product.version: {{server_version}} @@ -69,7 +69,7 @@ ensemble: configuration_manager: - name: ctool properties: - java.version: openjdk8 + java.version: openjdk11 install.maven: true - name: java_driver properties: diff --git a/pom.xml b/pom.xml index e7e570a5e36..79f7be9e35d 100644 --- a/pom.xml +++ b/pom.xml @@ -54,10 +54,10 @@ UTF-8 UTF-8 - 1.4.5 + 1.4.8 2.2.2 - 4.2.37 + 4.2.38 4.1.133.Final 1.2.1 3.5.6 - 1.7.36 + 2.0.18 1.0.4 20250517 - 2.21.1 - 2.20.0 + 2.21.3 + 2.21.3 1.9.12 1.1.10.8 - 1.10.1 + 1.11.0 3.27.7 - 1.5.0 + 1.6.0 4.13.2 - 1.2.13 + 1.5.32 6.0.0 7.0.5 4.13.4 2.6.17 - 0.13.0.0 + 0.14.0.0 1.1.4 2.47 2.6.1 @@ -94,13 +94,14 @@ 2.2.21 4.3.0 2.0.0-M19 - 3.5.4 + 3.5.5 22.0.0.2 false ${skipTests} false false + false @@ -182,7 +183,7 @@ com.google.guava guava - 33.3.1-jre + 33.6.0-jre com.typesafe @@ -213,7 +214,7 @@ com.github.jnr jnr-posix - 3.1.20 + 3.1.22 io.dropwizard.metrics @@ -281,7 +282,7 @@ com.github.spotbugs spotbugs-annotations - 4.9.6 + 4.9.8 com.squareup @@ -306,12 +307,12 @@ net.bytebuddy byte-buddy - 1.17.7 + 1.18.8-jdk5 org.mockito mockito-core - 2.28.2 + 5.23.0 io.reactivex.rxjava2 @@ -441,7 +442,7 @@ org.testng testng - 7.5.1 + 7.12.0 org.apache.directory.server @@ -553,7 +554,7 @@ maven-compiler-plugin - 3.8.1 + 3.15.0 org.apache.maven.plugins @@ -563,7 +564,7 @@ com.coveo fmt-maven-plugin - 2.9 + 2.13 au.com.acegi @@ -580,17 +581,17 @@ maven-shade-plugin - 3.6.1 + 3.6.2 maven-assembly-plugin - 3.7.1 + 3.8.0 net.alchim31.maven scala-maven-plugin - 4.9.6 + 4.9.10 2.11 @@ -601,7 +602,7 @@ maven-source-plugin - 3.3.1 + 3.4.0 maven-javadoc-plugin @@ -609,7 +610,7 @@ maven-jar-plugin - 3.4.2 + 3.5.0 maven-gpg-plugin @@ -617,7 +618,7 @@ maven-release-plugin - 2.5.3 + 3.3.1 maven-install-plugin @@ -641,12 +642,12 @@ maven-dependency-plugin - 3.9.0 + 3.10.0 org.jacoco jacoco-maven-plugin - 0.8.13 + 0.8.14 org.apache.felix @@ -687,7 +688,7 @@ org.codehaus.mojo versions-maven-plugin - 2.19.1 + 2.21.0 org.codehaus.mojo @@ -705,7 +706,7 @@ org.sonatype.central central-publishing-maven-plugin - 0.8.0 + 0.10.0 true central @@ -717,33 +718,23 @@ maven-compiler-plugin - javac-with-errorprone - true - 1.8 - 1.8 + 11 - -Xep:FutureReturnValueIgnored:OFF - -Xep:PreferJavaTimeOverload:OFF - -Xep:AnnotateFormatMethod:OFF - -Xep:WildcardImport:WARN - -XepExcludedPaths:.*/target/(?:generated-sources|generated-test-sources)/.* + -XDcompilePolicy=simple + --should-stop=ifError=FLOW + -Xplugin:ErrorProne -Xep:FutureReturnValueIgnored:OFF -Xep:PreferJavaTimeOverload:OFF -Xep:AnnotateFormatMethod:OFF -Xep:WildcardImport:WARN -Xep:MissingSummary:OFF -Xep:StringCaseLocaleUsage:OFF -Xep:InlineMeSuggester:OFF -Xep:AddressSelection:OFF -XepExcludedPaths:.*/(?:src/test|target/(?:generated-sources|generated-test-sources))/.* + + + com.google.errorprone + error_prone_core + 2.31.0 + + true true false - - - org.codehaus.plexus - plexus-compiler-javac-errorprone - 2.8.6 - - - com.google.errorprone - error_prone_core - 2.3.4 - - com.coveo @@ -842,6 +833,7 @@ false true all,-missing + true com.datastax.*.driver.internal* @@ -849,12 +841,9 @@ a API note: - + - leaks + leaks-private-api X @@ -890,6 +879,7 @@ height="0" width="0" style="display:none;visibility:hidden"> process-classes + ${api.plumber.skip} com.datastax.oss.doclet.ApiPlumber com.datastax.oss @@ -1087,18 +1077,21 @@ height="0" width="0" style="display:none;visibility:hidden"> - - test-jdk-8 + + test-jdk-11 - [8,) + [11,) - - test-jdk-11 + + skip-api-plumber-on-jdk-13 - [11,) + [13,) + + true + diff --git a/test-infra/pom.xml b/test-infra/pom.xml index b6821c0ccf0..ceb4f14ac3b 100644 --- a/test-infra/pom.xml +++ b/test-infra/pom.xml @@ -48,6 +48,11 @@ com.scylladb java-driver-core + + org.apache.tinkerpop + gremlin-core + provided + com.github.spotbugs spotbugs-annotations diff --git a/test-infra/src/main/java/com/datastax/oss/driver/api/testinfra/ccm/CcmBridge.java b/test-infra/src/main/java/com/datastax/oss/driver/api/testinfra/ccm/CcmBridge.java index e7b2b4e4a02..e35c8013e35 100644 --- a/test-infra/src/main/java/com/datastax/oss/driver/api/testinfra/ccm/CcmBridge.java +++ b/test-infra/src/main/java/com/datastax/oss/driver/api/testinfra/ccm/CcmBridge.java @@ -279,7 +279,8 @@ private static Version parseCcmVersion() { if (configDir != null) { execute(CommandLine.parse("ccm remove get_version --config-dir=" + configDir)); } - } catch (Exception ignored) { + } catch (Exception e) { + LOG.warn("Failed to remove temporary CCM cluster used to resolve {}", versionString, e); } } return result; diff --git a/test-infra/src/main/java/com/datastax/oss/driver/internal/gremlin/PatchedGremlinDslProcessor.java b/test-infra/src/main/java/com/datastax/oss/driver/internal/gremlin/PatchedGremlinDslProcessor.java new file mode 100644 index 00000000000..e8639b2d396 --- /dev/null +++ b/test-infra/src/main/java/com/datastax/oss/driver/internal/gremlin/PatchedGremlinDslProcessor.java @@ -0,0 +1,38 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.datastax.oss.driver.internal.gremlin; + +import java.util.Collections; +import java.util.Set; +import javax.annotation.processing.SupportedAnnotationTypes; +import javax.lang.model.SourceVersion; +import org.apache.tinkerpop.gremlin.process.traversal.dsl.GremlinDslProcessor; + +@SupportedAnnotationTypes("org.apache.tinkerpop.gremlin.process.traversal.dsl.GremlinDsl") +public class PatchedGremlinDslProcessor extends GremlinDslProcessor { + + @Override + public Set getSupportedAnnotationTypes() { + return Collections.singleton("org.apache.tinkerpop.gremlin.process.traversal.dsl.GremlinDsl"); + } + + @Override + public SourceVersion getSupportedSourceVersion() { + return SourceVersion.latestSupported(); + } +}

  • Examples
    Create statementCase-sensitive?CQL idInternal id
    CREATE TABLE t(foo int PRIMARY KEY)Nofoofoo
    CREATE TABLE t(Foo int PRIMARY KEY)Nofoofoo