From 68dc85a193bd3840a0d223f50c32b3d33deb530f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Duarte?= Date: Tue, 21 Jan 2025 11:38:28 +0000 Subject: [PATCH 1/3] fix jars installer for new maven and pin psych to 5.2.2 --- Gemfile.template | 1 + lib/bootstrap/bundler.rb | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/Gemfile.template b/Gemfile.template index e810b45370b..bc2c7a7d394 100644 --- a/Gemfile.template +++ b/Gemfile.template @@ -43,3 +43,4 @@ gem "murmurhash3", "= 0.1.6" # Pins until version 0.1.7-java is released gem "date", "= 3.3.3" gem "thwait" gem "bigdecimal", "~> 3.1" +gem "psych", "5.2.2" diff --git a/lib/bootstrap/bundler.rb b/lib/bootstrap/bundler.rb index 3252220212b..12f7f9bf60f 100644 --- a/lib/bootstrap/bundler.rb +++ b/lib/bootstrap/bundler.rb @@ -134,6 +134,28 @@ def invoke!(options = {}) ::Bundler.settings.set_local(:without, options[:without]) ::Bundler.settings.set_local(:force, options[:force]) + require 'jars/installer' + ::Jars::Installer.singleton_class.class_eval do + alias_method :original_load_from_maven, :load_from_maven + + define_method(:load_from_maven) do |file| + $stderr.puts "DEBUG: load_from_maven called with arguments: #{file.inspect}" + result = [] + ::File.read(file).each_line do |line| + if line.match?(/ --/) + fixed_line = line.strip.gsub(/ --.+?$/, "")[0...-5] + $stderr.puts "changed from \"#{line.inspect}\" to \"#{fixed_line.inspect}\"" + dep = ::Jars::Installer::Dependency.new(fixed_line) + else + dep = ::Jars::Installer::Dependency.new(line) + end + puts dep.inspect + result << dep if dep && dep.scope == :runtime + end + $stderr.puts "DEBUG: load_from_maven returned: #{result.inspect}" + result + end + end # This env setting avoids the warning given when bundler is run as root, as is required # to update plugins when logstash is run as a service # Note: Using `ENV`s here because ::Bundler.settings.set_local or `bundle config` From 3b167db5300e17d86bc32a4e75eb3ac23ea8c9bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Duarte?= Date: Tue, 21 Jan 2025 15:05:07 +0000 Subject: [PATCH 2/3] move jars::installer patch to patches/jar_dependencies --- lib/bootstrap/bundler.rb | 24 ++--------------------- lib/bootstrap/patches/jar_dependencies.rb | 24 ++++++++++++++++++++++- 2 files changed, 25 insertions(+), 23 deletions(-) diff --git a/lib/bootstrap/bundler.rb b/lib/bootstrap/bundler.rb index 12f7f9bf60f..8cd56d0d3e8 100644 --- a/lib/bootstrap/bundler.rb +++ b/lib/bootstrap/bundler.rb @@ -15,6 +15,8 @@ # specific language governing permissions and limitations # under the License. +require_relative './patches/jar_dependencies' + module LogStash module Bundler extend self @@ -134,28 +136,6 @@ def invoke!(options = {}) ::Bundler.settings.set_local(:without, options[:without]) ::Bundler.settings.set_local(:force, options[:force]) - require 'jars/installer' - ::Jars::Installer.singleton_class.class_eval do - alias_method :original_load_from_maven, :load_from_maven - - define_method(:load_from_maven) do |file| - $stderr.puts "DEBUG: load_from_maven called with arguments: #{file.inspect}" - result = [] - ::File.read(file).each_line do |line| - if line.match?(/ --/) - fixed_line = line.strip.gsub(/ --.+?$/, "")[0...-5] - $stderr.puts "changed from \"#{line.inspect}\" to \"#{fixed_line.inspect}\"" - dep = ::Jars::Installer::Dependency.new(fixed_line) - else - dep = ::Jars::Installer::Dependency.new(line) - end - puts dep.inspect - result << dep if dep && dep.scope == :runtime - end - $stderr.puts "DEBUG: load_from_maven returned: #{result.inspect}" - result - end - end # This env setting avoids the warning given when bundler is run as root, as is required # to update plugins when logstash is run as a service # Note: Using `ENV`s here because ::Bundler.settings.set_local or `bundle config` diff --git a/lib/bootstrap/patches/jar_dependencies.rb b/lib/bootstrap/patches/jar_dependencies.rb index d83cbf3d943..49334b3e2a6 100644 --- a/lib/bootstrap/patches/jar_dependencies.rb +++ b/lib/bootstrap/patches/jar_dependencies.rb @@ -21,7 +21,7 @@ def require_jar(*args) return nil unless Jars.require? result = Jars.require_jar(*args) if result.is_a? String - # JAR_DEBUG=1 will now show theses + # JARS_VERBOSE=true will show these Jars.debug { "--- jar coordinate #{args[0..-2].join(':')} already loaded with version #{result} - omit version #{args[-1]}" } Jars.debug { " try to load from #{caller.join("\n\t")}" } return false @@ -29,3 +29,25 @@ def require_jar(*args) Jars.debug { " register #{args.inspect} - #{result == true}" } result end + +require 'jars/installer' + +class ::Jars::Installer + def self.load_from_maven(file) + Jars.debug { "[load_from_maven] called with arguments: #{file.inspect}" } + result = [] + ::File.read(file).each_line do |line| + if line.match?(/ --/) + Jars.debug { "[load_from_maven] line: #{line.inspect}" } + fixed_line = line.strip.gsub(/ --.+?$/, "")[0...-5] + Jars.debug { "[load_from_maven] fixed_line: #{fixed_line.inspect}" } + dep = ::Jars::Installer::Dependency.new(fixed_line) + else + dep = ::Jars::Installer::Dependency.new(line) + end + result << dep if dep && dep.scope == :runtime + end + Jars.debug { "[load_from_maven] returned: #{result.inspect}" } + result + end +end From 04d6427d914fdf26f7a3c43b90d9b94fda0f65fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Duarte?= Date: Tue, 21 Jan 2025 23:23:17 +0000 Subject: [PATCH 3/3] Apply suggestions from code review --- lib/bootstrap/bundler.rb | 1 + lib/bootstrap/patches/jar_dependencies.rb | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/lib/bootstrap/bundler.rb b/lib/bootstrap/bundler.rb index 8cd56d0d3e8..f02f92c0387 100644 --- a/lib/bootstrap/bundler.rb +++ b/lib/bootstrap/bundler.rb @@ -15,6 +15,7 @@ # specific language governing permissions and limitations # under the License. +# work around https://github.com/jruby/jruby/issues/8579 require_relative './patches/jar_dependencies' module LogStash diff --git a/lib/bootstrap/patches/jar_dependencies.rb b/lib/bootstrap/patches/jar_dependencies.rb index 49334b3e2a6..0aaa4694162 100644 --- a/lib/bootstrap/patches/jar_dependencies.rb +++ b/lib/bootstrap/patches/jar_dependencies.rb @@ -30,6 +30,10 @@ def require_jar(*args) result end +# work around https://github.com/jruby/jruby/issues/8579 +# the ruby maven 3.9.3 + maven-libs 3.9.9 gems will output unnecessary text we need to trim down during `load_from_maven` +# remove everything from "--" until the end of the line +# the `[...-5]` is just to remove the color changing characters from the end of the string that exist before "--" require 'jars/installer' class ::Jars::Installer