From 9f4e7db263859e2d9a1349fe069d149e53339969 Mon Sep 17 00:00:00 2001 From: "Daniel A. Nagy" Date: Fri, 6 Feb 2015 15:49:37 +0100 Subject: [PATCH] Response propagation and timeout --- bzz/netstore.go | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/bzz/netstore.go b/bzz/netstore.go index 9f13a55ff1..de2e738e75 100644 --- a/bzz/netstore.go +++ b/bzz/netstore.go @@ -158,7 +158,24 @@ func (self *netStore) addStoreRequest(req *storeRequestMsgData) { } func (self *netStore) propagateResponse(chunk *Chunk) { - // send chunk to first requesterCount peer of each Id + for id, requesters := range chunk.req.requesters { + counter = requesterCount + msg := &storeRequestMsgData{ + Key: chunk.Key, + Data: chunk.Data, + Size: chunk.Size, + Id: id, + } + for _, req := range requesters { + if req.Timeout.After(time.Now()) { + go req.peer.store(msg) + counter-- + if counter <= 0 { + break + } + } + } + } } func (self *netStore) addRetrieveRequest(req *retrieveRequestMsgData) { @@ -231,7 +248,12 @@ func (self *netStore) peers(req *retrieveRequestMsgData, chunk *Chunk, timeout t } func (self *netStore) searchTimeout(rs *requestStatus, req *retrieveRequestMsgData) (timeout time.Time) { - return + t := time.Now().Add(3 * time.Second) + if req.Timeout.Before(t) { + return req.Timeout + } else { + return t + } } // these should go to cademlia