From 64188f07021950660bec3ed085cf8d941e158caa Mon Sep 17 00:00:00 2001 From: Dmitry Shulyak Date: Tue, 23 Apr 2019 10:04:58 +0300 Subject: [PATCH] Deliver envelopes in forward order (#1437) --- mailserver/db_key.go | 10 ---------- mailserver/mailserver.go | 13 +++++-------- mailserver/mailserver_test.go | 18 +++++++++--------- 3 files changed, 14 insertions(+), 27 deletions(-) diff --git a/mailserver/db_key.go b/mailserver/db_key.go index 5b3e58b07..9ea4bc8ab 100644 --- a/mailserver/db_key.go +++ b/mailserver/db_key.go @@ -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 -} diff --git a/mailserver/mailserver.go b/mailserver/mailserver.go index c95e091dd..2722fa6f6 100644 --- a/mailserver/mailserver.go +++ b/mailserver/mailserver.go @@ -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) diff --git a/mailserver/mailserver_test.go b/mailserver/mailserver_test.go index 8b6d814e7..901209de4 100644 --- a/mailserver/mailserver_test.go +++ b/mailserver/mailserver_test.go @@ -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(