zeevex_cluster 0.2.3 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -5,7 +5,7 @@ class ZeevexCluster::Coordinator::BaseKeyValStore
5
5
 
6
6
  def self.setup
7
7
  unless @setup
8
- require 'zeevex_cluster/serializer/json_hash'
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::JsonHash.new
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 to_json
10
+ def to_serialized
11
11
  serializer.serialize(self)
12
12
  end
13
13
 
14
14
  def serializer
15
- @_serializer ||= ZeevexCluster::Serializer::JsonHash.new
15
+ @_serializer ||= ZeevexCluster::Serializer::EDN.new
16
16
  end
17
17
  end
18
18
 
19
19
  module ClassMethods
20
- def from_json(string)
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/json_hash'
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].utc < stale_point
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].utc < (now - @stale_time)
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
@@ -1,3 +1,3 @@
1
1
  module ZeevexCluster
2
- VERSION = "0.2.3"
2
+ VERSION = "0.3.0"
3
3
  end
@@ -28,6 +28,8 @@ Gem::Specification.new do |s|
28
28
 
29
29
  s.add_dependency 'hookem', '~> 0.0.1'
30
30
 
31
+ s.add_dependency 'edn'
32
+
31
33
  ## other headius utils
32
34
  # s.add_dependency 'thread_safe'
33
35
 
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.2.3
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