logstash-integration-jdbc 5.4.0 → 5.4.1
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 +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
|