Module: Pokan::CollectivePeerOperations
- Included in:
- RequestHandler
- Defined in:
- lib/pokan/collective_peer_operations.rb
Overview
The CollectivePeerOperations should be used when it is necessary to apply a operation over a undefined amount of peers
Instance Method Summary collapse
-
#merge(peers) ⇒ Object
Stores the keys-values-timestamps with timestamp greater than the peers’ timestamp === Usage class Collective; include CollectivePeerOperations; end col = Collective.new col.merge({ id1: { key: { value: ‘FAIL’, timestamp: => 223412 } } }) # pair stored.
-
#newer(digest) ⇒ Object
Returns all peers’ updated keys-values-timestamps in relation to a given digest in a Complete Structure.
-
#older(data) ⇒ Object
Returns all peers’ outdated keys in relation to a given digest in a Old Key Structure.
-
#retrieve(req) ⇒ Object
Returns all the ids’ keys/values/timestamps for the keys in the given hash.
Instance Method Details
#merge(peers) ⇒ Object
Stores the keys-values-timestamps with timestamp greater than the peers’ timestamp
Usage
class Collective; include CollectivePeerOperations; end
col = Collective.new
col.merge({ id1: { key: { value: 'FAIL', timestamp: => 223412 } } }) # pair stored
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/pokan/collective_peer_operations.rb', line 16 def merge(peers) query = Query.new(Peer) peers.each do |id, key_set| peer = query.where(id: id.to_s)[0] unless peer peer = Peer.new peer.id = id end key_set.keys.each do |key| value = key_set[key] value.keys.each { |k| value[k.to_sym] = value.delete(k) } key_set[key.to_sym] = key_set.delete(key) end peer.merge(key_set) peer.save end end |
#newer(digest) ⇒ Object
Returns all peers’ updated keys-values-timestamps in relation to a given digest in a Complete Structure
Given structure {‘id1’ => {‘status’ => 3234124325.234323}}
Return structure { peer_id => { key => {“value” => value, “timestamp” => timestamp}, …},…}
41 42 43 44 45 46 47 48 49 50 |
# File 'lib/pokan/collective_peer_operations.rb', line 41 def newer(digest) query = Query.new(Peer) newer_keys = Hash.new digest.each do |id, keys| peer = query.where(id: id.to_s)[0] newer_keys[id] = peer ? peer.newer(keys) : {} end newer_keys end |
#older(data) ⇒ Object
Returns all peers’ outdated keys in relation to a given digest in a Old Key Structure
Given structure {‘id1’ => {‘status’ => 3234124325.234323}}
Return structure: {peer_id => [old_key, …], …}
58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/pokan/collective_peer_operations.rb', line 58 def older(data) query = Query.new(Peer) older_keys = Hash.new data.each do |id, dig| peer = query.where(id: id.to_s)[0] older_keys[id] = peer ? peer.older(dig) : dig.keys end older_keys end |
#retrieve(req) ⇒ Object
Returns all the ids’ keys/values/timestamps for the keys in the given hash
Given structure {id1: [:k1, :k2, :foo]}
Return structure {peer_id => { key => {“value” => value, “timestamp” => timestamp}, …},…}
76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/pokan/collective_peer_operations.rb', line 76 def retrieve(req) query = Query.new(Peer) data = Hash.new req.each do |id, keys| peer = query.where(id: id.to_s, status:'alive')[0] data[id] = peer.values(keys) if peer end data end |