logstash-integration-jdbc 5.6.4 → 5.6.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b0434f8f19d3cb7df52955e6263c639acbf7edf1e8007f6eca2f0428c63d7794
4
- data.tar.gz: 1a741166ce8d2e83a1d32d727448042fd2fd3b801635528b67c40ca79733f608
3
+ metadata.gz: 819be7f98076d1baa5ccf68299025f16441218c8a8fbde49818a4711ee153598
4
+ data.tar.gz: f746524e0a8e2ae44fbc4e817299165a174ffff09fadc987d6cfc21b62c43c08
5
5
  SHA512:
6
- metadata.gz: 514915aa797a46b5ec6f167c69809773f110a848bfbd98a874f71fc6e145517c268768ecb1240bd82346ce9d26350f9e66ce1d3f1e39c07dc7b437410d061032
7
- data.tar.gz: eb4a71bdc9b67344f53ccf7a2502c50108e0ea2a746fa204b4f52a314c487def7fe9ae5cc3679f7811a7842f2e270e97ef1c281619309637b1f7fda0ee506f9c
6
+ metadata.gz: 8bf0523bfd1e0a687d8f3ec0833ba80c9e98524fd1992dede58195ec8562e94f5fda0f9c1afbf14e840480fd8e0196f92b0c22191b072721007f0ffb03b3a8b3
7
+ data.tar.gz: ee270f7fc7c07ce78ba08272d3407652dc59668ac50a251652ac4cf71ef0dda17fdb42cad43325477db04efc5d6e4331e695c93bc554ab7041ac46dc0ae27b29
data/CHANGELOG.md CHANGED
@@ -1,3 +1,6 @@
1
+ ## 5.6.5
2
+ - Prevent concurrent Sequel JDBC subadapter initialization races by preloading adapter at driver load time [#203](https://github.com/logstash-plugins/logstash-integration-jdbc/pull/203)
3
+
1
4
  ## 5.6.4
2
5
  - Fix connection leak on statement retry by opening JDBC connection once outside retry loop [#201](https://github.com/logstash-plugins/logstash-integration-jdbc/pull/201)
3
6
 
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
  Logstash Integration Plugin for JDBC, including Logstash Input and Filter Plugins
3
3
  # Logstash Plugin
4
4
 
5
- [![Travis Build Status](https://travis-ci.com/logstash-plugins/logstash-integration-jdbc.svg)](https://travis-ci.com/logstash-plugins/logstash-integration-jdbc)
5
+ [![Unit Tests](https://github.com/logstash-plugins/logstash-integration-jdbc/actions/workflows/unit-tests.yml/badge.svg?branch=main)](https://github.com/logstash-plugins/logstash-integration-jdbc/actions/workflows/unit-tests.yml)
6
6
 
7
7
  This is a plugin for [Logstash](https://github.com/elastic/logstash).
8
8
 
@@ -32,6 +32,7 @@ module LogStash module PluginMixins module Jdbc
32
32
  # concurrency related problems with multiple pipelines and multiple drivers
33
33
  DRIVERS_LOADING_LOCK.lock()
34
34
  begin
35
+ preload_sequel_jdbc_subadapter
35
36
  load_driver_jars
36
37
  begin
37
38
  @driver_impl = load_jdbc_driver_class
@@ -50,6 +51,24 @@ module LogStash module PluginMixins module Jdbc
50
51
  end
51
52
  end
52
53
 
54
+ def preload_sequel_jdbc_subadapter
55
+ subadapter = jdbc_subadapter_scheme
56
+ return unless subadapter
57
+
58
+ # Ensure first-time Sequel jdbc/<subadapter> loading happens serially.
59
+ Sequel::Database.load_adapter(subadapter, :map => Sequel::JDBC::DATABASE_SETUP, :subdir => 'jdbc')
60
+ rescue Sequel::AdapterNotFound
61
+ # Some JDBC URLs can work without a dedicated Sequel sub-adapter.
62
+ @logger.debug("Skipping Sequel JDBC sub-adapter preload", :subadapter => subadapter, :jdbc_connection_string => @jdbc_connection_string)
63
+ nil
64
+ end
65
+
66
+ def jdbc_subadapter_scheme
67
+ return nil unless @jdbc_connection_string
68
+
69
+ @jdbc_connection_string[/\Ajdbc:([^:]+):/, 1]&.downcase&.to_sym
70
+ end
71
+
53
72
  def load_driver_jars
54
73
  if jdbc_driver_library_set?
55
74
  @jdbc_driver_library.split(",").each do |driver_jar|
@@ -1907,4 +1907,54 @@ describe LogStash::Inputs::Jdbc do
1907
1907
  end
1908
1908
  end
1909
1909
  end
1910
+
1911
+ describe "jdbc adapter preloading", :no_connection do
1912
+ before do
1913
+ allow(plugin).to receive(:load_jdbc_driver_class).and_return(double("driver_class"))
1914
+ end
1915
+
1916
+ it "extracts jdbc sub-adapter scheme in lowercase" do
1917
+ plugin.instance_variable_set(:@jdbc_connection_string, "jdbc:Oracle:thin:@//localhost:1521/FREEPDB1")
1918
+
1919
+ expect(plugin.send(:jdbc_subadapter_scheme)).to eq(:oracle)
1920
+ end
1921
+
1922
+ it "preloads sequel jdbc sub-adapter for jdbc URLs" do
1923
+ expect(Sequel::Database).to receive(:load_adapter).with(:derby, :map => Sequel::JDBC::DATABASE_SETUP, :subdir => 'jdbc').and_call_original
1924
+
1925
+ plugin.send(:load_driver)
1926
+ end
1927
+
1928
+ it "uses normalized jdbc sub-adapter scheme while preloading" do
1929
+ plugin.instance_variable_set(:@jdbc_connection_string, "jdbc:Oracle:thin:@//localhost:1521/FREEPDB1")
1930
+
1931
+ expect(Sequel::Database).to receive(:load_adapter).with(:oracle, :map => Sequel::JDBC::DATABASE_SETUP, :subdir => 'jdbc').and_return(nil)
1932
+
1933
+ expect { plugin.send(:load_driver) }.not_to raise_error
1934
+ end
1935
+
1936
+ it "does not try to preload when URL is not jdbc" do
1937
+ plugin.instance_variable_set(:@jdbc_connection_string, "mock://localhost:1527/db")
1938
+
1939
+ expect(Sequel::Database).not_to receive(:load_adapter)
1940
+
1941
+ plugin.send(:load_driver)
1942
+ end
1943
+
1944
+ it "ignores unknown jdbc sub-adapters" do
1945
+ plugin.instance_variable_set(:@jdbc_connection_string, "jdbc:unknown://localhost:1527/db")
1946
+
1947
+ expect(Sequel::Database).to receive(:load_adapter).with(:unknown, :map => Sequel::JDBC::DATABASE_SETUP, :subdir => 'jdbc').and_raise(Sequel::AdapterNotFound)
1948
+
1949
+ expect { plugin.send(:load_driver) }.not_to raise_error
1950
+ end
1951
+
1952
+ it "treats nil-returning jdbc sub-adapter load as a no-op" do
1953
+ plugin.instance_variable_set(:@jdbc_connection_string, "jdbc:unknown://localhost:1527/db")
1954
+
1955
+ expect(Sequel::Database).to receive(:load_adapter).with(:unknown, :map => Sequel::JDBC::DATABASE_SETUP, :subdir => 'jdbc').and_return(nil)
1956
+
1957
+ expect { plugin.send(:load_driver) }.not_to raise_error
1958
+ end
1959
+ end
1910
1960
  end
data/version CHANGED
@@ -1 +1 @@
1
- 5.6.4
1
+ 5.6.5
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-integration-jdbc
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.6.4
4
+ version: 5.6.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Elastic
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2026-07-21 00:00:00.000000000 Z
10
+ date: 2026-08-25 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: logstash-core-plugin-api