/
request.go
49 lines (40 loc) · 997 Bytes
/
request.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package hybsterx
import (
"github.com/ibalajiarun/go-consensus/pkg/command/commandpb"
pb "github.com/ibalajiarun/go-consensus/protocols/hybsterx/hybsterxpb"
)
func (p *hybsterx) onRequest(cmd *commandpb.Command) *instance {
p.logger.Debugf("Replica %v received %v\n", p.id, cmd)
cmdHash := cmd.Hash()
index := p.index.GetAndIncrement()
instID := pb.InstanceID{
PeerID: p.id,
Index: index,
}
inst := &instance{
p: p,
is: pb.InstanceState{
View: p.view,
InstanceID: instID,
Status: pb.InstanceState_Prepared,
Command: cmd,
CommandHash: cmdHash,
},
quorum: newQuorum(p),
}
p.log[instID] = inst
p.logger.Debugf("onRequest inst %v", index)
pr := &pb.NormalMessage{
View: p.view,
InstanceID: instID,
Type: pb.NormalMessage_Prepare,
Command: cmd,
CommandHash: cmdHash,
}
inst.quorum.log(p.id, pr)
p.broadcastNormal(pr)
if p.isPrimaryAtView(p.id, p.oview) {
p.onCRequest(pr.InstanceID)
}
return inst
}