logstash-core 2.2.2-java → 2.2.3-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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f1368f724e3cb3fe9e131d4b4c958fb02534ab8f
4
- data.tar.gz: 2a5766cd24dbe8461e5d6c77ec1df8bd5af23441
3
+ metadata.gz: 39c92820b7e391a83095308508aea54dc84e1ea5
4
+ data.tar.gz: 324d6bd33d6caa20684de9c51430bae2db728c6d
5
5
  SHA512:
6
- metadata.gz: c66d1d39b2e770296fb2901b1853e235dce5239733845fe779b79f2ba23f3be3b794d79db9dc5c20140c4d4e9a03e53b2963b5496e85af9e4d1e50b146fd7d20
7
- data.tar.gz: 51a37e8aceafd7e3ad11d7a19d537eb2959d0919085ab9ca4d6763e420249f4a58631f04006ce8905e49906aa9a33ca1659c5b6633c7a8b43ce449d816203ec8
6
+ metadata.gz: 7db2d7f379a4d8b842a46cc3be888cab6867dbe2fa444f843d3e55480d2b1c59cbf35572d349cd4795b3e357f5eec5f18d83d33e38591befb7b395a6a168896a
7
+ data.tar.gz: 7ae5726ef2510ca14b70984c101cbc679f4a8b91753c9a90b0297d182100f9188191266223045286a5a19c19dcffb65548cbae5bb8c087ee98688ce3141e6a2c
@@ -5,4 +5,4 @@
5
5
  # Note to authors: this should not include dashes because 'gem' barfs if
6
6
  # you include a dash in the version string.
7
7
 
8
- LOGSTASH_CORE_VERSION = "2.2.2"
8
+ LOGSTASH_CORE_VERSION = "2.2.3"
@@ -107,12 +107,6 @@ class LogStash::Agent < Clamp::Command
107
107
  raise LogStash::ConfigurationError, message
108
108
  end # def fail
109
109
 
110
- def report(message)
111
- # Print to stdout just in case we're logging to a file
112
- puts message
113
- @logger.log(message) if log_file
114
- end
115
-
116
110
  # Run the agent. This method is invoked after clamp parses the
117
111
  # flags given to this program.
118
112
  def execute
@@ -201,7 +195,7 @@ class LogStash::Agent < Clamp::Command
201
195
 
202
196
  # Stop now if we are only asking for a config test.
203
197
  if config_test?
204
- report "Configuration OK"
198
+ @logger.terminal "Configuration OK"
205
199
  return
206
200
  end
207
201
 
@@ -212,15 +206,14 @@ class LogStash::Agent < Clamp::Command
212
206
  return 0
213
207
  rescue LogStash::ConfigurationError => e
214
208
  @logger.unsubscribe(stdout_logs) if show_startup_errors
215
- report I18n.t("logstash.agent.error", :error => e)
209
+ @logger.error I18n.t("logstash.agent.error", :error => e)
216
210
  if !config_test?
217
- report I18n.t("logstash.agent.configtest-flag-information")
211
+ @logger.info I18n.t("logstash.agent.configtest-flag-information")
218
212
  end
219
213
  return 1
220
214
  rescue => e
221
215
  @logger.unsubscribe(stdout_logs) if show_startup_errors
222
- report I18n.t("oops", :error => e)
223
- report e.backtrace if @logger.debug? || $DEBUGLIST.include?("stacktrace")
216
+ @logger.warn(I18n.t("oops"), :error => e, :class => e.class.name, :backtrace => e.backtrace)
224
217
  return 1
225
218
  ensure
226
219
  @log_fd.close if @log_fd
@@ -1,5 +1,6 @@
1
1
  # encoding: utf-8
2
2
  require "concurrent/atomic/atomic_fixnum"
3
+ java_import "java.util.concurrent.CopyOnWriteArrayList"
3
4
 
4
5
  # This class goes hand in hand with the pipeline to provide a pool of
5
6
  # free workers to be used by pipeline worker threads. The pool is
@@ -8,63 +9,19 @@ require "concurrent/atomic/atomic_fixnum"
8
9
  #
9
10
  # This plugin also records some basic statistics
10
11
  module LogStash class OutputDelegator
11
- attr_reader :workers, :config, :worker_count, :threadsafe
12
+ attr_reader :workers, :config, :threadsafe
12
13
 
13
14
  # The *args this takes are the same format that a Outputs::Base takes. A list of hashes with parameters in them
14
15
  # Internally these just get merged together into a single hash
15
- def initialize(logger, klass, default_worker_count, *args)
16
+ def initialize(logger, klass, default_worker_count, *plugin_args)
16
17
  @logger = logger
17
18
  @threadsafe = klass.threadsafe?
18
- @config = args.reduce({}, :merge)
19
+ @config = plugin_args.reduce({}, :merge)
19
20
  @klass = klass
20
-
21
- # We define this as an array regardless of threadsafety
22
- # to make reporting simpler, even though a threadsafe plugin will just have
23
- # a single instance
24
- #
25
- # Older plugins invoke the instance method Outputs::Base#workers_not_supported
26
- # To detect these we need an instance to be created first :()
27
- # TODO: In the next major version after 2.x remove support for this
28
- @workers = [@klass.new(*args)]
29
- @workers.first.register # Needed in case register calls `workers_not_supported`
30
-
31
- # DO NOT move this statement before the instantiation of the first single instance
32
- # Read the note above to understand why
33
- @worker_count = calculate_worker_count(default_worker_count)
34
- @logger.debug("Will start workers for output", :worker_count => @worker_count, :class => klass)
35
-
36
- warn_on_worker_override!
37
- # This queue is used to manage sharing across threads
38
- @worker_queue = SizedQueue.new(@worker_count)
39
-
40
- @workers += (@worker_count - 1).times.map do
41
- inst = @klass.new(*args)
42
- inst.register
43
- inst
44
- end
45
-
46
- @workers.each { |w| @worker_queue << w }
47
-
21
+ @workers = java.util.concurrent.CopyOnWriteArrayList.new
22
+ @default_worker_count = default_worker_count
23
+ @registered = false
48
24
  @events_received = Concurrent::AtomicFixnum.new(0)
49
-
50
-
51
- # One might wonder why we don't use something like
52
- # define_singleton_method(:multi_receive, method(:threadsafe_multi_receive)
53
- # and the answer is this is buggy on Jruby 1.7.x . It works 98% of the time!
54
- # The other 2% you get weird errors about rebinding to the same object
55
- # Until we switch to Jruby 9.x keep the define_singleton_method parts
56
- # the way they are, with a block
57
- # See https://github.com/jruby/jruby/issues/3582
58
- if threadsafe?
59
- @threadsafe_worker = @workers.first
60
- define_singleton_method(:multi_receive) do |events|
61
- threadsafe_multi_receive(events)
62
- end
63
- else
64
- define_singleton_method(:multi_receive) do |events|
65
- worker_multi_receive(events)
66
- end
67
- end
68
25
  end
69
26
 
70
27
  def threadsafe?
@@ -89,11 +46,14 @@ module LogStash class OutputDelegator
89
46
  @config["workers"] && @config["workers"] > 1 && @klass.workers_not_supported?
90
47
  end
91
48
 
92
- def calculate_worker_count(default_worker_count)
49
+ def target_worker_count
50
+ # Remove in 5.0 after all plugins upgraded to use class level declarations
51
+ raise ArgumentError, "Attempted to detect target worker count before instantiating a worker to test for legacy workers_not_supported!" if @workers.size == 0
52
+
93
53
  if @threadsafe || @klass.workers_not_supported?
94
54
  1
95
55
  else
96
- @config["workers"] || default_worker_count
56
+ @config["workers"] || @default_worker_count
97
57
  end
98
58
  end
99
59
 
@@ -102,7 +62,58 @@ module LogStash class OutputDelegator
102
62
  end
103
63
 
104
64
  def register
105
- @workers.each {|w| w.register}
65
+ raise ArgumentError, "Attempted to register #{self} twice!" if @registered
66
+ @registered = true
67
+ # We define this as an array regardless of threadsafety
68
+ # to make reporting simpler, even though a threadsafe plugin will just have
69
+ # a single instance
70
+ #
71
+ # Older plugins invoke the instance method Outputs::Base#workers_not_supported
72
+ # To detect these we need an instance to be created first :()
73
+ # TODO: In the next major version after 2.x remove support for this
74
+ @workers << @klass.new(@config)
75
+ @workers.first.register # Needed in case register calls `workers_not_supported`
76
+
77
+ @logger.debug("Will start workers for output", :worker_count => target_worker_count, :class => @klass)
78
+
79
+ # Threadsafe versions don't need additional workers
80
+ setup_additional_workers!(target_worker_count) unless @threadsafe
81
+ # We skip the first worker because that's pre-registered to deal with legacy workers_not_supported
82
+ @workers.subList(1,@workers.size).each(&:register)
83
+ setup_multi_receive!
84
+ end
85
+
86
+ def setup_additional_workers!(target_worker_count)
87
+ warn_on_worker_override!
88
+
89
+ (target_worker_count - 1).times do
90
+ inst = @klass.new(@config)
91
+ @workers << inst
92
+ end
93
+
94
+ # This queue is used to manage sharing across threads
95
+ @worker_queue = SizedQueue.new(target_worker_count)
96
+ @workers.each {|w| @worker_queue << w }
97
+ end
98
+
99
+ def setup_multi_receive!
100
+ # One might wonder why we don't use something like
101
+ # define_singleton_method(:multi_receive, method(:threadsafe_multi_receive)
102
+ # and the answer is this is buggy on Jruby 1.7.x . It works 98% of the time!
103
+ # The other 2% you get weird errors about rebinding to the same object
104
+ # Until we switch to Jruby 9.x keep the define_singleton_method parts
105
+ # the way they are, with a block
106
+ # See https://github.com/jruby/jruby/issues/3582
107
+ if threadsafe?
108
+ @threadsafe_worker = @workers.first
109
+ define_singleton_method(:multi_receive) do |events|
110
+ threadsafe_multi_receive(events)
111
+ end
112
+ else
113
+ define_singleton_method(:multi_receive) do |events|
114
+ worker_multi_receive(events)
115
+ end
116
+ end
106
117
  end
107
118
 
108
119
  def threadsafe_multi_receive(events)
@@ -125,9 +136,13 @@ module LogStash class OutputDelegator
125
136
  def do_close
126
137
  @logger.debug("closing output delegator", :klass => self)
127
138
 
128
- @worker_count.times do
129
- worker = @worker_queue.pop
130
- worker.do_close
139
+ if @threadsafe
140
+ @workers.each(&:do_close)
141
+ else
142
+ worker_count.times do
143
+ worker = @worker_queue.pop
144
+ worker.do_close
145
+ end
131
146
  end
132
147
  end
133
148
 
@@ -140,10 +155,17 @@ module LogStash class OutputDelegator
140
155
  if @threadsafe
141
156
  0
142
157
  else
158
+ # The pipeline reporter can run before the outputs are registered trying to pull a value here
159
+ # In that case @worker_queue is empty, we just return 0
160
+ return 0 unless @worker_queue
143
161
  @workers.size - @worker_queue.size
144
162
  end
145
163
  end
146
164
 
165
+ def worker_count
166
+ @workers.size
167
+ end
168
+
147
169
  private
148
170
  # Needed for testing, so private
149
171
  attr_reader :threadsafe_worker, :worker_queue
@@ -11,4 +11,4 @@
11
11
  # eventually this file should be in the root logstash lib fir and dependencies in logstash-core should be
12
12
  # fixed.
13
13
 
14
- LOGSTASH_VERSION = "2.2.2"
14
+ LOGSTASH_VERSION = "2.2.3"
@@ -4,8 +4,7 @@
4
4
  # for unformatted text.
5
5
  en:
6
6
  oops: |-
7
- The error reported is:
8
- %{error}
7
+ An unexpected error occurred!
9
8
  logstash:
10
9
  environment:
11
10
  jruby-required: >-
@@ -4,8 +4,8 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  require 'logstash-core/version'
5
5
 
6
6
  Gem::Specification.new do |gem|
7
- gem.authors = ["Jordan Sissel", "Pete Fritchman", "Elasticsearch"]
8
- gem.email = ["jls@semicomplete.com", "petef@databits.net", "info@elasticsearch.com"]
7
+ gem.authors = ["Elastic"]
8
+ gem.email = ["info@elastic.co"]
9
9
  gem.description = %q{The core components of logstash, the scalable log and event management tool}
10
10
  gem.summary = %q{logstash-core - The core components of logstash}
11
11
  gem.homepage = "http://www.elastic.co/guide/en/logstash/current/index.html"
@@ -17,7 +17,7 @@ Gem::Specification.new do |gem|
17
17
  gem.require_paths = ["lib"]
18
18
  gem.version = LOGSTASH_CORE_VERSION
19
19
 
20
- gem.add_runtime_dependency "logstash-core-event", "~> 2.2.2"
20
+ gem.add_runtime_dependency "logstash-core-event", "~> 2.2.3"
21
21
 
22
22
  gem.add_runtime_dependency "cabin", "~> 0.7.0" #(Apache 2.0 license)
23
23
  gem.add_runtime_dependency "pry", "~> 0.10.1" #(Ruby license)
@@ -27,6 +27,7 @@ describe LogStash::OutputDelegator do
27
27
 
28
28
  context "after having received a batch of events" do
29
29
  before do
30
+ subject.register
30
31
  subject.multi_receive(events)
31
32
  end
32
33
 
@@ -39,23 +40,35 @@ describe LogStash::OutputDelegator do
39
40
  end
40
41
  end
41
42
 
42
- it "should register all workers on register" do
43
- expect(out_inst).to receive(:register)
44
- subject.register
45
- end
46
43
 
47
- it "should close all workers when closing" do
48
- expect(out_inst).to receive(:do_close)
49
- subject.do_close
44
+ describe "closing" do
45
+ before do
46
+ subject.register
47
+ end
48
+
49
+ it "should register all workers on register" do
50
+ expect(out_inst).to have_received(:register)
51
+ end
52
+
53
+ it "should close all workers when closing" do
54
+ expect(out_inst).to receive(:do_close)
55
+ subject.do_close
56
+ end
50
57
  end
51
58
 
52
59
  describe "concurrency and worker support" do
60
+ before do
61
+ allow(out_inst).to receive(:id).and_return("a-simple-plugin")
62
+ allow(out_inst).to receive(:metric=).with(any_args)
63
+ allow(out_klass).to receive(:workers_not_supported?).and_return(false)
64
+ end
65
+
53
66
  describe "non-threadsafe outputs that allow workers" do
54
67
  let(:default_worker_count) { 3 }
55
68
 
56
69
  before do
57
70
  allow(out_klass).to receive(:threadsafe?).and_return(false)
58
- allow(out_klass).to receive(:workers_not_supported?).and_return(false)
71
+ subject.register
59
72
  end
60
73
 
61
74
  it "should instantiate multiple workers" do
@@ -71,7 +84,7 @@ describe LogStash::OutputDelegator do
71
84
  describe "threadsafe outputs" do
72
85
  before do
73
86
  allow(out_klass).to receive(:threadsafe?).and_return(true)
74
- allow(out_klass).to receive(:workers_not_supported?).and_return(false)
87
+ subject.register
75
88
  end
76
89
 
77
90
  it "should return true when threadsafe? is invoked" do
@@ -88,14 +101,18 @@ describe LogStash::OutputDelegator do
88
101
  end
89
102
 
90
103
  it "should not utilize the worker queue" do
91
- expect(subject.send(:worker_queue)).not_to receive(:pop)
92
- subject.multi_receive(events)
104
+ expect(subject.send(:worker_queue)).to be_nil
93
105
  end
94
106
 
95
107
  it "should send received events to the worker" do
96
108
  expect(out_inst).to receive(:multi_receive).with(events)
97
109
  subject.multi_receive(events)
98
110
  end
111
+
112
+ it "should close all workers when closing" do
113
+ expect(out_inst).to receive(:do_close)
114
+ subject.do_close
115
+ end
99
116
  end
100
117
  end
101
118
  end
@@ -115,11 +132,12 @@ describe LogStash::OutputDelegator do
115
132
  let(:default_worker_count) { 2 }
116
133
  let(:out_klass) { LogStash::Outputs::NOOPDelLegacyNoWorkers }
117
134
 
118
- before do
135
+ before(:each) do
119
136
  allow(logger).to receive(:debug).with(any_args)
120
137
  end
121
138
 
122
139
  it "should only setup one worker" do
140
+ subject.register
123
141
  expect(subject.worker_count).to eql(1)
124
142
  end
125
143
  end
metadata CHANGED
@@ -1,23 +1,21 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.2
4
+ version: 2.2.3
5
5
  platform: java
6
6
  authors:
7
- - Jordan Sissel
8
- - Pete Fritchman
9
- - Elasticsearch
7
+ - Elastic
10
8
  autorequire:
11
9
  bindir: bin
12
10
  cert_chain: []
13
- date: 2016-02-18 00:00:00.000000000 Z
11
+ date: 2016-03-29 00:00:00.000000000 Z
14
12
  dependencies:
15
13
  - !ruby/object:Gem::Dependency
16
14
  requirement: !ruby/object:Gem::Requirement
17
15
  requirements:
18
16
  - - ~>
19
17
  - !ruby/object:Gem::Version
20
- version: 2.2.2
18
+ version: 2.2.3
21
19
  name: logstash-core-event
22
20
  prerelease: false
23
21
  type: :runtime
@@ -25,7 +23,7 @@ dependencies:
25
23
  requirements:
26
24
  - - ~>
27
25
  - !ruby/object:Gem::Version
28
- version: 2.2.2
26
+ version: 2.2.3
29
27
  - !ruby/object:Gem::Dependency
30
28
  requirement: !ruby/object:Gem::Requirement
31
29
  requirements:
@@ -224,9 +222,7 @@ dependencies:
224
222
  version: 0.3.7
225
223
  description: The core components of logstash, the scalable log and event management tool
226
224
  email:
227
- - jls@semicomplete.com
228
- - petef@databits.net
229
- - info@elasticsearch.com
225
+ - info@elastic.co
230
226
  executables: []
231
227
  extensions: []
232
228
  extra_rdoc_files: []
@@ -332,7 +328,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
332
328
  version: '0'
333
329
  requirements: []
334
330
  rubyforge_project:
335
- rubygems_version: 2.4.5
331
+ rubygems_version: 2.4.8
336
332
  signing_key:
337
333
  specification_version: 4
338
334
  summary: logstash-core - The core components of logstash