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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 28cba197157488c1839fc9a948c3f27916b26af07f28c592f537434bd84722a6
4
- data.tar.gz: fe2263ea7ed36abdeb9fd3d9597958724be77a8653950e9d554a212c1e3dd106
3
+ metadata.gz: 71bdfca5d1e5e86b7d86b5c49caf237cfc882e31dab78d63e169241e1c96814d
4
+ data.tar.gz: 5c07e44042c4a6e6e29b8ecc7fb7631147100a27777c6fdd2a22015ac7fd3b4e
5
5
  SHA512:
6
- metadata.gz: 76543ead6834631efaca25d154abe7ee7594943dff0c27d90e7588ed3aa651de427fc3372cffac348f6f810f11cfe13864d8f26af7d09fd34470491a6a4c66b3
7
- data.tar.gz: de71ae5f8c54dfa08d67e1e848e59fc1779477c41246cee120debf633301829e931b7103546de0bef482002eb7b5296b748d6ad6caf0bb5457abe7205db79b6e
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
@@ -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.0'
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.run(q)
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
- q = Queue.new
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
- q = Queue.new
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
@@ -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.run(queue) }.
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.0
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-10-11 00:00:00.000000000 Z
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