提交 17b52a2a 作者: Brian Tiger Chow

feat(snrouting) replicate Provider, PutValue to multiple remotes

上级 6ff1d3c8
...@@ -61,15 +61,25 @@ func (p *standard) HandleStream(s inet.Stream) { ...@@ -61,15 +61,25 @@ func (p *standard) HandleStream(s inet.Stream) {
s.Close() s.Close()
} }
const replicationFactor = 2
// SendMessage sends message to each remote sequentially (randomized order), // SendMessage sends message to each remote sequentially (randomized order),
// stopping after the first successful response. If all fail, returns the last // stopping after the first successful response. If all fail, returns the last
// error. // error.
func (px *standard) SendMessage(ctx context.Context, m *dhtpb.Message) error { func (px *standard) SendMessage(ctx context.Context, m *dhtpb.Message) error {
var err error var err error
var numSuccesses int
for _, remote := range sortedByKey(px.remoteIDs, m.GetKey()) { for _, remote := range sortedByKey(px.remoteIDs, m.GetKey()) {
if err = px.sendMessage(ctx, m, remote); err != nil { // careful don't re-declare err! if err = px.sendMessage(ctx, m, remote); err != nil { // careful don't re-declare err!
continue continue
} }
numSuccesses++
switch m.GetType() {
case dhtpb.Message_ADD_PROVIDER, dhtpb.Message_PUT_VALUE:
if numSuccesses < replicationFactor {
continue
}
}
return nil // success return nil // success
} }
return err // NB: returns the last error return err // NB: returns the last error
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论