logstash-core 7.0.0.beta1-java → 7.0.0-java
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/logstash/agent.rb +15 -13
- data/lib/logstash/compiler/lscl.rb +1 -1
- data/lib/logstash/pipeline_action/create.rb +2 -13
- data/lib/logstash/pipeline_action/reload.rb +4 -23
- data/lib/logstash/runner.rb +2 -0
- data/lib/logstash/settings.rb +24 -0
- data/spec/logstash/config/mixin_spec.rb +1 -0
- data/spec/logstash/filters/base_spec.rb +14 -0
- data/spec/logstash/settings/deprecated_and_renamed_spec.rb +19 -0
- data/versions-gem-copy.yml +2 -2
- metadata +6 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 28e722ae2fb8a55597537a5a40e0fccb6b2510ac485aa180f2e7c67cb3ebecef
|
4
|
+
data.tar.gz: e38a8c79b5dfc729c447906562985700cb85970532331d473de8ff569707b10b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 35c4f0f489b48d2dece09484bf15ac04104ceb5c7306c898cb4a8dec3de3c5f1376b01f1264c1dc7a6b53712e7016d23c2801d8242308a7aacf41edd9a9a6c90
|
7
|
+
data.tar.gz: 81b744620d9d94db74554f9f896a22658c4a4907671d73afcc137b77e6828cfad68e07d3b88ffd2bd98b5536ced0853db00319fca41c0f247347be89d696c0b4
|
data/lib/logstash/agent.rb
CHANGED
@@ -36,9 +36,10 @@ class LogStash::Agent
|
|
36
36
|
|
37
37
|
# Mutex to synchonize in the exclusive method
|
38
38
|
# Initial usage for the Ruby pipeline initialization which is not thread safe
|
39
|
-
@exclusive_lock = Mutex.new
|
40
39
|
@webserver_control_lock = Mutex.new
|
41
40
|
|
41
|
+
@convergence_lock = Mutex.new
|
42
|
+
|
42
43
|
# Special bus object for inter-pipelines communications. Used by the `pipeline` input/output
|
43
44
|
@pipeline_bus = org.logstash.plugins.pipeline.PipelineBus.new
|
44
45
|
|
@@ -86,10 +87,6 @@ class LogStash::Agent
|
|
86
87
|
@running = Concurrent::AtomicBoolean.new(false)
|
87
88
|
end
|
88
89
|
|
89
|
-
def exclusive(&block)
|
90
|
-
@exclusive_lock.synchronize { block.call }
|
91
|
-
end
|
92
|
-
|
93
90
|
def execute
|
94
91
|
@thread = Thread.current # this var is implicitly used by Stud.stop?
|
95
92
|
logger.debug("Starting agent")
|
@@ -159,12 +156,7 @@ class LogStash::Agent
|
|
159
156
|
end
|
160
157
|
end
|
161
158
|
|
162
|
-
|
163
|
-
# content of it.
|
164
|
-
converge_result = nil
|
165
|
-
|
166
|
-
pipeline_actions = resolve_actions(results.response)
|
167
|
-
converge_result = converge_state(pipeline_actions)
|
159
|
+
converge_result = resolve_actions_and_converge_state(results.response)
|
168
160
|
update_metrics(converge_result)
|
169
161
|
|
170
162
|
logger.info(
|
@@ -288,6 +280,15 @@ class LogStash::Agent
|
|
288
280
|
@running.make_true
|
289
281
|
end
|
290
282
|
|
283
|
+
# @param pipeline_configs [Array<Config::PipelineConfig>]
|
284
|
+
# @return [ConvergeResult]
|
285
|
+
def resolve_actions_and_converge_state(pipeline_configs)
|
286
|
+
@convergence_lock.synchronize do
|
287
|
+
pipeline_actions = resolve_actions(pipeline_configs)
|
288
|
+
converge_state(pipeline_actions)
|
289
|
+
end
|
290
|
+
end
|
291
|
+
|
291
292
|
# We depends on a series of task derived from the internal state and what
|
292
293
|
# need to be run, theses actions are applied to the current pipelines to converge to
|
293
294
|
# the desired state.
|
@@ -300,6 +301,7 @@ class LogStash::Agent
|
|
300
301
|
#
|
301
302
|
def converge_state(pipeline_actions)
|
302
303
|
logger.debug("Converging pipelines state", :actions_count => pipeline_actions.size)
|
304
|
+
fail("Illegal access to `LogStash::Agent#converge_state()` without exclusive lock at #{caller[1]}") unless @convergence_lock.owned?
|
303
305
|
|
304
306
|
converge_result = LogStash::ConvergeResult.new(pipeline_actions.size)
|
305
307
|
|
@@ -348,6 +350,7 @@ class LogStash::Agent
|
|
348
350
|
end
|
349
351
|
|
350
352
|
def resolve_actions(pipeline_configs)
|
353
|
+
fail("Illegal access to `LogStash::Agent#resolve_actions()` without exclusive lock at #{caller[1]}") unless @convergence_lock.owned?
|
351
354
|
@state_resolver.resolve(@pipelines_registry, pipeline_configs)
|
352
355
|
end
|
353
356
|
|
@@ -415,8 +418,7 @@ class LogStash::Agent
|
|
415
418
|
# In this context I could just call shutdown, but I've decided to
|
416
419
|
# use the stop action implementation for that so we have the same code.
|
417
420
|
# This also give us some context into why a shutdown is failing
|
418
|
-
|
419
|
-
converge_state(pipeline_actions)
|
421
|
+
resolve_actions_and_converge_state([]) # We stop all the pipeline, so we converge to a empty state
|
420
422
|
end
|
421
423
|
|
422
424
|
|
@@ -115,7 +115,7 @@ module LogStashCompilerLSCLGrammar; module LogStash; module Compiler; module LSC
|
|
115
115
|
elsif existing.kind_of?(::Array)
|
116
116
|
hash[k] = existing.push(*v)
|
117
117
|
else
|
118
|
-
hash[k] = existing
|
118
|
+
hash[k] = [existing, v] unless v == existing
|
119
119
|
end
|
120
120
|
hash
|
121
121
|
end
|
@@ -32,22 +32,11 @@ module LogStash module PipelineAction
|
|
32
32
|
# The execute assume that the thread safety access of the pipeline
|
33
33
|
# is managed by the caller.
|
34
34
|
def execute(agent, pipelines_registry)
|
35
|
-
|
36
|
-
|
37
|
-
LogStash::JavaPipeline.new(@pipeline_config, @metric, agent)
|
38
|
-
else
|
39
|
-
agent.exclusive do
|
40
|
-
# The Ruby pipeline initialization is not thread safe because of the module level
|
41
|
-
# shared state in LogsStash::Config::AST. When using multiple pipelines this gets
|
42
|
-
# executed simultaneously in different threads and we need to synchronize this initialization.
|
43
|
-
LogStash::Pipeline.new(@pipeline_config, @metric, agent)
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
35
|
+
pipeline_class = @pipeline_config.settings.get_value("pipeline.java_execution") ? LogStash::JavaPipeline : LogStash::Pipeline
|
36
|
+
new_pipeline = pipeline_class.new(@pipeline_config, @metric, agent)
|
47
37
|
success = pipelines_registry.create_pipeline(pipeline_id, new_pipeline) do
|
48
38
|
new_pipeline.start # block until the pipeline is correctly started or crashed
|
49
39
|
end
|
50
|
-
|
51
40
|
LogStash::ConvergeResult::ActionResult.create(self, success)
|
52
41
|
end
|
53
42
|
|
@@ -31,18 +31,10 @@ module LogStash module PipelineAction
|
|
31
31
|
return LogStash::ConvergeResult::FailedAction.new("Cannot reload pipeline, because the existing pipeline is not reloadable")
|
32
32
|
end
|
33
33
|
|
34
|
+
java_exec = @pipeline_config.settings.get_value("pipeline.java_execution")
|
35
|
+
|
34
36
|
begin
|
35
|
-
pipeline_validator =
|
36
|
-
if @pipeline_config.settings.get_value("pipeline.java_execution")
|
37
|
-
LogStash::JavaBasePipeline.new(@pipeline_config, nil, logger, nil)
|
38
|
-
else
|
39
|
-
agent.exclusive do
|
40
|
-
# The Ruby pipeline initialization is not thread safe because of the module level
|
41
|
-
# shared state in LogsStash::Config::AST. When using multiple pipelines this gets
|
42
|
-
# executed simultaneously in different threads and we need to synchronize this initialization.
|
43
|
-
LogStash::BasePipeline.new(@pipeline_config)
|
44
|
-
end
|
45
|
-
end
|
37
|
+
pipeline_validator = java_exec ? LogStash::JavaBasePipeline.new(@pipeline_config, nil, logger, nil) : LogStash::BasePipeline.new(@pipeline_config)
|
46
38
|
rescue => e
|
47
39
|
return LogStash::ConvergeResult::FailedAction.from_exception(e)
|
48
40
|
end
|
@@ -62,18 +54,7 @@ module LogStash module PipelineAction
|
|
62
54
|
old_pipeline.thread.join
|
63
55
|
|
64
56
|
# Then create a new pipeline
|
65
|
-
new_pipeline =
|
66
|
-
if @pipeline_config.settings.get_value("pipeline.java_execution")
|
67
|
-
LogStash::JavaPipeline.new(@pipeline_config, @metric, agent)
|
68
|
-
else
|
69
|
-
agent.exclusive do
|
70
|
-
# The Ruby pipeline initialization is not thread safe because of the module level
|
71
|
-
# shared state in LogsStash::Config::AST. When using multiple pipelines this gets
|
72
|
-
# executed simultaneously in different threads and we need to synchronize this initialization.
|
73
|
-
LogStash::Pipeline.new(@pipeline_config, @metric, agent)
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
57
|
+
new_pipeline = java_exec ? LogStash::JavaPipeline.new(@pipeline_config, @metric, agent) : LogStash::Pipeline.new(@pipeline_config, @metric, agent)
|
77
58
|
success = new_pipeline.start # block until the pipeline is correctly started or crashed
|
78
59
|
|
79
60
|
# return success and new_pipeline to registry reload_pipeline
|
data/lib/logstash/runner.rb
CHANGED
data/lib/logstash/settings.rb
CHANGED
@@ -586,6 +586,30 @@ module LogStash
|
|
586
586
|
coerce(value)
|
587
587
|
end
|
588
588
|
end
|
589
|
+
|
590
|
+
##
|
591
|
+
# Instances of `DeprecatedSetting` can be registered, but will fail with helpful guidance when encountering any
|
592
|
+
# configuration that attempts to explicitly set the value. They should be used in the Major version immediately
|
593
|
+
# following a deprecation to assist users who are porting forward configurations.
|
594
|
+
class DeprecatedSetting < Setting
|
595
|
+
def initialize(name, guidance='please remove the setting from your configuration and try again.')
|
596
|
+
super(name, Object)
|
597
|
+
@guidance = guidance
|
598
|
+
end
|
599
|
+
|
600
|
+
def set(value)
|
601
|
+
fail(ArgumentError, "The setting `#{name}` has been deprecated and removed from Logstash; #{@guidance}")
|
602
|
+
end
|
603
|
+
end
|
604
|
+
|
605
|
+
# Useful when a setting has been renamed but otherwise is semantically identical
|
606
|
+
class DeprecatedAndRenamed < DeprecatedSetting
|
607
|
+
attr_reader :new_name
|
608
|
+
def initialize(name, new_name)
|
609
|
+
super(name, "please update your configuration to use `#{new_name}` instead.")
|
610
|
+
@new_name = new_name
|
611
|
+
end
|
612
|
+
end
|
589
613
|
end
|
590
614
|
|
591
615
|
|
@@ -419,6 +419,7 @@ describe LogStash::Config::Mixin do
|
|
419
419
|
end
|
420
420
|
|
421
421
|
it "should use the value in the variable" do
|
422
|
+
skip("This test fails on Windows, tracked in https://github.com/elastic/logstash/issues/10454")
|
422
423
|
expect(subject.oneString).to(be == "fancy")
|
423
424
|
expect(subject.oneBoolean).to(be_truthy)
|
424
425
|
expect(subject.oneArray).to(be == [ "first array value", "fancy" ])
|
@@ -322,4 +322,18 @@ describe LogStash::Filters::NOOP do
|
|
322
322
|
end
|
323
323
|
|
324
324
|
end
|
325
|
+
|
326
|
+
describe "when metrics are disabled" do
|
327
|
+
describe "An error should not be raised, and the event should be processed" do
|
328
|
+
config <<-CONFIG
|
329
|
+
filter {
|
330
|
+
noop { enable_metric => false }
|
331
|
+
}
|
332
|
+
CONFIG
|
333
|
+
|
334
|
+
sample_one("type" => "noop", "tags" => {"blackhole" => "go"}) do
|
335
|
+
expect(subject.get("[tags][blackhole]")).to eq("go")
|
336
|
+
end
|
337
|
+
end
|
338
|
+
end
|
325
339
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
require 'logstash/settings'
|
4
|
+
|
5
|
+
describe LogStash::Setting::DeprecatedAndRenamed do
|
6
|
+
subject(:setting) { described_class.new("option.deprecated", "option.current") }
|
7
|
+
let(:value) { Object.new }
|
8
|
+
|
9
|
+
describe '#set' do
|
10
|
+
it 'fails with deprecation runtime error and helpful guidance' do
|
11
|
+
expect { setting.set(value) }.to raise_exception do |exception|
|
12
|
+
expect(exception).to be_a_kind_of(ArgumentError)
|
13
|
+
expect(exception.message).to match(/deprecated and removed/)
|
14
|
+
expect(exception.message).to include("option.deprecated")
|
15
|
+
expect(exception.message).to include("option.current")
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/versions-gem-copy.yml
CHANGED
@@ -7,8 +7,8 @@ logstash-core-plugin-api: 2.1.16
|
|
7
7
|
# jruby must reference a *released* version of jruby which can be downloaded from the official download url
|
8
8
|
# *and* for which jars artifacts are published for compile-time
|
9
9
|
jruby:
|
10
|
-
version: 9.2.
|
11
|
-
sha1:
|
10
|
+
version: 9.2.6.0
|
11
|
+
sha1: 3c13ec3966f6cc44966f3978c96325b9e56174f1
|
12
12
|
|
13
13
|
# jruby-runtime-override, if specified, will override the jruby version installed in vendor/jruby for logstash runtime only,
|
14
14
|
# not for the compile-time jars
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logstash-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 7.0.0
|
4
|
+
version: 7.0.0
|
5
5
|
platform: java
|
6
6
|
authors:
|
7
7
|
- Elastic
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-04-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
@@ -535,6 +535,7 @@ files:
|
|
535
535
|
- spec/logstash/setting_spec.rb
|
536
536
|
- spec/logstash/settings/array_coercible_spec.rb
|
537
537
|
- spec/logstash/settings/bytes_spec.rb
|
538
|
+
- spec/logstash/settings/deprecated_and_renamed_spec.rb
|
538
539
|
- spec/logstash/settings/integer_spec.rb
|
539
540
|
- spec/logstash/settings/modules_spec.rb
|
540
541
|
- spec/logstash/settings/numeric_spec.rb
|
@@ -585,9 +586,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
585
586
|
version: '0'
|
586
587
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
587
588
|
requirements:
|
588
|
-
- - "
|
589
|
+
- - ">="
|
589
590
|
- !ruby/object:Gem::Version
|
590
|
-
version:
|
591
|
+
version: '0'
|
591
592
|
requirements: []
|
592
593
|
rubyforge_project:
|
593
594
|
rubygems_version: 2.7.6
|
@@ -675,6 +676,7 @@ test_files:
|
|
675
676
|
- spec/logstash/setting_spec.rb
|
676
677
|
- spec/logstash/settings/array_coercible_spec.rb
|
677
678
|
- spec/logstash/settings/bytes_spec.rb
|
679
|
+
- spec/logstash/settings/deprecated_and_renamed_spec.rb
|
678
680
|
- spec/logstash/settings/integer_spec.rb
|
679
681
|
- spec/logstash/settings/modules_spec.rb
|
680
682
|
- spec/logstash/settings/numeric_spec.rb
|