logstash-mixin-scheduler 1.0.1-java → 1.0.2-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 +4 -4
- data/CHANGELOG.md +3 -0
- data/README.md +1 -1
- data/lib/logstash/plugin_mixins/scheduler/rufus_impl.rb +2 -0
- data/lib/logstash/plugin_mixins/scheduler.rb +12 -4
- data/spec/logstash/plugin_mixins/scheduler/rufus_impl_spec.rb +41 -0
- data/spec/logstash/plugin_mixins/scheduler_spec.rb +11 -0
- metadata +13 -17
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: a8d7af34429c215680a9297a8e942923259af00163413bebd83d5e9df5d44c34
|
|
4
|
+
data.tar.gz: 9904ef45c2aa86b0b32250564ac17b76494584141be28081f7a1274b7c20692e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: e43c4643ec3c3ab0df62e7d41022734735b050c8eb3752e61ce8ebd406a6d9b29b2ef2af2827fddd7c44e7b5516c971375f36008e6bd6d0baefc9c5ab35c43bc
|
|
7
|
+
data.tar.gz: 5ce2f3c51c33b48b8aa2e0339c4c4f3210b7bc12a796559b9c40af9b61626b5010aadc309ac805700c2838f32c2866ffbc170ada9cb01f0cde1e99f486abfe7c
|
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
## 1.0.2
|
|
2
|
+
- Fix: terminate idle scheduler work threads on plugin close, which leaked one thread per pipeline reload [#7](https://github.com/logstash-plugins/logstash-mixin-scheduler/pull/7)
|
|
3
|
+
|
|
1
4
|
## 1.0.1
|
|
2
5
|
- Refactor: initialize time zone data eagerly [#2](https://github.com/logstash-plugins/logstash-mixin-scheduler/pull/2)
|
|
3
6
|
|
data/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Scheduler Mixin
|
|
2
2
|
|
|
3
|
-
[](https://github.com/logstash-plugins/logstash-mixin-scheduler/actions/workflows/unit-tests.yml)
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
## Usage
|
|
@@ -37,7 +37,7 @@ module LogStash
|
|
|
37
37
|
module CloseHook
|
|
38
38
|
def close
|
|
39
39
|
super # plugin.close
|
|
40
|
-
|
|
40
|
+
terminate_scheduler!
|
|
41
41
|
end
|
|
42
42
|
end
|
|
43
43
|
private_constant :CloseHook
|
|
@@ -47,10 +47,10 @@ module LogStash
|
|
|
47
47
|
|
|
48
48
|
private
|
|
49
49
|
|
|
50
|
-
#
|
|
50
|
+
# Terminate the scheduler, including any jobs currently executing.
|
|
51
51
|
# This method executes from the plugin's #close method.
|
|
52
|
-
def
|
|
53
|
-
@_scheduler.
|
|
52
|
+
def terminate_scheduler!
|
|
53
|
+
@_scheduler.terminate! if @_scheduler
|
|
54
54
|
end
|
|
55
55
|
|
|
56
56
|
# Release jobs registered by the plugin from executing.
|
|
@@ -117,6 +117,14 @@ module LogStash
|
|
|
117
117
|
# @abstract
|
|
118
118
|
def release!; release end
|
|
119
119
|
|
|
120
|
+
# Fully and immediately terminate the scheduler:
|
|
121
|
+
# - prevents additional jobs from being registered,
|
|
122
|
+
# - unschedules all future invocations of jobs previously registered,
|
|
123
|
+
# - and stops any jobs currently executing.
|
|
124
|
+
#
|
|
125
|
+
# @abstract
|
|
126
|
+
def terminate!; release! end
|
|
127
|
+
|
|
120
128
|
# Is this scheduler potentially executing our jobs.
|
|
121
129
|
#
|
|
122
130
|
# @abstract
|
|
@@ -45,6 +45,47 @@ describe LogStash::PluginMixins::Scheduler::RufusImpl do
|
|
|
45
45
|
try(10) { expect(join_thread).to_not be_alive }
|
|
46
46
|
end
|
|
47
47
|
|
|
48
|
+
it "terminates idle work threads on terminate!" do
|
|
49
|
+
scheduler.every('0.2s') { }
|
|
50
|
+
sleep 0.5
|
|
51
|
+
scheduler.impl.jobs.each(&:unschedule)
|
|
52
|
+
sleep 0.5
|
|
53
|
+
work_threads = scheduler.impl.work_threads
|
|
54
|
+
expect( work_threads.count(&:alive?) ).to be >= 1
|
|
55
|
+
scheduler.terminate!
|
|
56
|
+
try(10) { expect( work_threads.count(&:alive?) ).to eql 0 }
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
context 'with a job in flight' do
|
|
60
|
+
|
|
61
|
+
let(:started) { java.util.concurrent.CountDownLatch.new(1) }
|
|
62
|
+
let(:completed) { java.util.concurrent.atomic.AtomicBoolean.new(false) }
|
|
63
|
+
|
|
64
|
+
before do
|
|
65
|
+
scheduler.in('0.1s') do
|
|
66
|
+
started.count_down
|
|
67
|
+
sleep 2
|
|
68
|
+
completed.set(true)
|
|
69
|
+
end
|
|
70
|
+
expect( started.await(5, java.util.concurrent.TimeUnit::SECONDS) ).to be true
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
it "release! (from #stop) blocks until the running job finishes" do
|
|
74
|
+
work_threads = scheduler.impl.work_threads
|
|
75
|
+
scheduler.release!
|
|
76
|
+
expect( completed.get ).to be true
|
|
77
|
+
expect( work_threads.count(&:alive?) ).to eql 0
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
it "terminate! (from #close) stops the running job" do
|
|
81
|
+
work_threads = scheduler.impl.work_threads
|
|
82
|
+
scheduler.terminate!
|
|
83
|
+
expect( completed.get ).to be false
|
|
84
|
+
try(10) { expect( work_threads.count(&:alive?) ).to eql 0 }
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
end
|
|
88
|
+
|
|
48
89
|
context 'cron schedule' do
|
|
49
90
|
|
|
50
91
|
before do
|
|
@@ -55,6 +55,17 @@ describe LogStash::PluginMixins::Scheduler do
|
|
|
55
55
|
expect( scheduler.running? ).to be false
|
|
56
56
|
end
|
|
57
57
|
|
|
58
|
+
it 'terminates scheduler work threads on close' do
|
|
59
|
+
scheduler = plugin.scheduler
|
|
60
|
+
ran = java.util.concurrent.CountDownLatch.new(1)
|
|
61
|
+
scheduler.every('1s') { ran.count_down }
|
|
62
|
+
expect( ran.await(10, java.util.concurrent.TimeUnit::SECONDS) ).to be true
|
|
63
|
+
work_threads = scheduler.impl.work_threads
|
|
64
|
+
expect( work_threads.count(&:alive?) ).to be >= 1
|
|
65
|
+
plugin.do_close
|
|
66
|
+
try(10) { expect( work_threads.count(&:alive?) ).to eql 0 }
|
|
67
|
+
end
|
|
68
|
+
|
|
58
69
|
it 'shuts-down the scheduler on stop' do
|
|
59
70
|
scheduler = plugin.scheduler
|
|
60
71
|
plugin.stop
|
metadata
CHANGED
|
@@ -1,86 +1,84 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: logstash-mixin-scheduler
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.0.
|
|
4
|
+
version: 1.0.2
|
|
5
5
|
platform: java
|
|
6
6
|
authors:
|
|
7
7
|
- Elastic
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: bin
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 2026-09-02 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
12
|
- !ruby/object:Gem::Dependency
|
|
13
|
+
name: logstash-core
|
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
|
15
15
|
requirements:
|
|
16
16
|
- - ">="
|
|
17
17
|
- !ruby/object:Gem::Version
|
|
18
18
|
version: '7.16'
|
|
19
|
-
name: logstash-core
|
|
20
|
-
prerelease: false
|
|
21
19
|
type: :runtime
|
|
20
|
+
prerelease: false
|
|
22
21
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
22
|
requirements:
|
|
24
23
|
- - ">="
|
|
25
24
|
- !ruby/object:Gem::Version
|
|
26
25
|
version: '7.16'
|
|
27
26
|
- !ruby/object:Gem::Dependency
|
|
27
|
+
name: rufus-scheduler
|
|
28
28
|
requirement: !ruby/object:Gem::Requirement
|
|
29
29
|
requirements:
|
|
30
30
|
- - ">="
|
|
31
31
|
- !ruby/object:Gem::Version
|
|
32
32
|
version: 3.0.9
|
|
33
|
-
name: rufus-scheduler
|
|
34
|
-
prerelease: false
|
|
35
33
|
type: :runtime
|
|
34
|
+
prerelease: false
|
|
36
35
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
36
|
requirements:
|
|
38
37
|
- - ">="
|
|
39
38
|
- !ruby/object:Gem::Version
|
|
40
39
|
version: 3.0.9
|
|
41
40
|
- !ruby/object:Gem::Dependency
|
|
41
|
+
name: logstash-devutils
|
|
42
42
|
requirement: !ruby/object:Gem::Requirement
|
|
43
43
|
requirements:
|
|
44
44
|
- - ">="
|
|
45
45
|
- !ruby/object:Gem::Version
|
|
46
46
|
version: '0'
|
|
47
|
-
name: logstash-devutils
|
|
48
|
-
prerelease: false
|
|
49
47
|
type: :development
|
|
48
|
+
prerelease: false
|
|
50
49
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
50
|
requirements:
|
|
52
51
|
- - ">="
|
|
53
52
|
- !ruby/object:Gem::Version
|
|
54
53
|
version: '0'
|
|
55
54
|
- !ruby/object:Gem::Dependency
|
|
55
|
+
name: logstash-codec-plain
|
|
56
56
|
requirement: !ruby/object:Gem::Requirement
|
|
57
57
|
requirements:
|
|
58
58
|
- - ">="
|
|
59
59
|
- !ruby/object:Gem::Version
|
|
60
60
|
version: '0'
|
|
61
|
-
name: logstash-codec-plain
|
|
62
|
-
prerelease: false
|
|
63
61
|
type: :development
|
|
62
|
+
prerelease: false
|
|
64
63
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
64
|
requirements:
|
|
66
65
|
- - ">="
|
|
67
66
|
- !ruby/object:Gem::Version
|
|
68
67
|
version: '0'
|
|
69
68
|
- !ruby/object:Gem::Dependency
|
|
69
|
+
name: rspec
|
|
70
70
|
requirement: !ruby/object:Gem::Requirement
|
|
71
71
|
requirements:
|
|
72
72
|
- - "~>"
|
|
73
73
|
- !ruby/object:Gem::Version
|
|
74
74
|
version: '3.9'
|
|
75
|
-
name: rspec
|
|
76
|
-
prerelease: false
|
|
77
75
|
type: :development
|
|
76
|
+
prerelease: false
|
|
78
77
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
78
|
requirements:
|
|
80
79
|
- - "~>"
|
|
81
80
|
- !ruby/object:Gem::Version
|
|
82
81
|
version: '3.9'
|
|
83
|
-
description:
|
|
84
82
|
email: info@elastic.co
|
|
85
83
|
executables: []
|
|
86
84
|
extensions: []
|
|
@@ -98,7 +96,6 @@ homepage: https://github.com/logstash-plugins/logstash-mixin-scheduler
|
|
|
98
96
|
licenses:
|
|
99
97
|
- Apache-2.0
|
|
100
98
|
metadata: {}
|
|
101
|
-
post_install_message:
|
|
102
99
|
rdoc_options: []
|
|
103
100
|
require_paths:
|
|
104
101
|
- lib
|
|
@@ -113,8 +110,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
113
110
|
- !ruby/object:Gem::Version
|
|
114
111
|
version: '0'
|
|
115
112
|
requirements: []
|
|
116
|
-
rubygems_version: 3.
|
|
117
|
-
signing_key:
|
|
113
|
+
rubygems_version: 3.6.3
|
|
118
114
|
specification_version: 4
|
|
119
115
|
summary: Scheduler for Logstash plugins
|
|
120
116
|
test_files:
|