zeevex_cluster 0.2.3 → 0.3.0
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.
@@ -5,7 +5,7 @@ class ZeevexCluster::Coordinator::BaseKeyValStore
|
|
5
5
|
|
6
6
|
def self.setup
|
7
7
|
unless @setup
|
8
|
-
require 'zeevex_cluster/serializer/
|
8
|
+
require 'zeevex_cluster/serializer/edn'
|
9
9
|
@setup = true
|
10
10
|
end
|
11
11
|
end
|
@@ -26,7 +26,7 @@ class ZeevexCluster::Coordinator::BaseKeyValStore
|
|
26
26
|
|
27
27
|
@logger = options[:logger]
|
28
28
|
|
29
|
-
@serializer = options[:serializer] || ZeevexCluster::Serializer::
|
29
|
+
@serializer = options[:serializer] || ZeevexCluster::Serializer::EDN.new
|
30
30
|
|
31
31
|
@retries = options.fetch(:retries, 20)
|
32
32
|
@retry_wait = options.fetch(:retry_wait, 2)
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'edn'
|
2
|
+
require 'date'
|
3
|
+
|
4
|
+
require 'zeevex_cluster/serializer'
|
5
|
+
|
6
|
+
class ZeevexCluster::Serializer::EDN
|
7
|
+
def new(options = {})
|
8
|
+
@options = options
|
9
|
+
end
|
10
|
+
|
11
|
+
def deserialize(str)
|
12
|
+
parsed = ::EDN.read(str)
|
13
|
+
end
|
14
|
+
|
15
|
+
def serialize(obj)
|
16
|
+
obj.to_edn
|
17
|
+
end
|
18
|
+
end
|
@@ -7,21 +7,21 @@ module ZeevexCluster
|
|
7
7
|
end
|
8
8
|
|
9
9
|
module InstanceMethods
|
10
|
-
def
|
10
|
+
def to_serialized
|
11
11
|
serializer.serialize(self)
|
12
12
|
end
|
13
13
|
|
14
14
|
def serializer
|
15
|
-
@_serializer ||= ZeevexCluster::Serializer::
|
15
|
+
@_serializer ||= ZeevexCluster::Serializer::EDN.new
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
19
|
module ClassMethods
|
20
|
-
def
|
20
|
+
def from_serialized(string)
|
21
21
|
serializer.deserialize(self)
|
22
22
|
end
|
23
23
|
end
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
|
-
require 'zeevex_cluster/serializer/
|
27
|
+
require 'zeevex_cluster/serializer/edn'
|
@@ -116,7 +116,7 @@ class ZeevexCluster::Strategy::Cas < ZeevexCluster::Strategy::Base
|
|
116
116
|
list = server.get(key('members')) || make_member_list
|
117
117
|
members = []
|
118
118
|
list[:members].values.each do |v|
|
119
|
-
members << v[:nodename] unless v[:timestamp]
|
119
|
+
members << v[:nodename] unless time_of(v[:timestamp]) < stale_point
|
120
120
|
end
|
121
121
|
members
|
122
122
|
end
|
@@ -185,7 +185,7 @@ class ZeevexCluster::Strategy::Cas < ZeevexCluster::Strategy::Base
|
|
185
185
|
|
186
186
|
def got_lock(token)
|
187
187
|
unless @locked_at
|
188
|
-
@locked_at = token[:timestamp]
|
188
|
+
@locked_at = time_of(token[:timestamp])
|
189
189
|
token = my_token
|
190
190
|
run_hook :election_won
|
191
191
|
end
|
@@ -238,8 +238,8 @@ class ZeevexCluster::Strategy::Cas < ZeevexCluster::Strategy::Base
|
|
238
238
|
def qualifies_for_master?(token)
|
239
239
|
now = time_now()
|
240
240
|
! token_invalid?(token) and
|
241
|
-
token[:timestamp] > (now - @stale_time) and
|
242
|
-
token[:locked_at] <= (now - INAUGURATION_UPDATE_DELAY * @update_period)
|
241
|
+
time_of(token[:timestamp]) > (now - @stale_time) and
|
242
|
+
time_of(token[:locked_at]) <= (now - INAUGURATION_UPDATE_DELAY * @update_period)
|
243
243
|
end
|
244
244
|
|
245
245
|
def time_now
|
@@ -250,7 +250,7 @@ class ZeevexCluster::Strategy::Cas < ZeevexCluster::Strategy::Base
|
|
250
250
|
now = time_now
|
251
251
|
!token || !token.is_a?(Hash) || !token[:timestamp] ||
|
252
252
|
! token[:locked_at] || ! token[:nodename] ||
|
253
|
-
token[:timestamp]
|
253
|
+
time_of(token[:timestamp]) < (now - @stale_time)
|
254
254
|
end
|
255
255
|
|
256
256
|
def resigned?
|
@@ -343,7 +343,7 @@ class ZeevexCluster::Strategy::Cas < ZeevexCluster::Strategy::Base
|
|
343
343
|
res = server.cas(memberlist_key) do |hash|
|
344
344
|
hash[:members] ||= {}
|
345
345
|
hash[:members].keys.each do |key|
|
346
|
-
hash[:members].delete(key) if hash[:members][key][:timestamp] < stale_point
|
346
|
+
hash[:members].delete(key) if time_of(hash[:members][key][:timestamp]) < stale_point
|
347
347
|
end
|
348
348
|
hash[:members][@nodename] = me
|
349
349
|
hash
|
@@ -390,7 +390,7 @@ class ZeevexCluster::Strategy::Cas < ZeevexCluster::Strategy::Base
|
|
390
390
|
# has the master gone without updating suspiciously long?
|
391
391
|
#
|
392
392
|
def master_suspect?(token)
|
393
|
-
time_now - token[:timestamp] > SUSPECT_MISSED_UPDATE_COUNT * @update_period
|
393
|
+
time_now - time_of(token[:timestamp]) > SUSPECT_MISSED_UPDATE_COUNT * @update_period
|
394
394
|
end
|
395
395
|
|
396
396
|
def reset_state_vars
|
@@ -401,4 +401,18 @@ class ZeevexCluster::Strategy::Cas < ZeevexCluster::Strategy::Base
|
|
401
401
|
@current_master = nil
|
402
402
|
@thread = nil
|
403
403
|
end
|
404
|
+
|
405
|
+
def time_of(timelike)
|
406
|
+
res = case timelike
|
407
|
+
when DateTime then timelike.to_time
|
408
|
+
when Time then timelike
|
409
|
+
when String then time_of(DateTime.parse(timelike))
|
410
|
+
when Integer then Time.at(timelike)
|
411
|
+
when nil then nil
|
412
|
+
else
|
413
|
+
raise ArgumentError, "Cannot parse #{timelike.inspect} of class #{timelike.class} to a time"
|
414
|
+
end
|
415
|
+
res.respond_to?(:utc) ? res.utc : res
|
416
|
+
end
|
417
|
+
|
404
418
|
end
|
data/zeevex_cluster.gemspec
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zeevex_cluster
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -123,6 +123,22 @@ dependencies:
|
|
123
123
|
- - ~>
|
124
124
|
- !ruby/object:Gem::Version
|
125
125
|
version: 0.0.1
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: edn
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
none: false
|
130
|
+
requirements:
|
131
|
+
- - ! '>='
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: '0'
|
134
|
+
type: :runtime
|
135
|
+
prerelease: false
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - ! '>='
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '0'
|
126
142
|
- !ruby/object:Gem::Dependency
|
127
143
|
name: rspec
|
128
144
|
requirement: !ruby/object:Gem::Requirement
|
@@ -229,6 +245,7 @@ files:
|
|
229
245
|
- lib/zeevex_cluster/message.rb
|
230
246
|
- lib/zeevex_cluster/nil_logger.rb
|
231
247
|
- lib/zeevex_cluster/serializer.rb
|
248
|
+
- lib/zeevex_cluster/serializer/edn.rb
|
232
249
|
- lib/zeevex_cluster/serializer/json_hash.rb
|
233
250
|
- lib/zeevex_cluster/static.rb
|
234
251
|
- lib/zeevex_cluster/strategy.rb
|