fluent-plugin-keep-forward 0.1.7 → 0.1.8
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 +6 -0
- data/fluent-plugin-keep-forward.gemspec +2 -1
- data/lib/fluent/plugin/out_keep_forward.rb +2 -2
- data/spec/out_keep_forward_spec.rb +43 -29
- data/spec/spec_helper.rb +1 -0
- metadata +35 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 396fed6b9298c85436e2e99450dbf75f8d419220
|
4
|
+
data.tar.gz: 0e7eaec611c3b770787ff155dc489172df309011
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 175841e7080011ab92788561e9830b1e24dd4a911e97050b5c931c1b18c9def533a3f0bf50e3d5432009652a90fd4545adb447ab90c68159bdfee7a026059120
|
7
|
+
data.tar.gz: 2454c8409dfa801cfc8017685981105fb6cc4d2bef6d7f9884934c08e84ba9175d7c6467300b1bc82dfd024990473d77729444a0579e51458cf9d4d4ed646cd2
|
data/CHANGELOG.md
CHANGED
@@ -3,7 +3,7 @@ $:.push File.expand_path("../lib", __FILE__)
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "fluent-plugin-keep-forward"
|
6
|
-
s.version = "0.1.
|
6
|
+
s.version = "0.1.8"
|
7
7
|
s.authors = ["Naotoshi Seo"]
|
8
8
|
s.email = ["sonots@gmail.com"]
|
9
9
|
s.homepage = "https://github.com/sonots/fluent-plugin-keep-forward"
|
@@ -20,6 +20,7 @@ Gem::Specification.new do |s|
|
|
20
20
|
s.add_runtime_dependency "fluentd"
|
21
21
|
s.add_development_dependency "rake"
|
22
22
|
s.add_development_dependency "rspec"
|
23
|
+
s.add_development_dependency "rspec-its"
|
23
24
|
s.add_development_dependency "pry"
|
24
25
|
s.add_development_dependency "pry-nav"
|
25
26
|
s.add_development_dependency "delorean"
|
@@ -92,7 +92,7 @@ class Fluent::KeepForwardOutput < Fluent::ForwardOutput
|
|
92
92
|
extend Forwardable
|
93
93
|
attr_reader :node
|
94
94
|
def_delegators :@node, :standby?, :resolved_host, :resolve_dns!, :to_msgpack,
|
95
|
-
:name, :host, :port, :weight, :weight=, :standby=, :
|
95
|
+
:name, :host, :port, :weight, :weight=, :standby=, :sockaddr
|
96
96
|
|
97
97
|
def initialize(node)
|
98
98
|
@node = node
|
@@ -172,7 +172,7 @@ class Fluent::KeepForwardOutput < Fluent::ForwardOutput
|
|
172
172
|
begin
|
173
173
|
sock_write(sock, tag, chunk)
|
174
174
|
node.heartbeat(false)
|
175
|
-
log.debug "out_keep_forward: write to", :host=>node.host, :port=>node.port
|
175
|
+
log.debug "out_keep_forward: write #{tag} to", :host=>node.host, :port=>node.port
|
176
176
|
rescue Errno::EPIPE, Errno::ECONNRESET, Errno::ECONNABORTED, Errno::ETIMEDOUT => e
|
177
177
|
log.warn "out_keep_forward: send_data failed #{e.class} #{e.message}", :host=>node.host, :port=>node.port
|
178
178
|
if @keepalive
|
@@ -23,10 +23,10 @@ shared_context 'keep_forward_try_once' do
|
|
23
23
|
before do
|
24
24
|
# stub connection
|
25
25
|
stub_sock = StringIO.new
|
26
|
-
driver.
|
27
|
-
stub_sock.
|
28
|
-
driver.
|
29
|
-
Fluent::ForwardOutput::Node.
|
26
|
+
allow(driver).to receive(:connect) { stub_sock }
|
27
|
+
allow(stub_sock). to receive(:setsockopt)
|
28
|
+
allow(driver).to receive(:sock_write) { nil }
|
29
|
+
allow_any_instance_of(Fluent::ForwardOutput::Node).to receive(:heartbeat) { nil }
|
30
30
|
# simpler version of Fluent::ForwardOutput#start method
|
31
31
|
driver.watcher_interval = 0
|
32
32
|
driver.start_watcher
|
@@ -47,7 +47,7 @@ shared_examples "keep_node_available" do
|
|
47
47
|
end
|
48
48
|
|
49
49
|
shared_examples "keep_node_not_available" do
|
50
|
-
before { keep_node.available
|
50
|
+
before { keep_node.instance_variable_set(:@available, false) }
|
51
51
|
it { driver.write_objects(tag, chunk) }
|
52
52
|
end
|
53
53
|
|
@@ -64,7 +64,7 @@ shared_context "prefer_recover true" do
|
|
64
64
|
end
|
65
65
|
|
66
66
|
shared_examples "error_occurs" do
|
67
|
-
before { driver.
|
67
|
+
before { allow(driver).to receive(:send_data) {|keep_node, tag, chunk| raise StandardError } }
|
68
68
|
it { driver.write_objects(tag, chunk) }
|
69
69
|
end
|
70
70
|
|
@@ -74,55 +74,55 @@ describe Fluent::KeepForwardOutput do
|
|
74
74
|
|
75
75
|
describe "keep_node" do
|
76
76
|
it_should_behave_like 'keep_node_available' do
|
77
|
-
before { driver.
|
77
|
+
before { expect(driver).to receive(:send_data).with(keep_node, tag, chunk) }
|
78
78
|
end
|
79
79
|
it_should_behave_like 'keep_node_not_available' do
|
80
|
-
before { driver.
|
80
|
+
before { expect(driver).to receive(:send_data).with(another_node, tag, chunk) }
|
81
81
|
end
|
82
82
|
it_should_behave_like 'prefer_recover true' do
|
83
|
-
before { driver.
|
83
|
+
before { expect(driver).to receive(:send_data).with(another_node, tag, chunk) }
|
84
84
|
end
|
85
85
|
it_should_behave_like 'prefer_recover false' do
|
86
|
-
before { driver.
|
86
|
+
before { expect(driver).to receive(:send_data).with(keep_node, tag, chunk) }
|
87
87
|
end
|
88
88
|
it_should_behave_like 'error_occurs' do
|
89
|
-
before { driver.
|
89
|
+
before { allow(driver).to receive(:weight_send_data).with(tag, chunk) } # re-call weight_send_data
|
90
90
|
end
|
91
91
|
end
|
92
92
|
|
93
93
|
describe "keepalive false" do
|
94
94
|
let(:config) { CONFIG + %[keepalive false] }
|
95
95
|
it_should_behave_like 'keep_node_available' do
|
96
|
-
before { driver.
|
96
|
+
before { expect(driver).to receive(:reconnect) }
|
97
97
|
end
|
98
98
|
it_should_behave_like 'keep_node_not_available' do
|
99
|
-
before { driver.
|
99
|
+
before { expect(driver).to receive(:reconnect) }
|
100
100
|
end
|
101
101
|
it_should_behave_like 'prefer_recover true' do
|
102
102
|
let(:config) { CONFIG + %[prefer_recover true\nkeepalive false] }
|
103
|
-
before { driver.
|
103
|
+
before { expect(driver).to receive(:reconnect) }
|
104
104
|
end
|
105
105
|
it_should_behave_like 'prefer_recover false' do
|
106
106
|
let(:config) { CONFIG + %[prefer_recover false\nkeepalive false] }
|
107
|
-
before { driver.
|
107
|
+
before { expect(driver).to receive(:reconnect) }
|
108
108
|
end
|
109
109
|
end
|
110
110
|
|
111
111
|
describe "keepalive true" do
|
112
112
|
let(:config) { CONFIG + %[keepalive true] }
|
113
113
|
it_should_behave_like 'keep_node_available' do
|
114
|
-
before { driver.
|
114
|
+
before { expect(driver).not_to receive(:reconnect) }
|
115
115
|
end
|
116
116
|
it_should_behave_like 'keep_node_not_available' do
|
117
|
-
before { driver.
|
117
|
+
before { expect(driver).to receive(:reconnect) }
|
118
118
|
end
|
119
119
|
it_should_behave_like 'prefer_recover true' do
|
120
120
|
let(:config) { CONFIG + %[prefer_recover true\nkeepalive true] }
|
121
|
-
before { driver.
|
121
|
+
before { expect(driver).to receive(:reconnect) }
|
122
122
|
end
|
123
123
|
it_should_behave_like 'prefer_recover false' do
|
124
124
|
let(:config) { CONFIG + %[prefer_recover false\nkeepalive true] }
|
125
|
-
before { driver.
|
125
|
+
before { expect(driver).not_to receive(:reconnect) }
|
126
126
|
end
|
127
127
|
end
|
128
128
|
|
@@ -130,18 +130,32 @@ describe Fluent::KeepForwardOutput do
|
|
130
130
|
let(:config) { CONFIG + %[keepalive true\nkeepalive_time 30] }
|
131
131
|
before { Delorean.jump 30 }
|
132
132
|
it_should_behave_like 'keep_node_available' do
|
133
|
-
before { sleep 1; driver.
|
134
|
-
end
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
133
|
+
before { sleep 1; expect(driver).to receive(:reconnect) }
|
134
|
+
end
|
135
|
+
pending "fix RumtimeError: can't add a new key into hash during iteration"
|
136
|
+
#it_should_behave_like 'keep_node_not_available' do
|
137
|
+
# before { sleep 1; driver.should_receive(:reconnect) }
|
138
|
+
#end
|
139
|
+
#it_should_behave_like 'prefer_recover true' do
|
140
|
+
# let(:config) { CONFIG + %[prefer_recover true\nkeepalive true\nkeepalive_time 30] }
|
141
|
+
# before { sleep 1; driver.should_receive(:reconnect) }
|
142
|
+
#end
|
142
143
|
it_should_behave_like 'prefer_recover false' do
|
143
144
|
let(:config) { CONFIG + %[prefer_recover false\nkeepalive true\nkeepalive_time 30] }
|
144
|
-
before { sleep 1; driver.
|
145
|
+
before { sleep 1; expect(driver).to receive(:reconnect) }
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
describe "heatbeat_type none" do
|
150
|
+
let(:config) { CONFIG + %[heartbeat_type none] }
|
151
|
+
it { driver.nodes.first.class == Fluent::KeepForwardOutput::NonHeartbeatNode }
|
152
|
+
|
153
|
+
# nodes are always available because heartbeat is off
|
154
|
+
it_should_behave_like 'keep_node_available' do
|
155
|
+
before { expect(driver).to receive(:send_data).with(keep_node, tag, chunk) }
|
156
|
+
end
|
157
|
+
it_should_behave_like 'error_occurs' do
|
158
|
+
before { allow(driver).to receive(:weight_send_data).with(tag, chunk) } # re-call weight_send_data
|
145
159
|
end
|
146
160
|
end
|
147
161
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,97 +1,111 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fluent-plugin-keep-forward
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Naotoshi Seo
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-03-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fluentd
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec-its
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
53
67
|
- !ruby/object:Gem::Version
|
54
68
|
version: '0'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: pry
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
58
72
|
requirements:
|
59
|
-
- -
|
73
|
+
- - ">="
|
60
74
|
- !ruby/object:Gem::Version
|
61
75
|
version: '0'
|
62
76
|
type: :development
|
63
77
|
prerelease: false
|
64
78
|
version_requirements: !ruby/object:Gem::Requirement
|
65
79
|
requirements:
|
66
|
-
- -
|
80
|
+
- - ">="
|
67
81
|
- !ruby/object:Gem::Version
|
68
82
|
version: '0'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: pry-nav
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
72
86
|
requirements:
|
73
|
-
- -
|
87
|
+
- - ">="
|
74
88
|
- !ruby/object:Gem::Version
|
75
89
|
version: '0'
|
76
90
|
type: :development
|
77
91
|
prerelease: false
|
78
92
|
version_requirements: !ruby/object:Gem::Requirement
|
79
93
|
requirements:
|
80
|
-
- -
|
94
|
+
- - ">="
|
81
95
|
- !ruby/object:Gem::Version
|
82
96
|
version: '0'
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
98
|
name: delorean
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
86
100
|
requirements:
|
87
|
-
- -
|
101
|
+
- - ">="
|
88
102
|
- !ruby/object:Gem::Version
|
89
103
|
version: '0'
|
90
104
|
type: :development
|
91
105
|
prerelease: false
|
92
106
|
version_requirements: !ruby/object:Gem::Requirement
|
93
107
|
requirements:
|
94
|
-
- -
|
108
|
+
- - ">="
|
95
109
|
- !ruby/object:Gem::Version
|
96
110
|
version: '0'
|
97
111
|
description: Fluentd plugin to keep forwarding to a node
|
@@ -101,10 +115,10 @@ executables: []
|
|
101
115
|
extensions: []
|
102
116
|
extra_rdoc_files: []
|
103
117
|
files:
|
104
|
-
- .gitignore
|
105
|
-
- .rdebugrc
|
106
|
-
- .rspec
|
107
|
-
- .travis.yml
|
118
|
+
- ".gitignore"
|
119
|
+
- ".rdebugrc"
|
120
|
+
- ".rspec"
|
121
|
+
- ".travis.yml"
|
108
122
|
- CHANGELOG.md
|
109
123
|
- Gemfile
|
110
124
|
- LICENSE
|
@@ -124,17 +138,17 @@ require_paths:
|
|
124
138
|
- lib
|
125
139
|
required_ruby_version: !ruby/object:Gem::Requirement
|
126
140
|
requirements:
|
127
|
-
- -
|
141
|
+
- - ">="
|
128
142
|
- !ruby/object:Gem::Version
|
129
143
|
version: '0'
|
130
144
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
131
145
|
requirements:
|
132
|
-
- -
|
146
|
+
- - ">="
|
133
147
|
- !ruby/object:Gem::Version
|
134
148
|
version: '0'
|
135
149
|
requirements: []
|
136
150
|
rubyforge_project: fluent-plugin-keep-forward
|
137
|
-
rubygems_version: 2.
|
151
|
+
rubygems_version: 2.2.2
|
138
152
|
signing_key:
|
139
153
|
specification_version: 4
|
140
154
|
summary: Fluentd plugin to keep forwarding to a node
|