Commit e7acd042 authored by Andrei Mihu's avatar Andrei Mihu
Browse files

Improve initial caching of leaderboard ranks.

parent cdd72fae
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -144,6 +144,11 @@ func NewLocalLeaderboardRankCache(ctx context.Context, startupLogger *zap.Logger
				expiryUnix = leaderboard.EndTime
			}

			if expiryUnix <= nowTime.Unix() {
				// Last scores for this leaderboard have expired, do not cache them.
				continue
			}

			// Prepare structure to receive rank data.
			key := LeaderboardWithExpiry{LeaderboardId: leaderboard.Id, Expiry: expiryUnix}
			cache.Lock()
+18 −1
Original line number Diff line number Diff line
@@ -68,7 +68,7 @@ type LocalLeaderboardScheduler struct {

func NewLocalLeaderboardScheduler(logger *zap.Logger, db *sql.DB, config Config, cache LeaderboardCache, rankCache LeaderboardRankCache) LeaderboardScheduler {
	ctx, ctxCancelFn := context.WithCancel(context.Background())
	return &LocalLeaderboardScheduler{
	s := &LocalLeaderboardScheduler{
		logger:    logger,
		db:        db,
		config:    config,
@@ -86,6 +86,23 @@ func NewLocalLeaderboardScheduler(logger *zap.Logger, db *sql.DB, config Config,
		ctx:         ctx,
		ctxCancelFn: ctxCancelFn,
	}

	// Ensure trimming of expired scores that don't have resets or functions attached.
	go func() {
		ticker := time.NewTicker(1 * time.Hour)
		defer ticker.Stop()

		for {
			select {
			case <-ctx.Done():
				return
			case t := <-ticker.C:
				s.rankCache.TrimExpired(t.Unix())
			}
		}
	}()

	return s
}

func (ls *LocalLeaderboardScheduler) Start(runtime *Runtime) {