Class: Queris::Query::Page
- Inherits:
-
Object
- Object
- Queris::Query::Page
- Defined in:
- lib/queris/query/page.rb
Instance Attribute Summary collapse
-
#page ⇒ Object
Returns the value of attribute page.
-
#range ⇒ Object
Returns the value of attribute range.
Instance Method Summary collapse
- #create_page(redis) ⇒ Object
- #created? ⇒ Boolean
- #gather_data(redis, results_key, pagecount_key) ⇒ Object
- #gather_ready_data(r, q) ⇒ Object
-
#initialize(prefix, sortops, page_size, ttl) ⇒ Page
constructor
A new instance of Page.
- #inspect_query(r, q) ⇒ Object
- #key ⇒ Object
- #no_more_pages? ⇒ Boolean
- #query_run_stage_after_run(r, q) ⇒ Object
- #ready? {|_self| ... } ⇒ Boolean
- #seek ⇒ Object
- #size ⇒ Object
- #source_id ⇒ Object
- #source_key ⇒ Object
- #volatile_query_keys(q) ⇒ Object
Constructor Details
#initialize(prefix, sortops, page_size, ttl) ⇒ Page
Returns a new instance of Page.
5 6 7 8 9 10 11 |
# File 'lib/queris/query/page.rb', line 5 def initialize(prefix, sortops, page_size, ttl) @prefix=prefix @ops=sortops @pagesize=page_size @ttl=ttl @page=0 end |
Instance Attribute Details
#page ⇒ Object
Returns the value of attribute page.
4 5 6 |
# File 'lib/queris/query/page.rb', line 4 def page @page end |
#range ⇒ Object
Returns the value of attribute range.
4 5 6 |
# File 'lib/queris/query/page.rb', line 4 def range @range end |
Instance Method Details
#create_page(redis) ⇒ Object
83 84 85 86 87 88 89 |
# File 'lib/queris/query/page.rb', line 83 def create_page(redis) llp = fluxcap(@last_loaded_page) llp=nil if llp=="" return if (llp && llp == @page) redis.eval("redis.log(redis.LOG_WARNING, 'want page #{@page}!!!!!!!!1')") Queris.run_script(:create_page_if_absent, redis, [key, source_key], [@pagesize * @page, @pagesize * (@page + 1) -1, @ttl]) end |
#created? ⇒ Boolean
82 |
# File 'lib/queris/query/page.rb', line 82 def created?; @created==@page; end |
#gather_data(redis, results_key, pagecount_key) ⇒ Object
19 20 21 22 23 24 |
# File 'lib/queris/query/page.rb', line 19 def gather_data(redis, results_key, pagecount_key) #puts "gather page data for key #{results_key}" @current_count= Queris.run_script :multisize, redis, [results_key] @last_loaded_page ||= redis.get pagecount_key @total_count ||= redis.zcard source_key end |
#gather_ready_data(r, q) ⇒ Object
37 38 39 |
# File 'lib/queris/query/page.rb', line 37 def gather_ready_data(r, q) @ready = Queris.run_script(:paged_query_ready, r, [q.results_key, q.results_key(:exists), source_key, q.runstate_key(:ready)]) end |
#inspect_query(r, q) ⇒ Object
25 26 27 28 |
# File 'lib/queris/query/page.rb', line 25 def inspect_query(r, q) gather_data(r, q.results_key, q.results_key(:last_loaded_page)) gather_ready_data(r, q) end |
#key ⇒ Object
12 13 14 |
# File 'lib/queris/query/page.rb', line 12 def key "#{@prefix}page:#{Queris.digest(@ops.join)}:#{@pagesize}:#{@page}" end |
#no_more_pages? ⇒ Boolean
60 61 62 63 64 65 |
# File 'lib/queris/query/page.rb', line 60 def no_more_pages? last, cur_count = fluxcap(@last_loaded_page), fluxcap(@current_count) return nil if last == "" || last.nil? last=last.to_i (last + 1) * size > fluxcap(@total_count) end |
#query_run_stage_after_run(r, q) ⇒ Object
29 30 31 32 33 34 35 36 |
# File 'lib/queris/query/page.rb', line 29 def query_run_stage_after_run(r, q) puts "write last_loaded_page for #{q}" llp = fluxcap(@last_loaded_page) llp=llp.to_i if llp @last_loaded_page = @page r.set q.results_key(:last_loaded_page), fluxcap(@last_loaded_page) inspect_query(r, q) end |
#ready? {|_self| ... } ⇒ Boolean
66 67 68 69 70 71 |
# File 'lib/queris/query/page.rb', line 66 def ready? raise Error, "Asked if a page was ready without having set a desired range first" unless @range ready = (fluxcap(@current_count) || -Float::INFINITY) >= @range.max || no_more_pages? yield(self) if !ready && block_given? ready end |
#seek ⇒ Object
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/queris/query/page.rb', line 41 def seek last, cur_count = fluxcap(@last_loaded_page), fluxcap(@current_count) last=nil if last == "" last=last.to_i unless last.nil? cur_count=cur_count.to_i unless cur_count.nil? @key=nil if last.nil? @page=0 puts "seeking next page... will be #{@page} last_loaded = #{last}, cur_count = #{cur_count}, total max = #{fluxcap @total_count}" false elsif cur_count < range.max && !no_more_pages? @page = last + 1 puts "seeking next page... will be #{@page} last_loaded = #{last}, cur_count = #{cur_count}, total max = #{fluxcap @total_count}" false else puts "no need to seek, we are here" true end end |
#size ⇒ Object
15 |
# File 'lib/queris/query/page.rb', line 15 def size; @pagesize; end |
#source_id ⇒ Object
79 80 81 |
# File 'lib/queris/query/page.rb', line 79 def source_id Queris.digest source_key end |
#source_key ⇒ Object
74 75 76 77 78 |
# File 'lib/queris/query/page.rb', line 74 def source_key raise NotImplemented, "paging by multiple sorts not yet implemented" if @ops.count > 1 binding.pry if @ops.first.nil? @ops.first.keys[1] end |
#volatile_query_keys(q) ⇒ Object
16 17 18 |
# File 'lib/queris/query/page.rb', line 16 def volatile_query_keys(q) [ q.results_key(:last_loaded_page) ] end |