Skip to content

Commit

Permalink
Wrote learner
Browse files Browse the repository at this point in the history
  • Loading branch information
robhanlon22 committed Dec 10, 2009
1 parent 5df3379 commit 8ce4244
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 13 deletions.
29 changes: 28 additions & 1 deletion learner.rb
@@ -1,2 +1,29 @@
class Learner
class Learner < PaxosRole
DONT_KNOW = nil

def initialize(supervisor)
@supervisor = supervisor
@mutex_me = Mutex.new
@learned = {}
@learned_value = DONT_KNOW
end

def learn
@mutex_me.synchronize { @learned_value }
end

def report(value, acceptor)
# TODO hashcode
@mutex_me.synchronize do
@learned[acceptor] = value
@learned.inject(Hash.new(0)) do |m, kv|
if m[v] += 1 > @supervisor.replicas / 2
@supervisor.replicas.each do |replica|
replica.proposer.value_learned!
end
break @learned_value = kv.last
end
end
end
end
end
6 changes: 0 additions & 6 deletions paxos_replica.rb

This file was deleted.

2 changes: 1 addition & 1 deletion proposer.rb
Expand Up @@ -22,7 +22,7 @@ def propose(value)
memo << response if response
end

next if responses.size < (replicas.size / 2.0).ceil
next if responses.size < replicas.size / 2

number = responses.inject(nil) do |memo, response|
if response.highest_accepted
Expand Down
17 changes: 12 additions & 5 deletions rpc_exporter.rb
@@ -1,13 +1,20 @@
class RPCExporter
attr_reader :paxos_replica
class RPCExporter < PaxosRole
attr_reader :proposer, :acceptor, :learner

def initialize
@paxos_replica = PaxosReplica.new
def initialize(supervisor)
@proposer = Proposer.new(supervisor)
@acceptor = Acceptor.new(supervisor)
@learner = Learner.new(supervisor)
supervisor.add_replica(self)
end

def propose
def propose(value)
@proposer.propose(value)
end

def learn
@learner.learn
end

protected :proposer, :acceptor, :learner
end

0 comments on commit 8ce4244

Please sign in to comment.