mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-22 20:56:42 +00:00
addRequester now called when protocol addRetreiveRequest is called
- on a newly created chunk, newRequestStatus is called - newRequestStatus: C ready channel and requesters map initialised - fix logmessage bug by checking is request.peer is nil (outgoing request)
This commit is contained in:
parent
12d3bc019e
commit
b06226678e
3 changed files with 36 additions and 13 deletions
|
|
@ -130,7 +130,7 @@ func (self *NetStore) addStoreRequest(req *storeRequestMsgData) {
|
|||
} else {
|
||||
return
|
||||
}
|
||||
chunk.source = &req.peer
|
||||
chunk.source = req.peer
|
||||
self.put(chunk)
|
||||
}
|
||||
|
||||
|
|
@ -170,12 +170,18 @@ func (self *NetStore) get(key Key) (chunk *Chunk) {
|
|||
}
|
||||
|
||||
if chunk.req == nil {
|
||||
chunk.req = new(requestStatus)
|
||||
chunk.req.C = make(chan bool)
|
||||
chunk.req = newRequestStatus()
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func newRequestStatus() *requestStatus {
|
||||
return &requestStatus{
|
||||
requesters: make(map[int64][]*retrieveRequestMsgData),
|
||||
C: make(chan bool),
|
||||
}
|
||||
}
|
||||
|
||||
func (self *NetStore) addRetrieveRequest(req *retrieveRequestMsgData) {
|
||||
|
||||
self.lock.Lock()
|
||||
|
|
@ -214,6 +220,7 @@ func (self *NetStore) startSearch(chunk *Chunk, id int64, timeout *time.Time) {
|
|||
}
|
||||
for _, peer := range peers {
|
||||
dpaLogger.Debugf("NetStore.startSearch: sending retrieveRequests to peer [%064x]", req.Key)
|
||||
dpaLogger.Debugf("req.requesters: %v", chunk.req.requesters)
|
||||
var requester bool
|
||||
OUT:
|
||||
for _, recipients := range chunk.req.requesters {
|
||||
|
|
@ -238,7 +245,7 @@ func generateId() int64 {
|
|||
/*
|
||||
adds a new peer to an existing open request
|
||||
only add if less than requesterCount peers forwarded the same request id so far
|
||||
note this is done irrespective of status (searching or found/timedOut)
|
||||
note this is done irrespective of status (searching or found)
|
||||
*/
|
||||
func (self *NetStore) addRequester(rs *requestStatus, req *retrieveRequestMsgData) {
|
||||
dpaLogger.Debugf("NetStore.addRequester: key %064x - add peer [%v] to req.Id %064x", req.Key, req.peer, req.Id)
|
||||
|
|
@ -260,7 +267,7 @@ this is the most simplistic implementation:
|
|||
*/
|
||||
func (self *NetStore) strategyUpdateRequest(rs *requestStatus, req *retrieveRequestMsgData) (timeout *time.Time) {
|
||||
dpaLogger.Debugf("NetStore.strategyUpdateRequest: key %064x", req.Key)
|
||||
|
||||
self.addRequester(rs, req)
|
||||
if rs.status == reqSearching {
|
||||
timeout = self.searchTimeout(rs, req)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -119,11 +119,17 @@ type storeRequestMsgData struct {
|
|||
storageTimeout *time.Time // expiry of content
|
||||
Metadata metaData //
|
||||
//
|
||||
peer peer
|
||||
peer *peer
|
||||
}
|
||||
|
||||
func (self storeRequestMsgData) String() string {
|
||||
return fmt.Sprintf("From: %v, Key: %x; ID: %v, requestTimeout: %v, storageTimeout: %v, SData %x", self.peer.Addr(), self.Key[:4], self.Id, self.requestTimeout, self.storageTimeout, self.SData[:10])
|
||||
var from string
|
||||
if self.peer == nil {
|
||||
from = "self"
|
||||
} else {
|
||||
from = self.peer.Addr().String()
|
||||
}
|
||||
return fmt.Sprintf("From: %v, Key: %x; ID: %v, requestTimeout: %v, storageTimeout: %v, SData %x", from, self.Key[:4], self.Id, self.requestTimeout, self.storageTimeout, self.SData[:10])
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -142,11 +148,17 @@ type retrieveRequestMsgData struct {
|
|||
timeout *time.Time //
|
||||
//Metadata metaData //
|
||||
//
|
||||
peer peer // protocol registers the requester
|
||||
peer *peer // protocol registers the requester
|
||||
}
|
||||
|
||||
func (self retrieveRequestMsgData) String() string {
|
||||
return fmt.Sprintf("From: %v, Key: %x; ID: %v, MaxSize: %v, MaxPeers: %v", self.peer.Addr(), self.Key[:4], self.Id, self.MaxSize, self.MaxPeers)
|
||||
var from string
|
||||
if self.peer == nil {
|
||||
from = "self"
|
||||
} else {
|
||||
from = self.peer.Addr().String()
|
||||
}
|
||||
return fmt.Sprintf("From: %v, Key: %x; ID: %v, MaxSize: %v, MaxPeers: %v", from, self.Key[:4], self.Id, self.MaxSize, self.MaxPeers)
|
||||
}
|
||||
|
||||
type peerAddr struct {
|
||||
|
|
@ -187,7 +199,7 @@ type peersMsgData struct {
|
|||
Key Key // if a response to a retrieval request
|
||||
Id uint64 // if a response to a retrieval request
|
||||
//
|
||||
peer peer
|
||||
peer *peer
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -280,7 +292,7 @@ func (self *bzzProtocol) handle() error {
|
|||
if err := msg.Decode(&req); err != nil {
|
||||
return self.protoError(ErrDecode, "msg %v: %v", msg, err)
|
||||
}
|
||||
req.peer = peer{bzzProtocol: self}
|
||||
req.peer = &peer{bzzProtocol: self}
|
||||
self.netStore.addStoreRequest(&req)
|
||||
|
||||
case retrieveRequestMsg:
|
||||
|
|
@ -292,7 +304,7 @@ func (self *bzzProtocol) handle() error {
|
|||
if req.Key == nil {
|
||||
return self.protoError(ErrDecode, "protocol handler: req.Key == nil || req.Timeout == nil")
|
||||
}
|
||||
req.peer = peer{bzzProtocol: self}
|
||||
req.peer = &peer{bzzProtocol: self}
|
||||
self.netStore.addRetrieveRequest(&req)
|
||||
|
||||
case peersMsg:
|
||||
|
|
@ -300,7 +312,7 @@ func (self *bzzProtocol) handle() error {
|
|||
if err := msg.Decode(&req); err != nil {
|
||||
return self.protoError(ErrDecode, "->msg %v: %v", msg, err)
|
||||
}
|
||||
req.peer = peer{bzzProtocol: self}
|
||||
req.peer = &peer{bzzProtocol: self}
|
||||
self.netStore.hive.addPeerEntries(&req)
|
||||
|
||||
default:
|
||||
|
|
|
|||
|
|
@ -52,6 +52,10 @@ type Kademlia struct {
|
|||
|
||||
type Address common.Hash
|
||||
|
||||
func (a Address) String() string {
|
||||
return fmt.Sprintf("%x", a[:])
|
||||
}
|
||||
|
||||
type Node interface {
|
||||
Addr() Address
|
||||
Url() string
|
||||
|
|
|
|||
Loading…
Reference in a new issue