logstash-integration-jdbc 5.1.2 → 5.1.3

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: 34dbd968b687896da6407942201421c91970d025814596b7229609493b8bbcdc
4
- data.tar.gz: a5155f4d11413ae5440c1c3ec4da5215c3cdd6febd4cb6d6376b2a03bdcbad42
3
+ metadata.gz: 629c09f028a534cb970327b8d98eb85d8ae0371f4e9c7ccc8c5c9194d2942293
4
+ data.tar.gz: 9fddcb34b38b9be0bdc80cfc9c9385dacbcb821530be8c78c21024414b70f0ba
5
5
  SHA512:
6
- metadata.gz: dec5e76bf0354e7d46fafcb56725ba581ad31c54d475269faf5562e658f3723426a14011d961d6aedaf6ba921b9a654dbe05b2707bdfad38e6b3ca34f1934b56
7
- data.tar.gz: 65eb85f0e25e73f2e63de44c3d9e64ad6d834c5af316208acb445efcf1aa8d4443de00f2dcf68e66c90057a46fbddb9c7ff451b80bc46ce03bcf32b43c7a6c4a
6
+ metadata.gz: 06f23b86b0f5f15bb5c0b93cca5068199df24e9867e891d72d930dd87c7f9faf891a2d0937f55d92e74a3769b432f87c5559e07cc028bbc64652631d927f4ebb
7
+ data.tar.gz: 969df6533a1c1afcd01ff89283195cde0865ee72bae75ed77e9ef7abfb129af9eb62b485d5a0d293189d5348df71b546dd911146d9e46ea0b481369b938959ca
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## 5.1.3
2
+ - Improve robustness when handling errors from `sequel` library in jdbc static and streaming
3
+ filters[#78](https://github.com/logstash-plugins/logstash-integration-jdbc/pull/78)
4
+
1
5
  ## 5.1.2
2
6
  - Fix `prepared_statement_bind_values` in streaming filter to resolve nested event's fields[#76](https://github.com/logstash-plugins/logstash-integration-jdbc/pull/76)
3
7
 
@@ -162,8 +162,11 @@ module LogStash module Filters module Jdbc
162
162
  begin
163
163
  logger.debug? && logger.debug("Executing Jdbc query", :lookup_id => @id, :statement => query, :parameters => params)
164
164
  proc.call(local, query, params, result)
165
- rescue ::Sequel::Error => e
166
- # all sequel errors are a subclass of this, let all other standard or runtime errors bubble up
165
+ rescue => e
166
+ # In theory all exceptions in Sequel should be wrapped in Sequel::Error
167
+ # However, there are cases where other errors can occur - a `SQLTransactionRollbackException`
168
+ # may be thrown during `prepareStatement`. Let's handle these cases here, where we can tag and warn
169
+ # appropriately rather than bubble up and potentially crash the plugin.
167
170
  result.failed!
168
171
  logger.warn? && logger.warn("Exception when executing Jdbc query", :lookup_id => @id, :exception => e.message, :backtrace => e.backtrace.take(8))
169
172
  end
@@ -119,8 +119,7 @@ module LogStash module PluginMixins module Jdbc
119
119
  else
120
120
  @logger.error("Failed to connect to database. #{@jdbc_pool_timeout} second timeout exceeded. Trying again.")
121
121
  end
122
- # rescue Java::JavaSql::SQLException, ::Sequel::Error => e
123
- rescue ::Sequel::Error => e
122
+ rescue Java::JavaSql::SQLException, ::Sequel::Error => e
124
123
  if retry_attempts <= 0
125
124
  log_java_exception(e.cause)
126
125
  @logger.error("Unable to connect to database. Tried #{@connection_retry_attempts} times", error_details(e, trace: true))
@@ -38,8 +38,11 @@ module LogStash module PluginMixins module JdbcStreaming
38
38
  begin
39
39
  logger.debug? && logger.debug("Executing JDBC query", :statement => statement, :parameters => params)
40
40
  execute_extract_records(db, params, result)
41
- rescue ::Sequel::Error => e
42
- # all sequel errors are a subclass of this, let all other standard or runtime errors bubble up
41
+ rescue => e
42
+ # In theory all exceptions in Sequel should be wrapped in Sequel::Error
43
+ # However, there are cases where other errors can occur - a `SQLException`may be thrown
44
+ # during `prepareStatement`. Let's handle these cases here, where we can tag and warn
45
+ # appropriately rather than bubble up and potentially crash the plugin.
43
46
  result.failed!
44
47
  logger.warn? && logger.warn("Exception when executing JDBC query", :statement => statement, :parameters => params, :exception => e)
45
48
  end
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'logstash-integration-jdbc'
3
- s.version = '5.1.2'
3
+ s.version = '5.1.3'
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"
@@ -249,6 +249,41 @@ module LogStash module Filters module Jdbc
249
249
  end
250
250
  end
251
251
 
252
+ describe "lookup operations when prepareStatement throws" do
253
+ let(:local_db) { double("local_db") }
254
+ let(:lookup_hash) do
255
+ {
256
+ "query" => "select * from servers WHERE ip LIKE ? AND os LIKE ?",
257
+ "prepared_parameters" => ["%%{[ip]}"],
258
+ "target" => "server",
259
+ "tag_on_failure" => ["_jdbcstaticfailure_server"]
260
+ }
261
+ end
262
+ let(:event) { LogStash::Event.new()}
263
+ let(:records) { [{"name" => "ldn-1-23", "rack" => "2:1:6"}] }
264
+ let(:prepared_statement) { double("prepared_statement")}
265
+
266
+ subject(:lookup) { described_class.new(lookup_hash, {}, "lookup-1") }
267
+
268
+ before(:each) do
269
+ allow(local_db).to receive(:prepare).once.and_return(prepared_statement)
270
+ allow(prepared_statement).to receive(:call).once.and_raise(Java::JavaSql::SQLTransactionRollbackException.new)
271
+ end
272
+
273
+ it "must not be valid" do
274
+ expect(subject.valid?).to be_falsey
275
+ end
276
+
277
+ it "should tag event as failed" do
278
+ event.set("ip", "20.20")
279
+ event.set("os", "MacOS")
280
+ subject.prepare(local_db)
281
+ subject.enhance(local_db, event)
282
+ expect(event.get("tags")).to eq(["_jdbcstaticfailure_server"])
283
+ expect(event.get("server")).to be_nil
284
+ end
285
+ end
286
+
252
287
  describe "validation of target option" do
253
288
  let(:lookup_hash) do
254
289
  {
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.1.2
4
+ version: 5.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Elastic
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-06-28 00:00:00.000000000 Z
11
+ date: 2021-07-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement