logstash-core 5.0.2-java → 5.1.1.1-java

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.
Files changed (84) hide show
  1. checksums.yaml +4 -4
  2. data/gemspec_jars.rb +9 -0
  3. data/lib/logstash-core/logstash-core.jar +0 -0
  4. data/lib/logstash-core/logstash-core.rb +22 -0
  5. data/lib/logstash-core/version.rb +1 -1
  6. data/lib/logstash-core_jars.rb +20 -0
  7. data/lib/logstash/agent.rb +65 -14
  8. data/lib/logstash/api/commands/default_metadata.rb +2 -1
  9. data/lib/logstash/api/commands/stats.rb +3 -2
  10. data/lib/logstash/config/file.rb +0 -1
  11. data/lib/logstash/config/loader.rb +1 -0
  12. data/lib/logstash/config/mixin.rb +2 -6
  13. data/lib/logstash/environment.rb +25 -2
  14. data/lib/logstash/event_dispatcher.rb +40 -0
  15. data/lib/logstash/filter_delegator.rb +1 -1
  16. data/lib/logstash/filters/base.rb +10 -2
  17. data/lib/logstash/instrument/metric_store.rb +0 -1
  18. data/lib/logstash/instrument/metric_type/base.rb +0 -1
  19. data/lib/logstash/instrument/namespaced_null_metric.rb +54 -0
  20. data/lib/logstash/instrument/null_metric.rb +55 -46
  21. data/lib/logstash/instrument/periodic_poller/jvm.rb +26 -3
  22. data/lib/logstash/instrument/periodic_poller/load_average.rb +47 -0
  23. data/lib/logstash/instrument/snapshot.rb +0 -1
  24. data/lib/logstash/java_integration.rb +0 -1
  25. data/lib/logstash/logging/logger.rb +37 -4
  26. data/lib/logstash/outputs/base.rb +1 -1
  27. data/lib/logstash/patches.rb +1 -0
  28. data/lib/logstash/patches/exception_to_json.rb +5 -0
  29. data/lib/logstash/pipeline.rb +50 -17
  30. data/lib/logstash/plugin.rb +14 -48
  31. data/lib/logstash/plugins/hooks_registry.rb +57 -0
  32. data/lib/logstash/plugins/registry.rb +208 -45
  33. data/lib/logstash/runner.rb +10 -5
  34. data/lib/logstash/settings.rb +101 -9
  35. data/lib/logstash/universal_plugin.rb +13 -0
  36. data/lib/logstash/util/byte_value.rb +60 -0
  37. data/lib/logstash/util/loggable.rb +14 -2
  38. data/lib/logstash/util/safe_uri.rb +1 -0
  39. data/lib/logstash/util/time_value.rb +70 -0
  40. data/lib/logstash/util/wrapped_acked_queue.rb +347 -0
  41. data/lib/logstash/util/wrapped_synchronous_queue.rb +17 -33
  42. data/lib/logstash/version.rb +1 -1
  43. data/locales/en.yml +1 -1
  44. data/logstash-core.gemspec +13 -18
  45. data/spec/api/lib/api/node_stats_spec.rb +3 -1
  46. data/spec/api/lib/api/support/resource_dsl_methods.rb +14 -6
  47. data/spec/api/spec_helper.rb +1 -0
  48. data/spec/conditionals_spec.rb +3 -2
  49. data/spec/logstash/agent_spec.rb +142 -62
  50. data/spec/logstash/environment_spec.rb +38 -0
  51. data/spec/logstash/event_dispatcher_spec.rb +76 -0
  52. data/spec/logstash/filter_delegator_spec.rb +2 -1
  53. data/spec/logstash/instrument/namespaced_null_metric_spec.rb +33 -0
  54. data/spec/logstash/instrument/null_metric_spec.rb +9 -5
  55. data/spec/logstash/instrument/periodic_poller/jvm_spec.rb +40 -0
  56. data/spec/logstash/instrument/periodic_poller/load_average_spec.rb +91 -0
  57. data/spec/logstash/output_delegator_spec.rb +2 -1
  58. data/spec/logstash/patches_spec.rb +15 -4
  59. data/spec/logstash/pipeline_pq_file_spec.rb +131 -0
  60. data/spec/logstash/pipeline_spec.rb +21 -17
  61. data/spec/logstash/plugin_spec.rb +4 -16
  62. data/spec/logstash/plugins/hooks_registry_spec.rb +60 -0
  63. data/spec/logstash/plugins/registry_spec.rb +22 -14
  64. data/spec/logstash/settings/bytes_spec.rb +53 -0
  65. data/spec/logstash/settings/time_value_spec.rb +31 -0
  66. data/spec/logstash/settings/writable_directory_spec.rb +125 -0
  67. data/spec/logstash/settings_spec.rb +39 -0
  68. data/spec/logstash/util/byte_value_spec.rb +33 -0
  69. data/spec/logstash/util/time_value_spec.rb +59 -0
  70. data/spec/logstash/util/wrapped_synchronous_queue_spec.rb +2 -2
  71. data/spec/logstash/webserver_spec.rb +4 -7
  72. data/spec/support/helpers.rb +8 -0
  73. data/spec/support/mocks_classes.rb +61 -31
  74. metadata +73 -20
  75. data/lib/jars.rb +0 -7
  76. data/lib/logstash/config/registry.rb +0 -13
  77. data/lib/logstash/inputs/metrics.rb +0 -47
  78. data/spec/logstash/inputs/metrics_spec.rb +0 -51
  79. data/vendor/jars/com/fasterxml/jackson/core/jackson-core/2.7.4/jackson-core-2.7.4.jar +0 -0
  80. data/vendor/jars/com/fasterxml/jackson/core/jackson-databind/2.7.4/jackson-databind-2.7.4.jar +0 -0
  81. data/vendor/jars/org/apache/logging/log4j/log4j-1.2-api/2.6.2/log4j-1.2-api-2.6.2.jar +0 -0
  82. data/vendor/jars/org/apache/logging/log4j/log4j-api/2.6.2/log4j-api-2.6.2.jar +0 -0
  83. data/vendor/jars/org/apache/logging/log4j/log4j-core/2.6.2/log4j-core-2.6.2.jar +0 -0
  84. data/vendor/jars/org/logstash/logstash-core/5.0.2/logstash-core-5.0.2.jar +0 -0
@@ -1,6 +1,5 @@
1
1
  # encoding: utf-8
2
2
  require "concurrent"
3
- require "logstash/event"
4
3
  require "logstash/instrument/metric_type"
5
4
  require "thread"
6
5
 
@@ -1,5 +1,4 @@
1
1
  # encoding: utf-8
2
- require "logstash/event"
3
2
  require "logstash/util"
4
3
 
5
4
  module LogStash module Instrument module MetricType
@@ -0,0 +1,54 @@
1
+ # encoding: utf-8
2
+ require "logstash/instrument/null_metric"
3
+
4
+ module LogStash module Instrument
5
+ # This class acts a a proxy between the metric library and the user calls.
6
+ #
7
+ # This is the class that plugins authors will use to interact with the `MetricStore`
8
+ # It has the same public interface as `Metric` class but doesnt require to send
9
+ # the namespace on every call.
10
+ #
11
+ # @see Logstash::Instrument::Metric
12
+ class NamespacedNullMetric
13
+ attr_reader :namespace_name
14
+ # Create metric with a specific namespace
15
+ #
16
+ # @param metric [LogStash::Instrument::Metric] The metric instance to proxy
17
+ # @param namespace [Array] The namespace to use
18
+ def initialize(metric = nil, namespace_name = :null)
19
+ @metric = metric
20
+ @namespace_name = Array(namespace_name)
21
+ end
22
+
23
+ def increment(key, value = 1)
24
+ end
25
+
26
+ def decrement(key, value = 1)
27
+ end
28
+
29
+ def gauge(key, value)
30
+ end
31
+
32
+ def report_time(key, duration)
33
+ end
34
+
35
+ def time(key, &block)
36
+ if block_given?
37
+ yield
38
+ else
39
+ ::LogStash::Instrument::NullMetric::NullTimedExecution
40
+ end
41
+ end
42
+
43
+ def collector
44
+ @metric.collector
45
+ end
46
+
47
+ def namespace(name)
48
+ NamespacedNullMetric.new(metric, namespace_name + Array(name))
49
+ end
50
+
51
+ private
52
+ attr_reader :metric
53
+ end
54
+ end; end
@@ -2,50 +2,59 @@
2
2
  require "logstash/instrument/metric"
3
3
 
4
4
  module LogStash module Instrument
5
- # This class is used in the context when we disable the metric collection
6
- # for specific plugin to replace the `NamespacedMetric` class with this one
7
- # which doesn't produce any metric to the collector.
8
- class NullMetric
9
- attr_reader :namespace_name, :collector
10
-
11
- def increment(key, value = 1)
12
- Metric.validate_key!(key)
13
- end
14
-
15
- def decrement(key, value = 1)
16
- Metric.validate_key!(key)
17
- end
18
-
19
- def gauge(key, value)
20
- Metric.validate_key!(key)
21
- end
22
-
23
- def report_time(key, duration)
24
- Metric.validate_key!(key)
25
- end
26
-
27
- # We have to manually redefine this method since it can return an
28
- # object this object also has to be implemented as a NullObject
29
- def time(key)
30
- Metric.validate_key!(key)
31
- if block_given?
32
- yield
33
- else
34
- NullTimedExecution
35
- end
36
- end
37
-
38
- def namespace(key)
39
- self.class.new
40
- end
41
-
42
- private
43
- # Null implementation of the internal timer class
44
- #
45
- # @see LogStash::Instrument::TimedExecution`
46
- class NullTimedExecution
47
- def self.stop
48
- end
49
- end
50
- end
5
+ # This class is used in the context when we disable the metric collection
6
+ # for specific plugin to replace the `NamespacedMetric` class with this one
7
+ # which doesn't produce any metric to the collector.
8
+ class NullMetric
9
+ attr_reader :namespace_name, :collector
10
+
11
+ def initialize(collector = nil)
12
+ @collector = collector
13
+ end
14
+
15
+ def increment(namespace, key, value = 1)
16
+ Metric.validate_key!(key)
17
+ end
18
+
19
+ def decrement(namespace, key, value = 1)
20
+ Metric.validate_key!(key)
21
+ end
22
+
23
+ def gauge(namespace, key, value)
24
+ Metric.validate_key!(key)
25
+ end
26
+
27
+ def report_time(namespace, key, duration)
28
+ Metric.validate_key!(key)
29
+ end
30
+
31
+ # We have to manually redefine this method since it can return an
32
+ # object this object also has to be implemented as a NullObject
33
+ def time(namespace, key)
34
+ Metric.validate_key!(key)
35
+ if block_given?
36
+ yield
37
+ else
38
+ NullTimedExecution
39
+ end
40
+ end
41
+
42
+ def namespace(name)
43
+ raise MetricNoNamespaceProvided if name.nil? || name.empty?
44
+ NamespacedNullMetric.new(self, name)
45
+ end
46
+
47
+ def self.validate_key!(key)
48
+ raise MetricNoKeyProvided if key.nil? || key.empty?
49
+ end
50
+
51
+ private
52
+ # Null implementation of the internal timer class
53
+ #
54
+ # @see LogStash::Instrument::TimedExecution`
55
+ class NullTimedExecution
56
+ def self.stop
57
+ end
58
+ end
59
+ end
51
60
  end; end
@@ -1,12 +1,14 @@
1
-
2
1
  # encoding: utf-8
3
2
  require "logstash/instrument/periodic_poller/base"
3
+ require "logstash/instrument/periodic_poller/load_average"
4
+ require "logstash/environment"
4
5
  require "jrmonitor"
5
6
  require "set"
6
7
 
7
8
  java_import 'java.lang.management.ManagementFactory'
8
9
  java_import 'java.lang.management.OperatingSystemMXBean'
9
10
  java_import 'java.lang.management.GarbageCollectorMXBean'
11
+ java_import 'java.lang.management.RuntimeMXBean'
10
12
  java_import 'com.sun.management.UnixOperatingSystemMXBean'
11
13
  java_import 'javax.management.MBeanServer'
12
14
  java_import 'javax.management.ObjectName'
@@ -32,21 +34,23 @@ module LogStash module Instrument module PeriodicPoller
32
34
  end
33
35
  end
34
36
 
37
+
35
38
  attr_reader :metric
36
39
 
37
40
  def initialize(metric, options = {})
38
41
  super(metric, options)
39
42
  @metric = metric
43
+ @load_average = LoadAverage.create
40
44
  end
41
45
 
42
46
  def collect
43
47
  raw = JRMonitor.memory.generate
44
- collect_heap_metrics(raw)
45
- collect_non_heap_metrics(raw)
48
+ collect_jvm_metrics(raw)
46
49
  collect_pools_metrics(raw)
47
50
  collect_threads_metrics
48
51
  collect_process_metrics
49
52
  collect_gc_stats
53
+ collect_load_average
50
54
  end
51
55
 
52
56
  private
@@ -97,6 +101,25 @@ module LogStash module Instrument module PeriodicPoller
97
101
  metric.gauge(cpu_path, :total_in_millis, cpu_metrics["total_in_millis"])
98
102
 
99
103
  metric.gauge(path + [:mem], :total_virtual_in_bytes, process_metrics["mem"]["total_virtual_in_bytes"])
104
+
105
+ end
106
+
107
+ def collect_load_average
108
+ begin
109
+ load_average = @load_average.get
110
+ rescue => e
111
+ logger.debug("Can't retrieve load average", :exception => e.class.name, :message => e.message)
112
+ load_average = nil
113
+ end
114
+
115
+ metric.gauge([:jvm, :process, :cpu], :load_average, load_average) unless load_average.nil?
116
+ end
117
+
118
+ def collect_jvm_metrics(data)
119
+ runtime_mx_bean = ManagementFactory.getRuntimeMXBean()
120
+ metric.gauge([:jvm], :uptime_in_millis, runtime_mx_bean.getUptime())
121
+ collect_heap_metrics(data)
122
+ collect_non_heap_metrics(data)
100
123
  end
101
124
 
102
125
  def collect_heap_metrics(data)
@@ -0,0 +1,47 @@
1
+ # encoding: utf-8
2
+ module LogStash module Instrument module PeriodicPoller
3
+ class LoadAverage
4
+ class Windows
5
+ def self.get
6
+ nil
7
+ end
8
+ end
9
+
10
+ class Linux
11
+ LOAD_AVG_FILE = "/proc/loadavg"
12
+ TOKEN_SEPARATOR = " "
13
+
14
+ def self.get
15
+ load_average = ::File.read(LOAD_AVG_FILE).chomp.split(TOKEN_SEPARATOR)
16
+
17
+ {
18
+ :"1m" => load_average[0].to_f,
19
+ :"5m" => load_average[1].to_f,
20
+ :"15m" => load_average[2].to_f
21
+ }
22
+ end
23
+ end
24
+
25
+ class Other
26
+ def self.get()
27
+ load_average_1m = ManagementFactory.getOperatingSystemMXBean().getSystemLoadAverage()
28
+
29
+ return nil if load_average_1m.nil?
30
+
31
+ {
32
+ :"1m" => load_average_1m
33
+ }
34
+ end
35
+ end
36
+
37
+ def self.create
38
+ if LogStash::Environment.windows?
39
+ Windows
40
+ elsif LogStash::Environment.linux?
41
+ Linux
42
+ else
43
+ Other
44
+ end
45
+ end
46
+ end
47
+ end end end
@@ -1,6 +1,5 @@
1
1
  # encoding: utf-8
2
2
  require "logstash/util/loggable"
3
- require "logstash/event"
4
3
 
5
4
  module LogStash module Instrument
6
5
  class Snapshot
@@ -1,6 +1,5 @@
1
1
  # encoding: utf-8
2
2
  require "java"
3
- require "jars"
4
3
 
5
4
  # this is mainly for usage with JrJackson json parsing in :raw mode which genenerates
6
5
  # Java::JavaUtil::ArrayList and Java::JavaUtil::LinkedHashMap native objects for speed.
@@ -3,11 +3,12 @@ require "uri"
3
3
 
4
4
  module LogStash
5
5
  module Logging
6
+ java_import org.apache.logging.log4j.Level
7
+ java_import org.apache.logging.log4j.LogManager
8
+ java_import org.apache.logging.log4j.core.config.Configurator
9
+ java_import org.apache.logging.log4j.core.config.DefaultConfiguration
10
+
6
11
  class Logger
7
- java_import org.apache.logging.log4j.Level
8
- java_import org.apache.logging.log4j.LogManager
9
- java_import org.apache.logging.log4j.core.config.Configurator
10
- java_import org.apache.logging.log4j.core.config.DefaultConfiguration
11
12
  @@config_mutex = Mutex.new
12
13
  @@logging_context = nil
13
14
 
@@ -90,5 +91,37 @@ module LogStash
90
91
  return @@logging_context
91
92
  end
92
93
  end
94
+
95
+ class SlowLogger
96
+ def initialize(name, warn_threshold, info_threshold, debug_threshold, trace_threshold)
97
+ slowlog_name = ["slowlog", name].join('.')
98
+ @slowlogger = LogManager.getLogger(slowlog_name)
99
+ @warn_threshold = warn_threshold
100
+ @info_threshold = info_threshold
101
+ @debug_threshold = debug_threshold
102
+ @trace_threshold = trace_threshold
103
+ end
104
+
105
+ def as_data(plugin_params, event, took_in_nanos)
106
+ {
107
+ :plugin_params => plugin_params,
108
+ :took_in_nanos => took_in_nanos,
109
+ :took_in_millis => took_in_nanos / 1000,
110
+ :event => event.to_json
111
+ }
112
+ end
113
+
114
+ def on_event(message, plugin_params, event, took_in_nanos)
115
+ if @warn_threshold >= 0 and took_in_nanos > @warn_threshold
116
+ @slowlogger.warn(message, as_data(plugin_params, event, took_in_nanos))
117
+ elsif @info_threshold >= 0 and took_in_nanos > @info_threshold
118
+ @slowlogger.info(message, as_data(plugin_params, event, took_in_nanos))
119
+ elsif @debug_threshold >= 0 and took_in_nanos > @debug_threshold
120
+ @slowlogger.debug(message, as_data(plugin_params, event, took_in_nanos))
121
+ elsif @trace_threshold >= 0 and took_in_nanos > @trace_threshold
122
+ @slowlogger.trace(message, as_data(plugin_params, event, took_in_nanos))
123
+ end
124
+ end
125
+ end
93
126
  end
94
127
  end
@@ -84,7 +84,7 @@ class LogStash::Outputs::Base < LogStash::Plugin
84
84
  end # def receive
85
85
 
86
86
  public
87
- # To be overriden in implementations
87
+ # To be overridden in implementations
88
88
  def multi_receive(events)
89
89
  if @receives_encoded
90
90
  self.multi_receive_encoded(codec.multi_encode(events))
@@ -3,3 +3,4 @@ require "logstash/patches/bugfix_jruby_2558"
3
3
  require "logstash/patches/cabin"
4
4
  require "logstash/patches/profile_require_calls"
5
5
  require "logstash/patches/stronger_openssl_defaults"
6
+ require "logstash/patches/exception_to_json"
@@ -0,0 +1,5 @@
1
+ class Exception
2
+ def to_json
3
+ {"exception_name" => self.class.name, "message" => message}
4
+ end
5
+ end
@@ -4,17 +4,20 @@ require "stud/interval"
4
4
  require "concurrent"
5
5
  require "logstash/namespace"
6
6
  require "logstash/errors"
7
+ require "logstash-core/logstash-core"
8
+ require "logstash/util/wrapped_acked_queue"
9
+ require "logstash/util/wrapped_synchronous_queue"
7
10
  require "logstash/event"
8
11
  require "logstash/config/file"
9
12
  require "logstash/filters/base"
10
13
  require "logstash/inputs/base"
11
14
  require "logstash/outputs/base"
12
15
  require "logstash/shutdown_watcher"
13
- require "logstash/util/wrapped_synchronous_queue"
14
16
  require "logstash/pipeline_reporter"
15
17
  require "logstash/instrument/metric"
16
18
  require "logstash/instrument/namespaced_metric"
17
19
  require "logstash/instrument/null_metric"
20
+ require "logstash/instrument/namespaced_null_metric"
18
21
  require "logstash/instrument/collector"
19
22
  require "logstash/output_delegator"
20
23
  require "logstash/filter_delegator"
@@ -91,16 +94,17 @@ module LogStash; class Pipeline
91
94
  rescue => e
92
95
  raise
93
96
  end
94
-
95
- queue = Util::WrappedSynchronousQueue.new
96
- @input_queue_client = queue.write_client
97
- @filter_queue_client = queue.read_client
98
- # Note that @inflight_batches as a central mechanism for tracking inflight
97
+ @queue = build_queue_from_settings
98
+ @input_queue_client = @queue.write_client
99
+ @filter_queue_client = @queue.read_client
100
+ @signal_queue = Queue.new
101
+ # Note that @infilght_batches as a central mechanism for tracking inflight
99
102
  # batches will fail if we have multiple read clients here.
100
103
  @filter_queue_client.set_events_metric(metric.namespace([:stats, :events]))
101
104
  @filter_queue_client.set_pipeline_metric(
102
105
  metric.namespace([:stats, :pipelines, pipeline_id.to_s.to_sym, :events])
103
106
  )
107
+
104
108
  @events_filtered = Concurrent::AtomicFixnum.new(0)
105
109
  @events_consumed = Concurrent::AtomicFixnum.new(0)
106
110
 
@@ -111,6 +115,32 @@ module LogStash; class Pipeline
111
115
  @flushing = Concurrent::AtomicReference.new(false)
112
116
  end # def initialize
113
117
 
118
+ def build_queue_from_settings
119
+ queue_type = settings.get("queue.type")
120
+ queue_page_capacity = settings.get("queue.page_capacity")
121
+ queue_max_bytes = settings.get("queue.max_bytes")
122
+ queue_max_events = settings.get("queue.max_events")
123
+ checkpoint_max_acks = settings.get("queue.checkpoint.acks")
124
+ checkpoint_max_writes = settings.get("queue.checkpoint.writes")
125
+ checkpoint_max_interval = settings.get("queue.checkpoint.interval")
126
+
127
+ if queue_type == "memory_acked"
128
+ # memory_acked is used in tests/specs
129
+ LogStash::Util::WrappedAckedQueue.create_memory_based("", queue_page_capacity, queue_max_events, queue_max_bytes)
130
+ elsif queue_type == "memory"
131
+ # memory is the legacy and default setting
132
+ LogStash::Util::WrappedSynchronousQueue.new()
133
+ elsif queue_type == "persisted"
134
+ # persisted is the disk based acked queue
135
+ queue_path = settings.get("path.queue")
136
+ LogStash::Util::WrappedAckedQueue.create_file_based(queue_path, queue_page_capacity, queue_max_events, checkpoint_max_writes, checkpoint_max_acks, checkpoint_max_interval, queue_max_bytes)
137
+ else
138
+ raise(ConfigurationError, "invalid queue.type setting")
139
+ end
140
+ end
141
+
142
+ private :build_queue_from_settings
143
+
114
144
  def ready?
115
145
  @ready.value
116
146
  end
@@ -167,6 +197,9 @@ module LogStash; class Pipeline
167
197
  shutdown_flusher
168
198
  shutdown_workers
169
199
 
200
+ @filter_queue_client.close
201
+ @queue.close
202
+
170
203
  @logger.debug("Pipeline #{@pipeline_id} has been shutdown")
171
204
 
172
205
  # exit code
@@ -241,12 +274,15 @@ module LogStash; class Pipeline
241
274
 
242
275
  while running
243
276
  batch = @filter_queue_client.take_batch
277
+ signal = @signal_queue.empty? ? NO_SIGNAL : @signal_queue.pop
278
+ running = !signal.shutdown?
279
+
244
280
  @events_consumed.increment(batch.size)
245
- running = false if batch.shutdown_signal_received?
281
+
246
282
  filter_batch(batch)
247
283
 
248
- if batch.shutdown_signal_received? || batch.flush_signal_received?
249
- flush_filters_to_batch(batch)
284
+ if signal.flush? || signal.shutdown?
285
+ flush_filters_to_batch(batch, :final => signal.shutdown?)
250
286
  end
251
287
 
252
288
  output_batch(batch)
@@ -256,11 +292,9 @@ module LogStash; class Pipeline
256
292
 
257
293
  def filter_batch(batch)
258
294
  batch.each do |event|
259
- if event.is_a?(Event)
260
- filter_func(event).each do |e|
261
- # these are both original and generated events
262
- batch.merge(e) unless e.cancelled?
263
- end
295
+ filter_func(event).each do |e|
296
+ #these are both original and generated events
297
+ batch.merge(e) unless e.cancelled?
264
298
  end
265
299
  end
266
300
  @filter_queue_client.add_filtered_metrics(batch)
@@ -382,7 +416,7 @@ module LogStash; class Pipeline
382
416
  # Each worker thread will receive this exactly once!
383
417
  @worker_threads.each do |t|
384
418
  @logger.debug("Pushing shutdown", :thread => t.inspect)
385
- @input_queue_client.push(SHUTDOWN)
419
+ @signal_queue.push(SHUTDOWN)
386
420
  end
387
421
 
388
422
  @worker_threads.each do |t|
@@ -467,7 +501,7 @@ module LogStash; class Pipeline
467
501
  def flush
468
502
  if @flushing.compare_and_set(false, true)
469
503
  @logger.debug? && @logger.debug("Pushing flush onto pipeline")
470
- @input_queue_client.push(FLUSH)
504
+ @signal_queue.push(FLUSH)
471
505
  end
472
506
  end
473
507
 
@@ -485,7 +519,6 @@ module LogStash; class Pipeline
485
519
  # @param batch [ReadClient::ReadBatch]
486
520
  # @param options [Hash]
487
521
  def flush_filters_to_batch(batch, options = {})
488
- options[:final] = batch.shutdown_signal_received?
489
522
  flush_filters(options) do |event|
490
523
  unless event.cancelled?
491
524
  @logger.debug? and @logger.debug("Pushing flushed events", :event => event)