@cryptotaxi247 / kubo / commits / 17b52a2a6

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