From e6bb8a46c48e80d4e69c2535f8095f5ba1d976a0 Mon Sep 17 00:00:00 2001 From: Luke Date: Thu, 6 May 2021 09:12:05 -0400 Subject: [PATCH] fix off-by-one error in indexing leaderboard records around owner (#605) * calculate start and end of leaderboard record slice from owner pivot * use more consistent terminology in slice comments * simplify leaderboard around owner algorithm --- server/core_leaderboard.go | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/server/core_leaderboard.go b/server/core_leaderboard.go index 7fc251432..cd32e966f 100644 --- a/server/core_leaderboard.go +++ b/server/core_leaderboard.go @@ -628,12 +628,17 @@ func getLeaderboardRecordsHaystack(ctx context.Context, logger *zap.Logger, db * records := append(firstRecords, ownerRecord) records = append(records, secondRecords...) - start := len(records) - int(limit) - if start < 0 { + numRecords := len(records) + start := numRecords - int(limit) + if len(firstRecords) < limit/2 { start = 0 } + end := start + int(limit) + if end > numRecords { + end = numRecords + } - records = records[start:] + records = records[start:end] rankCache.Fill(leaderboardId, expiryTime.Unix(), records) return records, nil -- GitLab