logstash-integration-jdbc 5.0.3 → 5.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +3 -0
- data/lib/logstash/filters/jdbc/basic_database.rb +1 -1
- data/lib/logstash/plugin_mixins/jdbc/jdbc.rb +3 -2
- data/lib/logstash/plugin_mixins/jdbc_streaming.rb +1 -1
- data/logstash-integration-jdbc.gemspec +1 -1
- data/spec/filters/integration/jdbc_static_spec.rb +3 -6
- data/spec/filters/jdbc/read_only_database_spec.rb +19 -10
- data/spec/filters/jdbc/read_write_database_spec.rb +8 -6
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c112f66e8224282b05dd0d43c1eb864164629951ebd9f2fdbc5d08514731057f
|
4
|
+
data.tar.gz: 69ee8e0cf79f4f4be6d4f0aae5b3f95a1fae46e3458c6a840e23722f9bbb8a60
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8cc11af1a041fbb7784603be07de4243844bffbdfb980bf0f3ff4394af95d3ea2ed9da8543673f7fa866d999c9ba3df772567b64f31538eb8336cbf68283d39d
|
7
|
+
data.tar.gz: 9bc94ac7a6575a5ac797a44f8a8d987978a1bd0816733f252d80924e945a89b54383df101b2381b3d95afa2090149b7bdbdac1fb7dce06f34bd3fa987fba3354
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
## 5.0.4
|
2
|
+
- Fixed issue where JDBC Drivers that don't correctly register with Java's DriverManager fail to load (such as Sybase) [#34](https://github.com/logstash-plugins/logstash-integration-jdbc/pull/34)
|
3
|
+
|
1
4
|
## 5.0.3
|
2
5
|
- Fixed issue where a lost connection to the database can cause errors when using prepared statements with the scheduler [#25](https://github.com/logstash-plugins/logstash-integration-jdbc/pull/25)
|
3
6
|
|
@@ -95,7 +95,7 @@ module LogStash module Filters module Jdbc
|
|
95
95
|
end
|
96
96
|
begin
|
97
97
|
db = nil
|
98
|
-
::Sequel::JDBC.load_driver(driver_class)
|
98
|
+
@options_hash[:driver] = ::Sequel::JDBC.load_driver(driver_class)
|
99
99
|
@connection_string = connection_string
|
100
100
|
if user
|
101
101
|
@options_hash[:user] = user
|
@@ -110,13 +110,14 @@ module LogStash module PluginMixins module Jdbc
|
|
110
110
|
:user => @jdbc_user,
|
111
111
|
:password => @jdbc_password.nil? ? nil : @jdbc_password.value,
|
112
112
|
:pool_timeout => @jdbc_pool_timeout,
|
113
|
+
:driver => @driver_impl, # Sequel uses this as a fallback, if given URI doesn't auto-load the driver correctly
|
113
114
|
:keep_reference => false
|
114
115
|
}.merge(@sequel_opts)
|
115
116
|
retry_attempts = @connection_retry_attempts
|
116
117
|
loop do
|
117
118
|
retry_attempts -= 1
|
118
119
|
begin
|
119
|
-
return Sequel.connect(@jdbc_connection_string, opts
|
120
|
+
return Sequel.connect(@jdbc_connection_string, opts)
|
120
121
|
rescue Sequel::PoolTimeout => e
|
121
122
|
if retry_attempts <= 0
|
122
123
|
@logger.error("Failed to connect to database. #{@jdbc_pool_timeout} second timeout exceeded. Tried #{@connection_retry_attempts} times.")
|
@@ -147,7 +148,7 @@ module LogStash module PluginMixins module Jdbc
|
|
147
148
|
|
148
149
|
load_driver_jars
|
149
150
|
begin
|
150
|
-
Sequel::JDBC.load_driver(@jdbc_driver_class)
|
151
|
+
@driver_impl = Sequel::JDBC.load_driver(@jdbc_driver_class)
|
151
152
|
rescue Sequel::AdapterNotFound => e # Sequel::AdapterNotFound, "#{@jdbc_driver_class} not loaded"
|
152
153
|
# fix this !!!
|
153
154
|
message = if jdbc_driver_library_set?
|
@@ -84,7 +84,7 @@ module LogStash module PluginMixins module JdbcStreaming
|
|
84
84
|
@sequel_opts_symbols[:user] = @jdbc_user unless @jdbc_user.nil? || @jdbc_user.empty?
|
85
85
|
@sequel_opts_symbols[:password] = @jdbc_password.value unless @jdbc_password.nil?
|
86
86
|
|
87
|
-
Sequel::JDBC.load_driver(@jdbc_driver_class)
|
87
|
+
@sequel_opts_symbols[:driver] = Sequel::JDBC.load_driver(@jdbc_driver_class)
|
88
88
|
@database = Sequel.connect(@jdbc_connection_string, @sequel_opts_symbols)
|
89
89
|
if @jdbc_validate_connection
|
90
90
|
@database.extension(:connection_validator)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'logstash-integration-jdbc'
|
3
|
-
s.version = '5.0.
|
3
|
+
s.version = '5.0.4'
|
4
4
|
s.licenses = ['Apache License (2.0)']
|
5
5
|
s.summary = "Integration with JDBC - input and filter plugins"
|
6
6
|
s.description = "This gem is a Logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/logstash-plugin install gemname. This gem is not a stand-alone program"
|
@@ -4,7 +4,6 @@ require "logstash/filters/jdbc_static"
|
|
4
4
|
require "sequel"
|
5
5
|
require "sequel/adapters/jdbc"
|
6
6
|
require "stud/temporary"
|
7
|
-
require "timecop"
|
8
7
|
|
9
8
|
module LogStash module Filters
|
10
9
|
describe JdbcStatic, :integration => true do
|
@@ -136,18 +135,16 @@ module LogStash module Filters
|
|
136
135
|
describe "scheduled operation" do
|
137
136
|
context "given a loader_schedule" do
|
138
137
|
it "should properly schedule" do
|
139
|
-
settings["loader_schedule"] = "*/
|
140
|
-
Timecop.travel(Time.now.utc - 3600)
|
141
|
-
Timecop.scale(60)
|
138
|
+
settings["loader_schedule"] = "*/3 * * * * * UTC"
|
142
139
|
static_filter = JdbcStatic.new(settings)
|
143
140
|
runner = Thread.new(static_filter) do |filter|
|
144
141
|
filter.register
|
145
142
|
end
|
146
|
-
|
143
|
+
runner.join(4)
|
144
|
+
sleep 4
|
147
145
|
static_filter.filter(event)
|
148
146
|
expect(static_filter.loader_runner.reload_count).to be > 1
|
149
147
|
static_filter.close
|
150
|
-
Timecop.return
|
151
148
|
expect(event.get("server")).to eq([{"ip"=>"10.3.1.1", "name"=>"mv-server-1", "location"=>"MV-9-6-4"}])
|
152
149
|
end
|
153
150
|
end
|
@@ -10,28 +10,37 @@ module LogStash module Filters module Jdbc
|
|
10
10
|
let(:driver_class) { "org.apache.derby.jdbc.EmbeddedDriver" }
|
11
11
|
let(:driver_library) { nil }
|
12
12
|
subject(:read_only_db) { described_class.create(connection_string, driver_class, driver_library) }
|
13
|
+
let(:stub_driver_class) { double(driver_class).as_null_object }
|
13
14
|
|
14
15
|
describe "basic operations" do
|
15
16
|
describe "initializing" do
|
17
|
+
before(:each) do
|
18
|
+
allow(Sequel::JDBC).to receive(:load_driver).and_return(stub_driver_class)
|
19
|
+
end
|
20
|
+
|
16
21
|
it "tests the connection with defaults" do
|
17
22
|
expect(Sequel::JDBC).to receive(:load_driver).once.with(driver_class)
|
18
|
-
expect(Sequel).to receive(:connect).once.with(connection_string, {:test => true})
|
23
|
+
expect(Sequel).to receive(:connect).once.with(connection_string, {:test => true, :driver => stub_driver_class})
|
19
24
|
expect(read_only_db.empty_record_set).to eq([])
|
20
25
|
end
|
21
26
|
|
22
|
-
|
23
|
-
|
24
|
-
user
|
25
|
-
password
|
26
|
-
|
27
|
-
|
28
|
-
|
27
|
+
context 'with fully-specified arguments' do
|
28
|
+
let(:connection_string) { "a connection string" }
|
29
|
+
let(:user) { "a user" }
|
30
|
+
let(:password) { Util::Password.new("secret") }
|
31
|
+
let(:driver_class) { "a driver class" }
|
32
|
+
|
33
|
+
it "tests the connection" do
|
34
|
+
expect(Sequel::JDBC).to receive(:load_driver).once.with(driver_class)
|
35
|
+
expect(Sequel).to receive(:connect).once.with(connection_string, {:user => user, :password => password.value, :test => true, :driver => stub_driver_class}).and_return(db)
|
36
|
+
described_class.create(connection_string, driver_class, nil, user, password)
|
37
|
+
end
|
29
38
|
end
|
30
39
|
|
31
40
|
it "connects with defaults" do
|
32
41
|
expect(Sequel::JDBC).to receive(:load_driver).once.with(driver_class)
|
33
|
-
expect(Sequel).to receive(:connect).once.with(connection_string, {:test => true}).and_return(db)
|
34
|
-
expect(Sequel).to receive(:connect).once.with(connection_string, {}).and_return(db)
|
42
|
+
expect(Sequel).to receive(:connect).once.with(connection_string, {:test => true, :driver => stub_driver_class}).and_return(db)
|
43
|
+
expect(Sequel).to receive(:connect).once.with(connection_string, {:driver => stub_driver_class}).and_return(db)
|
35
44
|
expect(read_only_db.connected?).to be_falsey
|
36
45
|
read_only_db.connect("a caller specific error message")
|
37
46
|
expect(read_only_db.connected?).to be_truthy
|
@@ -16,10 +16,11 @@ module LogStash module Filters module Jdbc
|
|
16
16
|
describe "basic operations" do
|
17
17
|
context "connecting to a db" do
|
18
18
|
it "connects with defaults" do
|
19
|
-
|
19
|
+
stub_driver_class = double('org.apache.derby.jdbc.EmbeddedDriver').as_null_object
|
20
|
+
expect(::Sequel::JDBC).to receive(:load_driver).once.with("org.apache.derby.jdbc.EmbeddedDriver").and_return(stub_driver_class)
|
20
21
|
# two calls to connect because ReadWriteDatabase does verify_connection and connect
|
21
|
-
expect(::Sequel).to receive(:connect).once.with(connection_string_regex, {:test => true}).and_return(db)
|
22
|
-
expect(::Sequel).to receive(:connect).once.with(connection_string_regex, {}).and_return(db)
|
22
|
+
expect(::Sequel).to receive(:connect).once.with(connection_string_regex, {:driver => stub_driver_class, :test => true}).and_return(db)
|
23
|
+
expect(::Sequel).to receive(:connect).once.with(connection_string_regex, {:driver => stub_driver_class}).and_return(db)
|
23
24
|
expect(read_write_db.empty_record_set).to eq([])
|
24
25
|
end
|
25
26
|
|
@@ -27,9 +28,10 @@ module LogStash module Filters module Jdbc
|
|
27
28
|
connection_str = "a connection string"
|
28
29
|
user = "a user"
|
29
30
|
password = Util::Password.new("secret")
|
30
|
-
|
31
|
-
expect(::Sequel).to receive(:
|
32
|
-
expect(::Sequel).to receive(:connect).once.with(connection_str, {:user => user, :password => password.value}).and_return(db)
|
31
|
+
stub_driver_class = double('com.example.Driver')
|
32
|
+
expect(::Sequel::JDBC).to receive(:load_driver).once.with("a driver class").and_return(stub_driver_class)
|
33
|
+
expect(::Sequel).to receive(:connect).once.with(connection_str, {:driver => stub_driver_class, :user => user, :password => password.value, :test => true}).and_return(db)
|
34
|
+
expect(::Sequel).to receive(:connect).once.with(connection_str, {:driver => stub_driver_class, :user => user, :password => password.value}).and_return(db)
|
33
35
|
described_class.create(connection_str, "a driver class", nil, user, password)
|
34
36
|
end
|
35
37
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logstash-integration-jdbc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.0.
|
4
|
+
version: 5.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Elastic
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-06-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|