logstash-integration-jdbc 5.4.0 → 5.4.1
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/inputs/jdbc.rb +14 -3
- data/lib/logstash/plugin_mixins/jdbc/jdbc.rb +0 -13
- data/logstash-integration-jdbc.gemspec +1 -1
- data/spec/inputs/integration/integ_spec.rb +3 -9
- data/spec/inputs/jdbc_spec.rb +1 -5
- 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: 71bdfca5d1e5e86b7d86b5c49caf237cfc882e31dab78d63e169241e1c96814d
|
4
|
+
data.tar.gz: 5c07e44042c4a6e6e29b8ecc7fb7631147100a27777c6fdd2a22015ac7fd3b4e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 53e45e47383b15f559e58969e96c0217c43ceb5ba3528db5d6ce3bad10628da6e4c14442aeb5a8795e17b667ac558e5b1377134bb0ecc5e60a375e6ebe106b2c
|
7
|
+
data.tar.gz: d33a2cdea75e56fbe338e175276679e2910b4023c956bc8df7d0795f58140b39da1b9167d668c7665e27b2577c086409b3e390b2a3f8d86c4f9a3e3cdef343e3
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
## 5.4.1
|
2
|
+
- Bugfix leak which happened in creating a new Database pool for every query. The pool is now crated on registration and closed on plugin's `stop` [#119](https://github.com/logstash-plugins/logstash-integration-jdbc/pull/119)
|
3
|
+
|
1
4
|
## 5.4.0
|
2
5
|
- Ambiguous Timestamp Support [#92](https://github.com/logstash-plugins/logstash-integration-jdbc/pull/92)
|
3
6
|
- FIX: when encountering an ambiguous timestamp, the JDBC Input no longer crashes
|
data/lib/logstash/inputs/jdbc.rb
CHANGED
@@ -261,8 +261,6 @@ module LogStash module Inputs class Jdbc < LogStash::Inputs::Base
|
|
261
261
|
end
|
262
262
|
end
|
263
263
|
|
264
|
-
prepare_jdbc_connection
|
265
|
-
|
266
264
|
if @use_column_value
|
267
265
|
# Raise an error if @use_column_value is true, but no @tracking_column is set
|
268
266
|
if @tracking_column.nil?
|
@@ -305,6 +303,20 @@ module LogStash module Inputs class Jdbc < LogStash::Inputs::Base
|
|
305
303
|
converters[encoding] = converter
|
306
304
|
end
|
307
305
|
end
|
306
|
+
|
307
|
+
load_driver
|
308
|
+
begin
|
309
|
+
open_jdbc_connection
|
310
|
+
rescue Sequel::DatabaseConnectionError,
|
311
|
+
Sequel::DatabaseError,
|
312
|
+
Sequel::InvalidValue,
|
313
|
+
Java::JavaSql::SQLException => e
|
314
|
+
details = { exception: e.class, message: e.message }
|
315
|
+
details[:cause] = e.cause.inspect if e.cause
|
316
|
+
details[:backtrace] = e.backtrace if @logger.debug?
|
317
|
+
@logger.warn("Exception when executing JDBC query", details)
|
318
|
+
raise(LogStash::ConfigurationError, "Can't create a connection pool to the database")
|
319
|
+
end
|
308
320
|
end # def register
|
309
321
|
|
310
322
|
# test injection points
|
@@ -317,7 +329,6 @@ module LogStash module Inputs class Jdbc < LogStash::Inputs::Base
|
|
317
329
|
end
|
318
330
|
|
319
331
|
def run(queue)
|
320
|
-
load_driver
|
321
332
|
if @schedule
|
322
333
|
# scheduler input thread name example: "[my-oracle]|input|jdbc|scheduler"
|
323
334
|
scheduler.cron(@schedule) { execute_query(queue) }
|
@@ -188,22 +188,14 @@ module LogStash module PluginMixins module Jdbc
|
|
188
188
|
end
|
189
189
|
end
|
190
190
|
|
191
|
-
public
|
192
|
-
def prepare_jdbc_connection
|
193
|
-
@connection_lock = ReentrantLock.new
|
194
|
-
end
|
195
|
-
|
196
191
|
public
|
197
192
|
def close_jdbc_connection
|
198
193
|
begin
|
199
194
|
# pipeline restarts can also close the jdbc connection, block until the current executing statement is finished to avoid leaking connections
|
200
195
|
# connections in use won't really get closed
|
201
|
-
@connection_lock.lock
|
202
196
|
@database.disconnect if @database
|
203
197
|
rescue => e
|
204
198
|
@logger.warn("Failed to close connection", :exception => e)
|
205
|
-
ensure
|
206
|
-
@connection_lock.unlock
|
207
199
|
end
|
208
200
|
end
|
209
201
|
|
@@ -211,8 +203,6 @@ module LogStash module PluginMixins module Jdbc
|
|
211
203
|
def execute_statement
|
212
204
|
success = false
|
213
205
|
begin
|
214
|
-
@connection_lock.lock
|
215
|
-
open_jdbc_connection
|
216
206
|
sql_last_value = @use_column_value ? @value_tracker.value : Time.now.utc
|
217
207
|
@tracking_column_warning_sent = false
|
218
208
|
@statement_handler.perform_query(@database, @value_tracker.value) do |row|
|
@@ -230,9 +220,6 @@ module LogStash module PluginMixins module Jdbc
|
|
230
220
|
@logger.warn("Exception when executing JDBC query", details)
|
231
221
|
else
|
232
222
|
@value_tracker.set_value(sql_last_value)
|
233
|
-
ensure
|
234
|
-
close_jdbc_connection
|
235
|
-
@connection_lock.unlock
|
236
223
|
end
|
237
224
|
return success
|
238
225
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'logstash-integration-jdbc'
|
3
|
-
s.version = '5.4.
|
3
|
+
s.version = '5.4.1'
|
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"
|
@@ -76,10 +76,8 @@ describe LogStash::Inputs::Jdbc, :integration => true do
|
|
76
76
|
end
|
77
77
|
|
78
78
|
it "should not register correctly" do
|
79
|
-
plugin.register
|
80
|
-
q = Queue.new
|
81
79
|
expect do
|
82
|
-
plugin.
|
80
|
+
plugin.register
|
83
81
|
end.to raise_error(::LogStash::PluginLoadingError)
|
84
82
|
end
|
85
83
|
end
|
@@ -92,16 +90,13 @@ describe LogStash::Inputs::Jdbc, :integration => true do
|
|
92
90
|
end
|
93
91
|
|
94
92
|
it "log warning msg when plugin run" do
|
95
|
-
plugin.register
|
96
93
|
expect( plugin ).to receive(:log_java_exception)
|
97
94
|
expect(plugin.logger).to receive(:warn).once.with("Exception when executing JDBC query",
|
98
95
|
hash_including(:message => instance_of(String)))
|
99
|
-
|
100
|
-
expect{ plugin.run(q) }.not_to raise_error
|
96
|
+
expect{ plugin.register }.to raise_error(::LogStash::ConfigurationError)
|
101
97
|
end
|
102
98
|
|
103
99
|
it "should log (native) Java driver error" do
|
104
|
-
plugin.register
|
105
100
|
expect( org.apache.logging.log4j.LogManager ).to receive(:getLogger).and_wrap_original do |m, *args|
|
106
101
|
logger = m.call(*args)
|
107
102
|
expect( logger ).to receive(:error) do |_, e|
|
@@ -109,8 +104,7 @@ describe LogStash::Inputs::Jdbc, :integration => true do
|
|
109
104
|
end.and_call_original
|
110
105
|
logger
|
111
106
|
end
|
112
|
-
|
113
|
-
expect{ plugin.run(q) }.not_to raise_error
|
107
|
+
expect{ plugin.register }.to raise_error(::LogStash::ConfigurationError)
|
114
108
|
end
|
115
109
|
end
|
116
110
|
end
|
data/spec/inputs/jdbc_spec.rb
CHANGED
@@ -1565,16 +1565,12 @@ describe LogStash::Inputs::Jdbc do
|
|
1565
1565
|
{ "statement" => "SELECT * from types_table", "jdbc_driver_library" => invalid_driver_jar_path }
|
1566
1566
|
end
|
1567
1567
|
|
1568
|
-
before do
|
1569
|
-
plugin.register
|
1570
|
-
end
|
1571
|
-
|
1572
1568
|
after do
|
1573
1569
|
plugin.stop
|
1574
1570
|
end
|
1575
1571
|
|
1576
1572
|
it "raise a loading error" do
|
1577
|
-
expect { plugin.
|
1573
|
+
expect { plugin.register }.
|
1578
1574
|
to raise_error(LogStash::PluginLoadingError, /unable to load .*? from :jdbc_driver_library, file not readable/)
|
1579
1575
|
end
|
1580
1576
|
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.4.
|
4
|
+
version: 5.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Elastic
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-11-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|