synapse 0.13.7 → 0.13.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 +15 -0
- data/Gemfile.lock +9 -1
- data/lib/synapse/service_watcher/zookeeper.rb +9 -1
- data/lib/synapse/version.rb +1 -1
- data/spec/lib/synapse/service_watcher_zookeeper_spec.rb +32 -1
- data/synapse.gemspec +10 -5
- metadata +15 -32
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
ZDAyZjEyZDU5ZGUwMmMwOTFkNjgyMmUwMmU2NGRlYTBmMWQ5MmE3YQ==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
YzNjYjQ2NWJkNDAyYzllZmE0ZGJjNWFmZmQ5YTdmMWU2NjlhYjQ4Mg==
|
7
|
+
SHA512:
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
NGE5ZjEwYmM0MmE2MjgyYjY5YTQzN2Q3YjY0YzliMjFjNmYwNWUwMDAyN2M5
|
10
|
+
ZTg2MmQ0ZWNlNTM2OTQyZjk4MWMzN2EzMGNiNjM1ZGE4MjE2OGQ3OTRiZjMx
|
11
|
+
M2U2NmNmZDkyODQxMDI4NjYwNmI3NmYzY2M2ZGM1NzFhMmVkZTQ=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
MzAxZGIyYTRiNDdlYjYwYzY1NzM0ZDlhMTllNmNkYjdiYzQzODFlOGFmYmJi
|
14
|
+
NTQ1MmIzOTI3Y2IxZmQyZTYwYzNiMDRiMTM3ZGZmOTc1OTAzMmQyZWEzYTY5
|
15
|
+
MmE1NDQ3NDUxZGI3MGE3NGVhZDdiODE1NzA2NTk5ZjFlNmI0NGY=
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
synapse (0.13.
|
4
|
+
synapse (0.13.8)
|
5
5
|
aws-sdk (~> 1.39)
|
6
6
|
docker-api (~> 1.7)
|
7
7
|
logging (~> 1.8)
|
@@ -36,6 +36,7 @@ GEM
|
|
36
36
|
hashdiff (0.2.3)
|
37
37
|
i18n (0.7.0)
|
38
38
|
json (1.8.3)
|
39
|
+
json (1.8.3-java)
|
39
40
|
little-plugger (1.1.3)
|
40
41
|
logging (1.8.2)
|
41
42
|
little-plugger (>= 1.1.3)
|
@@ -46,6 +47,7 @@ GEM
|
|
46
47
|
multi_json (1.11.2)
|
47
48
|
nokogiri (1.6.7.2)
|
48
49
|
mini_portile2 (~> 2.0.0.rc2)
|
50
|
+
nokogiri (1.6.7.2-java)
|
49
51
|
pry (0.10.3)
|
50
52
|
coderay (~> 1.1.0)
|
51
53
|
method_source (~> 0.8.1)
|
@@ -72,9 +74,12 @@ GEM
|
|
72
74
|
rspec-support (3.1.2)
|
73
75
|
safe_yaml (1.0.4)
|
74
76
|
slop (3.6.0)
|
77
|
+
slyphon-log4j (1.2.15)
|
78
|
+
slyphon-zookeeper_jar (3.3.5-java)
|
75
79
|
spoon (0.0.4)
|
76
80
|
ffi
|
77
81
|
thread_safe (0.3.5)
|
82
|
+
thread_safe (0.3.5-java)
|
78
83
|
timecop (0.8.1)
|
79
84
|
tzinfo (1.2.2)
|
80
85
|
thread_safe (~> 0.1)
|
@@ -85,6 +90,9 @@ GEM
|
|
85
90
|
zk (1.9.6)
|
86
91
|
zookeeper (~> 1.4.0)
|
87
92
|
zookeeper (1.4.11)
|
93
|
+
zookeeper (1.4.11-java)
|
94
|
+
slyphon-log4j (= 1.2.15)
|
95
|
+
slyphon-zookeeper_jar (= 3.3.5)
|
88
96
|
|
89
97
|
PLATFORMS
|
90
98
|
java
|
@@ -127,7 +127,15 @@ class Synapse::ServiceWatcher
|
|
127
127
|
|
128
128
|
new_backends = []
|
129
129
|
@zk.children(@discovery['path'], :watch => true).each do |id|
|
130
|
-
|
130
|
+
begin
|
131
|
+
node = @zk.get("#{@discovery['path']}/#{id}")
|
132
|
+
rescue ZK::Exceptions::NoNode => e
|
133
|
+
# This can happen when the registry unregisters a service node between
|
134
|
+
# the call to @zk.children and @zk.get(path). ZK does not guarantee
|
135
|
+
# a read to ``get`` of a child returned by ``children`` will succeed
|
136
|
+
log.error("synapse: #{@discovery['path']}/#{id} disappeared before it could be read: #{e}")
|
137
|
+
next
|
138
|
+
end
|
131
139
|
|
132
140
|
begin
|
133
141
|
# TODO: Do less munging, or refactor out this processing
|
data/lib/synapse/version.rb
CHANGED
@@ -29,11 +29,42 @@ describe Synapse::ServiceWatcher::ZookeeperWatcher do
|
|
29
29
|
}
|
30
30
|
|
31
31
|
context 'ZookeeperWatcher' do
|
32
|
-
let(:discovery) { { 'method' => 'zookeeper', 'hosts' => 'somehost','path' => 'some/path' } }
|
32
|
+
let(:discovery) { { 'method' => 'zookeeper', 'hosts' => 'somehost', 'path' => 'some/path' } }
|
33
|
+
let(:mock_zk) { double(ZK) }
|
34
|
+
let(:mock_node) do
|
35
|
+
node_double = double()
|
36
|
+
allow(node_double).to receive(:first).and_return(service_data_string)
|
37
|
+
node_double
|
38
|
+
end
|
39
|
+
|
33
40
|
subject { Synapse::ServiceWatcher::ZookeeperWatcher.new(config, mock_synapse) }
|
34
41
|
it 'decodes data correctly' do
|
35
42
|
expect(subject.send(:deserialize_service_instance, service_data_string)).to eql(deserialized_service_data)
|
36
43
|
end
|
44
|
+
|
45
|
+
it 'reacts to zk push events' do
|
46
|
+
expect(subject).to receive(:watch)
|
47
|
+
expect(subject).to receive(:discover).and_call_original
|
48
|
+
expect(mock_zk).to receive(:children).with('some/path', {:watch=>true}).and_return(
|
49
|
+
["test_child_1"]
|
50
|
+
)
|
51
|
+
expect(mock_zk).to receive(:get).with('some/path/test_child_1').and_return(mock_node)
|
52
|
+
subject.instance_variable_set('@zk', mock_zk)
|
53
|
+
expect(subject).to receive(:set_backends).with([service_data.merge({'id' => 1})])
|
54
|
+
subject.send(:watcher_callback).call
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'handles zk consistency issues' do
|
58
|
+
expect(subject).to receive(:watch)
|
59
|
+
expect(subject).to receive(:discover).and_call_original
|
60
|
+
expect(mock_zk).to receive(:children).with('some/path', {:watch=>true}).and_return(
|
61
|
+
["test_child_1"]
|
62
|
+
)
|
63
|
+
expect(mock_zk).to receive(:get).with('some/path/test_child_1').and_raise(ZK::Exceptions::NoNode)
|
64
|
+
subject.instance_variable_set('@zk', mock_zk)
|
65
|
+
expect(subject).to receive(:set_backends).with([])
|
66
|
+
subject.send(:watcher_callback).call
|
67
|
+
end
|
37
68
|
end
|
38
69
|
|
39
70
|
context 'ZookeeperDnsWatcher' do
|
data/synapse.gemspec
CHANGED
@@ -6,11 +6,16 @@ require 'synapse/version'
|
|
6
6
|
Gem::Specification.new do |gem|
|
7
7
|
gem.name = "synapse"
|
8
8
|
gem.version = Synapse::VERSION
|
9
|
-
gem.authors = ["Martin Rhoads"]
|
10
|
-
gem.email = ["martin.rhoads@airbnb.com"]
|
11
|
-
gem.description =
|
12
|
-
|
13
|
-
|
9
|
+
gem.authors = ["Martin Rhoads", "Igor Serebryany", "Joseph Lynch"]
|
10
|
+
gem.email = ["martin.rhoads@airbnb.com", "igor.serebryany@airbnb.com", "jlynch@yelp.com"]
|
11
|
+
gem.description = "Synapse is a daemon used to dynamically configure and "\
|
12
|
+
"manage local instances of HAProxy as well as local files "\
|
13
|
+
"in reaction to changes in a service registry such as "\
|
14
|
+
"zookeeper. Synapse is half of SmartStack, and is designed "\
|
15
|
+
"to be operated along with Nerve or another system that "\
|
16
|
+
"registers services such as Aurora."
|
17
|
+
gem.summary = %q{Dynamic HAProxy configuration daemon}
|
18
|
+
gem.homepage = "https://github.com/airbnb/synapse"
|
14
19
|
|
15
20
|
gem.files = `git ls-files`.split($/)
|
16
21
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
metadata
CHANGED
@@ -1,20 +1,20 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: synapse
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.13.
|
5
|
-
prerelease:
|
4
|
+
version: 0.13.8
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Martin Rhoads
|
8
|
+
- Igor Serebryany
|
9
|
+
- Joseph Lynch
|
9
10
|
autorequire:
|
10
11
|
bindir: bin
|
11
12
|
cert_chain: []
|
12
|
-
date: 2016-
|
13
|
+
date: 2016-09-01 00:00:00.000000000 Z
|
13
14
|
dependencies:
|
14
15
|
- !ruby/object:Gem::Dependency
|
15
16
|
name: aws-sdk
|
16
17
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
20
20
|
- !ruby/object:Gem::Version
|
@@ -22,7 +22,6 @@ dependencies:
|
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
25
|
requirements:
|
27
26
|
- - ~>
|
28
27
|
- !ruby/object:Gem::Version
|
@@ -30,7 +29,6 @@ dependencies:
|
|
30
29
|
- !ruby/object:Gem::Dependency
|
31
30
|
name: docker-api
|
32
31
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
32
|
requirements:
|
35
33
|
- - ~>
|
36
34
|
- !ruby/object:Gem::Version
|
@@ -38,7 +36,6 @@ dependencies:
|
|
38
36
|
type: :runtime
|
39
37
|
prerelease: false
|
40
38
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
39
|
requirements:
|
43
40
|
- - ~>
|
44
41
|
- !ruby/object:Gem::Version
|
@@ -46,7 +43,6 @@ dependencies:
|
|
46
43
|
- !ruby/object:Gem::Dependency
|
47
44
|
name: zk
|
48
45
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
46
|
requirements:
|
51
47
|
- - ~>
|
52
48
|
- !ruby/object:Gem::Version
|
@@ -54,7 +50,6 @@ dependencies:
|
|
54
50
|
type: :runtime
|
55
51
|
prerelease: false
|
56
52
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
53
|
requirements:
|
59
54
|
- - ~>
|
60
55
|
- !ruby/object:Gem::Version
|
@@ -62,7 +57,6 @@ dependencies:
|
|
62
57
|
- !ruby/object:Gem::Dependency
|
63
58
|
name: logging
|
64
59
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
60
|
requirements:
|
67
61
|
- - ~>
|
68
62
|
- !ruby/object:Gem::Version
|
@@ -70,7 +64,6 @@ dependencies:
|
|
70
64
|
type: :runtime
|
71
65
|
prerelease: false
|
72
66
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
67
|
requirements:
|
75
68
|
- - ~>
|
76
69
|
- !ruby/object:Gem::Version
|
@@ -78,7 +71,6 @@ dependencies:
|
|
78
71
|
- !ruby/object:Gem::Dependency
|
79
72
|
name: rake
|
80
73
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
74
|
requirements:
|
83
75
|
- - ! '>='
|
84
76
|
- !ruby/object:Gem::Version
|
@@ -86,7 +78,6 @@ dependencies:
|
|
86
78
|
type: :development
|
87
79
|
prerelease: false
|
88
80
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
81
|
requirements:
|
91
82
|
- - ! '>='
|
92
83
|
- !ruby/object:Gem::Version
|
@@ -94,7 +85,6 @@ dependencies:
|
|
94
85
|
- !ruby/object:Gem::Dependency
|
95
86
|
name: rspec
|
96
87
|
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
88
|
requirements:
|
99
89
|
- - ~>
|
100
90
|
- !ruby/object:Gem::Version
|
@@ -102,7 +92,6 @@ dependencies:
|
|
102
92
|
type: :development
|
103
93
|
prerelease: false
|
104
94
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
95
|
requirements:
|
107
96
|
- - ~>
|
108
97
|
- !ruby/object:Gem::Version
|
@@ -110,7 +99,6 @@ dependencies:
|
|
110
99
|
- !ruby/object:Gem::Dependency
|
111
100
|
name: factory_girl
|
112
101
|
requirement: !ruby/object:Gem::Requirement
|
113
|
-
none: false
|
114
102
|
requirements:
|
115
103
|
- - ! '>='
|
116
104
|
- !ruby/object:Gem::Version
|
@@ -118,7 +106,6 @@ dependencies:
|
|
118
106
|
type: :development
|
119
107
|
prerelease: false
|
120
108
|
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
none: false
|
122
109
|
requirements:
|
123
110
|
- - ! '>='
|
124
111
|
- !ruby/object:Gem::Version
|
@@ -126,7 +113,6 @@ dependencies:
|
|
126
113
|
- !ruby/object:Gem::Dependency
|
127
114
|
name: pry
|
128
115
|
requirement: !ruby/object:Gem::Requirement
|
129
|
-
none: false
|
130
116
|
requirements:
|
131
117
|
- - ! '>='
|
132
118
|
- !ruby/object:Gem::Version
|
@@ -134,7 +120,6 @@ dependencies:
|
|
134
120
|
type: :development
|
135
121
|
prerelease: false
|
136
122
|
version_requirements: !ruby/object:Gem::Requirement
|
137
|
-
none: false
|
138
123
|
requirements:
|
139
124
|
- - ! '>='
|
140
125
|
- !ruby/object:Gem::Version
|
@@ -142,7 +127,6 @@ dependencies:
|
|
142
127
|
- !ruby/object:Gem::Dependency
|
143
128
|
name: pry-nav
|
144
129
|
requirement: !ruby/object:Gem::Requirement
|
145
|
-
none: false
|
146
130
|
requirements:
|
147
131
|
- - ! '>='
|
148
132
|
- !ruby/object:Gem::Version
|
@@ -150,7 +134,6 @@ dependencies:
|
|
150
134
|
type: :development
|
151
135
|
prerelease: false
|
152
136
|
version_requirements: !ruby/object:Gem::Requirement
|
153
|
-
none: false
|
154
137
|
requirements:
|
155
138
|
- - ! '>='
|
156
139
|
- !ruby/object:Gem::Version
|
@@ -158,7 +141,6 @@ dependencies:
|
|
158
141
|
- !ruby/object:Gem::Dependency
|
159
142
|
name: webmock
|
160
143
|
requirement: !ruby/object:Gem::Requirement
|
161
|
-
none: false
|
162
144
|
requirements:
|
163
145
|
- - ! '>='
|
164
146
|
- !ruby/object:Gem::Version
|
@@ -166,7 +148,6 @@ dependencies:
|
|
166
148
|
type: :development
|
167
149
|
prerelease: false
|
168
150
|
version_requirements: !ruby/object:Gem::Requirement
|
169
|
-
none: false
|
170
151
|
requirements:
|
171
152
|
- - ! '>='
|
172
153
|
- !ruby/object:Gem::Version
|
@@ -174,7 +155,6 @@ dependencies:
|
|
174
155
|
- !ruby/object:Gem::Dependency
|
175
156
|
name: timecop
|
176
157
|
requirement: !ruby/object:Gem::Requirement
|
177
|
-
none: false
|
178
158
|
requirements:
|
179
159
|
- - ! '>='
|
180
160
|
- !ruby/object:Gem::Version
|
@@ -182,14 +162,18 @@ dependencies:
|
|
182
162
|
type: :development
|
183
163
|
prerelease: false
|
184
164
|
version_requirements: !ruby/object:Gem::Requirement
|
185
|
-
none: false
|
186
165
|
requirements:
|
187
166
|
- - ! '>='
|
188
167
|
- !ruby/object:Gem::Version
|
189
168
|
version: '0'
|
190
|
-
description:
|
169
|
+
description: Synapse is a daemon used to dynamically configure and manage local instances
|
170
|
+
of HAProxy as well as local files in reaction to changes in a service registry such
|
171
|
+
as zookeeper. Synapse is half of SmartStack, and is designed to be operated along
|
172
|
+
with Nerve or another system that registers services such as Aurora.
|
191
173
|
email:
|
192
174
|
- martin.rhoads@airbnb.com
|
175
|
+
- igor.serebryany@airbnb.com
|
176
|
+
- jlynch@yelp.com
|
193
177
|
executables:
|
194
178
|
- synapse
|
195
179
|
extensions: []
|
@@ -239,30 +223,29 @@ files:
|
|
239
223
|
- spec/support/configuration.rb
|
240
224
|
- spec/support/minimum.conf.yaml
|
241
225
|
- synapse.gemspec
|
242
|
-
homepage:
|
226
|
+
homepage: https://github.com/airbnb/synapse
|
243
227
|
licenses: []
|
228
|
+
metadata: {}
|
244
229
|
post_install_message:
|
245
230
|
rdoc_options: []
|
246
231
|
require_paths:
|
247
232
|
- lib
|
248
233
|
required_ruby_version: !ruby/object:Gem::Requirement
|
249
|
-
none: false
|
250
234
|
requirements:
|
251
235
|
- - ! '>='
|
252
236
|
- !ruby/object:Gem::Version
|
253
237
|
version: '0'
|
254
238
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
255
|
-
none: false
|
256
239
|
requirements:
|
257
240
|
- - ! '>='
|
258
241
|
- !ruby/object:Gem::Version
|
259
242
|
version: '0'
|
260
243
|
requirements: []
|
261
244
|
rubyforge_project:
|
262
|
-
rubygems_version:
|
245
|
+
rubygems_version: 2.5.1
|
263
246
|
signing_key:
|
264
|
-
specification_version:
|
265
|
-
summary:
|
247
|
+
specification_version: 4
|
248
|
+
summary: Dynamic HAProxy configuration daemon
|
266
249
|
test_files:
|
267
250
|
- spec/factories/backend.rb
|
268
251
|
- spec/lib/synapse/file_output_spec.rb
|