diff --git a/.build/parent-maven-pom.xml b/.build/parent-maven-pom.xml index 523f33060a16..dc378442031b 100644 --- a/.build/parent-maven-pom.xml +++ b/.build/parent-maven-pom.xml @@ -298,7 +298,7 @@ at.yawk.lz4 lz4-java - 1.10.1 + 1.11.2 com.github.luben diff --git a/ide/nbproject/project.xml b/ide/nbproject/project.xml index 0f4b3839ba36..a212244a2d71 100644 --- a/ide/nbproject/project.xml +++ b/ide/nbproject/project.xml @@ -8,7 +8,7 @@ .. - ${project.dir}/build/lib/jars/affinity-3.23.3.jar:${project.dir}/build/lib/jars/agrona-1.17.1.jar:${project.dir}/build/lib/jars/AmazonCorrettoCryptoProvider-2.2.0-linux-aarch_64.jar:${project.dir}/build/lib/jars/antlr-3.5.2.jar:${project.dir}/build/lib/jars/antlr-runtime-3.5.2.jar:${project.dir}/build/lib/jars/asm-9.5.jar:${project.dir}/build/lib/jars/async-profiler-4.2.jar:${project.dir}/build/lib/jars/big-math-2.3.0.jar:${project.dir}/build/lib/jars/byteman-4.0.26.jar:${project.dir}/build/lib/jars/byteman-bmunit-4.0.26.jar:${project.dir}/build/lib/jars/byteman-install-4.0.26.jar:${project.dir}/build/lib/jars/byteman-submit-4.0.26.jar:${project.dir}/build/lib/jars/caffeine-3.1.8.jar:${project.dir}/build/lib/jars/cassandra-accord-6.0-SNAPSHOT.jar:${project.dir}/build/lib/jars/cassandra-driver-core-3.12.1-shaded.jar:${project.dir}/build/lib/jars/chronicle-bytes-2.25ea10.jar:${project.dir}/build/lib/jars/chronicle-core-2.25ea14.jar:${project.dir}/build/lib/jars/chronicle-queue-5.25ea16.jar:${project.dir}/build/lib/jars/chronicle-threads-2.25ea7.jar:${project.dir}/build/lib/jars/chronicle-wire-2.25ea15.jar:${project.dir}/build/lib/jars/commons-cli-1.5.0.jar:${project.dir}/build/lib/jars/commons-lang3-3.18.0.jar:${project.dir}/build/lib/jars/commons-math3-3.2.jar:${project.dir}/build/lib/jars/compile-command-annotations-1.2.0.jar:${project.dir}/build/lib/jars/concurrent-trees-2.4.0.jar:${project.dir}/build/lib/jars/ecj-3.33.0.jar:${project.dir}/build/lib/jars/failureaccess-1.0.1.jar:${project.dir}/build/lib/jars/guava-32.0.1-jre.jar:${project.dir}/build/lib/jars/HdrHistogram-2.1.12.jar:${project.dir}/build/lib/jars/high-scale-lib-1.0.6.jar:${project.dir}/build/lib/jars/hppc-0.8.1.jar:${project.dir}/build/lib/jars/ipaddress-5.3.3.jar:${project.dir}/build/lib/jars/j2objc-annotations-1.3.jar:${project.dir}/build/lib/jars/jackson-annotations-2.19.2.jar:${project.dir}/build/lib/jars/jackson-core-2.19.2.jar:${project.dir}/build/lib/jars/jackson-databind-2.19.2.jar:${project.dir}/build/lib/jars/jackson-datatype-jsr310-2.19.2.jar:${project.dir}/build/lib/jars/jacocoagent.jar:${project.dir}/build/lib/jars/jamm-0.4.0.jar:${project.dir}/build/lib/jars/javax.inject-1.jar:${project.dir}/build/lib/jars/jbcrypt-0.4.jar:${project.dir}/build/lib/jars/jcl-over-slf4j-2.0.17.jar:${project.dir}/build/lib/jars/jcommander-1.30.jar:${project.dir}/build/lib/jars/jctools-core-3.1.0.jar:${project.dir}/build/lib/jars/jffi-1.3.11-native.jar:${project.dir}/build/lib/jars/jffi-1.3.11.jar:${project.dir}/build/lib/jars/jna-5.13.0.jar:${project.dir}/build/lib/jars/jna-platform-5.13.0.jar:${project.dir}/build/lib/jars/jnr-a64asm-1.0.0.jar:${project.dir}/build/lib/jars/jnr-constants-0.10.4.jar:${project.dir}/build/lib/jars/jnr-ffi-2.2.13.jar:${project.dir}/build/lib/jars/jnr-x86asm-1.0.2.jar:${project.dir}/build/lib/jars/jsr305-2.0.2.jar:${project.dir}/build/lib/jars/jvector-1.0.2.jar:${project.dir}/build/lib/jars/jvm-attach-api-1.5.jar:${project.dir}/build/lib/jars/log4j-over-slf4j-2.0.17.jar:${project.dir}/build/lib/jars/logback-classic-1.5.18.jar:${project.dir}/build/lib/jars/logback-core-1.5.18.jar:${project.dir}/build/lib/jars/lucene-analysis-common-9.12.0.jar:${project.dir}/build/lib/jars/lucene-core-9.12.0.jar:${project.dir}/build/lib/jars/lz4-java-1.10.1.jar:${project.dir}/build/lib/jars/metrics-core-4.2.28.jar:${project.dir}/build/lib/jars/metrics-jvm-4.2.19.jar:${project.dir}/build/lib/jars/metrics-logback-4.2.19.jar:${project.dir}/build/lib/jars/mxdump-0.14.jar:${project.dir}/build/lib/jars/netty-all-4.1.130.Final.jar:${project.dir}/build/lib/jars/netty-buffer-4.1.130.Final.jar:${project.dir}/build/lib/jars/netty-codec-4.1.130.Final.jar:${project.dir}/build/lib/jars/netty-common-4.1.130.Final.jar:${project.dir}/build/lib/jars/netty-handler-4.1.130.Final.jar:${project.dir}/build/lib/jars/netty-handler-proxy-4.1.130.Final.jar:${project.dir}/build/lib/jars/netty-handler-ssl-ocsp-4.1.130.Final.jar:${project.dir}/build/lib/jars/netty-resolver-4.1.130.Final.jar:${project.dir}/build/lib/jars/netty-tcnative-boringssl-static-2.0.70.Final-linux-aarch_64.jar:${project.dir}/build/lib/jars/netty-tcnative-boringssl-static-2.0.70.Final-linux-x86_64.jar:${project.dir}/build/lib/jars/netty-tcnative-boringssl-static-2.0.70.Final-osx-aarch_64.jar:${project.dir}/build/lib/jars/netty-tcnative-boringssl-static-2.0.70.Final-osx-x86_64.jar:${project.dir}/build/lib/jars/netty-tcnative-boringssl-static-2.0.70.Final.jar:${project.dir}/build/lib/jars/netty-tcnative-classes-2.0.70.Final.jar:${project.dir}/build/lib/jars/netty-transport-4.1.130.Final.jar:${project.dir}/build/lib/jars/netty-transport-classes-epoll-4.1.130.Final.jar:${project.dir}/build/lib/jars/netty-transport-classes-kqueue-4.1.130.Final.jar:${project.dir}/build/lib/jars/netty-transport-native-epoll-4.1.130.Final-linux-aarch_64.jar:${project.dir}/build/lib/jars/netty-transport-native-epoll-4.1.130.Final-linux-x86_64.jar:${project.dir}/build/lib/jars/netty-transport-native-epoll-4.1.130.Final.jar:${project.dir}/build/lib/jars/netty-transport-native-unix-common-4.1.130.Final.jar:${project.dir}/build/lib/jars/ohc-core-0.5.1.jar:${project.dir}/build/lib/jars/ohc-core-j8-0.5.1.jar:${project.dir}/build/lib/jars/oshi-core-6.4.8.jar:${project.dir}/build/lib/jars/passay-1.6.4.jar:${project.dir}/build/lib/jars/picocli-4.7.7.jar:${project.dir}/build/lib/jars/posix-2.24ea4.jar:${project.dir}/build/lib/jars/psjava-0.1.19.jar:${project.dir}/build/lib/jars/semver4j-3.1.0.jar:${project.dir}/build/lib/jars/sjk-cli-0.14.jar:${project.dir}/build/lib/jars/sjk-core-0.14.jar:${project.dir}/build/lib/jars/sjk-json-0.14.jar:${project.dir}/build/lib/jars/sjk-stacktrace-0.14.jar:${project.dir}/build/lib/jars/slf4j-api-2.0.17.jar:${project.dir}/build/lib/jars/snakeyaml-2.4.jar:${project.dir}/build/lib/jars/snappy-java-1.1.10.4.jar:${project.dir}/build/lib/jars/ST4-4.0.8.jar:${project.dir}/build/lib/jars/stream-2.5.2.jar:${project.dir}/build/lib/jars/zstd-jni-1.5.7-2-darwin_aarch64.jar:${project.dir}/build/lib/jars/zstd-jni-1.5.7-2-darwin_x86_64.jar:${project.dir}/build/lib/jars/zstd-jni-1.5.7-2-linux_aarch64.jar:${project.dir}/build/lib/jars/zstd-jni-1.5.7-2-linux_amd64.jar:${project.dir}/build/test/lib/jars/accessors-smart-2.4.7.jar:${project.dir}/build/test/lib/jars/agrona-1.17.1.jar:${project.dir}/build/test/lib/jars/ant-1.10.12.jar:${project.dir}/build/test/lib/jars/ant-junit-1.10.12.jar:${project.dir}/build/test/lib/jars/ant-launcher-1.10.12.jar:${project.dir}/build/test/lib/jars/antlr4-runtime-4.11.1.jar:${project.dir}/build/test/lib/jars/asm-9.5.jar:${project.dir}/build/test/lib/jars/asm-analysis-9.5.jar:${project.dir}/build/test/lib/jars/asm-commons-9.5.jar:${project.dir}/build/test/lib/jars/asm-tree-9.5.jar:${project.dir}/build/test/lib/jars/asm-util-9.5.jar:${project.dir}/build/test/lib/jars/asm-xml-6.0.jar:${project.dir}/build/test/lib/jars/assertj-core-3.24.2.jar:${project.dir}/build/test/lib/jars/awaitility-4.0.3.jar:${project.dir}/build/test/lib/jars/bcpkix-jdk18on-1.78.jar:${project.dir}/build/test/lib/jars/bcprov-jdk18on-1.78.jar:${project.dir}/build/test/lib/jars/bcutil-jdk18on-1.78.jar:${project.dir}/build/test/lib/jars/byte-buddy-1.12.21.jar:${project.dir}/build/test/lib/jars/byte-buddy-agent-1.14.15.jar:${project.dir}/build/test/lib/jars/cassandra-accord-6.0-SNAPSHOT-tests.jar:${project.dir}/build/test/lib/jars/checker-qual-3.27.0.jar:${project.dir}/build/test/lib/jars/checkstyle-10.26.1.jar:${project.dir}/build/test/lib/jars/commons-beanutils-1.9.4.jar:${project.dir}/build/test/lib/jars/commons-codec-1.15.jar:${project.dir}/build/test/lib/jars/commons-collections-3.2.2.jar:${project.dir}/build/test/lib/jars/commons-fileupload-1.4.jar:${project.dir}/build/test/lib/jars/commons-io-2.11.0.jar:${project.dir}/build/test/lib/jars/commons-lang3-3.12.0.jar:${project.dir}/build/test/lib/jars/commons-logging-1.2.jar:${project.dir}/build/test/lib/jars/commons-math3-3.6.1.jar:${project.dir}/build/test/lib/jars/dtest-api-0.0.18.jar:${project.dir}/build/test/lib/jars/error_prone_annotations-2.2.0.jar:${project.dir}/build/test/lib/jars/failureaccess-1.0.1.jar:${project.dir}/build/test/lib/jars/guava-32.0.1-jre.jar:${project.dir}/build/test/lib/jars/guava-testlib-27.0-jre.jar:${project.dir}/build/test/lib/jars/hamcrest-2.2.jar:${project.dir}/build/test/lib/jars/hamcrest-core-2.2.jar:${project.dir}/build/test/lib/jars/handlebars-4.3.1.jar:${project.dir}/build/test/lib/jars/handlebars-helpers-4.3.1.jar:${project.dir}/build/test/lib/jars/http2-common-9.4.49.v20220914.jar:${project.dir}/build/test/lib/jars/http2-hpack-9.4.49.v20220914.jar:${project.dir}/build/test/lib/jars/http2-server-9.4.49.v20220914.jar:${project.dir}/build/test/lib/jars/httpclient5-5.1.3.jar:${project.dir}/build/test/lib/jars/httpcore5-5.1.3.jar:${project.dir}/build/test/lib/jars/httpcore5-h2-5.1.3.jar:${project.dir}/build/test/lib/jars/j2objc-annotations-1.1.jar:${project.dir}/build/test/lib/jars/jackson-annotations-2.19.2.jar:${project.dir}/build/test/lib/jars/jackson-core-2.19.2.jar:${project.dir}/build/test/lib/jars/jackson-databind-2.19.2.jar:${project.dir}/build/test/lib/jars/jackson-dataformat-yaml-2.19.2.jar:${project.dir}/build/test/lib/jars/jakarta.activation-api-1.2.2.jar:${project.dir}/build/test/lib/jars/jakarta.xml.bind-api-2.3.3.jar:${project.dir}/build/test/lib/jars/java-allocation-instrumenter-3.1.0.jar:${project.dir}/build/test/lib/jars/java-cup-runtime-11b-20160615.jar:${project.dir}/build/test/lib/jars/java-diff-utils-4.12.jar:${project.dir}/build/test/lib/jars/javassist-3.28.0-GA.jar:${project.dir}/build/test/lib/jars/javax.servlet-api-3.1.0.jar:${project.dir}/build/test/lib/jars/jetty-alpn-client-9.4.49.v20220914.jar:${project.dir}/build/test/lib/jars/jetty-alpn-java-client-9.4.49.v20220914.jar:${project.dir}/build/test/lib/jars/jetty-alpn-java-server-9.4.49.v20220914.jar:${project.dir}/build/test/lib/jars/jetty-alpn-openjdk8-client-9.4.49.v20220914.jar:${project.dir}/build/test/lib/jars/jetty-alpn-openjdk8-server-9.4.49.v20220914.jar:${project.dir}/build/test/lib/jars/jetty-alpn-server-9.4.49.v20220914.jar:${project.dir}/build/test/lib/jars/jetty-client-9.4.49.v20220914.jar:${project.dir}/build/test/lib/jars/jetty-continuation-9.4.49.v20220914.jar:${project.dir}/build/test/lib/jars/jetty-http-9.4.49.v20220914.jar:${project.dir}/build/test/lib/jars/jetty-io-9.4.49.v20220914.jar:${project.dir}/build/test/lib/jars/jetty-proxy-9.4.49.v20220914.jar:${project.dir}/build/test/lib/jars/jetty-security-9.4.49.v20220914.jar:${project.dir}/build/test/lib/jars/jetty-server-9.4.49.v20220914.jar:${project.dir}/build/test/lib/jars/jetty-servlet-9.4.49.v20220914.jar:${project.dir}/build/test/lib/jars/jetty-servlets-9.4.49.v20220914.jar:${project.dir}/build/test/lib/jars/jetty-util-9.4.49.v20220914.jar:${project.dir}/build/test/lib/jars/jetty-util-ajax-9.4.49.v20220914.jar:${project.dir}/build/test/lib/jars/jetty-webapp-9.4.49.v20220914.jar:${project.dir}/build/test/lib/jars/jetty-xml-9.4.49.v20220914.jar:${project.dir}/build/test/lib/jars/jflex-1.8.2.jar:${project.dir}/build/test/lib/jars/jimfs-1.1.jar:${project.dir}/build/test/lib/jars/jmh-core-1.37.jar:${project.dir}/build/test/lib/jars/jmh-generator-annprocess-1.37.jar:${project.dir}/build/test/lib/jars/jopt-simple-5.0.4.jar:${project.dir}/build/test/lib/jars/json-path-2.7.0.jar:${project.dir}/build/test/lib/jars/json-smart-2.4.7.jar:${project.dir}/build/test/lib/jars/json-unit-core-2.36.0.jar:${project.dir}/build/test/lib/jars/jsr305-3.0.2.jar:${project.dir}/build/test/lib/jars/junit-4.12.jar:${project.dir}/build/test/lib/jars/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar:${project.dir}/build/test/lib/jars/mockito-core-5.12.0.jar:${project.dir}/build/test/lib/jars/mockito-inline-5.2.0.jar:${project.dir}/build/test/lib/jars/objenesis-3.3.jar:${project.dir}/build/test/lib/jars/org.jacoco.agent-0.8.8.jar:${project.dir}/build/test/lib/jars/org.jacoco.ant-0.8.8.jar:${project.dir}/build/test/lib/jars/org.jacoco.core-0.8.8.jar:${project.dir}/build/test/lib/jars/org.jacoco.report-0.8.8.jar:${project.dir}/build/test/lib/jars/picocli-4.7.4.jar:${project.dir}/build/test/lib/jars/quicktheories-0.26.jar:${project.dir}/build/test/lib/jars/randomizedtesting-runner-2.1.2.jar:${project.dir}/build/test/lib/jars/reflections-0.10.2.jar:${project.dir}/build/test/lib/jars/Saxon-HE-12.2.jar:${project.dir}/build/test/lib/jars/semver4j-3.1.0.jar:${project.dir}/build/test/lib/jars/simulator-asm.jar:${project.dir}/build/test/lib/jars/simulator-bootstrap.jar:${project.dir}/build/test/lib/jars/slf4j-api-1.7.32.jar:${project.dir}/build/test/lib/jars/snakeyaml-2.4.jar:${project.dir}/build/test/lib/jars/wiremock-jre8-2.35.0.jar:${project.dir}/build/test/lib/jars/xmlresolver-5.1.2-data.jar:${project.dir}/build/test/lib/jars/xmlresolver-5.1.2.jar:${project.dir}/build/test/lib/jars/xmlunit-core-2.9.0.jar:${project.dir}/build/test/lib/jars/xmlunit-legacy-2.9.0.jar:${project.dir}/build/test/lib/jars/xmlunit-placeholders-2.9.0.jar: + ${project.dir}/build/lib/jars/affinity-3.23.3.jar:${project.dir}/build/lib/jars/agrona-1.17.1.jar:${project.dir}/build/lib/jars/AmazonCorrettoCryptoProvider-2.2.0-linux-aarch_64.jar:${project.dir}/build/lib/jars/antlr-3.5.2.jar:${project.dir}/build/lib/jars/antlr-runtime-3.5.2.jar:${project.dir}/build/lib/jars/asm-9.5.jar:${project.dir}/build/lib/jars/async-profiler-4.2.jar:${project.dir}/build/lib/jars/big-math-2.3.0.jar:${project.dir}/build/lib/jars/byteman-4.0.26.jar:${project.dir}/build/lib/jars/byteman-bmunit-4.0.26.jar:${project.dir}/build/lib/jars/byteman-install-4.0.26.jar:${project.dir}/build/lib/jars/byteman-submit-4.0.26.jar:${project.dir}/build/lib/jars/caffeine-3.1.8.jar:${project.dir}/build/lib/jars/cassandra-accord-6.0-SNAPSHOT.jar:${project.dir}/build/lib/jars/cassandra-driver-core-3.12.1-shaded.jar:${project.dir}/build/lib/jars/chronicle-bytes-2.25ea10.jar:${project.dir}/build/lib/jars/chronicle-core-2.25ea14.jar:${project.dir}/build/lib/jars/chronicle-queue-5.25ea16.jar:${project.dir}/build/lib/jars/chronicle-threads-2.25ea7.jar:${project.dir}/build/lib/jars/chronicle-wire-2.25ea15.jar:${project.dir}/build/lib/jars/commons-cli-1.5.0.jar:${project.dir}/build/lib/jars/commons-lang3-3.18.0.jar:${project.dir}/build/lib/jars/commons-math3-3.2.jar:${project.dir}/build/lib/jars/compile-command-annotations-1.2.0.jar:${project.dir}/build/lib/jars/concurrent-trees-2.4.0.jar:${project.dir}/build/lib/jars/ecj-3.33.0.jar:${project.dir}/build/lib/jars/failureaccess-1.0.1.jar:${project.dir}/build/lib/jars/guava-32.0.1-jre.jar:${project.dir}/build/lib/jars/HdrHistogram-2.1.12.jar:${project.dir}/build/lib/jars/high-scale-lib-1.0.6.jar:${project.dir}/build/lib/jars/hppc-0.8.1.jar:${project.dir}/build/lib/jars/ipaddress-5.3.3.jar:${project.dir}/build/lib/jars/j2objc-annotations-1.3.jar:${project.dir}/build/lib/jars/jackson-annotations-2.19.2.jar:${project.dir}/build/lib/jars/jackson-core-2.19.2.jar:${project.dir}/build/lib/jars/jackson-databind-2.19.2.jar:${project.dir}/build/lib/jars/jackson-datatype-jsr310-2.19.2.jar:${project.dir}/build/lib/jars/jacocoagent.jar:${project.dir}/build/lib/jars/jamm-0.4.0.jar:${project.dir}/build/lib/jars/javax.inject-1.jar:${project.dir}/build/lib/jars/jbcrypt-0.4.jar:${project.dir}/build/lib/jars/jcl-over-slf4j-2.0.17.jar:${project.dir}/build/lib/jars/jcommander-1.30.jar:${project.dir}/build/lib/jars/jctools-core-3.1.0.jar:${project.dir}/build/lib/jars/jffi-1.3.11-native.jar:${project.dir}/build/lib/jars/jffi-1.3.11.jar:${project.dir}/build/lib/jars/jna-5.13.0.jar:${project.dir}/build/lib/jars/jna-platform-5.13.0.jar:${project.dir}/build/lib/jars/jnr-a64asm-1.0.0.jar:${project.dir}/build/lib/jars/jnr-constants-0.10.4.jar:${project.dir}/build/lib/jars/jnr-ffi-2.2.13.jar:${project.dir}/build/lib/jars/jnr-x86asm-1.0.2.jar:${project.dir}/build/lib/jars/jsr305-2.0.2.jar:${project.dir}/build/lib/jars/jvector-1.0.2.jar:${project.dir}/build/lib/jars/jvm-attach-api-1.5.jar:${project.dir}/build/lib/jars/log4j-over-slf4j-2.0.17.jar:${project.dir}/build/lib/jars/logback-classic-1.5.18.jar:${project.dir}/build/lib/jars/logback-core-1.5.18.jar:${project.dir}/build/lib/jars/lucene-analysis-common-9.12.0.jar:${project.dir}/build/lib/jars/lucene-core-9.12.0.jar:${project.dir}/build/lib/jars/lz4-java-1.11.2.jar:${project.dir}/build/lib/jars/metrics-core-4.2.28.jar:${project.dir}/build/lib/jars/metrics-jvm-4.2.19.jar:${project.dir}/build/lib/jars/metrics-logback-4.2.19.jar:${project.dir}/build/lib/jars/mxdump-0.14.jar:${project.dir}/build/lib/jars/netty-all-4.1.130.Final.jar:${project.dir}/build/lib/jars/netty-buffer-4.1.130.Final.jar:${project.dir}/build/lib/jars/netty-codec-4.1.130.Final.jar:${project.dir}/build/lib/jars/netty-common-4.1.130.Final.jar:${project.dir}/build/lib/jars/netty-handler-4.1.130.Final.jar:${project.dir}/build/lib/jars/netty-handler-proxy-4.1.130.Final.jar:${project.dir}/build/lib/jars/netty-handler-ssl-ocsp-4.1.130.Final.jar:${project.dir}/build/lib/jars/netty-resolver-4.1.130.Final.jar:${project.dir}/build/lib/jars/netty-tcnative-boringssl-static-2.0.70.Final-linux-aarch_64.jar:${project.dir}/build/lib/jars/netty-tcnative-boringssl-static-2.0.70.Final-linux-x86_64.jar:${project.dir}/build/lib/jars/netty-tcnative-boringssl-static-2.0.70.Final-osx-aarch_64.jar:${project.dir}/build/lib/jars/netty-tcnative-boringssl-static-2.0.70.Final-osx-x86_64.jar:${project.dir}/build/lib/jars/netty-tcnative-boringssl-static-2.0.70.Final.jar:${project.dir}/build/lib/jars/netty-tcnative-classes-2.0.70.Final.jar:${project.dir}/build/lib/jars/netty-transport-4.1.130.Final.jar:${project.dir}/build/lib/jars/netty-transport-classes-epoll-4.1.130.Final.jar:${project.dir}/build/lib/jars/netty-transport-classes-kqueue-4.1.130.Final.jar:${project.dir}/build/lib/jars/netty-transport-native-epoll-4.1.130.Final-linux-aarch_64.jar:${project.dir}/build/lib/jars/netty-transport-native-epoll-4.1.130.Final-linux-x86_64.jar:${project.dir}/build/lib/jars/netty-transport-native-epoll-4.1.130.Final.jar:${project.dir}/build/lib/jars/netty-transport-native-unix-common-4.1.130.Final.jar:${project.dir}/build/lib/jars/ohc-core-0.5.1.jar:${project.dir}/build/lib/jars/ohc-core-j8-0.5.1.jar:${project.dir}/build/lib/jars/oshi-core-6.4.8.jar:${project.dir}/build/lib/jars/passay-1.6.4.jar:${project.dir}/build/lib/jars/picocli-4.7.7.jar:${project.dir}/build/lib/jars/posix-2.24ea4.jar:${project.dir}/build/lib/jars/psjava-0.1.19.jar:${project.dir}/build/lib/jars/semver4j-3.1.0.jar:${project.dir}/build/lib/jars/sjk-cli-0.14.jar:${project.dir}/build/lib/jars/sjk-core-0.14.jar:${project.dir}/build/lib/jars/sjk-json-0.14.jar:${project.dir}/build/lib/jars/sjk-stacktrace-0.14.jar:${project.dir}/build/lib/jars/slf4j-api-2.0.17.jar:${project.dir}/build/lib/jars/snakeyaml-2.4.jar:${project.dir}/build/lib/jars/snappy-java-1.1.10.4.jar:${project.dir}/build/lib/jars/ST4-4.0.8.jar:${project.dir}/build/lib/jars/stream-2.5.2.jar:${project.dir}/build/lib/jars/zstd-jni-1.5.7-2-darwin_aarch64.jar:${project.dir}/build/lib/jars/zstd-jni-1.5.7-2-darwin_x86_64.jar:${project.dir}/build/lib/jars/zstd-jni-1.5.7-2-linux_aarch64.jar:${project.dir}/build/lib/jars/zstd-jni-1.5.7-2-linux_amd64.jar:${project.dir}/build/test/lib/jars/accessors-smart-2.4.7.jar:${project.dir}/build/test/lib/jars/agrona-1.17.1.jar:${project.dir}/build/test/lib/jars/ant-1.10.12.jar:${project.dir}/build/test/lib/jars/ant-junit-1.10.12.jar:${project.dir}/build/test/lib/jars/ant-launcher-1.10.12.jar:${project.dir}/build/test/lib/jars/antlr4-runtime-4.11.1.jar:${project.dir}/build/test/lib/jars/asm-9.5.jar:${project.dir}/build/test/lib/jars/asm-analysis-9.5.jar:${project.dir}/build/test/lib/jars/asm-commons-9.5.jar:${project.dir}/build/test/lib/jars/asm-tree-9.5.jar:${project.dir}/build/test/lib/jars/asm-util-9.5.jar:${project.dir}/build/test/lib/jars/asm-xml-6.0.jar:${project.dir}/build/test/lib/jars/assertj-core-3.24.2.jar:${project.dir}/build/test/lib/jars/awaitility-4.0.3.jar:${project.dir}/build/test/lib/jars/bcpkix-jdk18on-1.78.jar:${project.dir}/build/test/lib/jars/bcprov-jdk18on-1.78.jar:${project.dir}/build/test/lib/jars/bcutil-jdk18on-1.78.jar:${project.dir}/build/test/lib/jars/byte-buddy-1.12.21.jar:${project.dir}/build/test/lib/jars/byte-buddy-agent-1.14.15.jar:${project.dir}/build/test/lib/jars/cassandra-accord-6.0-SNAPSHOT-tests.jar:${project.dir}/build/test/lib/jars/checker-qual-3.27.0.jar:${project.dir}/build/test/lib/jars/checkstyle-10.26.1.jar:${project.dir}/build/test/lib/jars/commons-beanutils-1.9.4.jar:${project.dir}/build/test/lib/jars/commons-codec-1.15.jar:${project.dir}/build/test/lib/jars/commons-collections-3.2.2.jar:${project.dir}/build/test/lib/jars/commons-fileupload-1.4.jar:${project.dir}/build/test/lib/jars/commons-io-2.11.0.jar:${project.dir}/build/test/lib/jars/commons-lang3-3.12.0.jar:${project.dir}/build/test/lib/jars/commons-logging-1.2.jar:${project.dir}/build/test/lib/jars/commons-math3-3.6.1.jar:${project.dir}/build/test/lib/jars/dtest-api-0.0.18.jar:${project.dir}/build/test/lib/jars/error_prone_annotations-2.2.0.jar:${project.dir}/build/test/lib/jars/failureaccess-1.0.1.jar:${project.dir}/build/test/lib/jars/guava-32.0.1-jre.jar:${project.dir}/build/test/lib/jars/guava-testlib-27.0-jre.jar:${project.dir}/build/test/lib/jars/hamcrest-2.2.jar:${project.dir}/build/test/lib/jars/hamcrest-core-2.2.jar:${project.dir}/build/test/lib/jars/handlebars-4.3.1.jar:${project.dir}/build/test/lib/jars/handlebars-helpers-4.3.1.jar:${project.dir}/build/test/lib/jars/http2-common-9.4.49.v20220914.jar:${project.dir}/build/test/lib/jars/http2-hpack-9.4.49.v20220914.jar:${project.dir}/build/test/lib/jars/http2-server-9.4.49.v20220914.jar:${project.dir}/build/test/lib/jars/httpclient5-5.1.3.jar:${project.dir}/build/test/lib/jars/httpcore5-5.1.3.jar:${project.dir}/build/test/lib/jars/httpcore5-h2-5.1.3.jar:${project.dir}/build/test/lib/jars/j2objc-annotations-1.1.jar:${project.dir}/build/test/lib/jars/jackson-annotations-2.19.2.jar:${project.dir}/build/test/lib/jars/jackson-core-2.19.2.jar:${project.dir}/build/test/lib/jars/jackson-databind-2.19.2.jar:${project.dir}/build/test/lib/jars/jackson-dataformat-yaml-2.19.2.jar:${project.dir}/build/test/lib/jars/jakarta.activation-api-1.2.2.jar:${project.dir}/build/test/lib/jars/jakarta.xml.bind-api-2.3.3.jar:${project.dir}/build/test/lib/jars/java-allocation-instrumenter-3.1.0.jar:${project.dir}/build/test/lib/jars/java-cup-runtime-11b-20160615.jar:${project.dir}/build/test/lib/jars/java-diff-utils-4.12.jar:${project.dir}/build/test/lib/jars/javassist-3.28.0-GA.jar:${project.dir}/build/test/lib/jars/javax.servlet-api-3.1.0.jar:${project.dir}/build/test/lib/jars/jetty-alpn-client-9.4.49.v20220914.jar:${project.dir}/build/test/lib/jars/jetty-alpn-java-client-9.4.49.v20220914.jar:${project.dir}/build/test/lib/jars/jetty-alpn-java-server-9.4.49.v20220914.jar:${project.dir}/build/test/lib/jars/jetty-alpn-openjdk8-client-9.4.49.v20220914.jar:${project.dir}/build/test/lib/jars/jetty-alpn-openjdk8-server-9.4.49.v20220914.jar:${project.dir}/build/test/lib/jars/jetty-alpn-server-9.4.49.v20220914.jar:${project.dir}/build/test/lib/jars/jetty-client-9.4.49.v20220914.jar:${project.dir}/build/test/lib/jars/jetty-continuation-9.4.49.v20220914.jar:${project.dir}/build/test/lib/jars/jetty-http-9.4.49.v20220914.jar:${project.dir}/build/test/lib/jars/jetty-io-9.4.49.v20220914.jar:${project.dir}/build/test/lib/jars/jetty-proxy-9.4.49.v20220914.jar:${project.dir}/build/test/lib/jars/jetty-security-9.4.49.v20220914.jar:${project.dir}/build/test/lib/jars/jetty-server-9.4.49.v20220914.jar:${project.dir}/build/test/lib/jars/jetty-servlet-9.4.49.v20220914.jar:${project.dir}/build/test/lib/jars/jetty-servlets-9.4.49.v20220914.jar:${project.dir}/build/test/lib/jars/jetty-util-9.4.49.v20220914.jar:${project.dir}/build/test/lib/jars/jetty-util-ajax-9.4.49.v20220914.jar:${project.dir}/build/test/lib/jars/jetty-webapp-9.4.49.v20220914.jar:${project.dir}/build/test/lib/jars/jetty-xml-9.4.49.v20220914.jar:${project.dir}/build/test/lib/jars/jflex-1.8.2.jar:${project.dir}/build/test/lib/jars/jimfs-1.1.jar:${project.dir}/build/test/lib/jars/jmh-core-1.37.jar:${project.dir}/build/test/lib/jars/jmh-generator-annprocess-1.37.jar:${project.dir}/build/test/lib/jars/jopt-simple-5.0.4.jar:${project.dir}/build/test/lib/jars/json-path-2.7.0.jar:${project.dir}/build/test/lib/jars/json-smart-2.4.7.jar:${project.dir}/build/test/lib/jars/json-unit-core-2.36.0.jar:${project.dir}/build/test/lib/jars/jsr305-3.0.2.jar:${project.dir}/build/test/lib/jars/junit-4.12.jar:${project.dir}/build/test/lib/jars/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar:${project.dir}/build/test/lib/jars/mockito-core-5.12.0.jar:${project.dir}/build/test/lib/jars/mockito-inline-5.2.0.jar:${project.dir}/build/test/lib/jars/objenesis-3.3.jar:${project.dir}/build/test/lib/jars/org.jacoco.agent-0.8.8.jar:${project.dir}/build/test/lib/jars/org.jacoco.ant-0.8.8.jar:${project.dir}/build/test/lib/jars/org.jacoco.core-0.8.8.jar:${project.dir}/build/test/lib/jars/org.jacoco.report-0.8.8.jar:${project.dir}/build/test/lib/jars/picocli-4.7.4.jar:${project.dir}/build/test/lib/jars/quicktheories-0.26.jar:${project.dir}/build/test/lib/jars/randomizedtesting-runner-2.1.2.jar:${project.dir}/build/test/lib/jars/reflections-0.10.2.jar:${project.dir}/build/test/lib/jars/Saxon-HE-12.2.jar:${project.dir}/build/test/lib/jars/semver4j-3.1.0.jar:${project.dir}/build/test/lib/jars/simulator-asm.jar:${project.dir}/build/test/lib/jars/simulator-bootstrap.jar:${project.dir}/build/test/lib/jars/slf4j-api-1.7.32.jar:${project.dir}/build/test/lib/jars/snakeyaml-2.4.jar:${project.dir}/build/test/lib/jars/wiremock-jre8-2.35.0.jar:${project.dir}/build/test/lib/jars/xmlresolver-5.1.2-data.jar:${project.dir}/build/test/lib/jars/xmlresolver-5.1.2.jar:${project.dir}/build/test/lib/jars/xmlunit-core-2.9.0.jar:${project.dir}/build/test/lib/jars/xmlunit-legacy-2.9.0.jar:${project.dir}/build/test/lib/jars/xmlunit-placeholders-2.9.0.jar: diff --git a/test/microbench/org/apache/cassandra/test/microbench/LZ4CompressorBench.java b/test/microbench/org/apache/cassandra/test/microbench/LZ4CompressorBench.java new file mode 100644 index 000000000000..4572ccbee78a --- /dev/null +++ b/test/microbench/org/apache/cassandra/test/microbench/LZ4CompressorBench.java @@ -0,0 +1,259 @@ +/* + * 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 org.apache.cassandra.test.microbench; + +import java.io.IOException; +import java.io.InputStream; +import java.nio.ByteBuffer; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.Collections; +import java.util.Comparator; +import java.util.Random; +import java.util.concurrent.TimeUnit; +import java.util.stream.Stream; + +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.BenchmarkMode; +import org.openjdk.jmh.annotations.Fork; +import org.openjdk.jmh.annotations.Level; +import org.openjdk.jmh.annotations.Measurement; +import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.annotations.OutputTimeUnit; +import org.openjdk.jmh.annotations.Param; +import org.openjdk.jmh.annotations.Scope; +import org.openjdk.jmh.annotations.Setup; +import org.openjdk.jmh.annotations.State; +import org.openjdk.jmh.annotations.Threads; +import org.openjdk.jmh.annotations.Warmup; + +import org.apache.cassandra.io.compress.LZ4Compressor; +import org.apache.cassandra.io.sstable.CQLSSTableWriter; + +/** + * This benchmark measures the sstable compression path of {@link LZ4Compressor}. It calls the + * {@code compress} and {@code uncompress} methods that take {@link ByteBuffer} arguments, and it gives + * these methods off-heap buffers. {@link org.apache.cassandra.io.compress.CompressedSequentialWriter} + * and {@link org.apache.cassandra.io.util.CompressedChunkReader} use the same two methods. + *

+ * The benchmark makes the compressor from empty options. Thus the compressor is the {@code fast} + * compressor, which is the compressor that sstables use by default. + *

+ * The default chunk size is {@link org.apache.cassandra.schema.CompressionParams#DEFAULT_CHUNK_LENGTH}, + * which is 16 KiB. Sstables use this size, unless {@code chunk_length_in_kb} gives a different size. To + * measure other sizes, use {@code -Djmh.args="-p chunkLength=4096,65536"}. + */ +@BenchmarkMode(Mode.Throughput) +@OutputTimeUnit(TimeUnit.SECONDS) +@Warmup(iterations = 3, time = 1, timeUnit = TimeUnit.SECONDS) +@Measurement(iterations = 5, time = 2, timeUnit = TimeUnit.SECONDS) +@Fork(value = 1, jvmArgsAppend = { "-Dcassandra.schema.force_load_local_keyspaces=true" }) +@Threads(1) +@State(Scope.Thread) +public class LZ4CompressorBench +{ + @Param({ "16384" }) + private int chunkLength; + + private LZ4Compressor compressor; + + private ByteBuffer uncompressed; + private ByteBuffer compressed; + private ByteBuffer compressedInput; + private int compressedLength; + private ByteBuffer decompressed; + + @Setup(Level.Trial) + public void setup() throws IOException + { + // Empty options select the fast compressor. + // A table with 'class': 'LZ4Compressor' gets the same compressor. + compressor = LZ4Compressor.create(Collections.emptyMap()); + + uncompressed = ByteBuffer.allocateDirect(chunkLength); + uncompressed.put(sstablePartitions(chunkLength, new Random(1))); + uncompressed.flip(); + + int maxCompressedLength = compressor.initialCompressedBufferLength(chunkLength); + compressed = ByteBuffer.allocateDirect(maxCompressedLength); + compressedInput = ByteBuffer.allocateDirect(maxCompressedLength); + decompressed = ByteBuffer.allocateDirect(chunkLength); + + compressor.compress(uncompressed.duplicate(), compressedInput); + compressedLength = compressedInput.position(); + compressedInput.flip(); + + // Stop immediately if the compressor cannot complete a round trip. A library upgrade can cause + // this fault. + compressor.uncompress(compressedInput.duplicate(), decompressed); + if (decompressed.position() != chunkLength) + throw new IllegalStateException("Round-trip produced " + decompressed.position() + " bytes, expected " + chunkLength); + + System.out.println(String.format("sstable chunk: %d -> %d bytes, ratio %.3f", + chunkLength, compressedLength, compressedLength / (double) chunkLength)); + } + + @Benchmark + public ByteBuffer compress() throws IOException + { + uncompressed.clear(); + compressed.clear(); + compressor.compress(uncompressed, compressed); + return compressed; + } + + @Benchmark + public ByteBuffer uncompress() throws IOException + { + compressedInput.clear(); + compressedInput.limit(compressedLength); + decompressed.clear(); + compressor.uncompress(compressedInput, decompressed); + return decompressed; + } + + private static final int ROWS_PER_PARTITION = 10; + private static final int VALUE_COLUMNS = 10; + private static final int TEXT_LENGTH = 10; + + /** + * The number of different strings that the value columns use. + *

+ * A small set of different values makes a real sstable compressible. Examples are statuses, types + * and tags. This constant sets the compression ratio. If each cell gets a different random value, + * the ratio is approximately 0.86. At that ratio the data is almost incompressible, and + * decompression copies literal bytes only. A value of 96 gives a ratio of approximately 0.30 for a + * 16 KiB chunk, which is usual for a compressible table. + *

+ * These are the measured ratios at {@code chunkLength=16384}: + *

+     *   16 -> 0.251    48 -> 0.272    192 -> 0.346    768 -> 0.555
+     *   32 -> 0.260    96 -> 0.298    384 -> 0.435
+     * 
+ * The minimum ratio is approximately 0.25, not 0. The other bytes in the chunk are sstable + * structure: partition headers, clustering prefixes, timestamp deltas and row flags. This structure + * stays repetitive. + */ + private static final int VALUE_CARDINALITY = 96; + + /** + * This method writes an sstable with {@link CQLSSTableWriter}. Then it returns the first + * {@code size} bytes of the {@code Data.db} file. The sstable has no compression. Therefore these + * bytes are the same bytes that + * {@link org.apache.cassandra.io.compress.CompressedSequentialWriter} gives to the compressor as one + * chunk. The bytes contain partition headers, row flags, clustering prefixes, timestamp deltas and + * cell data, in token order. + *

+ * The table has one text partition key and one text clustering key. Each key is a sequence of + * {@link #TEXT_LENGTH} digits with zeros at the start. The table also has {@link #VALUE_COLUMNS} + * text columns. Each column holds one of {@link #VALUE_CARDINALITY} different strings, and each + * string has {@link #TEXT_LENGTH} characters. The method writes {@link #ROWS_PER_PARTITION} rows in + * each partition. + */ + private static byte[] sstablePartitions(int size, Random random) throws IOException + { + StringBuilder schema = new StringBuilder("CREATE TABLE lz4_bench.partitions (pk text, ck text"); + StringBuilder names = new StringBuilder("pk, ck"); + StringBuilder binds = new StringBuilder("?, ?"); + for (int c = 0; c < VALUE_COLUMNS; c++) + { + schema.append(", v").append(c).append(" text"); + names.append(", v").append(c); + binds.append(", ?"); + } + schema.append(", PRIMARY KEY (pk, ck)) WITH compression = {'enabled': 'false'}"); + // Use a constant timestamp. A different timestamp changes the delta-encoded row liveness bytes on each run. + String insert = "INSERT INTO lz4_bench.partitions (" + names + ") VALUES (" + binds + ") USING TIMESTAMP 1755000000000000"; + + // One partition is approximately 1.4 KiB. Thus the sstable holds more bytes than the chunk. + int partitions = Math.max(16, size / 256); + + Path dir = Files.createTempDirectory("lz4-compressor-bench"); + try + { + try (CQLSSTableWriter writer = CQLSSTableWriter.builder() + .inDirectory(dir.toString()) + .forTable(schema.toString()) + .using(insert) + .build()) + { + String[] dictionary = new String[VALUE_CARDINALITY]; + for (int i = 0; i < dictionary.length; i++) + dictionary[i] = randomAscii(random); + + Object[] values = new Object[2 + VALUE_COLUMNS]; + for (int p = 0; p < partitions; p++) + { + values[0] = paddedSequence(p); + for (int r = 0; r < ROWS_PER_PARTITION; r++) + { + values[1] = paddedSequence(r); + for (int c = 0; c < VALUE_COLUMNS; c++) + values[2 + c] = dictionary[random.nextInt(dictionary.length)]; + writer.addRow(values); + } + } + } + + Path data; + try (Stream written = Files.list(dir)) + { + data = written.filter(p -> p.getFileName().toString().endsWith("-Data.db")) + .findFirst() + .orElseThrow(() -> new IOException("CQLSSTableWriter produced no Data.db in " + dir)); + } + + byte[] chunk = new byte[size]; + try (InputStream in = Files.newInputStream(data)) + { + int read = in.readNBytes(chunk, 0, size); + if (read != size) + throw new IOException("Only " + read + " of " + size + " bytes of sstable data available, " + + "raise the partition count"); + } + return chunk; + } + finally + { + deleteRecursive(dir); + } + } + + private static String paddedSequence(int sequence) + { + return String.format("%0" + TEXT_LENGTH + "d", sequence); + } + + private static String randomAscii(Random random) + { + char[] text = new char[TEXT_LENGTH]; + for (int i = 0; i < text.length; i++) + text[i] = (char) ('!' + random.nextInt('~' - '!' + 1)); + return new String(text); + } + + private static void deleteRecursive(Path dir) throws IOException + { + try (Stream paths = Files.walk(dir)) + { + for (Path path : paths.sorted(Comparator.reverseOrder()).toArray(Path[]::new)) + Files.deleteIfExists(path); + } + } +}