diff --git a/Changes.md b/Changes.md index b6b377e52..1e1f069e4 100644 --- a/Changes.md +++ b/Changes.md @@ -1,9 +1,10 @@ -HEAD +2.17.4 ----------- - Fix JID support in inline testing, #1454 - Polish worker arguments display in UI, #1453 - Marshal arguments fully to avoid worker mutation, #1452 +- Support reverse paging sorted sets, #1098 2.17.3 diff --git a/lib/sidekiq/paginator.rb b/lib/sidekiq/paginator.rb index 71cdc5060..8e6edc0fa 100644 --- a/lib/sidekiq/paginator.rb +++ b/lib/sidekiq/paginator.rb @@ -1,6 +1,6 @@ module Sidekiq module Paginator - def page(key, pageidx=1, page_size=25) + def page(key, pageidx=1, page_size=25, opts=nil) current_page = pageidx.to_i < 1 ? 1 : pageidx.to_i pageidx = current_page - 1 total_size = 0 @@ -13,11 +13,20 @@ def page(key, pageidx=1, page_size=25) case type when 'zset' - total_size = conn.zcard(key) - items = conn.zrange(key, starting, ending, :with_scores => true) + rev = opts.try(:[], :reverse) + total_size, items = conn.multi do + conn.zcard(key) + if rev + conn.zrevrange(key, starting, ending, :with_scores => true) + else + conn.zrange(key, starting, ending, :with_scores => true) + end + end when 'list' - total_size = conn.llen(key) - items = conn.lrange(key, starting, ending) + total_size, items = conn.multi do + conn.llen(key) + conn.lrange(key, starting, ending) + end when 'none' return [1, 0, []] else diff --git a/lib/sidekiq/version.rb b/lib/sidekiq/version.rb index 53c9e5c3e..01462d7f8 100644 --- a/lib/sidekiq/version.rb +++ b/lib/sidekiq/version.rb @@ -1,3 +1,3 @@ module Sidekiq - VERSION = "2.17.2" + VERSION = "2.17.4" end