Sha256: b7c289855fd183f425a39a2cbc912889eff082620dc0f0378dcbf25d58207e9c

Contents?: true

Size: 1.8 KB

Versions: 7

Compression:

Stored size: 1.8 KB

Contents

From 2fae9033755a082b282d9f2e070e0e026154d88a Mon Sep 17 00:00:00 2001
From: Joao Duarte <jsvduarte@gmail.com>
Date: Sat, 27 Sep 2014 23:59:50 +0200
Subject: [PATCH] Fix add_tag behaviour in dns filter

The filter should only modify the event's fields and tags if and only if
all resolves/reverses succeed. So we clone the event, modify the new
copy and return it if all operations succeed. Otherwise the original
event is not modified.

For performance reasons we could reverse the clone logic: clone the
event, modify the original event and, it case of failure, return the
backup.

Note: this changes the dns filter behaviour towards add_tag
---
 lib/logstash/filters/dns.rb | 12 ++++++---
 spec/filters/dns_spec.rb         | 60 ++++++++++++++++++++++++++++++++++++++++++++-
 2 files changed, 68 insertions(+), 4 deletions(-)

diff --git a/lib/logstash/filters/dns.rb b/lib/logstash/filters/dns.rb
index 46bb075..f23b819 100644
--- a/lib/logstash/filters/dns.rb
+++ b/lib/logstash/filters/dns.rb
@@ -70,11 +70,14 @@ def register
   def filter(event)
     return unless filter?(event)
 
+    new_event = event.clone
+
     if @resolve
       begin
         status = Timeout::timeout(@timeout) {
-          resolve(event)
+          resolve(new_event)
         }
+        return if status.nil?
       rescue Timeout::Error
         @logger.debug("DNS: resolve action timed out")
         return
@@ -84,15 +87,18 @@ def filter(event)
     if @reverse
       begin
         status = Timeout::timeout(@timeout) {
-          reverse(event)
+          reverse(new_event)
         }
+        return if status.nil?
       rescue Timeout::Error
         @logger.debug("DNS: reverse action timed out")
         return
       end
     end
 
-    filter_matched(event)
+    filter_matched(new_event)
+    yield new_event
+    event.cancel
   end
 
   private

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
logstash-filter-dns-1.0.0 1795.patch
logstash-filter-dns-0.1.5 1795.patch
logstash-filter-dns-0.1.4 1795.patch
logstash-filter-dns-0.1.3 1795.patch
logstash-filter-dns-0.1.2 1795.patch
logstash-filter-dns-0.1.1 1795.patch
logstash-filter-dns-0.1.0 1795.patch