diff --git a/pkg/db/badger/reqlog.go b/pkg/db/badger/reqlog.go index 4ce64f2..07f52ed 100644 --- a/pkg/db/badger/reqlog.go +++ b/pkg/db/badger/reqlog.go @@ -231,6 +231,7 @@ func findRequestLogIDsByProjectID(txn *badger.Txn, projectID ulid.ULID) ([]ulid. reqLogIDs := make([]ulid.ULID, 0) opts := badger.DefaultIteratorOptions opts.PrefetchValues = false + opts.Reverse = true iterator := txn.NewIterator(opts) defer iterator.Close() @@ -238,7 +239,7 @@ func findRequestLogIDsByProjectID(txn *badger.Txn, projectID ulid.ULID) ([]ulid. prefix := entryKey(reqLogPrefix, reqLogProjectIDIndex, projectID[:]) - for iterator.Seek(prefix); iterator.ValidForPrefix(prefix); iterator.Next() { + for iterator.Seek(append(prefix, 255)); iterator.ValidForPrefix(prefix); iterator.Next() { projectIndexKey = iterator.Item().KeyCopy(projectIndexKey) var id ulid.ULID diff --git a/pkg/db/badger/reqlog_test.go b/pkg/db/badger/reqlog_test.go index 9337886..fca7a1c 100644 --- a/pkg/db/badger/reqlog_test.go +++ b/pkg/db/badger/reqlog_test.go @@ -46,7 +46,7 @@ func TestFindRequestLogs(t *testing.T) { projectID := ulid.MustNew(ulid.Timestamp(time.Now()), ulidEntropy) - exp := []reqlog.RequestLog{ + fixtures := []reqlog.RequestLog{ { ID: ulid.MustNew(ulid.Timestamp(time.Now()), ulidEntropy), ProjectID: projectID, @@ -80,7 +80,7 @@ func TestFindRequestLogs(t *testing.T) { } // Store fixtures. - for _, reqLog := range exp { + for _, reqLog := range fixtures { err = database.StoreRequestLog(context.Background(), reqLog) if err != nil { t.Fatalf("unexpected error creating request log fixture: %v", err) @@ -103,6 +103,12 @@ func TestFindRequestLogs(t *testing.T) { t.Fatalf("unexpected error finding request logs: %v", err) } + // We expect the found request logs are *reversed*, e.g. newest first. + exp := make([]reqlog.RequestLog, len(fixtures)) + for i, j := 0, len(fixtures)-1; i < j; i, j = i+1, j-1 { + exp[i], exp[j] = fixtures[j], fixtures[i] + } + if diff := cmp.Diff(exp, got); diff != "" { t.Fatalf("request logs not equal (-exp, +got):\n%v", diff) }