feat(snrouting) replicate Provider, PutValue to multiple remotes
Brian Tiger Chow committed
Feb 12, 2015 at 13:56 UTC
17b52a2a6664d5b6dbcd0f04ebd7cadb3196efaf
1 file changed
+10
routing/supernode/proxy/standard.go
+10
@@ -61,15 +61,25 @@ func (p *standard) HandleStream(s inet.Stream) {
61
s.Close()
62
}
63
64
+const replicationFactor = 2
65
+
66
// SendMessage sends message to each remote sequentially (randomized order),
67
// stopping after the first successful response. If all fail, returns the last
68
// error.
69
func (px *standard) SendMessage(ctx context.Context, m *dhtpb.Message) error {
70
var err error
71
+ var numSuccesses int
72
for _, remote := range sortedByKey(px.remoteIDs, m.GetKey()) {
73
if err = px.sendMessage(ctx, m, remote); err != nil { // careful don't re-declare err!
74
continue
75
}
76
+ numSuccesses++
77
+ switch m.GetType() {
78
+ case dhtpb.Message_ADD_PROVIDER, dhtpb.Message_PUT_VALUE:
79
+ if numSuccesses < replicationFactor {
80
+ continue
81
+ }
82
+ }
83
return nil // success
84
}
85
return err // NB: returns the last error