Deliver envelopes in forward order (#1437)

This commit is contained in:
Dmitry Shulyak 2019-04-23 10:04:58 +03:00 committed by GitHub
parent 056bf367a7
commit 64188f0702
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 14 additions and 27 deletions

View File

@ -53,13 +53,3 @@ func NewDBKeyFromBytes(b []byte) (*DBKey, error) {
hash: common.BytesToHash(b[4:]),
}, nil
}
// mustNewDBKeyFromBytes panics if creating a key from a byte slice fails.
// Check if a byte slice has DBKeyLength length before using it.
func mustNewDBKeyFromBytes(b []byte) *DBKey {
k, err := NewDBKeyFromBytes(b)
if err != nil {
panic(err)
}
return k
}

View File

@ -479,17 +479,14 @@ func (s *WMailServer) createIterator(lower, upper uint32, cursor []byte) iterato
ku, kl *DBKey
)
ku = NewDBKey(upper+1, emptyHash)
kl = NewDBKey(lower, emptyHash)
if len(cursor) == DBKeyLength {
ku = mustNewDBKeyFromBytes(cursor)
} else {
ku = NewDBKey(upper+1, emptyHash)
}
i := s.db.NewIterator(&util.Range{Start: kl.Bytes(), Limit: ku.Bytes()}, nil)
// seek to the end as we want to return envelopes in a descending order
i.Seek(ku.Bytes())
if len(cursor) == DBKeyLength {
i.Seek(cursor)
}
return i
}
@ -524,7 +521,7 @@ func (s *WMailServer) processRequestInBundles(
// append and continue.
// Otherwise publish what you have so far, reset the bundle to the
// current envelope, and leave if we hit the limit
for iter.Prev() {
for iter.Next() {
var envelope whisper.Envelope
decodeErr := rlp.DecodeBytes(iter.Value(), &envelope)

View File

@ -299,10 +299,10 @@ func (s *MailserverSuite) TestRequestPaginationLimit() {
defer s.server.Close()
var (
sentEnvelopes []*whisper.Envelope
reverseSentHashes []common.Hash
receivedHashes []common.Hash
archiveKeys []string
sentEnvelopes []*whisper.Envelope
sentHashes []common.Hash
receivedHashes []common.Hash
archiveKeys []string
)
now := time.Now()
@ -316,7 +316,7 @@ func (s *MailserverSuite) TestRequestPaginationLimit() {
key := NewDBKey(env.Expiry-env.TTL, env.Hash())
archiveKeys = append(archiveKeys, fmt.Sprintf("%x", key.Bytes()))
sentEnvelopes = append(sentEnvelopes, env)
reverseSentHashes = append([]common.Hash{env.Hash()}, reverseSentHashes...)
sentHashes = append(sentHashes, env.Hash())
}
reqLimit := uint32(6)
@ -334,11 +334,11 @@ func (s *MailserverSuite) TestRequestPaginationLimit() {
// 10 envelopes sent
s.Equal(count, uint32(len(sentEnvelopes)))
// 6 envelopes received
s.Equal(int(limit), len(receivedHashes))
// the 6 envelopes received should be in descending order
s.Equal(reverseSentHashes[:limit], receivedHashes)
s.Len(receivedHashes, int(limit))
// the 6 envelopes received should be in forward order
s.Equal(sentHashes[:limit], receivedHashes)
// cursor should be the key of the last envelope of the last page
s.Equal(archiveKeys[count-limit], fmt.Sprintf("%x", cursor))
s.Equal(archiveKeys[limit-1], fmt.Sprintf("%x", cursor))
// second page
receivedHashes, cursor, _ = processRequestAndCollectHashes(