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 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