diff --git a/NOTICE.TXT b/NOTICE.TXT index 7a5105a33ba..7d7678a70a9 100644 --- a/NOTICE.TXT +++ b/NOTICE.TXT @@ -4276,7 +4276,7 @@ http://www.apache.org/licenses/LICENSE-2.0 See the License for the specific language governing permissions and limitations under the License. ========== -Notice for: com.google.googlejavaformat:google-java-format-1.22.0 +Notice for: com.google.googlejavaformat:google-java-format-1.25.2 ---------- Copyright 2015 Google Inc. diff --git a/build.gradle b/build.gradle index 923bdc49151..680ab068252 100644 --- a/build.gradle +++ b/build.gradle @@ -19,7 +19,7 @@ buildscript { ext { - shadowGradlePluginVersion = '8.1.1' + shadowGradlePluginVersion = '9.2.2' } repositories { @@ -194,15 +194,15 @@ tasks.register("configureArtifactInfo") { } } -tasks.register("markAliasDefinitions", SignAliasDefinitions) { +def markAliasDefinitions = tasks.register("markAliasDefinitions", SignAliasDefinitions) { description = "Create an hashes aliases file from original aliases yml definition" - hashedFile = project.file("${project.buildDir}/plugin_aliases_hashed.yml") + hashedFile.set(layout.buildDirectory.file("plugin_aliases_hashed.yml")) } -tasks.register("markTestAliasDefinitions", SignAliasDefinitions) { +def markTestAliasDefinitions = tasks.register("markTestAliasDefinitions", SignAliasDefinitions) { description = "Create an hashes aliases file for testing aliases yml definition" stage SignAliasDefinitions.Stage.test - hashedFile = project.file("${project.buildDir}/plugin_aliases_hashed_test.yml") + hashedFile.set(layout.buildDirectory.file("plugin_aliases_hashed_test.yml")) } tasks.register("copyPluginAlias", Copy) { @@ -212,11 +212,13 @@ tasks.register("copyPluginAlias", Copy) { tasks.register("copyPluginAlias_ruby", Copy) { description = "Copy the marked plugin_aliases.yml file to destination folders" - dependsOn "markAliasDefinitions" + dependsOn markAliasDefinitions - inputs.file("${buildDir}/plugin_aliases_hashed.yml") + def hashedFileProvider = markAliasDefinitions.flatMap { it.hashedFile } - from(markAliasDefinitions.hashedFile) { + inputs.file(hashedFileProvider) + + from(hashedFileProvider) { rename "plugin_aliases_hashed.yml", "plugin_aliases.yml" } into "lib/pluginmanager/" @@ -224,11 +226,13 @@ tasks.register("copyPluginAlias_ruby", Copy) { tasks.register("copyPluginAlias_java", Copy) { description = "Copy the marked plugin_aliases.yml file to destination folders" - dependsOn "markAliasDefinitions" + dependsOn markAliasDefinitions + + def hashedFileProvider = markAliasDefinitions.flatMap { it.hashedFile } - inputs.file("${buildDir}/plugin_aliases_hashed.yml") + inputs.file(hashedFileProvider) - from(markAliasDefinitions.hashedFile) { + from(hashedFileProvider) { rename "plugin_aliases_hashed.yml", "plugin_aliases.yml" } into "logstash-core/src/main/resources/org/logstash/plugins/" @@ -241,11 +245,13 @@ tasks.register("copyPluginTestAlias") { tasks.register("copyPluginTestAlias_ruby", Copy) { description = "Copy the marked test plugin_aliases.yml file into Ruby's plugin_manager specs" - dependsOn "markTestAliasDefinitions" + dependsOn markTestAliasDefinitions - inputs.file(markTestAliasDefinitions.hashedFile) + def hashedTestFileProvider = markTestAliasDefinitions.flatMap { it.hashedFile } - from(markTestAliasDefinitions.hashedFile) { + inputs.file(hashedTestFileProvider) + + from(hashedTestFileProvider) { rename "plugin_aliases_hashed_test.yml", "plugin_aliases.yml" } into "spec/unit/plugin_manager/" @@ -253,11 +259,13 @@ tasks.register("copyPluginTestAlias_ruby", Copy) { tasks.register("copyPluginTestAlias_java", Copy) { description = "Copy the marked test plugin_aliases.yml file into logstash-core's test resources" - dependsOn "markTestAliasDefinitions" + dependsOn markTestAliasDefinitions + + def hashedTestFileProvider = markTestAliasDefinitions.flatMap { it.hashedFile } - inputs.file("${buildDir}/plugin_aliases_hashed_test.yml") + inputs.file(hashedTestFileProvider) - from(markTestAliasDefinitions.hashedFile) { + from(hashedTestFileProvider) { rename "plugin_aliases_hashed_test.yml", "plugin_aliases.yml" } into "logstash-core/src/test/resources/org/logstash/plugins/" diff --git a/buildSrc/src/main/groovy/org/logstash/gradle/tooling/SignAliasDefinitions.groovy b/buildSrc/src/main/groovy/org/logstash/gradle/tooling/SignAliasDefinitions.groovy index 546a4dad51c..62ab0119d39 100644 --- a/buildSrc/src/main/groovy/org/logstash/gradle/tooling/SignAliasDefinitions.groovy +++ b/buildSrc/src/main/groovy/org/logstash/gradle/tooling/SignAliasDefinitions.groovy @@ -1,43 +1,60 @@ package org.logstash.gradle.tooling import org.gradle.api.DefaultTask +import org.gradle.api.file.ProjectLayout +import org.gradle.api.file.RegularFileProperty +import org.gradle.api.provider.Property import org.gradle.api.tasks.Input import org.gradle.api.tasks.InputFile import org.gradle.api.tasks.OutputFile +import org.gradle.api.tasks.PathSensitive +import org.gradle.api.tasks.PathSensitivity import org.gradle.api.tasks.TaskAction +import javax.inject.Inject + abstract class SignAliasDefinitions extends DefaultTask { enum Stage { main, test; } + private final ProjectLayout projectLayout + + @Inject + SignAliasDefinitions(ProjectLayout projectLayout) { + this.projectLayout = projectLayout + registry.convention('org/logstash/plugins/AliasRegistry.yml') + stage.convention(Stage.main) + registryFile.convention(registry.zip(stage) { reg, st -> + projectLayout.projectDirectory.file("logstash-core/src/${st}/resources/${reg}") + }) + } + /** - * Relative path to the AliasRegistry.yml file to use, relative to project's root - * */ + * Relative path to the AliasRegistry.yml file to use, relative to project's root. + */ + @Input + abstract Property getRegistry() + @Input - String registry = 'org/logstash/plugins/AliasRegistry.yml' + abstract Property getStage() @InputFile - File getRegistryFullPath() { - String stagedRegistry = "logstash-core/src/${stage}/resources/${registry}" - project.file("${project.projectDir}/${stagedRegistry}") - } + @PathSensitive(PathSensitivity.RELATIVE) + abstract RegularFileProperty getRegistryFile() - /** - * Full file path to the file containing the marked AliasRegistry file - * */ @OutputFile - File hashedFile - - private Stage stage = Stage.main + abstract RegularFileProperty getHashedFile() @TaskAction - def sign() { - String aliasesDefs = registryFullPath.text + void sign() { + Stage stageValue = stage.get() + String registryPath = registry.get() + String stagedRegistry = "logstash-core/src/${stageValue}/resources/${registryPath}" + String aliasesDefs = registryFile.get().asFile.text String hash = aliasesDefs.digest('SHA-256') - String stagedRegistry = "logstash-core/src/${stage}/resources/${registry}" - hashedFile.withWriter('utf-8') { writer -> + hashedFile.get().asFile.withWriter('utf-8') { writer -> writer.writeLine "#CHECKSUM: ${hash}" writer.writeLine "# DON'T EDIT THIS FILE, PLEASE REFER TO ${stagedRegistry}" writer.write aliasesDefs @@ -45,7 +62,8 @@ abstract class SignAliasDefinitions extends DefaultTask { } SignAliasDefinitions stage(Stage stage) { - this.stage = stage + this.stage.set(stage) return this } + } diff --git a/buildSrc/src/test/groovy/org/logstash/gradle/tooling/SignAliasDefinitionsTest.groovy b/buildSrc/src/test/groovy/org/logstash/gradle/tooling/SignAliasDefinitionsTest.groovy index 8e19a199199..ee6d771d170 100644 --- a/buildSrc/src/test/groovy/org/logstash/gradle/tooling/SignAliasDefinitionsTest.groovy +++ b/buildSrc/src/test/groovy/org/logstash/gradle/tooling/SignAliasDefinitionsTest.groovy @@ -36,8 +36,8 @@ class SignAliasDefinitionsTest { def task = project.task("signerTask", type: SignAliasDefinitions) { stage SignAliasDefinitions.Stage.test - registry = "ToSign.yml" - hashedFile = project.file("${project.buildDir}/hashed_output.yml") + registry.set("ToSign.yml") + hashedFile.set(project.layout.buildDirectory.file("hashed_output.yml")) } // Exercise diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index d4081da476b..2e1113280ef 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index 23d15a93670..adff685a034 100755 --- a/gradlew +++ b/gradlew @@ -1,7 +1,7 @@ #!/bin/sh # -# Copyright © 2015-2021 the original authors. +# Copyright © 2015 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -114,7 +114,6 @@ case "$( uname )" in #( NONSTOP* ) nonstop=true ;; esac -CLASSPATH="\\\"\\\"" # Determine the Java command to use to start the JVM. @@ -172,7 +171,6 @@ fi # For Cygwin or MSYS, switch paths to Windows format before running java if "$cygwin" || "$msys" ; then APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) JAVACMD=$( cygpath --unix "$JAVACMD" ) @@ -212,7 +210,6 @@ DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ "$@" diff --git a/gradlew.bat b/gradlew.bat index 5eed7ee8452..e509b2dd8fe 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -70,11 +70,10 @@ goto fail :execute @rem Setup the command line -set CLASSPATH= @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* :end @rem End local scope for the variables with windows NT shell diff --git a/logstash-core/benchmarks/build.gradle b/logstash-core/benchmarks/build.gradle index b1f2a531c62..f66f88f58e6 100644 --- a/logstash-core/benchmarks/build.gradle +++ b/logstash-core/benchmarks/build.gradle @@ -33,7 +33,7 @@ buildscript { gradlePluginPortal() } dependencies { - classpath "com.github.johnrengelman:shadow:${shadowGradlePluginVersion}" + classpath "com.gradleup.shadow:shadow-gradle-plugin:${shadowGradlePluginVersion}" } } @@ -63,7 +63,7 @@ javadoc { enabled = false } -apply plugin: 'com.github.johnrengelman.shadow' +apply plugin: 'com.gradleup.shadow' shadowJar { archiveBaseName = 'logstash-core-benchmarks-all' diff --git a/logstash-core/build.gradle b/logstash-core/build.gradle index 5c0db0f5a3f..16e651b2310 100644 --- a/logstash-core/build.gradle +++ b/logstash-core/build.gradle @@ -243,9 +243,9 @@ dependencies { api "com.fasterxml.jackson.core:jackson-annotations:${jacksonVersion}" implementation 'org.codehaus.janino:janino:3.1.0' implementation "com.fasterxml.jackson.dataformat:jackson-dataformat-cbor:${jacksonVersion}" - implementation group: 'org.yaml', name: 'snakeyaml', version: '2.2' - implementation group: 'com.google.guava', name: 'guava', version: '33.1.0-jre' - implementation('com.google.googlejavaformat:google-java-format:1.22.0') { + implementation 'org.yaml:snakeyaml:2.2' + implementation 'com.google.guava:guava:33.1.0-jre' + implementation('com.google.googlejavaformat:google-java-format:1.25.2') { exclude group: 'com.google.guava', module: 'guava' } implementation 'org.javassist:javassist:3.30.2-GA' @@ -258,7 +258,7 @@ dependencies { testImplementation 'org.assertj:assertj-core:3.11.1' testImplementation 'org.awaitility:awaitility:4.2.0' - api group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.5.14' - api group: 'commons-codec', name: 'commons-codec', version: '1.17.0' - api group: 'org.apache.httpcomponents', name: 'httpcore', version: '4.4.16' + api 'org.apache.httpcomponents:httpclient:4.5.14' + api 'commons-codec:commons-codec:1.17.0' + api 'org.apache.httpcomponents:httpcore:4.4.16' } diff --git a/logstash-core/src/main/java/org/logstash/ackedqueue/io/ByteBufferCleanerImpl.java b/logstash-core/src/main/java/org/logstash/ackedqueue/io/ByteBufferCleanerImpl.java index b9ce84c8fc9..eb781705757 100644 --- a/logstash-core/src/main/java/org/logstash/ackedqueue/io/ByteBufferCleanerImpl.java +++ b/logstash-core/src/main/java/org/logstash/ackedqueue/io/ByteBufferCleanerImpl.java @@ -14,12 +14,13 @@ public ByteBufferCleanerImpl() { Field unsafeField = Unsafe.class.getDeclaredField("theUnsafe"); unsafeField.setAccessible(true); unsafe = (Unsafe) unsafeField.get(null); - }catch (Exception e){ + } catch (Exception e) { throw new IllegalStateException(e); } } @Override + @SuppressWarnings("removal") public void clean(MappedByteBuffer buffer) { unsafe.invokeCleaner(buffer); } diff --git a/logstash-core/src/main/java/org/logstash/config/ir/compiler/ComputeStepSyntaxElement.java b/logstash-core/src/main/java/org/logstash/config/ir/compiler/ComputeStepSyntaxElement.java index eb7e131616b..84b2b9beea7 100644 --- a/logstash-core/src/main/java/org/logstash/config/ir/compiler/ComputeStepSyntaxElement.java +++ b/logstash-core/src/main/java/org/logstash/config/ir/compiler/ComputeStepSyntaxElement.java @@ -37,6 +37,8 @@ import java.util.regex.Pattern; import java.util.stream.Collectors; import java.util.stream.StreamSupport; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.codehaus.commons.compiler.CompileException; import org.codehaus.janino.Scanner; import org.codehaus.commons.compiler.ISimpleCompiler; @@ -73,6 +75,8 @@ public final class ComputeStepSyntaxElement { private static final Pattern CLASS_NAME_PLACEHOLDER_REGEX = Pattern.compile(CLASS_NAME_PLACEHOLDER); + private static final Logger LOGGER = LogManager.getLogger(ComputeStepSyntaxElement.class); + private final Iterable methods; private final ClassFields fields; @@ -170,23 +174,25 @@ public boolean equals(final Object other) { } private String generateCode(final String name) { - try { - return REDUNDANT_SEMICOLON.matcher(new Formatter().formatSource( - String.format( - "package org.logstash.generated;\npublic final class %s extends org.logstash.config.ir.compiler.BaseDataset implements %s { %s }", - name, - type.getName(), - SyntaxFactory.join( - fields.inlineAssigned().generateCode(), fieldsAndCtor(name), - combine( - StreamSupport.stream(methods.spliterator(), false) - .toArray(SyntaxElement[]::new) - ) - ) + final String rawSource = String.format( + "package org.logstash.generated;\npublic final class %s extends org.logstash.config.ir.compiler.BaseDataset implements %s { %s }", + name, + type.getName(), + SyntaxFactory.join( + fields.inlineAssigned().generateCode(), fieldsAndCtor(name), + combine( + StreamSupport.stream(methods.spliterator(), false) + .toArray(SyntaxElement[]::new) ) - )).replaceAll("\n"); - } catch (final FormatterException ex) { - throw new IllegalStateException(ex); + ) + ); + + try { + final String formatted = new Formatter().formatSource(rawSource); + return REDUNDANT_SEMICOLON.matcher(formatted).replaceAll("\n"); + } catch (final FormatterException | LinkageError ex) { + LOGGER.warn("Failed to format generated pipeline class with google-java-format; continuing with unformatted code", ex); + return REDUNDANT_SEMICOLON.matcher(rawSource).replaceAll("\n"); } } diff --git a/logstash-core/src/main/java/org/logstash/execution/PeriodicFlush.java b/logstash-core/src/main/java/org/logstash/execution/PeriodicFlush.java index 2d506652f6d..07c0892dd5a 100644 --- a/logstash-core/src/main/java/org/logstash/execution/PeriodicFlush.java +++ b/logstash-core/src/main/java/org/logstash/execution/PeriodicFlush.java @@ -27,10 +27,10 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -@SuppressWarnings("try") /** - * Used by Ruby's JavaPipeline - * */ + * Used by Ruby's JavaPipeline. + */ +@SuppressWarnings("try") public final class PeriodicFlush implements AutoCloseable { private static final Logger LOGGER = LogManager.getLogger(PeriodicFlush.class); diff --git a/tools/benchmark-cli/build.gradle b/tools/benchmark-cli/build.gradle index 10981556002..1c9f2f57f87 100644 --- a/tools/benchmark-cli/build.gradle +++ b/tools/benchmark-cli/build.gradle @@ -34,7 +34,7 @@ buildscript { gradlePluginPortal() } dependencies { - classpath "com.github.johnrengelman:shadow:${shadowGradlePluginVersion}" + classpath "com.gradleup.shadow:shadow-gradle-plugin:${shadowGradlePluginVersion}" } } @@ -45,17 +45,17 @@ ext { dependencies { implementation 'net.sf.jopt-simple:jopt-simple:5.0.4' - implementation group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.5.14' - implementation group: 'org.apache.commons', name: 'commons-compress', version: '1.26.1' - implementation group: 'org.apache.commons', name: 'commons-lang3', version: '3.18.0' - implementation group: 'commons-codec', name: 'commons-codec', version: '1.17.0' // transitively required by httpclient + implementation 'org.apache.httpcomponents:httpclient:4.5.14' + implementation 'org.apache.commons:commons-compress:1.26.1' + implementation 'org.apache.commons:commons-lang3:3.18.0' + implementation 'commons-codec:commons-codec:1.17.0' // transitively required by httpclient - implementation group: 'commons-io', name: 'commons-io', version: '2.16.1' + implementation 'commons-io:commons-io:2.16.1' implementation "com.fasterxml.jackson.core:jackson-core:${jacksonVersion}" api "com.fasterxml.jackson.core:jackson-databind:${jacksonDatabindVersion}" - implementation group: 'org.elasticsearch.client', name: 'elasticsearch-rest-client', version: elasticsearch + implementation "org.elasticsearch.client:elasticsearch-rest-client:${elasticsearch}" implementation "org.openjdk.jmh:jmh-core:$jmh" - testImplementation group: 'org.wiremock', name: 'wiremock-standalone', version: '3.0.4' + testImplementation 'org.wiremock:wiremock-standalone:3.0.4' testImplementation "junit:junit:4.13.2" } @@ -72,7 +72,7 @@ test { exclude '**/org/logstash/benchmark/cli/MainEsStorageTest*' } -apply plugin: 'com.github.johnrengelman.shadow' +apply plugin: 'com.gradleup.shadow' apply plugin: 'java' shadowJar { diff --git a/tools/dependencies-report/build.gradle b/tools/dependencies-report/build.gradle index 911b7df4d92..7e8d7c60fb6 100644 --- a/tools/dependencies-report/build.gradle +++ b/tools/dependencies-report/build.gradle @@ -33,7 +33,7 @@ buildscript { gradlePluginPortal() } dependencies { - classpath "com.github.johnrengelman:shadow:${shadowGradlePluginVersion}" + classpath "com.gradleup.shadow:shadow-gradle-plugin:${shadowGradlePluginVersion}" } } @@ -56,7 +56,7 @@ test { jvmArgs '-Djava.net.preferIPv4Stack=true' } -apply plugin: 'com.github.johnrengelman.shadow' +apply plugin: 'com.gradleup.shadow' shadowJar { archiveBaseName = 'dependencies-report' diff --git a/versions.yml b/versions.yml index bad7755a11d..e0d0d4ff055 100644 --- a/versions.yml +++ b/versions.yml @@ -7,8 +7,8 @@ logstash-core-plugin-api: 2.1.16 bundled_jdk: # for AdoptOpenJDK/OpenJDK jdk-14.0.1+7.1, the revision is 14.0.1 while the build is 7.1 vendor: "adoptium" - revision: 21.0.8 - build: 9 + revision: 25.0.0 + build: 36 # jruby must reference a *released* version of jruby which can be downloaded from the official download url # *and* for which jars artifacts are published for compile-time