Replace request ID when same request is restarted (#1453)
This commit is contained in:
parent
218a35e609
commit
cba00153e2
|
@ -166,6 +166,17 @@ func (req HistoryRequest) Save() error {
|
||||||
return req.requestDB.Put(req.ID.Bytes(), val)
|
return req.requestDB.Put(req.ID.Bytes(), val)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Replace saves request with new ID and all data attached to the old one.
|
||||||
|
func (req HistoryRequest) Replace(id common.Hash) error {
|
||||||
|
if (req.ID != common.Hash{}) {
|
||||||
|
if err := req.Delete(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
req.ID = id
|
||||||
|
return req.Save()
|
||||||
|
}
|
||||||
|
|
||||||
// Delete HistoryRequest from store and update every topic.
|
// Delete HistoryRequest from store and update every topic.
|
||||||
func (req HistoryRequest) Delete() error {
|
func (req HistoryRequest) Delete() error {
|
||||||
return req.requestDB.Delete(req.ID.Bytes())
|
return req.requestDB.Delete(req.ID.Bytes())
|
||||||
|
|
|
@ -547,8 +547,7 @@ func (api *PublicAPI) requestMessagesUsingPayload(request db.HistoryRequest, pee
|
||||||
}
|
}
|
||||||
hash = envelope.Hash()
|
hash = envelope.Hash()
|
||||||
|
|
||||||
request.ID = hash
|
err = request.Replace(hash)
|
||||||
err = request.Save()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return hash, err
|
return hash, err
|
||||||
}
|
}
|
||||||
|
@ -561,10 +560,6 @@ func (api *PublicAPI) requestMessagesUsingPayload(request db.HistoryRequest, pee
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := shh.RequestHistoricMessagesWithTimeout(mailServerNode.ID().Bytes(), envelope, timeout); err != nil {
|
if err := shh.RequestHistoricMessagesWithTimeout(mailServerNode.ID().Bytes(), envelope, timeout); err != nil {
|
||||||
err = request.Delete()
|
|
||||||
if err != nil {
|
|
||||||
return hash, err
|
|
||||||
}
|
|
||||||
if !force {
|
if !force {
|
||||||
api.service.requestsRegistry.Unregister(hash)
|
api.service.requestsRegistry.Unregister(hash)
|
||||||
}
|
}
|
||||||
|
|
|
@ -887,6 +887,24 @@ func (s *RequestWithTrackingHistorySuite) TestSingleRequest() {
|
||||||
s.waitMessagesDelivered(filterid, hexes...)
|
s.waitMessagesDelivered(filterid, hexes...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *RequestWithTrackingHistorySuite) TestPreviousRequestReplaced() {
|
||||||
|
topic1 := whisper.TopicType{1, 1, 1, 1}
|
||||||
|
topic2 := whisper.TopicType{255, 255, 255, 255}
|
||||||
|
|
||||||
|
requests := s.initiateHistoryRequest(
|
||||||
|
TopicRequest{Topic: topic1, Duration: time.Hour},
|
||||||
|
TopicRequest{Topic: topic2, Duration: time.Hour},
|
||||||
|
)
|
||||||
|
s.Require().Len(requests, 1)
|
||||||
|
s.localService.requestsRegistry.Clear()
|
||||||
|
replaced := s.initiateHistoryRequest(
|
||||||
|
TopicRequest{Topic: topic1, Duration: time.Hour},
|
||||||
|
TopicRequest{Topic: topic2, Duration: time.Hour},
|
||||||
|
)
|
||||||
|
s.Require().Len(replaced, 1)
|
||||||
|
s.Require().NotEqual(requests[0], replaced[0])
|
||||||
|
}
|
||||||
|
|
||||||
func waitForArchival(events chan whisper.EnvelopeEvent, duration time.Duration, hashes ...hexutil.Bytes) error {
|
func waitForArchival(events chan whisper.EnvelopeEvent, duration time.Duration, hashes ...hexutil.Bytes) error {
|
||||||
waiting := map[common.Hash]struct{}{}
|
waiting := map[common.Hash]struct{}{}
|
||||||
for _, hash := range hashes {
|
for _, hash := range hashes {
|
||||||
|
|
Loading…
Reference in New Issue